models.go

  1package models
  2
  3type (
  4	ModelID       string
  5	ModelProvider string
  6)
  7
  8type Model struct {
  9	ID                 ModelID       `json:"id"`
 10	Name               string        `json:"name"`
 11	Provider           ModelProvider `json:"provider"`
 12	APIModel           string        `json:"api_model"`
 13	CostPer1MIn        float64       `json:"cost_per_1m_in"`
 14	CostPer1MOut       float64       `json:"cost_per_1m_out"`
 15	CostPer1MInCached  float64       `json:"cost_per_1m_in_cached"`
 16	CostPer1MOutCached float64       `json:"cost_per_1m_out_cached"`
 17}
 18
 19// Model IDs
 20const (
 21	// Anthropic
 22	Claude35Sonnet ModelID = "claude-3.5-sonnet"
 23	Claude3Haiku   ModelID = "claude-3-haiku"
 24	Claude37Sonnet ModelID = "claude-3.7-sonnet"
 25	// OpenAI
 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	ProviderAnthropic ModelProvider = "anthropic"
 42	ProviderBedrock   ModelProvider = "bedrock"
 43	ProviderGemini    ModelProvider = "gemini"
 44	ProviderGROQ      ModelProvider = "groq"
 45)
 46
 47var SupportedModels = map[ModelID]Model{
 48	// Anthropic
 49	Claude35Sonnet: {
 50		ID:                 Claude35Sonnet,
 51		Name:               "Claude 3.5 Sonnet",
 52		Provider:           ProviderAnthropic,
 53		APIModel:           "claude-3-5-sonnet-latest",
 54		CostPer1MIn:        3.0,
 55		CostPer1MInCached:  3.75,
 56		CostPer1MOutCached: 0.30,
 57		CostPer1MOut:       15.0,
 58	},
 59	Claude3Haiku: {
 60		ID:                 Claude3Haiku,
 61		Name:               "Claude 3 Haiku",
 62		Provider:           ProviderAnthropic,
 63		APIModel:           "claude-3-haiku-latest",
 64		CostPer1MIn:        0.80,
 65		CostPer1MInCached:  1,
 66		CostPer1MOutCached: 0.08,
 67		CostPer1MOut:       4,
 68	},
 69	Claude37Sonnet: {
 70		ID:                 Claude37Sonnet,
 71		Name:               "Claude 3.7 Sonnet",
 72		Provider:           ProviderAnthropic,
 73		APIModel:           "claude-3-7-sonnet-latest",
 74		CostPer1MIn:        3.0,
 75		CostPer1MInCached:  3.75,
 76		CostPer1MOutCached: 0.30,
 77		CostPer1MOut:       15.0,
 78	},
 79
 80	// OpenAI
 81	GPT41: {
 82		ID:                 GPT41,
 83		Name:               "GPT-4.1",
 84		Provider:           ProviderOpenAI,
 85		APIModel:           "gpt-4.1",
 86		CostPer1MIn:        2.00,
 87		CostPer1MInCached:  0.50,
 88		CostPer1MOutCached: 0,
 89		CostPer1MOut:       8.00,
 90	},
 91
 92	// GEMINI
 93	GEMINI25: {
 94		ID:                 GEMINI25,
 95		Name:               "Gemini 2.5 Pro",
 96		Provider:           ProviderGemini,
 97		APIModel:           "gemini-2.5-pro-exp-03-25",
 98		CostPer1MIn:        0,
 99		CostPer1MInCached:  0,
100		CostPer1MOutCached: 0,
101		CostPer1MOut:       0,
102	},
103
104	GRMINI20Flash: {
105		ID:                 GRMINI20Flash,
106		Name:               "Gemini 2.0 Flash",
107		Provider:           ProviderGemini,
108		APIModel:           "gemini-2.0-flash",
109		CostPer1MIn:        0.1,
110		CostPer1MInCached:  0,
111		CostPer1MOutCached: 0.025,
112		CostPer1MOut:       0.4,
113	},
114
115	// GROQ
116	QWENQwq: {
117		ID:                 QWENQwq,
118		Name:               "Qwen Qwq",
119		Provider:           ProviderGROQ,
120		APIModel:           "qwen-qwq-32b",
121		CostPer1MIn:        0,
122		CostPer1MInCached:  0,
123		CostPer1MOutCached: 0,
124		CostPer1MOut:       0,
125	},
126
127	// Bedrock
128	BedrockClaude37Sonnet: {
129		ID:                 BedrockClaude37Sonnet,
130		Name:               "Bedrock: Claude 3.7 Sonnet",
131		Provider:           ProviderBedrock,
132		APIModel:           "anthropic.claude-3-7-sonnet-20250219-v1:0",
133		CostPer1MIn:        3.0,
134		CostPer1MInCached:  3.75,
135		CostPer1MOutCached: 0.30,
136		CostPer1MOut:       15.0,
137	},
138}