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