Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions agent/agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -486,17 +486,23 @@ func (a *Agent) shouldStoreHistoryProvider(provider HistoryProvider, session *Se
if provider == nil {
return false
}
if !a.hasDefaultHistoryProvider {
return true
}
if a.providerDoesNotManageHistory {
// Provider never uses server-side history; always persist locally.
return true
}
if session != nil && session.ServiceID() != "" {
// Once the provider service owns the conversation history, no history
// provider should persist the run locally, even if a configured provider
// remains attached for future local sessions.
return false
}
if !a.hasDefaultHistoryProvider {
return true
}

// A provider can promote a local session to a service-managed one during the
// run. Once that happens, the default in-memory provider should stop storing.
return session != nil && session.ServiceID() == ""
return session != nil
}

func (a *Agent) handleHistoryProviderConflict(ctx context.Context, provider HistoryProvider, session *Session) (bool, error) {
Expand Down
10 changes: 5 additions & 5 deletions agent/agent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1538,7 +1538,7 @@ func TestAgent_Run_HistoryProvider_ClearsWhenThrowDisabledAndClearEnabled(t *tes
}
}

func TestAgent_Run_HistoryProvider_KeepsWhenThrowAndClearDisabled(t *testing.T) {
func TestAgent_Run_HistoryProvider_KeepsReferenceButSkipsStoreWhenThrowAndClearDisabled(t *testing.T) {
provideCalls := 0
storeCalls := 0
historyProvider := agent.NewHistoryProvider(agent.HistoryProviderConfig{
Expand Down Expand Up @@ -1575,14 +1575,14 @@ func TestAgent_Run_HistoryProvider_KeepsWhenThrowAndClearDisabled(t *testing.T)
if _, err := a.RunText(t.Context(), "input", agent.WithSession(agenttest.CreateSession())).Collect(); err != nil {
t.Fatalf("unexpected first run error: %v", err)
}
if provideCalls != 1 || storeCalls != 1 {
t.Fatalf("after first run provide/store = %d/%d, want 1/1", provideCalls, storeCalls)
if provideCalls != 1 || storeCalls != 0 {
t.Fatalf("after first run provide/store = %d/%d, want 1/0", provideCalls, storeCalls)
}
if _, err := a.RunText(t.Context(), "next", agent.WithSession(agenttest.CreateSession())).Collect(); err != nil {
t.Fatalf("unexpected second run error: %v", err)
}
if provideCalls != 2 || storeCalls != 2 {
t.Fatalf("after second run provide/store = %d/%d, want 2/2", provideCalls, storeCalls)
if provideCalls != 2 || storeCalls != 1 {
t.Fatalf("after second run provide/store = %d/%d, want 2/1", provideCalls, storeCalls)
}
}

Expand Down
Loading