From 4771fa463c11283279aa749cbf1fc261f818d9ec Mon Sep 17 00:00:00 2001 From: Laura Date: Tue, 11 Nov 2025 16:24:53 +0100 Subject: [PATCH] fix image + file breaking message --- chat.go | 39 +++++++++++++++++++++++++++++++++------ markdown.go | 8 ++++---- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/chat.go b/chat.go index dbcfe2a..31d942e 100644 --- a/chat.go +++ b/chat.go @@ -218,10 +218,20 @@ func (r *Request) Parse() (*openrouter.ChatCompletionRequest, error) { }, }) case "user": - var content openrouter.Content + var ( + content openrouter.Content + multi bool + last = -1 + ) if model.Vision && strings.Contains(message.Text, "![") { content.Multi = SplitImagePairs(message.Text) + + multi = true + + if content.Multi[len(content.Multi)-1].Type == openrouter.ChatMessagePartTypeText { + last = len(content.Multi) - 1 + } } else { content.Text = message.Text } @@ -236,16 +246,33 @@ func (r *Request) Parse() (*openrouter.ChatCompletionRequest, error) { lines := strings.Count(file.Content, "\n") + 1 - if content.Text != "" { - content.Text += "\n\n" - } - - content.Text += fmt.Sprintf( + entry := fmt.Sprintf( "FILE %q LINES %d\n<>\n%s\n<>", file.Name, lines, file.Content, ) + + if multi { + if last != -1 { + if content.Multi[last].Text != "" { + content.Multi[last].Text += "\n\n" + } + + content.Multi[last].Text += entry + } else { + content.Multi = append(content.Multi, openrouter.ChatMessagePart{ + Type: openrouter.ChatMessagePartTypeText, + Text: entry, + }) + } + } else { + if content.Text != "" { + content.Text += "\n\n" + } + + content.Text += entry + } } } diff --git a/markdown.go b/markdown.go index 1472a71..02669a6 100644 --- a/markdown.go +++ b/markdown.go @@ -63,10 +63,6 @@ func SplitImagePairs(text string) []openrouter.ChatMessagePart { rest := text[str:end] - if rest == "" { - return - } - total := len(parts) if total > 0 && parts[total-1].Type == openrouter.ChatMessagePartTypeText { @@ -75,6 +71,10 @@ func SplitImagePairs(text string) []openrouter.ChatMessagePart { return } + if strings.TrimSpace(rest) == "" { + return + } + parts = append(parts, openrouter.ChatMessagePart{ Type: openrouter.ChatMessagePartTypeText, Text: rest,