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