task.go

 1package agent
 2
 3import (
 4	"context"
 5	"errors"
 6
 7	"github.com/kujtimiihoxha/termai/internal/config"
 8	"github.com/kujtimiihoxha/termai/internal/llm/models"
 9	"github.com/kujtimiihoxha/termai/internal/llm/tools"
10	"github.com/kujtimiihoxha/termai/internal/lsp"
11)
12
13type taskAgent struct {
14	*agent
15}
16
17func (c *taskAgent) Generate(ctx context.Context, sessionID string, content string) error {
18	return c.generate(ctx, sessionID, content)
19}
20
21func NewTaskAgent(lspClients map[string]*lsp.Client) (Service, error) {
22	model, ok := models.SupportedModels[config.Get().Model.Coder]
23	if !ok {
24		return nil, errors.New("model not supported")
25	}
26
27	ctx := context.Background()
28	agentProvider, titleGenerator, err := getAgentProviders(ctx, model)
29	if err != nil {
30		return nil, err
31	}
32	return &taskAgent{
33		agent: &agent{
34			tools: []tools.BaseTool{
35				tools.NewGlobTool(),
36				tools.NewGrepTool(),
37				tools.NewLsTool(),
38				tools.NewSourcegraphTool(),
39				tools.NewViewTool(lspClients),
40			},
41			model:          model,
42			agent:          agentProvider,
43			titleGenerator: titleGenerator,
44		},
45	}, nil
46}