mirror of
https://github.com/Alishahryar1/free-claude-code.git
synced 2026-07-03 14:05:26 +02:00
f5e49ea78d
## Summary Adds support for the **OpenCode Go** subscription gateway at `opencode.ai/zen/go/v1`, as requested in #504. OpenCode Go exposes the same OpenAI-compatible Chat Completions API as OpenCode Zen, so the implementation reuses `OpenCodeProvider` with a configurable `provider_name` parameter — avoiding code duplication. ### Changes - **Provider**: `OpenCodeProvider` now accepts `provider_name` (defaults to `"OPENCODE"` for backward compatibility) - **Catalog**: New `opencode_go` descriptor with correct base URL, credential, and capabilities - **Registry**: `_create_opencode_go` factory that passes `provider_name="OPENCODE_GO"` - **Settings**: `opencode_go_api_key` and `opencode_go_proxy` fields - **Admin UI**: OpenCode Go API key, proxy, and smoke model config fields - **API services**: `opencode_go` added to OpenAI Chat Completions upstream IDs - **Smoke config**: Default smoke model `opencode_go/gpt-5.3-codex` - **Tests**: New test for base URL, provider name, and API key; existing tests updated ## Test plan - [x] `test_opencode_go_provider_config_uses_correct_base_url_and_name` — passes - [x] `test_create_provider_instantiates_each_builtin` — covers opencode_go - [x] `test_provider_and_platform_registries_include_advertised_builtins` — covers opencode_go - [x] `uv run ruff format`, `ruff check`, `ty check`, `pytest` — pass locally on Python 3.14 Closes #504. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> Co-authored-by: Alishahryar1 <alishahryar2@gmail.com>
32 lines
1005 B
Python
32 lines
1005 B
Python
"""OpenCode Zen provider implementation (OpenAI-compatible Chat Completions)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from providers.base import ProviderConfig
|
|
from providers.defaults import OPENCODE_DEFAULT_BASE
|
|
from providers.openai_compat import OpenAIChatTransport
|
|
|
|
from .request import build_request_body
|
|
|
|
|
|
class OpenCodeProvider(OpenAIChatTransport):
|
|
"""OpenCode Zen provider using ``https://opencode.ai/zen/v1/chat/completions``."""
|
|
|
|
def __init__(self, config: ProviderConfig, provider_name: str = "OPENCODE"):
|
|
super().__init__(
|
|
config,
|
|
provider_name=provider_name,
|
|
base_url=config.base_url or OPENCODE_DEFAULT_BASE,
|
|
api_key=config.api_key,
|
|
)
|
|
|
|
def _build_request_body(
|
|
self, request: Any, thinking_enabled: bool | None = None
|
|
) -> dict:
|
|
return build_request_body(
|
|
request,
|
|
thinking_enabled=self._is_thinking_enabled(request, thinking_enabled),
|
|
)
|