mirror of
https://github.com/sst/opencode.git
synced 2025-08-08 07:18:03 +00:00
96 lines
2.6 KiB
Go
96 lines
2.6 KiB
Go
package models
|
|
|
|
import "maps"
|
|
|
|
type (
|
|
ModelID string
|
|
ModelProvider string
|
|
)
|
|
|
|
type Model struct {
|
|
ID ModelID `json:"id"`
|
|
Name string `json:"name"`
|
|
Provider ModelProvider `json:"provider"`
|
|
APIModel string `json:"api_model"`
|
|
CostPer1MIn float64 `json:"cost_per_1m_in"`
|
|
CostPer1MOut float64 `json:"cost_per_1m_out"`
|
|
CostPer1MInCached float64 `json:"cost_per_1m_in_cached"`
|
|
CostPer1MOutCached float64 `json:"cost_per_1m_out_cached"`
|
|
ContextWindow int64 `json:"context_window"`
|
|
DefaultMaxTokens int64 `json:"default_max_tokens"`
|
|
CanReason bool `json:"can_reason"`
|
|
}
|
|
|
|
// Model IDs
|
|
const ( // GEMINI
|
|
// Bedrock
|
|
BedrockClaude37Sonnet ModelID = "bedrock.claude-3.7-sonnet"
|
|
)
|
|
|
|
const (
|
|
ProviderBedrock ModelProvider = "bedrock"
|
|
// ForTests
|
|
ProviderMock ModelProvider = "__mock"
|
|
)
|
|
|
|
// Providers in order of popularity
|
|
var ProviderPopularity = map[ModelProvider]int{
|
|
ProviderAnthropic: 1,
|
|
ProviderOpenAI: 2,
|
|
ProviderGemini: 3,
|
|
ProviderGROQ: 4,
|
|
ProviderOpenRouter: 5,
|
|
ProviderBedrock: 6,
|
|
ProviderAzure: 7,
|
|
}
|
|
|
|
var SupportedModels = map[ModelID]Model{
|
|
//
|
|
// // GEMINI
|
|
// GEMINI25: {
|
|
// ID: GEMINI25,
|
|
// Name: "Gemini 2.5 Pro",
|
|
// Provider: ProviderGemini,
|
|
// APIModel: "gemini-2.5-pro-exp-03-25",
|
|
// CostPer1MIn: 0,
|
|
// CostPer1MInCached: 0,
|
|
// CostPer1MOutCached: 0,
|
|
// CostPer1MOut: 0,
|
|
// },
|
|
//
|
|
// GRMINI20Flash: {
|
|
// ID: GRMINI20Flash,
|
|
// Name: "Gemini 2.0 Flash",
|
|
// Provider: ProviderGemini,
|
|
// APIModel: "gemini-2.0-flash",
|
|
// CostPer1MIn: 0.1,
|
|
// CostPer1MInCached: 0,
|
|
// CostPer1MOutCached: 0.025,
|
|
// CostPer1MOut: 0.4,
|
|
// },
|
|
//
|
|
// // Bedrock
|
|
BedrockClaude37Sonnet: {
|
|
ID: BedrockClaude37Sonnet,
|
|
Name: "Bedrock: Claude 3.7 Sonnet",
|
|
Provider: ProviderBedrock,
|
|
APIModel: "anthropic.claude-3-7-sonnet-20250219-v1:0",
|
|
CostPer1MIn: 3.0,
|
|
CostPer1MInCached: 3.75,
|
|
CostPer1MOutCached: 0.30,
|
|
CostPer1MOut: 15.0,
|
|
ContextWindow: 200_000,
|
|
DefaultMaxTokens: 50_000,
|
|
CanReason: true,
|
|
},
|
|
}
|
|
|
|
func init() {
|
|
maps.Copy(SupportedModels, AnthropicModels)
|
|
maps.Copy(SupportedModels, OpenAIModels)
|
|
maps.Copy(SupportedModels, GeminiModels)
|
|
maps.Copy(SupportedModels, GroqModels)
|
|
maps.Copy(SupportedModels, AzureModels)
|
|
maps.Copy(SupportedModels, OpenRouterModels)
|
|
maps.Copy(SupportedModels, XAIModels)
|
|
}
|