models.go

  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}