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}
23
24// Model IDs
25const ( // GEMINI
26 // Bedrock
27 BedrockClaude37Sonnet ModelID = "bedrock.claude-3.7-sonnet"
28)
29
30const (
31 ProviderBedrock ModelProvider = "bedrock"
32 // ForTests
33 ProviderMock ModelProvider = "__mock"
34)
35
36// Providers in order of popularity
37var ProviderPopularity = map[ModelProvider]int{
38 ProviderAnthropic: 1,
39 ProviderOpenAI: 2,
40 ProviderGemini: 3,
41 ProviderGROQ: 4,
42 ProviderOpenRouter: 5,
43 ProviderBedrock: 6,
44 ProviderAzure: 7,
45}
46
47var SupportedModels = map[ModelID]Model{
48 //
49 // // GEMINI
50 // GEMINI25: {
51 // ID: GEMINI25,
52 // Name: "Gemini 2.5 Pro",
53 // Provider: ProviderGemini,
54 // APIModel: "gemini-2.5-pro-exp-03-25",
55 // CostPer1MIn: 0,
56 // CostPer1MInCached: 0,
57 // CostPer1MOutCached: 0,
58 // CostPer1MOut: 0,
59 // },
60 //
61 // GRMINI20Flash: {
62 // ID: GRMINI20Flash,
63 // Name: "Gemini 2.0 Flash",
64 // Provider: ProviderGemini,
65 // APIModel: "gemini-2.0-flash",
66 // CostPer1MIn: 0.1,
67 // CostPer1MInCached: 0,
68 // CostPer1MOutCached: 0.025,
69 // CostPer1MOut: 0.4,
70 // },
71 //
72 // // Bedrock
73 BedrockClaude37Sonnet: {
74 ID: BedrockClaude37Sonnet,
75 Name: "Bedrock: Claude 3.7 Sonnet",
76 Provider: ProviderBedrock,
77 APIModel: "anthropic.claude-3-7-sonnet-20250219-v1:0",
78 CostPer1MIn: 3.0,
79 CostPer1MInCached: 3.75,
80 CostPer1MOutCached: 0.30,
81 CostPer1MOut: 15.0,
82 },
83}
84
85func init() {
86 maps.Copy(SupportedModels, AnthropicModels)
87 maps.Copy(SupportedModels, OpenAIModels)
88 maps.Copy(SupportedModels, GeminiModels)
89 maps.Copy(SupportedModels, GroqModels)
90 maps.Copy(SupportedModels, AzureModels)
91 maps.Copy(SupportedModels, OpenRouterModels)
92 maps.Copy(SupportedModels, XAIModels)
93}