1package models
2
3import "maps"
4
5type (
6 ModelID string
7 InferenceProvider string
8)
9
10type Model struct {
11 ID ModelID `json:"id"`
12 Name string `json:"name"`
13 Provider InferenceProvider `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 InferenceProvider = "bedrock"
33 // ForTests
34 ProviderMock InferenceProvider = "__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
51var KnownProviders = []InferenceProvider{
52 ProviderAnthropic,
53 ProviderOpenAI,
54 ProviderGemini,
55 ProviderAzure,
56 ProviderGROQ,
57 ProviderLocal,
58 ProviderOpenRouter,
59 ProviderVertexAI,
60 ProviderBedrock,
61 ProviderXAI,
62 ProviderMock,
63}
64
65func init() {
66 maps.Copy(SupportedModels, AnthropicModels)
67 maps.Copy(SupportedModels, OpenAIModels)
68 maps.Copy(SupportedModels, GeminiModels)
69 maps.Copy(SupportedModels, GroqModels)
70 maps.Copy(SupportedModels, AzureModels)
71 maps.Copy(SupportedModels, OpenRouterModels)
72 maps.Copy(SupportedModels, XAIModels)
73 maps.Copy(SupportedModels, VertexAIGeminiModels)
74}