From 38fed741af272dfc51cfbaeca79afc8fb6524b8a Mon Sep 17 00:00:00 2001 From: Matt Low Date: Thu, 30 May 2024 18:52:23 +0000 Subject: [PATCH] Fixed regression from 3536438d We were sending an empty string to the output channel when `ping` messages were received from Anthropic's API. This was causing the TUI to break since we were doing an empty chunk check (and mistakenly not waiting for future chunks if one was received). This commit makes it so we no longer an empty string on the ping message from Anthropic, and, we update the handling of msgAssistantChunk and msgAssistantReply to make it less likely that we forget to wait for the next chunk/reply. --- pkg/lmcli/provider/anthropic/anthropic.go | 3 +-- pkg/tui/views/chat/chat.go | 7 ++++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/lmcli/provider/anthropic/anthropic.go b/pkg/lmcli/provider/anthropic/anthropic.go index 706f449..51586c4 100644 --- a/pkg/lmcli/provider/anthropic/anthropic.go +++ b/pkg/lmcli/provider/anthropic/anthropic.go @@ -229,8 +229,7 @@ func (c *AnthropicClient) CreateChatCompletionStream( case "message_start": // noop case "ping": - // write an empty string to signal start of text - output <- "" + // signals start of text - currently ignoring case "content_block_start": // ignore? case "content_block_delta": diff --git a/pkg/tui/views/chat/chat.go b/pkg/tui/views/chat/chat.go index 4295476..cd69232 100644 --- a/pkg/tui/views/chat/chat.go +++ b/pkg/tui/views/chat/chat.go @@ -278,6 +278,8 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { m.updateContent() m.content.GotoBottom() case msgResponseChunk: + cmds = append(cmds, m.waitForChunk()) // wait for the next chunk + chunk := string(msg) if chunk == "" { break @@ -295,7 +297,6 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { }) } m.updateContent() - cmds = append(cmds, m.waitForChunk()) // wait for the next chunk // show cursor and reset blink interval (simulate typing) m.replyCursor.Blink = false @@ -304,7 +305,8 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { m.tokenCount++ m.elapsed = time.Now().Sub(m.startTime) case msgAssistantReply: - // the last reply that was being worked on is finished + cmds = append(cmds, m.waitForReply()) // wait for the next reply + reply := models.Message(msg) reply.Content = strings.TrimSpace(reply.Content) @@ -332,7 +334,6 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { } m.updateContent() - cmds = append(cmds, m.waitForReply()) case msgResponseEnd: m.waitingForReply = false last := len(m.messages) - 1