From b29a4c8b84e0dc431e25898939de73ad66531db4 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 started 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