on main help sign in
handle errors correctly in the agent tool
80cd75cKujtim Hoxha
internal/llm/agent/agent-tool.go+11−10
@@ -50,44 +50,45 @@ func (b *agentTool) Run(ctx context.Context, call tools.ToolCall) (tools.ToolRes
50
50
51 sessionID, messageID := tools.GetContextValues(ctx)
51 sessionID, messageID := tools.GetContextValues(ctx)
52 if sessionID == "" || messageID == "" {
52 if sessionID == "" || messageID == "" {
53− return tools.NewTextErrorResponse("session ID and message ID are required"), nil
53+ return tools.ToolResponse{}, fmt.Errorf("session_id and message_id are required")
54 }
54 }
55
55
56 agent, err := NewTaskAgent(b.lspClients)
56 agent, err := NewTaskAgent(b.lspClients)
57 if err != nil {
57 if err != nil {
58− return tools.NewTextErrorResponse(fmt.Sprintf("error creating agent: %s", err)), nil
58+ return tools.ToolResponse{}, fmt.Errorf("error creating agent: %s", err)
59 }
59 }
60
60
61 session, err := b.sessions.CreateTaskSession(ctx, call.ID, sessionID, "New Agent Session")
61 session, err := b.sessions.CreateTaskSession(ctx, call.ID, sessionID, "New Agent Session")
62 if err != nil {
62 if err != nil {
63− return tools.NewTextErrorResponse(fmt.Sprintf("error creating session: %s", err)), nil
63+ return tools.ToolResponse{}, fmt.Errorf("error creating session: %s", err)
64 }
64 }
65
65
66 err = agent.Generate(ctx, session.ID, params.Prompt)
66 err = agent.Generate(ctx, session.ID, params.Prompt)
67 if err != nil {
67 if err != nil {
68− return tools.NewTextErrorResponse(fmt.Sprintf("error generating agent: %s", err)), nil
68+ return tools.ToolResponse{}, fmt.Errorf("error generating agent: %s", err)
69 }
69 }
70
70
71 messages, err := b.messages.List(ctx, session.ID)
71 messages, err := b.messages.List(ctx, session.ID)
72 if err != nil {
72 if err != nil {
73− return tools.NewTextErrorResponse(fmt.Sprintf("error listing messages: %s", err)), nil
73+ return tools.ToolResponse{}, fmt.Errorf("error listing messages: %s", err)
74 }
74 }
75+
75 if len(messages) == 0 {
76 if len(messages) == 0 {
76− return tools.NewTextErrorResponse("no messages found"), nil
77+ return tools.NewTextErrorResponse("no response"), nil
77 }
78 }
78
79
79 response := messages[len(messages)-1]
80 response := messages[len(messages)-1]
80 if response.Role != message.Assistant {
81 if response.Role != message.Assistant {
81− return tools.NewTextErrorResponse("no assistant message found"), nil
82+ return tools.NewTextErrorResponse("no response"), nil
82 }
83 }
83
84
84 updatedSession, err := b.sessions.Get(ctx, session.ID)
85 updatedSession, err := b.sessions.Get(ctx, session.ID)
85 if err != nil {
86 if err != nil {
86− return tools.NewTextErrorResponse(fmt.Sprintf("error: %s", err)), nil
87+ return tools.ToolResponse{}, fmt.Errorf("error getting session: %s", err)
87 }
88 }
88 parentSession, err := b.sessions.Get(ctx, sessionID)
89 parentSession, err := b.sessions.Get(ctx, sessionID)
89 if err != nil {
90 if err != nil {
90− return tools.NewTextErrorResponse(fmt.Sprintf("error: %s", err)), nil
91+ return tools.ToolResponse{}, fmt.Errorf("error getting parent session: %s", err)
91 }
92 }
92
93
93 parentSession.Cost += updatedSession.Cost
94 parentSession.Cost += updatedSession.Cost
@@ -96,7 +97,7 @@ func (b *agentTool) Run(ctx context.Context, call tools.ToolCall) (tools.ToolRes
96
97
97 _, err = b.sessions.Save(ctx, parentSession)
98 _, err = b.sessions.Save(ctx, parentSession)
98 if err != nil {
99 if err != nil {
99− return tools.NewTextErrorResponse(fmt.Sprintf("error: %s", err)), nil
100+ return tools.ToolResponse{}, fmt.Errorf("error saving parent session: %s", err)
100 }
101 }
101 return tools.NewTextResponse(response.Content().String()), nil
102 return tools.NewTextResponse(response.Content().String()), nil
102}
103}