summaryrefslogtreecommitdiffhomepage
path: root/internal/llm/models
diff options
context:
space:
mode:
authorKujtim Hoxha <[email protected]>2025-04-18 20:17:38 +0200
committerKujtim Hoxha <[email protected]>2025-04-21 13:42:27 +0200
commit333ea6ec4b2abfc2c1a9c3f6b0918ca5d296347f (patch)
treee0d456417368e8716c81ee43b82be3d6ed39c59e /internal/llm/models
parent05d0e86f10369fd0e51a924ac88029fb92591499 (diff)
downloadopencode-333ea6ec4b2abfc2c1a9c3f6b0918ca5d296347f.tar.gz
opencode-333ea6ec4b2abfc2c1a9c3f6b0918ca5d296347f.zip
implement patch, update ui, improve rendering
Diffstat (limited to 'internal/llm/models')
-rw-r--r--internal/llm/models/anthropic.go6
-rw-r--r--internal/llm/models/models.go64
-rw-r--r--internal/llm/models/openai.go169
3 files changed, 179 insertions, 60 deletions
diff --git a/internal/llm/models/anthropic.go b/internal/llm/models/anthropic.go
index 48307e6d3..87e9b4c89 100644
--- a/internal/llm/models/anthropic.go
+++ b/internal/llm/models/anthropic.go
@@ -23,6 +23,7 @@ var AnthropicModels = map[ModelID]Model{
CostPer1MOutCached: 0.30,
CostPer1MOut: 15.0,
ContextWindow: 200000,
+ DefaultMaxTokens: 5000,
},
Claude3Haiku: {
ID: Claude3Haiku,
@@ -34,6 +35,7 @@ var AnthropicModels = map[ModelID]Model{
CostPer1MOutCached: 0.03,
CostPer1MOut: 1.25,
ContextWindow: 200000,
+ DefaultMaxTokens: 5000,
},
Claude37Sonnet: {
ID: Claude37Sonnet,
@@ -45,6 +47,8 @@ var AnthropicModels = map[ModelID]Model{
CostPer1MOutCached: 0.30,
CostPer1MOut: 15.0,
ContextWindow: 200000,
+ DefaultMaxTokens: 50000,
+ CanReason: true,
},
Claude35Haiku: {
ID: Claude35Haiku,
@@ -56,6 +60,7 @@ var AnthropicModels = map[ModelID]Model{
CostPer1MOutCached: 0.08,
CostPer1MOut: 4.0,
ContextWindow: 200000,
+ DefaultMaxTokens: 4096,
},
Claude3Opus: {
ID: Claude3Opus,
@@ -67,5 +72,6 @@ var AnthropicModels = map[ModelID]Model{
CostPer1MOutCached: 1.50,
CostPer1MOut: 75.0,
ContextWindow: 200000,
+ DefaultMaxTokens: 4096,
},
}
diff --git a/internal/llm/models/models.go b/internal/llm/models/models.go
index 4d4589bfd..bbce6130e 100644
--- a/internal/llm/models/models.go
+++ b/internal/llm/models/models.go
@@ -17,15 +17,12 @@ type Model struct {
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 (
- // OpenAI
- GPT4o ModelID = "gpt-4o"
- GPT41 ModelID = "gpt-4.1"
-
- // GEMINI
+const ( // GEMINI
GEMINI25 ModelID = "gemini-2.5"
GRMINI20Flash ModelID = "gemini-2.0-flash"
@@ -37,7 +34,6 @@ const (
)
const (
- ProviderOpenAI ModelProvider = "openai"
ProviderBedrock ModelProvider = "bedrock"
ProviderGemini ModelProvider = "gemini"
ProviderGROQ ModelProvider = "groq"
@@ -47,59 +43,6 @@ const (
)
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,
- // },
- //
- // // OpenAI
- GPT4o: {
- ID: GPT4o,
- Name: "GPT-4o",
- Provider: ProviderOpenAI,
- APIModel: "gpt-4.1",
- CostPer1MIn: 2.00,
- CostPer1MInCached: 0.50,
- CostPer1MOutCached: 0,
- CostPer1MOut: 8.00,
- },
- GPT41: {
- ID: GPT41,
- Name: "GPT-4.1",
- Provider: ProviderOpenAI,
- APIModel: "gpt-4.1",
- CostPer1MIn: 2.00,
- CostPer1MInCached: 0.50,
- CostPer1MOutCached: 0,
- CostPer1MOut: 8.00,
- },
//
// // GEMINI
// GEMINI25: {
@@ -151,4 +94,5 @@ var SupportedModels = map[ModelID]Model{
func init() {
maps.Copy(SupportedModels, AnthropicModels)
+ maps.Copy(SupportedModels, OpenAIModels)
}
diff --git a/internal/llm/models/openai.go b/internal/llm/models/openai.go
new file mode 100644
index 000000000..f0cbb298c
--- /dev/null
+++ b/internal/llm/models/openai.go
@@ -0,0 +1,169 @@
+package models
+
+const (
+ ProviderOpenAI ModelProvider = "openai"
+
+ GPT41 ModelID = "gpt-4.1"
+ GPT41Mini ModelID = "gpt-4.1-mini"
+ GPT41Nano ModelID = "gpt-4.1-nano"
+ GPT45Preview ModelID = "gpt-4.5-preview"
+ GPT4o ModelID = "gpt-4o"
+ GPT4oMini ModelID = "gpt-4o-mini"
+ O1 ModelID = "o1"
+ O1Pro ModelID = "o1-pro"
+ O1Mini ModelID = "o1-mini"
+ O3 ModelID = "o3"
+ O3Mini ModelID = "o3-mini"
+ O4Mini ModelID = "o4-mini"
+)
+
+var OpenAIModels = map[ModelID]Model{
+ GPT41: {
+ ID: GPT41,
+ Name: "GPT 4.1",
+ Provider: ProviderOpenAI,
+ APIModel: "gpt-4.1",
+ CostPer1MIn: 2.00,
+ CostPer1MInCached: 0.50,
+ CostPer1MOutCached: 0.0,
+ CostPer1MOut: 8.00,
+ ContextWindow: 1_047_576,
+ DefaultMaxTokens: 20000,
+ },
+ GPT41Mini: {
+ ID: GPT41Mini,
+ Name: "GPT 4.1 mini",
+ Provider: ProviderOpenAI,
+ APIModel: "gpt-4.1",
+ CostPer1MIn: 0.40,
+ CostPer1MInCached: 0.10,
+ CostPer1MOutCached: 0.0,
+ CostPer1MOut: 1.60,
+ ContextWindow: 200_000,
+ DefaultMaxTokens: 20000,
+ },
+ GPT41Nano: {
+ ID: GPT41Nano,
+ Name: "GPT 4.1 nano",
+ Provider: ProviderOpenAI,
+ APIModel: "gpt-4.1-nano",
+ CostPer1MIn: 0.10,
+ CostPer1MInCached: 0.025,
+ CostPer1MOutCached: 0.0,
+ CostPer1MOut: 0.40,
+ ContextWindow: 1_047_576,
+ DefaultMaxTokens: 20000,
+ },
+ GPT45Preview: {
+ ID: GPT45Preview,
+ Name: "GPT 4.5 preview",
+ Provider: ProviderOpenAI,
+ APIModel: "gpt-4.5-preview",
+ CostPer1MIn: 75.00,
+ CostPer1MInCached: 37.50,
+ CostPer1MOutCached: 0.0,
+ CostPer1MOut: 150.00,
+ ContextWindow: 128_000,
+ DefaultMaxTokens: 15000,
+ },
+ GPT4o: {
+ ID: GPT4o,
+ Name: "GPT 4o",
+ Provider: ProviderOpenAI,
+ APIModel: "gpt-4o",
+ CostPer1MIn: 2.50,
+ CostPer1MInCached: 1.25,
+ CostPer1MOutCached: 0.0,
+ CostPer1MOut: 10.00,
+ ContextWindow: 128_000,
+ DefaultMaxTokens: 4096,
+ },
+ GPT4oMini: {
+ ID: GPT4oMini,
+ Name: "GPT 4o mini",
+ Provider: ProviderOpenAI,
+ APIModel: "gpt-4o-mini",
+ CostPer1MIn: 0.15,
+ CostPer1MInCached: 0.075,
+ CostPer1MOutCached: 0.0,
+ CostPer1MOut: 0.60,
+ ContextWindow: 128_000,
+ },
+ O1: {
+ ID: O1,
+ Name: "O1",
+ Provider: ProviderOpenAI,
+ APIModel: "o1",
+ CostPer1MIn: 15.00,
+ CostPer1MInCached: 7.50,
+ CostPer1MOutCached: 0.0,
+ CostPer1MOut: 60.00,
+ ContextWindow: 200_000,
+ DefaultMaxTokens: 50000,
+ CanReason: true,
+ },
+ O1Pro: {
+ ID: O1Pro,
+ Name: "o1 pro",
+ Provider: ProviderOpenAI,
+ APIModel: "o1-pro",
+ CostPer1MIn: 150.00,
+ CostPer1MInCached: 0.0,
+ CostPer1MOutCached: 0.0,
+ CostPer1MOut: 600.00,
+ ContextWindow: 200_000,
+ DefaultMaxTokens: 50000,
+ CanReason: true,
+ },
+ O1Mini: {
+ ID: O1Mini,
+ Name: "o1 mini",
+ Provider: ProviderOpenAI,
+ APIModel: "o1-mini",
+ CostPer1MIn: 1.10,
+ CostPer1MInCached: 0.55,
+ CostPer1MOutCached: 0.0,
+ CostPer1MOut: 4.40,
+ ContextWindow: 128_000,
+ DefaultMaxTokens: 50000,
+ CanReason: true,
+ },
+ O3: {
+ ID: O3,
+ Name: "o3",
+ Provider: ProviderOpenAI,
+ APIModel: "o3",
+ CostPer1MIn: 10.00,
+ CostPer1MInCached: 2.50,
+ CostPer1MOutCached: 0.0,
+ CostPer1MOut: 40.00,
+ ContextWindow: 200_000,
+ CanReason: true,
+ },
+ O3Mini: {
+ ID: O3Mini,
+ Name: "o3 mini",
+ Provider: ProviderOpenAI,
+ APIModel: "o3-mini",
+ CostPer1MIn: 1.10,
+ CostPer1MInCached: 0.55,
+ CostPer1MOutCached: 0.0,
+ CostPer1MOut: 4.40,
+ ContextWindow: 200_000,
+ DefaultMaxTokens: 50000,
+ CanReason: true,
+ },
+ O4Mini: {
+ ID: O4Mini,
+ Name: "o4 mini",
+ Provider: ProviderOpenAI,
+ APIModel: "o4-mini",
+ CostPer1MIn: 1.10,
+ CostPer1MInCached: 0.275,
+ CostPer1MOutCached: 0.0,
+ CostPer1MOut: 4.40,
+ ContextWindow: 128_000,
+ DefaultMaxTokens: 50000,
+ CanReason: true,
+ },
+}