summaryrefslogtreecommitdiffhomepage
path: root/internal/llm/agent
diff options
context:
space:
mode:
authorKujtim Hoxha <[email protected]>2025-04-13 13:17:17 +0200
committerKujtim Hoxha <[email protected]>2025-04-21 13:41:25 +0200
commit3ad983db0f2c08826d56cb5de274d706c95b3353 (patch)
tree3151e7f361dc2b468429791d581eb5f3d658f84f /internal/llm/agent
parent5601466fe1610b777895682050b1b458f80c0ac8 (diff)
downloadopencode-3ad983db0f2c08826d56cb5de274d706c95b3353.tar.gz
opencode-3ad983db0f2c08826d56cb5de274d706c95b3353.zip
cleanup app, config and root
Diffstat (limited to 'internal/llm/agent')
-rw-r--r--internal/llm/agent/agent-tool.go10
-rw-r--r--internal/llm/agent/agent.go53
-rw-r--r--internal/llm/agent/coder.go5
-rw-r--r--internal/llm/agent/task.go3
4 files changed, 37 insertions, 34 deletions
diff --git a/internal/llm/agent/agent-tool.go b/internal/llm/agent/agent-tool.go
index deb6aed60..91c46da8b 100644
--- a/internal/llm/agent/agent-tool.go
+++ b/internal/llm/agent/agent-tool.go
@@ -51,7 +51,7 @@ func (b *agentTool) Run(ctx context.Context, call tools.ToolCall) (tools.ToolRes
return tools.NewTextErrorResponse(fmt.Sprintf("error creating agent: %s", err)), nil
}
- session, err := b.app.Sessions.CreateTaskSession(call.ID, b.parentSessionID, "New Agent Session")
+ session, err := b.app.Sessions.CreateTaskSession(ctx, call.ID, b.parentSessionID, "New Agent Session")
if err != nil {
return tools.NewTextErrorResponse(fmt.Sprintf("error creating session: %s", err)), nil
}
@@ -61,7 +61,7 @@ func (b *agentTool) Run(ctx context.Context, call tools.ToolCall) (tools.ToolRes
return tools.NewTextErrorResponse(fmt.Sprintf("error generating agent: %s", err)), nil
}
- messages, err := b.app.Messages.List(session.ID)
+ messages, err := b.app.Messages.List(ctx, session.ID)
if err != nil {
return tools.NewTextErrorResponse(fmt.Sprintf("error listing messages: %s", err)), nil
}
@@ -74,11 +74,11 @@ func (b *agentTool) Run(ctx context.Context, call tools.ToolCall) (tools.ToolRes
return tools.NewTextErrorResponse("no assistant message found"), nil
}
- updatedSession, err := b.app.Sessions.Get(session.ID)
+ updatedSession, err := b.app.Sessions.Get(ctx, session.ID)
if err != nil {
return tools.NewTextErrorResponse(fmt.Sprintf("error: %s", err)), nil
}
- parentSession, err := b.app.Sessions.Get(b.parentSessionID)
+ parentSession, err := b.app.Sessions.Get(ctx, b.parentSessionID)
if err != nil {
return tools.NewTextErrorResponse(fmt.Sprintf("error: %s", err)), nil
}
@@ -87,7 +87,7 @@ func (b *agentTool) Run(ctx context.Context, call tools.ToolCall) (tools.ToolRes
parentSession.PromptTokens += updatedSession.PromptTokens
parentSession.CompletionTokens += updatedSession.CompletionTokens
- _, err = b.app.Sessions.Save(parentSession)
+ _, err = b.app.Sessions.Save(ctx, parentSession)
if err != nil {
return tools.NewTextErrorResponse(fmt.Sprintf("error: %s", err)), nil
}
diff --git a/internal/llm/agent/agent.go b/internal/llm/agent/agent.go
index 89de627f7..b7c736e6c 100644
--- a/internal/llm/agent/agent.go
+++ b/internal/llm/agent/agent.go
@@ -48,7 +48,7 @@ func (c *agent) handleTitleGeneration(ctx context.Context, sessionID, content st
return
}
- session, err := c.Sessions.Get(sessionID)
+ session, err := c.Sessions.Get(ctx, sessionID)
if err != nil {
return
}
@@ -56,12 +56,12 @@ func (c *agent) handleTitleGeneration(ctx context.Context, sessionID, content st
session.Title = response.Content
session.Title = strings.TrimSpace(session.Title)
session.Title = strings.ReplaceAll(session.Title, "\n", " ")
- c.Sessions.Save(session)
+ c.Sessions.Save(ctx, session)
}
}
-func (c *agent) TrackUsage(sessionID string, model models.Model, usage provider.TokenUsage) error {
- session, err := c.Sessions.Get(sessionID)
+func (c *agent) TrackUsage(ctx context.Context, sessionID string, model models.Model, usage provider.TokenUsage) error {
+ session, err := c.Sessions.Get(ctx, sessionID)
if err != nil {
return err
}
@@ -75,11 +75,12 @@ func (c *agent) TrackUsage(sessionID string, model models.Model, usage provider.
session.CompletionTokens += usage.OutputTokens
session.PromptTokens += usage.InputTokens
- _, err = c.Sessions.Save(session)
+ _, err = c.Sessions.Save(ctx, session)
return err
}
func (c *agent) processEvent(
+ ctx context.Context,
sessionID string,
assistantMsg *message.Message,
event provider.ProviderEvent,
@@ -87,10 +88,10 @@ func (c *agent) processEvent(
switch event.Type {
case provider.EventThinkingDelta:
assistantMsg.AppendReasoningContent(event.Content)
- return c.Messages.Update(*assistantMsg)
+ return c.Messages.Update(ctx, *assistantMsg)
case provider.EventContentDelta:
assistantMsg.AppendContent(event.Content)
- return c.Messages.Update(*assistantMsg)
+ return c.Messages.Update(ctx, *assistantMsg)
case provider.EventError:
if errors.Is(event.Error, context.Canceled) {
return nil
@@ -105,11 +106,11 @@ func (c *agent) processEvent(
case provider.EventComplete:
assistantMsg.SetToolCalls(event.Response.ToolCalls)
assistantMsg.AddFinish(event.Response.FinishReason)
- err := c.Messages.Update(*assistantMsg)
+ err := c.Messages.Update(ctx, *assistantMsg)
if err != nil {
return err
}
- return c.TrackUsage(sessionID, c.model, event.Response.Usage)
+ return c.TrackUsage(ctx, sessionID, c.model, event.Response.Usage)
}
return nil
@@ -237,7 +238,7 @@ func (c *agent) handleToolExecution(
for _, toolResult := range toolResults {
parts = append(parts, toolResult)
}
- msg, err := c.Messages.Create(assistantMsg.SessionID, message.CreateMessageParams{
+ msg, err := c.Messages.Create(ctx, assistantMsg.SessionID, message.CreateMessageParams{
Role: message.Tool,
Parts: parts,
})
@@ -247,7 +248,7 @@ func (c *agent) handleToolExecution(
func (c *agent) generate(ctx context.Context, sessionID string, content string) error {
ctx = context.WithValue(ctx, tools.SessionIDContextKey, sessionID)
- messages, err := c.Messages.List(sessionID)
+ messages, err := c.Messages.List(ctx, sessionID)
if err != nil {
return err
}
@@ -256,7 +257,7 @@ func (c *agent) generate(ctx context.Context, sessionID string, content string)
go c.handleTitleGeneration(ctx, sessionID, content)
}
- userMsg, err := c.Messages.Create(sessionID, message.CreateMessageParams{
+ userMsg, err := c.Messages.Create(ctx, sessionID, message.CreateMessageParams{
Role: message.User,
Parts: []message.ContentPart{
message.TextContent{
@@ -272,7 +273,7 @@ func (c *agent) generate(ctx context.Context, sessionID string, content string)
for {
select {
case <-ctx.Done():
- assistantMsg, err := c.Messages.Create(sessionID, message.CreateMessageParams{
+ assistantMsg, err := c.Messages.Create(ctx, sessionID, message.CreateMessageParams{
Role: message.Assistant,
Parts: []message.ContentPart{},
})
@@ -280,7 +281,7 @@ func (c *agent) generate(ctx context.Context, sessionID string, content string)
return err
}
assistantMsg.AddFinish("canceled")
- c.Messages.Update(assistantMsg)
+ c.Messages.Update(ctx, assistantMsg)
return context.Canceled
default:
// Continue processing
@@ -289,7 +290,7 @@ func (c *agent) generate(ctx context.Context, sessionID string, content string)
eventChan, err := c.agent.StreamResponse(ctx, messages, c.tools)
if err != nil {
if errors.Is(err, context.Canceled) {
- assistantMsg, err := c.Messages.Create(sessionID, message.CreateMessageParams{
+ assistantMsg, err := c.Messages.Create(ctx, sessionID, message.CreateMessageParams{
Role: message.Assistant,
Parts: []message.ContentPart{},
})
@@ -297,13 +298,13 @@ func (c *agent) generate(ctx context.Context, sessionID string, content string)
return err
}
assistantMsg.AddFinish("canceled")
- c.Messages.Update(assistantMsg)
+ c.Messages.Update(ctx, assistantMsg)
return context.Canceled
}
return err
}
- assistantMsg, err := c.Messages.Create(sessionID, message.CreateMessageParams{
+ assistantMsg, err := c.Messages.Create(ctx, sessionID, message.CreateMessageParams{
Role: message.Assistant,
Parts: []message.ContentPart{},
Model: c.model.ID,
@@ -314,22 +315,22 @@ func (c *agent) generate(ctx context.Context, sessionID string, content string)
ctx = context.WithValue(ctx, tools.MessageIDContextKey, assistantMsg.ID)
for event := range eventChan {
- err = c.processEvent(sessionID, &assistantMsg, event)
+ err = c.processEvent(ctx, sessionID, &assistantMsg, event)
if err != nil {
if errors.Is(err, context.Canceled) {
assistantMsg.AddFinish("canceled")
- c.Messages.Update(assistantMsg)
+ c.Messages.Update(ctx, assistantMsg)
return context.Canceled
}
assistantMsg.AddFinish("error:" + err.Error())
- c.Messages.Update(assistantMsg)
+ c.Messages.Update(ctx, assistantMsg)
return err
}
select {
case <-ctx.Done():
assistantMsg.AddFinish("canceled")
- c.Messages.Update(assistantMsg)
+ c.Messages.Update(ctx, assistantMsg)
return context.Canceled
default:
}
@@ -339,7 +340,7 @@ func (c *agent) generate(ctx context.Context, sessionID string, content string)
select {
case <-ctx.Done():
assistantMsg.AddFinish("canceled")
- c.Messages.Update(assistantMsg)
+ c.Messages.Update(ctx, assistantMsg)
return context.Canceled
default:
// Continue processing
@@ -349,13 +350,13 @@ func (c *agent) generate(ctx context.Context, sessionID string, content string)
if err != nil {
if errors.Is(err, context.Canceled) {
assistantMsg.AddFinish("canceled")
- c.Messages.Update(assistantMsg)
+ c.Messages.Update(ctx, assistantMsg)
return context.Canceled
}
return err
}
- c.Messages.Update(assistantMsg)
+ c.Messages.Update(ctx, assistantMsg)
if len(assistantMsg.ToolCalls()) == 0 {
break
@@ -370,7 +371,7 @@ func (c *agent) generate(ctx context.Context, sessionID string, content string)
select {
case <-ctx.Done():
assistantMsg.AddFinish("canceled")
- c.Messages.Update(assistantMsg)
+ c.Messages.Update(ctx, assistantMsg)
return context.Canceled
default:
// Continue processing
@@ -383,7 +384,7 @@ func getAgentProviders(ctx context.Context, model models.Model) (provider.Provid
maxTokens := config.Get().Model.CoderMaxTokens
providerConfig, ok := config.Get().Providers[model.Provider]
- if !ok || !providerConfig.Enabled {
+ if !ok || providerConfig.Disabled {
return nil, nil, errors.New("provider is not enabled")
}
var agentProvider provider.Provider
diff --git a/internal/llm/agent/coder.go b/internal/llm/agent/coder.go
index 5deff05a8..f8e1c40a0 100644
--- a/internal/llm/agent/coder.go
+++ b/internal/llm/agent/coder.go
@@ -40,12 +40,13 @@ func NewCoderAgent(app *app.App) (Agent, error) {
return nil, errors.New("model not supported")
}
- agentProvider, titleGenerator, err := getAgentProviders(app.Context, model)
+ ctx := context.Background()
+ agentProvider, titleGenerator, err := getAgentProviders(ctx, model)
if err != nil {
return nil, err
}
- otherTools := GetMcpTools(app.Context, app.Permissions)
+ otherTools := GetMcpTools(ctx, app.Permissions)
if len(app.LSPClients) > 0 {
otherTools = append(otherTools, tools.NewDiagnosticsTool(app.LSPClients))
}
diff --git a/internal/llm/agent/task.go b/internal/llm/agent/task.go
index 034e93460..c196cb107 100644
--- a/internal/llm/agent/task.go
+++ b/internal/llm/agent/task.go
@@ -24,7 +24,8 @@ func NewTaskAgent(app *app.App) (Agent, error) {
return nil, errors.New("model not supported")
}
- agentProvider, titleGenerator, err := getAgentProviders(app.Context, model)
+ ctx := context.Background()
+ agentProvider, titleGenerator, err := getAgentProviders(ctx, model)
if err != nil {
return nil, err
}