feat(chat,seahorse): persist and display model_name across history (#2897)

* feat(chat,seahorse): persist and display model_name across history

* test(seahorse): fix lint regressions in repair coverage

* fix(pico): preserve model_name in live updates

* fix(pico): preserve model_name through live stream wrappers
This commit is contained in:
LC
2026-05-20 13:42:21 +08:00
committed by GitHub
parent 548dc15acd
commit b7db059544
41 changed files with 1266 additions and 139 deletions
+15 -7
View File
@@ -50,6 +50,7 @@ type sessionChatMessage struct {
Role string `json:"role"`
Content string `json:"content"`
Kind string `json:"kind,omitempty"`
ModelName string `json:"model_name,omitempty"`
Media []string `json:"media,omitempty"`
Attachments []sessionChatAttachment `json:"attachments,omitempty"`
ToolCalls []utils.VisibleToolCall `json:"tool_calls,omitempty"`
@@ -510,6 +511,7 @@ func sessionTranscriptMessages(
chatMsg := sessionChatMessage{
Role: "user",
Content: msg.Content,
ModelName: msg.ModelName,
Media: append([]string(nil), msg.Media...),
Attachments: attachments,
}
@@ -529,9 +531,10 @@ func sessionTranscriptMessages(
toolCallsMsg, hasToolCallsMsg := assistantToolCallsMessage(
msg.ToolCalls,
msg.ModelName,
toolFeedbackMaxArgsLength,
)
visibleToolMessages := visibleAssistantToolMessages(msg.ToolCalls)
visibleToolMessages := visibleAssistantToolMessages(msg.ToolCalls, msg.ModelName)
// Pico web chat can persist both visible `message` tool output and a
// later plain assistant reply in the same turn. Hide only the fixed
@@ -556,6 +559,7 @@ func sessionTranscriptMessages(
chatMsg := sessionChatMessage{
Role: "assistant",
Content: content,
ModelName: msg.ModelName,
Media: append([]string(nil), msg.Media...),
Attachments: attachments,
}
@@ -682,14 +686,16 @@ func assistantThoughtMessage(msg providers.Message) (sessionChatMessage, bool) {
return sessionChatMessage{}, false
}
return sessionChatMessage{
Role: "assistant",
Content: reasoning,
Kind: "thought",
Role: "assistant",
Content: reasoning,
Kind: "thought",
ModelName: msg.ModelName,
}, true
}
func assistantToolCallsMessage(
toolCalls []providers.ToolCall,
modelName string,
toolFeedbackMaxArgsLength int,
) (sessionChatMessage, bool) {
if len(toolCalls) == 0 {
@@ -707,6 +713,7 @@ func assistantToolCallsMessage(
return sessionChatMessage{
Role: "assistant",
Kind: "tool_calls",
ModelName: modelName,
ToolCalls: visibleToolCalls,
}, true
}
@@ -718,7 +725,7 @@ func visibleAssistantToolArgsPreview(
return utils.VisibleToolCallArgumentsPreview(tc, toolFeedbackMaxArgsLength)
}
func visibleAssistantToolMessages(toolCalls []providers.ToolCall) []sessionChatMessage {
func visibleAssistantToolMessages(toolCalls []providers.ToolCall, modelName string) []sessionChatMessage {
if len(toolCalls) == 0 {
return nil
}
@@ -734,8 +741,9 @@ func visibleAssistantToolMessages(toolCalls []providers.ToolCall) []sessionChatM
continue
}
messages = append(messages, sessionChatMessage{
Role: "assistant",
Content: content,
Role: "assistant",
Content: content,
ModelName: modelName,
})
}