coder.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. agentProvider, titleGenerator, err := getAgentProviders(app.Context, model)
  37. if err != nil {
  38. return nil, err
  39. }
  40. otherTools := GetMcpTools(app.Context, app.Permissions)
  41. if len(app.LSPClients) > 0 {
  42. otherTools = append(otherTools, tools.NewDiagnosticsTool(app.LSPClients))
  43. }
  44. return &coderAgent{
  45. agent: &agent{
  46. App: app,
  47. tools: append(
  48. []tools.BaseTool{
  49. tools.NewBashTool(app.Permissions),
  50. tools.NewEditTool(app.LSPClients, app.Permissions),
  51. tools.NewFetchTool(app.Permissions),
  52. tools.NewGlobTool(),
  53. tools.NewGrepTool(),
  54. tools.NewLsTool(),
  55. tools.NewSourcegraphTool(),
  56. tools.NewViewTool(app.LSPClients),
  57. tools.NewWriteTool(app.LSPClients, app.Permissions),
  58. }, otherTools...,
  59. ),
  60. model: model,
  61. agent: agentProvider,
  62. titleGenerator: titleGenerator,
  63. },
  64. }, nil
  65. }