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}
21
22// Model IDs
23const (
24 // OpenAI
25 GPT4o ModelID = "gpt-4o"
26 GPT41 ModelID = "gpt-4.1"
27
28 // GEMINI
29 GEMINI25 ModelID = "gemini-2.5"
30 GRMINI20Flash ModelID = "gemini-2.0-flash"
31
32 // GROQ
33 QWENQwq ModelID = "qwen-qwq"
34
35 // Bedrock
36 BedrockClaude37Sonnet ModelID = "bedrock.claude-3.7-sonnet"
37)
38
39const (
40 ProviderOpenAI ModelProvider = "openai"
41 ProviderBedrock ModelProvider = "bedrock"
42 ProviderGemini ModelProvider = "gemini"
43 ProviderGROQ ModelProvider = "groq"
44
45 // ForTests
46 ProviderMock ModelProvider = "__mock"
47)
48
49var SupportedModels = map[ModelID]Model{
50 // // Anthropic
51 // Claude35Sonnet: {
52 // ID: Claude35Sonnet,
53 // Name: "Claude 3.5 Sonnet",
54 // Provider: ProviderAnthropic,
55 // APIModel: "claude-3-5-sonnet-latest",
56 // CostPer1MIn: 3.0,
57 // CostPer1MInCached: 3.75,
58 // CostPer1MOutCached: 0.30,
59 // CostPer1MOut: 15.0,
60 // },
61 // Claude3Haiku: {
62 // ID: Claude3Haiku,
63 // Name: "Claude 3 Haiku",
64 // Provider: ProviderAnthropic,
65 // APIModel: "claude-3-haiku-latest",
66 // CostPer1MIn: 0.80,
67 // CostPer1MInCached: 1,
68 // CostPer1MOutCached: 0.08,
69 // CostPer1MOut: 4,
70 // },
71 // Claude37Sonnet: {
72 // ID: Claude37Sonnet,
73 // Name: "Claude 3.7 Sonnet",
74 // Provider: ProviderAnthropic,
75 // APIModel: "claude-3-7-sonnet-latest",
76 // CostPer1MIn: 3.0,
77 // CostPer1MInCached: 3.75,
78 // CostPer1MOutCached: 0.30,
79 // CostPer1MOut: 15.0,
80 // },
81 //
82 // // OpenAI
83 GPT4o: {
84 ID: GPT4o,
85 Name: "GPT-4o",
86 Provider: ProviderOpenAI,
87 APIModel: "gpt-4.1",
88 CostPer1MIn: 2.00,
89 CostPer1MInCached: 0.50,
90 CostPer1MOutCached: 0,
91 CostPer1MOut: 8.00,
92 },
93 GPT41: {
94 ID: GPT41,
95 Name: "GPT-4.1",
96 Provider: ProviderOpenAI,
97 APIModel: "gpt-4.1",
98 CostPer1MIn: 2.00,
99 CostPer1MInCached: 0.50,
100 CostPer1MOutCached: 0,
101 CostPer1MOut: 8.00,
102 },
103 //
104 // // GEMINI
105 // GEMINI25: {
106 // ID: GEMINI25,
107 // Name: "Gemini 2.5 Pro",
108 // Provider: ProviderGemini,
109 // APIModel: "gemini-2.5-pro-exp-03-25",
110 // CostPer1MIn: 0,
111 // CostPer1MInCached: 0,
112 // CostPer1MOutCached: 0,
113 // CostPer1MOut: 0,
114 // },
115 //
116 // GRMINI20Flash: {
117 // ID: GRMINI20Flash,
118 // Name: "Gemini 2.0 Flash",
119 // Provider: ProviderGemini,
120 // APIModel: "gemini-2.0-flash",
121 // CostPer1MIn: 0.1,
122 // CostPer1MInCached: 0,
123 // CostPer1MOutCached: 0.025,
124 // CostPer1MOut: 0.4,
125 // },
126 //
127 // // GROQ
128 // QWENQwq: {
129 // ID: QWENQwq,
130 // Name: "Qwen Qwq",
131 // Provider: ProviderGROQ,
132 // APIModel: "qwen-qwq-32b",
133 // CostPer1MIn: 0,
134 // CostPer1MInCached: 0,
135 // CostPer1MOutCached: 0,
136 // CostPer1MOut: 0,
137 // },
138 //
139 // // Bedrock
140 // BedrockClaude37Sonnet: {
141 // ID: BedrockClaude37Sonnet,
142 // Name: "Bedrock: Claude 3.7 Sonnet",
143 // Provider: ProviderBedrock,
144 // APIModel: "anthropic.claude-3-7-sonnet-20250219-v1:0",
145 // CostPer1MIn: 3.0,
146 // CostPer1MInCached: 3.75,
147 // CostPer1MOutCached: 0.30,
148 // CostPer1MOut: 15.0,
149 // },
150}
151
152func init() {
153 maps.Copy(SupportedModels, AnthropicModels)
154}