models.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package models
  2. import "maps"
  3. type (
  4. ModelID string
  5. ModelProvider string
  6. )
  7. type Model struct {
  8. ID ModelID `json:"id"`
  9. Name string `json:"name"`
  10. Provider ModelProvider `json:"provider"`
  11. APIModel string `json:"api_model"`
  12. CostPer1MIn float64 `json:"cost_per_1m_in"`
  13. CostPer1MOut float64 `json:"cost_per_1m_out"`
  14. CostPer1MInCached float64 `json:"cost_per_1m_in_cached"`
  15. CostPer1MOutCached float64 `json:"cost_per_1m_out_cached"`
  16. ContextWindow int64 `json:"context_window"`
  17. DefaultMaxTokens int64 `json:"default_max_tokens"`
  18. CanReason bool `json:"can_reason"`
  19. SupportsAttachments bool `json:"supports_attachments"`
  20. }
  21. // Model IDs
  22. const ( // GEMINI
  23. // Bedrock
  24. BedrockClaude37Sonnet ModelID = "bedrock.claude-3.7-sonnet"
  25. )
  26. const (
  27. ProviderBedrock ModelProvider = "bedrock"
  28. // ForTests
  29. ProviderMock ModelProvider = "__mock"
  30. )
  31. // Providers in order of popularity
  32. var ProviderPopularity = map[ModelProvider]int{
  33. ProviderAnthropic: 1,
  34. ProviderOpenAI: 2,
  35. ProviderGemini: 3,
  36. ProviderGROQ: 4,
  37. ProviderOpenRouter: 5,
  38. ProviderBedrock: 6,
  39. ProviderAzure: 7,
  40. ProviderVertexAI: 8,
  41. }
  42. var SupportedModels = map[ModelID]Model{
  43. //
  44. // // GEMINI
  45. // GEMINI25: {
  46. // ID: GEMINI25,
  47. // Name: "Gemini 2.5 Pro",
  48. // Provider: ProviderGemini,
  49. // APIModel: "gemini-2.5-pro-exp-03-25",
  50. // CostPer1MIn: 0,
  51. // CostPer1MInCached: 0,
  52. // CostPer1MOutCached: 0,
  53. // CostPer1MOut: 0,
  54. // },
  55. //
  56. // GRMINI20Flash: {
  57. // ID: GRMINI20Flash,
  58. // Name: "Gemini 2.0 Flash",
  59. // Provider: ProviderGemini,
  60. // APIModel: "gemini-2.0-flash",
  61. // CostPer1MIn: 0.1,
  62. // CostPer1MInCached: 0,
  63. // CostPer1MOutCached: 0.025,
  64. // CostPer1MOut: 0.4,
  65. // },
  66. //
  67. // // Bedrock
  68. BedrockClaude37Sonnet: {
  69. ID: BedrockClaude37Sonnet,
  70. Name: "Bedrock: Claude 3.7 Sonnet",
  71. Provider: ProviderBedrock,
  72. APIModel: "anthropic.claude-3-7-sonnet-20250219-v1:0",
  73. CostPer1MIn: 3.0,
  74. CostPer1MInCached: 3.75,
  75. CostPer1MOutCached: 0.30,
  76. CostPer1MOut: 15.0,
  77. ContextWindow: 200_000,
  78. DefaultMaxTokens: 50_000,
  79. CanReason: true,
  80. SupportsAttachments: true,
  81. },
  82. }
  83. func init() {
  84. maps.Copy(SupportedModels, AnthropicModels)
  85. maps.Copy(SupportedModels, OpenAIModels)
  86. maps.Copy(SupportedModels, GeminiModels)
  87. maps.Copy(SupportedModels, GroqModels)
  88. maps.Copy(SupportedModels, AzureModels)
  89. maps.Copy(SupportedModels, OpenRouterModels)
  90. maps.Copy(SupportedModels, XAIModels)
  91. maps.Copy(SupportedModels, VertexAIGeminiModels)
  92. }