mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-24 11:14:23 +01:00
feat: Add support for OpenRouter (#92)
* Add support for OpenRouter as a new model provider - Introduced `ProviderOpenRouter` in the `models` package. - Added OpenRouter-specific models, including `GPT41`, `GPT41Mini`, `GPT4o`, and others, with their configurations and costs. - Updated `generateSchema` to include OpenRouter as a provider. - Added OpenRouter-specific environment variable handling (`OPENROUTER_API_KEY`) in `config.go`. - Implemented default model settings for OpenRouter agents in `setDefaultModelForAgent`. - Updated `getProviderAPIKey` to retrieve the OpenRouter API key. - Extended `SupportedModels` to include OpenRouter models. - Added OpenRouter client initialization in the `provider` package. - Modified `processGeneration` to handle `FinishReasonUnknown` in addition to `FinishReasonToolUse`. * [feature/openrouter-provider] Add new models and provider to schema - Added "deepseek-chat-free" and "deepseek-r1-free" to the list of supported models in `opencode-schema.json`. * [feature/openrouter-provider] Add OpenRouter provider support and integrate new models - Updated README.md to include OpenRouter as a supported provider and its configuration details. - Added `OPENROUTER_API_KEY` to environment variable configuration. - Introduced OpenRouter-specific models in `internal/llm/models/openrouter.go` with mappings to existing cost and token configurations. - Updated `internal/config/config.go` to set default models for OpenRouter agents. - Extended `opencode-schema.json` to include OpenRouter models in the schema definitions. - Refactored model IDs and names to align with OpenRouter naming conventions. * [feature/openrouter-provider] Refactor finish reason handling and tool call logic in agent and OpenAI provider - Simplified finish reason check in `agent.go` by removing redundant variable assignment. - Updated `openai.go` to override the finish reason to `FinishReasonToolUse` when tool calls are present. - Ensured consistent finish reason handling in both `send` and `stream` methods of the OpenAI provider. [feature/openrouter-provider] Refactor finish reason handling and tool call logic in agent and OpenAI provider - Simplified finish reason check in `agent.go` by removing redundant variable assignment. - Updated `openai.go` to override the finish reason to `FinishReasonToolUse` when tool calls are present. - Ensured consistent finish reason handling in both `send` and `stream` methods of the OpenAI provider. * **[feature/openrouter-provider] Add support for custom headers in OpenAI client configuration** - Introduced a new `extraHeaders` field in the `openaiOptions` struct to allow specifying additional HTTP headers. - Added logic in `newOpenAIClient` to apply `extraHeaders` to the OpenAI client configuration. - Implemented a new option function `WithOpenAIExtraHeaders` to set custom headers in `openaiOptions`. - Updated the OpenRouter provider configuration in `NewProvider` to include default headers (`HTTP-Referer` and `X-Title`) for OpenRouter API requests. * Update OpenRouter model config and remove unsupported models * [feature/openrouter-provider] Update OpenRouter models and default configurations - Added new OpenRouter models: `claude-3.5-sonnet`, `claude-3-haiku`, `claude-3.7-sonnet`, `claude-3.5-haiku`, and `claude-3-opus` in `openrouter.go`. - Updated default agent models in `config.go`: - `agents.coder.model` now uses `claude-3.7-sonnet`. - `agents.task.model` now uses `claude-3.7-sonnet`. - `agents.title.model` now uses `claude-3.5-haiku`. - Updated `opencode-schema.json` to include the new models in the allowed list for schema validation. - Adjusted logic in `setDefaultModelForAgent` to reflect the new default models. * [feature/openrouter-provider] Remove unused ProviderEvent emission in stream function The changes remove the emission of a `ProviderEvent` with type `EventContentStop` in the `stream` function of the `openaiClient` implementation. This event was sent upon successful stream completion but is no longer used.
This commit is contained in:
@@ -49,23 +49,38 @@
|
||||
"gpt-4.1-mini",
|
||||
"azure.gpt-4.1-mini",
|
||||
"gemini-2.5",
|
||||
"meta-llama/llama-4-scout-17b-16e-instruct"
|
||||
"meta-llama/llama-4-scout-17b-16e-instruct",
|
||||
"openrouter.deepseek-chat-free",
|
||||
"openrouter.deepseek-r1-free",
|
||||
"openrouter.gpt-4.1",
|
||||
"openrouter.gpt-4.1-mini",
|
||||
"openrouter.gpt-4.1-nano",
|
||||
"openrouter.gpt-4.5-preview",
|
||||
"openrouter.gpt-4o",
|
||||
"openrouter.gpt-4o-mini",
|
||||
"openrouter.o1",
|
||||
"openrouter.o1-pro",
|
||||
"openrouter.o1-mini",
|
||||
"openrouter.o3",
|
||||
"openrouter.o3-mini",
|
||||
"openrouter.o4-mini",
|
||||
"openrouter.gemini-2.5-flash",
|
||||
"openrouter.gemini-2.5",
|
||||
"openrouter.claude-3.5-sonnet",
|
||||
"openrouter.claude-3-haiku",
|
||||
"openrouter.claude-3.7-sonnet",
|
||||
"openrouter.claude-3.5-haiku",
|
||||
"openrouter.claude-3-opus"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"reasoningEffort": {
|
||||
"description": "Reasoning effort for models that support it (OpenAI, Anthropic)",
|
||||
"enum": [
|
||||
"low",
|
||||
"medium",
|
||||
"high"
|
||||
],
|
||||
"enum": ["low", "medium", "high"],
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"model"
|
||||
],
|
||||
"required": ["model"],
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
@@ -120,23 +135,38 @@
|
||||
"gpt-4.1-mini",
|
||||
"azure.gpt-4.1-mini",
|
||||
"gemini-2.5",
|
||||
"meta-llama/llama-4-scout-17b-16e-instruct"
|
||||
"meta-llama/llama-4-scout-17b-16e-instruct",
|
||||
"openrouter.deepseek-chat-free",
|
||||
"openrouter.deepseek-r1-free",
|
||||
"openrouter.gpt-4.1",
|
||||
"openrouter.gpt-4.1-mini",
|
||||
"openrouter.gpt-4.1-nano",
|
||||
"openrouter.gpt-4.5-preview",
|
||||
"openrouter.gpt-4o",
|
||||
"openrouter.gpt-4o-mini",
|
||||
"openrouter.o1",
|
||||
"openrouter.o1-pro",
|
||||
"openrouter.o1-mini",
|
||||
"openrouter.o3",
|
||||
"openrouter.o3-mini",
|
||||
"openrouter.o4-mini",
|
||||
"openrouter.gemini-2.5-flash",
|
||||
"openrouter.gemini-2.5",
|
||||
"openrouter.claude-3.5-sonnet",
|
||||
"openrouter.claude-3-haiku",
|
||||
"openrouter.claude-3.7-sonnet",
|
||||
"openrouter.claude-3.5-haiku",
|
||||
"openrouter.claude-3-opus"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"reasoningEffort": {
|
||||
"description": "Reasoning effort for models that support it (OpenAI, Anthropic)",
|
||||
"enum": [
|
||||
"low",
|
||||
"medium",
|
||||
"high"
|
||||
],
|
||||
"enum": ["low", "medium", "high"],
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"model"
|
||||
],
|
||||
"required": ["model"],
|
||||
"type": "object"
|
||||
},
|
||||
"description": "Agent configurations",
|
||||
@@ -182,9 +212,7 @@
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"directory"
|
||||
],
|
||||
"required": ["directory"],
|
||||
"type": "object"
|
||||
},
|
||||
"debug": {
|
||||
@@ -222,9 +250,7 @@
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"command"
|
||||
],
|
||||
"required": ["command"],
|
||||
"type": "object"
|
||||
},
|
||||
"description": "Language Server Protocol configurations",
|
||||
@@ -262,10 +288,7 @@
|
||||
"type": {
|
||||
"default": "stdio",
|
||||
"description": "Type of MCP server",
|
||||
"enum": [
|
||||
"stdio",
|
||||
"sse"
|
||||
],
|
||||
"enum": ["stdio", "sse"],
|
||||
"type": "string"
|
||||
},
|
||||
"url": {
|
||||
@@ -273,9 +296,7 @@
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"command"
|
||||
],
|
||||
"required": ["command"],
|
||||
"type": "object"
|
||||
},
|
||||
"description": "Model Control Protocol server configurations",
|
||||
@@ -302,7 +323,8 @@
|
||||
"gemini",
|
||||
"groq",
|
||||
"bedrock",
|
||||
"azure"
|
||||
"azure",
|
||||
"openrouter"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user