models.go

 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}