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}