task.go

 1package agent
 2
 3import (
 4	"context"
 5	"errors"
 6
 7	"github.com/kujtimiihoxha/termai/internal/app"
 8	"github.com/kujtimiihoxha/termai/internal/config"
 9	"github.com/kujtimiihoxha/termai/internal/llm/models"
10	"github.com/kujtimiihoxha/termai/internal/llm/tools"
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(app *app.App) (Agent, 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			App: app,
35			tools: []tools.BaseTool{
36				tools.NewGlobTool(),
37				tools.NewGrepTool(),
38				tools.NewLsTool(),
39				tools.NewSourcegraphTool(),
40				tools.NewViewTool(app.LSPClients),
41			},
42			model:          model,
43			agent:          agentProvider,
44			titleGenerator: titleGenerator,
45		},
46	}, nil
47}