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
37var SupportedModels = map[ModelID]Model{
38	// Bedrock
39	BedrockClaude37Sonnet: {
40		ID:                 BedrockClaude37Sonnet,
41		Name:               "Bedrock: Claude 3.7 Sonnet",
42		Provider:           ProviderBedrock,
43		APIModel:           "anthropic.claude-3-7-sonnet-20250219-v1:0",
44		CostPer1MIn:        3.0,
45		CostPer1MInCached:  3.75,
46		CostPer1MOutCached: 0.30,
47		CostPer1MOut:       15.0,
48	},
49}
50
51func init() {
52	maps.Copy(SupportedModels, AnthropicModels)
53	maps.Copy(SupportedModels, OpenAIModels)
54	maps.Copy(SupportedModels, GeminiModels)
55	maps.Copy(SupportedModels, GroqModels)
56	maps.Copy(SupportedModels, AzureModels)
57	maps.Copy(SupportedModels, OpenRouterModels)
58	maps.Copy(SupportedModels, XAIModels)
59	maps.Copy(SupportedModels, VertexAIGeminiModels)
60}