summaryrefslogtreecommitdiffhomepage
path: root/internal/llm/agent
diff options
context:
space:
mode:
authorKujtim Hoxha <[email protected]>2025-04-19 16:35:45 +0200
committerKujtim Hoxha <[email protected]>2025-04-21 13:42:29 +0200
commit2de51274177432b559be3b7deb1f14b9539f2994 (patch)
treed47fff06ebf662f6bd7f594c78d0ae97e203a493 /internal/llm/agent
parent2b5a33e476ae3c6b5c6345777d20792786836dda (diff)
downloadopencode-2de51274177432b559be3b7deb1f14b9539f2994.tar.gz
opencode-2de51274177432b559be3b7deb1f14b9539f2994.zip
initial tool call stream
Diffstat (limited to 'internal/llm/agent')
-rw-r--r--internal/llm/agent/agent.go22
1 files changed, 22 insertions, 0 deletions
diff --git a/internal/llm/agent/agent.go b/internal/llm/agent/agent.go
index 7542d9adf..ae5bcb231 100644
--- a/internal/llm/agent/agent.go
+++ b/internal/llm/agent/agent.go
@@ -380,6 +380,21 @@ func (a *agent) processEvent(ctx context.Context, sessionID string, assistantMsg
case provider.EventContentDelta:
assistantMsg.AppendContent(event.Content)
return a.messages.Update(ctx, *assistantMsg)
+ case provider.EventToolUseStart:
+ assistantMsg.AddToolCall(*event.ToolCall)
+ return a.messages.Update(ctx, *assistantMsg)
+ // TODO: see how to handle this
+ // case provider.EventToolUseDelta:
+ // tm := time.Unix(assistantMsg.UpdatedAt, 0)
+ // assistantMsg.AppendToolCallInput(event.ToolCall.ID, event.ToolCall.Input)
+ // if time.Since(tm) > 1000*time.Millisecond {
+ // err := a.messages.Update(ctx, *assistantMsg)
+ // assistantMsg.UpdatedAt = time.Now().Unix()
+ // return err
+ // }
+ case provider.EventToolUseStop:
+ assistantMsg.FinishToolCall(event.ToolCall.ID)
+ return a.messages.Update(ctx, *assistantMsg)
case provider.EventError:
if errors.Is(event.Error, context.Canceled) {
logging.InfoPersist(fmt.Sprintf("Event processing canceled for session: %s", sessionID))
@@ -456,6 +471,13 @@ func createAgentProvider(agentName config.AgentName) (provider.Provider, error)
provider.WithReasoningEffort(agentConfig.ReasoningEffort),
),
)
+ } else if model.Provider == models.ProviderAnthropic && model.CanReason {
+ opts = append(
+ opts,
+ provider.WithAnthropicOptions(
+ provider.WithAnthropicShouldThinkFn(provider.DefaultShouldThinkFn),
+ ),
+ )
}
agentProvider, err := provider.NewProvider(
model.Provider,