coder.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package agent
  2. import (
  3. "context"
  4. "errors"
  5. "github.com/kujtimiihoxha/termai/internal/app"
  6. "github.com/kujtimiihoxha/termai/internal/config"
  7. "github.com/kujtimiihoxha/termai/internal/llm/models"
  8. "github.com/kujtimiihoxha/termai/internal/llm/tools"
  9. )
  10. type coderAgent struct {
  11. *agent
  12. }
  13. func (c *coderAgent) setAgentTool(sessionID string) {
  14. inx := -1
  15. for i, tool := range c.tools {
  16. if tool.Info().Name == AgentToolName {
  17. inx = i
  18. break
  19. }
  20. }
  21. if inx == -1 {
  22. c.tools = append(c.tools, NewAgentTool(sessionID, c.App))
  23. } else {
  24. c.tools[inx] = NewAgentTool(sessionID, c.App)
  25. }
  26. }
  27. func (c *coderAgent) Generate(ctx context.Context, sessionID string, content string) error {
  28. c.setAgentTool(sessionID)
  29. return c.generate(ctx, sessionID, content)
  30. }
  31. func NewCoderAgent(app *app.App) (Agent, error) {
  32. model, ok := models.SupportedModels[config.Get().Model.Coder]
  33. if !ok {
  34. return nil, errors.New("model not supported")
  35. }
  36. ctx := context.Background()
  37. agentProvider, titleGenerator, err := getAgentProviders(ctx, model)
  38. if err != nil {
  39. return nil, err
  40. }
  41. otherTools := GetMcpTools(ctx, app.Permissions)
  42. if len(app.LSPClients) > 0 {
  43. otherTools = append(otherTools, tools.NewDiagnosticsTool(app.LSPClients))
  44. }
  45. return &coderAgent{
  46. agent: &agent{
  47. App: app,
  48. tools: append(
  49. []tools.BaseTool{
  50. tools.NewBashTool(app.Permissions),
  51. tools.NewEditTool(app.LSPClients, app.Permissions),
  52. tools.NewFetchTool(app.Permissions),
  53. tools.NewGlobTool(),
  54. tools.NewGrepTool(),
  55. tools.NewLsTool(),
  56. tools.NewSourcegraphTool(),
  57. tools.NewViewTool(app.LSPClients),
  58. tools.NewWriteTool(app.LSPClients, app.Permissions),
  59. }, otherTools...,
  60. ),
  61. model: model,
  62. agent: agentProvider,
  63. titleGenerator: titleGenerator,
  64. },
  65. }, nil
  66. }