mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
feat(web): support image messages in pico chat (#2299)
This commit is contained in:
@@ -602,14 +602,16 @@ func (cb *ContextBuilder) BuildMessages(
|
||||
// Add conversation history
|
||||
messages = append(messages, history...)
|
||||
|
||||
// Add current user message
|
||||
if strings.TrimSpace(currentMessage) != "" {
|
||||
// Add current user message. Media-only turns must still be preserved so
|
||||
// multimodal providers receive the uploaded image even when the user sends
|
||||
// no accompanying text.
|
||||
if strings.TrimSpace(currentMessage) != "" || len(media) > 0 {
|
||||
msg := providers.Message{
|
||||
Role: "user",
|
||||
Content: currentMessage,
|
||||
}
|
||||
if len(media) > 0 {
|
||||
msg.Media = media
|
||||
msg.Media = append([]string(nil), media...)
|
||||
}
|
||||
messages = append(messages, msg)
|
||||
}
|
||||
|
||||
@@ -707,6 +707,38 @@ func TestEmptyWorkspaceBaselineDetectsNewFiles(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildMessages_IncludesMediaOnlyCurrentMessage(t *testing.T) {
|
||||
tmpDir := setupWorkspace(t, nil)
|
||||
defer os.RemoveAll(tmpDir)
|
||||
|
||||
cb := NewContextBuilder(tmpDir)
|
||||
msgs := cb.BuildMessages(
|
||||
nil,
|
||||
"",
|
||||
"",
|
||||
[]string{"data:image/png;base64,abc123"},
|
||||
"pico",
|
||||
"chat-1",
|
||||
"",
|
||||
"",
|
||||
)
|
||||
|
||||
if len(msgs) != 2 {
|
||||
t.Fatalf("len(msgs) = %d, want 2", len(msgs))
|
||||
}
|
||||
|
||||
userMsg := msgs[1]
|
||||
if userMsg.Role != "user" {
|
||||
t.Fatalf("userMsg.Role = %q, want %q", userMsg.Role, "user")
|
||||
}
|
||||
if userMsg.Content != "" {
|
||||
t.Fatalf("userMsg.Content = %q, want empty string", userMsg.Content)
|
||||
}
|
||||
if len(userMsg.Media) != 1 || userMsg.Media[0] != "data:image/png;base64,abc123" {
|
||||
t.Fatalf("userMsg.Media = %#v, want image payload", userMsg.Media)
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkBuildMessagesWithCache measures caching performance.
|
||||
func BenchmarkBuildMessagesWithCache(b *testing.B) {
|
||||
tmpDir, _ := os.MkdirTemp("", "picoclaw-bench-*")
|
||||
|
||||
Reference in New Issue
Block a user