diff options
| author | Kujtim Hoxha <[email protected]> | 2025-04-18 20:17:38 +0200 |
|---|---|---|
| committer | Kujtim Hoxha <[email protected]> | 2025-04-21 13:42:27 +0200 |
| commit | 333ea6ec4b2abfc2c1a9c3f6b0918ca5d296347f (patch) | |
| tree | e0d456417368e8716c81ee43b82be3d6ed39c59e /internal/llm/agent | |
| parent | 05d0e86f10369fd0e51a924ac88029fb92591499 (diff) | |
| download | opencode-333ea6ec4b2abfc2c1a9c3f6b0918ca5d296347f.tar.gz opencode-333ea6ec4b2abfc2c1a9c3f6b0918ca5d296347f.zip | |
implement patch, update ui, improve rendering
Diffstat (limited to 'internal/llm/agent')
| -rw-r--r-- | internal/llm/agent/agent.go | 53 | ||||
| -rw-r--r-- | internal/llm/agent/tools.go | 3 |
2 files changed, 35 insertions, 21 deletions
diff --git a/internal/llm/agent/agent.go b/internal/llm/agent/agent.go index a5dadb89d..5e9785991 100644 --- a/internal/llm/agent/agent.go +++ b/internal/llm/agent/agent.go @@ -41,6 +41,7 @@ type Service interface { Run(ctx context.Context, sessionID string, content string) (<-chan AgentEvent, error) Cancel(sessionID string) IsSessionBusy(sessionID string) bool + IsBusy() bool } type agent struct { @@ -95,6 +96,20 @@ func (a *agent) Cancel(sessionID string) { } } +func (a *agent) IsBusy() bool { + busy := false + a.activeRequests.Range(func(key, value interface{}) bool { + if cancelFunc, ok := value.(context.CancelFunc); ok { + if cancelFunc != nil { + busy = true + return false // Stop iterating + } + } + return true // Continue iterating + }) + return busy +} + func (a *agent) IsSessionBusy(sessionID string) bool { _, busy := a.activeRequests.Load(sessionID) return busy @@ -313,23 +328,8 @@ func (a *agent) streamAndHandleEvents(ctx context.Context, sessionID string, msg } } a.finishMessage(ctx, &assistantMsg, message.FinishReasonPermissionDenied) - } else { - toolResults[i] = message.ToolResult{ - ToolCallID: toolCall.ID, - Content: toolErr.Error(), - IsError: true, - } - for j := i; j < len(toolCalls); j++ { - toolResults[j] = message.ToolResult{ - ToolCallID: toolCalls[j].ID, - Content: "Previous tool failed", - IsError: true, - } - } - a.finishMessage(ctx, &assistantMsg, message.FinishReasonError) + break } - // If permission is denied or an error happens we cancel all the following tools - break } toolResults[i] = message.ToolResult{ ToolCallID: toolCall.ID, @@ -437,12 +437,27 @@ func createAgentProvider(agentName config.AgentName) (provider.Provider, error) if providerCfg.Disabled { return nil, fmt.Errorf("provider %s is not enabled", model.Provider) } - agentProvider, err := provider.NewProvider( - model.Provider, + maxTokens := model.DefaultMaxTokens + if agentConfig.MaxTokens > 0 { + maxTokens = agentConfig.MaxTokens + } + opts := []provider.ProviderClientOption{ provider.WithAPIKey(providerCfg.APIKey), provider.WithModel(model), provider.WithSystemMessage(prompt.GetAgentPrompt(agentName, model.Provider)), - provider.WithMaxTokens(agentConfig.MaxTokens), + provider.WithMaxTokens(maxTokens), + } + if model.Provider == models.ProviderOpenAI && model.CanReason { + opts = append( + opts, + provider.WithOpenAIOptions( + provider.WithReasoningEffort(agentConfig.ReasoningEffort), + ), + ) + } + agentProvider, err := provider.NewProvider( + model.Provider, + opts..., ) if err != nil { return nil, fmt.Errorf("could not create provider: %v", err) diff --git a/internal/llm/agent/tools.go b/internal/llm/agent/tools.go index 9120809ff..b2e6816d5 100644 --- a/internal/llm/agent/tools.go +++ b/internal/llm/agent/tools.go @@ -31,10 +31,9 @@ func CoderAgentTools( tools.NewGlobTool(), tools.NewGrepTool(), tools.NewLsTool(), - // TODO: see if we want to use this tool - // tools.NewPatchTool(lspClients, permissions, history), tools.NewSourcegraphTool(), tools.NewViewTool(lspClients), + tools.NewPatchTool(lspClients, permissions, history), tools.NewWriteTool(lspClients, permissions, history), NewAgentTool(sessions, messages, lspClients), }, otherTools..., |
