dheraingoud's picture
feat: sync upstream commits up to f17c92bc
a1bab2d
Raw
History Blame Contribute Delete
2 kB
"""OpenRouter provider implementation."""
from free_claude_code.application.model_metadata import ProviderModelInfo
from free_claude_code.config.constants import ANTHROPIC_DEFAULT_MAX_OUTPUT_TOKENS
from free_claude_code.core.anthropic import ReasoningReplayMode
from free_claude_code.core.reasoning import ReasoningEffort
from free_claude_code.providers.admission import ProviderAdmissionController
from free_claude_code.providers.base import ProviderConfig
from free_claude_code.providers.model_listing import extract_tool_capable_model_infos
from free_claude_code.providers.openai_chat import (
OpenAIChatProfile,
OpenAIChatProvider,
OpenAIChatRequestPolicy,
ReasoningObject,
apply_reasoning_details_replay,
validate_extra_body_does_not_override_canonical_fields,
)
_REQUEST_POLICY = OpenAIChatRequestPolicy(
provider_name="OPENROUTER",
reasoning_replay=ReasoningReplayMode.REASONING_CONTENT,
include_extra_body=True,
extra_body_validator=validate_extra_body_does_not_override_canonical_fields,
default_max_tokens=ANTHROPIC_DEFAULT_MAX_OUTPUT_TOKENS,
)
class OpenRouterProvider(OpenAIChatProvider):
"""OpenRouter provider using the OpenAI-compatible Chat Completions API."""
def __init__(
self, config: ProviderConfig, *, admission: ProviderAdmissionController
):
super().__init__(
config,
profile=_PROFILE,
admission=admission,
)
async def list_model_infos(self) -> frozenset[ProviderModelInfo]:
"""Advertise OpenRouter tool models with reasoning capability metadata."""
payload = await self._list_models_payload()
return extract_tool_capable_model_infos(
payload, provider_name=self._provider_name
)
_PROFILE = OpenAIChatProfile(
_REQUEST_POLICY,
ReasoningObject(tuple((effort, effort.value) for effort in ReasoningEffort)),
postprocessors=(apply_reasoning_details_replay,),
structured_reasoning_details=True,
)