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