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