coder.go 1.6 KB

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