summaryrefslogtreecommitdiffhomepage
path: root/internal/llm/models
diff options
context:
space:
mode:
authorKujtim Hoxha <[email protected]>2025-04-16 20:06:23 +0200
committerKujtim Hoxha <[email protected]>2025-04-21 13:42:00 +0200
commitbbfa60c787f2ec459f1689b9a650ddbec9693ed9 (patch)
treef7f2aa31c460c8cc22ec40cc299c386277152241 /internal/llm/models
parent76b4065f17b87a63092acfd98c997bab53700b35 (diff)
downloadopencode-bbfa60c787f2ec459f1689b9a650ddbec9693ed9.tar.gz
opencode-bbfa60c787f2ec459f1689b9a650ddbec9693ed9.zip
reimplement agent,provider and add file history
Diffstat (limited to 'internal/llm/models')
-rw-r--r--internal/llm/models/anthropic.go71
-rw-r--r--internal/llm/models/models.go190
2 files changed, 174 insertions, 87 deletions
diff --git a/internal/llm/models/anthropic.go b/internal/llm/models/anthropic.go
new file mode 100644
index 000000000..48307e6d3
--- /dev/null
+++ b/internal/llm/models/anthropic.go
@@ -0,0 +1,71 @@
+package models
+
+const (
+ ProviderAnthropic ModelProvider = "anthropic"
+
+ // Models
+ Claude35Sonnet ModelID = "claude-3.5-sonnet"
+ Claude3Haiku ModelID = "claude-3-haiku"
+ Claude37Sonnet ModelID = "claude-3.7-sonnet"
+ Claude35Haiku ModelID = "claude-3.5-haiku"
+ Claude3Opus ModelID = "claude-3-opus"
+)
+
+var AnthropicModels = map[ModelID]Model{
+ // Anthropic
+ Claude35Sonnet: {
+ ID: Claude35Sonnet,
+ Name: "Claude 3.5 Sonnet",
+ Provider: ProviderAnthropic,
+ APIModel: "claude-3-5-sonnet-latest",
+ CostPer1MIn: 3.0,
+ CostPer1MInCached: 3.75,
+ CostPer1MOutCached: 0.30,
+ CostPer1MOut: 15.0,
+ ContextWindow: 200000,
+ },
+ Claude3Haiku: {
+ ID: Claude3Haiku,
+ Name: "Claude 3 Haiku",
+ Provider: ProviderAnthropic,
+ APIModel: "claude-3-haiku-latest",
+ CostPer1MIn: 0.25,
+ CostPer1MInCached: 0.30,
+ CostPer1MOutCached: 0.03,
+ CostPer1MOut: 1.25,
+ ContextWindow: 200000,
+ },
+ Claude37Sonnet: {
+ ID: Claude37Sonnet,
+ Name: "Claude 3.7 Sonnet",
+ Provider: ProviderAnthropic,
+ APIModel: "claude-3-7-sonnet-latest",
+ CostPer1MIn: 3.0,
+ CostPer1MInCached: 3.75,
+ CostPer1MOutCached: 0.30,
+ CostPer1MOut: 15.0,
+ ContextWindow: 200000,
+ },
+ Claude35Haiku: {
+ ID: Claude35Haiku,
+ Name: "Claude 3.5 Haiku",
+ Provider: ProviderAnthropic,
+ APIModel: "claude-3-5-haiku-latest",
+ CostPer1MIn: 0.80,
+ CostPer1MInCached: 1.0,
+ CostPer1MOutCached: 0.08,
+ CostPer1MOut: 4.0,
+ ContextWindow: 200000,
+ },
+ Claude3Opus: {
+ ID: Claude3Opus,
+ Name: "Claude 3 Opus",
+ Provider: ProviderAnthropic,
+ APIModel: "claude-3-opus-latest",
+ CostPer1MIn: 15.0,
+ CostPer1MInCached: 18.75,
+ CostPer1MOutCached: 1.50,
+ CostPer1MOut: 75.0,
+ ContextWindow: 200000,
+ },
+}
diff --git a/internal/llm/models/models.go b/internal/llm/models/models.go
index 140693237..4d4589bfd 100644
--- a/internal/llm/models/models.go
+++ b/internal/llm/models/models.go
@@ -1,5 +1,7 @@
package models
+import "maps"
+
type (
ModelID string
ModelProvider string
@@ -14,15 +16,13 @@ type Model struct {
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"`
}
// Model IDs
const (
- // Anthropic
- Claude35Sonnet ModelID = "claude-3.5-sonnet"
- Claude3Haiku ModelID = "claude-3-haiku"
- Claude37Sonnet ModelID = "claude-3.7-sonnet"
// OpenAI
+ GPT4o ModelID = "gpt-4o"
GPT41 ModelID = "gpt-4.1"
// GEMINI
@@ -37,47 +37,59 @@ const (
)
const (
- ProviderOpenAI ModelProvider = "openai"
- ProviderAnthropic ModelProvider = "anthropic"
- ProviderBedrock ModelProvider = "bedrock"
- ProviderGemini ModelProvider = "gemini"
- ProviderGROQ ModelProvider = "groq"
+ ProviderOpenAI ModelProvider = "openai"
+ ProviderBedrock ModelProvider = "bedrock"
+ ProviderGemini ModelProvider = "gemini"
+ ProviderGROQ ModelProvider = "groq"
+
+ // ForTests
+ ProviderMock ModelProvider = "__mock"
)
var SupportedModels = map[ModelID]Model{
- // Anthropic
- Claude35Sonnet: {
- ID: Claude35Sonnet,
- Name: "Claude 3.5 Sonnet",
- Provider: ProviderAnthropic,
- APIModel: "claude-3-5-sonnet-latest",
- CostPer1MIn: 3.0,
- CostPer1MInCached: 3.75,
- CostPer1MOutCached: 0.30,
- CostPer1MOut: 15.0,
- },
- Claude3Haiku: {
- ID: Claude3Haiku,
- Name: "Claude 3 Haiku",
- Provider: ProviderAnthropic,
- APIModel: "claude-3-haiku-latest",
- CostPer1MIn: 0.80,
- CostPer1MInCached: 1,
- CostPer1MOutCached: 0.08,
- CostPer1MOut: 4,
- },
- Claude37Sonnet: {
- ID: Claude37Sonnet,
- Name: "Claude 3.7 Sonnet",
- Provider: ProviderAnthropic,
- APIModel: "claude-3-7-sonnet-latest",
- CostPer1MIn: 3.0,
- CostPer1MInCached: 3.75,
- CostPer1MOutCached: 0.30,
- CostPer1MOut: 15.0,
+ // // Anthropic
+ // Claude35Sonnet: {
+ // ID: Claude35Sonnet,
+ // Name: "Claude 3.5 Sonnet",
+ // Provider: ProviderAnthropic,
+ // APIModel: "claude-3-5-sonnet-latest",
+ // CostPer1MIn: 3.0,
+ // CostPer1MInCached: 3.75,
+ // CostPer1MOutCached: 0.30,
+ // CostPer1MOut: 15.0,
+ // },
+ // Claude3Haiku: {
+ // ID: Claude3Haiku,
+ // Name: "Claude 3 Haiku",
+ // Provider: ProviderAnthropic,
+ // APIModel: "claude-3-haiku-latest",
+ // CostPer1MIn: 0.80,
+ // CostPer1MInCached: 1,
+ // CostPer1MOutCached: 0.08,
+ // CostPer1MOut: 4,
+ // },
+ // Claude37Sonnet: {
+ // ID: Claude37Sonnet,
+ // Name: "Claude 3.7 Sonnet",
+ // Provider: ProviderAnthropic,
+ // APIModel: "claude-3-7-sonnet-latest",
+ // CostPer1MIn: 3.0,
+ // CostPer1MInCached: 3.75,
+ // CostPer1MOutCached: 0.30,
+ // CostPer1MOut: 15.0,
+ // },
+ //
+ // // OpenAI
+ GPT4o: {
+ ID: GPT4o,
+ Name: "GPT-4o",
+ Provider: ProviderOpenAI,
+ APIModel: "gpt-4.1",
+ CostPer1MIn: 2.00,
+ CostPer1MInCached: 0.50,
+ CostPer1MOutCached: 0,
+ CostPer1MOut: 8.00,
},
-
- // OpenAI
GPT41: {
ID: GPT41,
Name: "GPT-4.1",
@@ -88,51 +100,55 @@ var SupportedModels = map[ModelID]Model{
CostPer1MOutCached: 0,
CostPer1MOut: 8.00,
},
+ //
+ // // 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,
+ // },
+ //
+ // // GROQ
+ // QWENQwq: {
+ // ID: QWENQwq,
+ // Name: "Qwen Qwq",
+ // Provider: ProviderGROQ,
+ // APIModel: "qwen-qwq-32b",
+ // CostPer1MIn: 0,
+ // CostPer1MInCached: 0,
+ // CostPer1MOutCached: 0,
+ // CostPer1MOut: 0,
+ // },
+ //
+ // // 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,
+ // },
+}
- // 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,
- },
-
- // GROQ
- QWENQwq: {
- ID: QWENQwq,
- Name: "Qwen Qwq",
- Provider: ProviderGROQ,
- APIModel: "qwen-qwq-32b",
- CostPer1MIn: 0,
- CostPer1MInCached: 0,
- CostPer1MOutCached: 0,
- CostPer1MOut: 0,
- },
-
- // 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,
- },
+func init() {
+ maps.Copy(SupportedModels, AnthropicModels)
}