agent/tui: remove redundant context-window refreshes from event loop (#17241)
This commit is contained in:
@@ -224,9 +224,11 @@ func Run(ctx context.Context, opts Options) (*Result, error) {
|
||||
m.nextImageID, m.nextAudioID = nextInputAttachmentIDsFromMessages(m.messages)
|
||||
m.nextPastedTextID = nextInputPastedTextIDFromMessages(m.messages)
|
||||
m.entries = entriesFromMessages(m.messages)
|
||||
if !m.openModelOnInit {
|
||||
m.refreshContextWindowTokens(m.opts.Model)
|
||||
}
|
||||
// Context window is resolved post-load (chatModelPreloadDoneMsg) rather than
|
||||
// here: for local models /api/ps only reports the running num_ctx after the
|
||||
// model loads, and opts.ContextWindowTokens already holds Show's max as a
|
||||
// pre-load fallback. Refreshing now would just re-derive that same value
|
||||
// (and block construction on a network call).
|
||||
m.contextTokens = m.estimatePromptTokens(m.messages, "")
|
||||
m.contextEstimate = true
|
||||
if m.openModelOnInit {
|
||||
@@ -375,7 +377,8 @@ func (m chatModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
if msg.result.WorkingDir != "" {
|
||||
m.workingDir = msg.result.WorkingDir
|
||||
}
|
||||
m.refreshContextWindowTokens(m.responseModelName(&msg.result.Latest))
|
||||
// Context window is settled by preload (local num_ctx) or is
|
||||
// static (cloud); no refresh needed post-run.
|
||||
m.contextTokens = m.estimatePromptTokens(m.messages, "")
|
||||
m.contextEstimate = true
|
||||
if !messagesEndWithCompactionResult(m.messages) {
|
||||
@@ -1093,7 +1096,6 @@ func (m *chatModel) startSkillRun(name, prompt string) (tea.Model, tea.Cmd) {
|
||||
}
|
||||
|
||||
func (m *chatModel) startRunWithMessages(displayInput, historyInput string, newMessages []api.Message, extraSystemPrompt, skillName string) (tea.Model, tea.Cmd) {
|
||||
m.refreshContextWindowTokens(m.opts.Model)
|
||||
m.addPromptHistory(historyInput)
|
||||
m.entries = append(m.entries, newChatEntry(chatEntry{role: "user", content: displayInput}))
|
||||
if len(newMessages) > 1 {
|
||||
|
||||
@@ -109,7 +109,6 @@ func (m *chatModel) applyAgentEvent(event coreagent.Event) {
|
||||
contextChanged = true
|
||||
case coreagent.EventToolStarted:
|
||||
m.resetStreamingState()
|
||||
m.refreshContextWindowTokens(m.opts.Model)
|
||||
startedAt := time.Now()
|
||||
idx := m.findActiveToolEntry(event.ToolCallID)
|
||||
if idx < 0 {
|
||||
@@ -127,7 +126,6 @@ func (m *chatModel) applyAgentEvent(event coreagent.Event) {
|
||||
m.markEntryDirty(idx)
|
||||
case coreagent.EventToolFinished:
|
||||
m.resetStreamingState()
|
||||
m.refreshContextWindowTokens(m.opts.Model)
|
||||
if event.WorkingDir != "" {
|
||||
m.workingDir = event.WorkingDir
|
||||
}
|
||||
|
||||
@@ -1435,18 +1435,6 @@ func (m *chatModel) updateContextWindowTokens(tokens int) {
|
||||
}
|
||||
}
|
||||
|
||||
func (m chatModel) responseModelName(response *api.ChatResponse) string {
|
||||
if response != nil {
|
||||
if strings.TrimSpace(response.Model) != "" {
|
||||
return response.Model
|
||||
}
|
||||
if strings.TrimSpace(response.RemoteModel) != "" {
|
||||
return response.RemoteModel
|
||||
}
|
||||
}
|
||||
return m.opts.Model
|
||||
}
|
||||
|
||||
func (m chatModel) currentWorkingDir() string {
|
||||
if strings.TrimSpace(m.workingDir) != "" {
|
||||
return m.workingDir
|
||||
|
||||
Reference in New Issue
Block a user