fix(openrouter): align get_complete_url signature and eliminate basedpyright type errors

This commit is contained in:
yyouretoast 2026-10-16 17:49:55 +03:00
parent 9577025e35
commit 5bb33e6b8e
4 changed files with 47 additions and 30 deletions

View file

@ -61,15 +61,17 @@ class OpenrouterConfig(OpenAIGPTConfig):
api_base: str | None,
api_key: str | None,
model: str,
optional_params: Mapping[str, object] | None = None,
litellm_params: Mapping[str, object] | None = None,
optional_params: dict,
litellm_params: dict,
stream: bool | None = None,
) -> str:
casted_optional_params: Final[Mapping[str, object]] = cast(Mapping[str, object], optional_params)
casted_litellm_params: Final[Mapping[str, object]] = cast(Mapping[str, object], litellm_params)
resolved_base: Final = resolve_openrouter_api_base(
api_base=api_base,
region=self.region,
litellm_params=litellm_params,
optional_params=optional_params,
litellm_params=casted_litellm_params,
optional_params=casted_optional_params,
).rstrip("/")
endpoint: Final = "chat/completions"
if endpoint in resolved_base:

View file

@ -39,22 +39,21 @@ _OPENROUTER_REGIONAL_HOSTNAMES: Final[Mapping[str, str]] = MappingProxyType(
_DEFAULT_OPENROUTER_API_BASE: Final[str] = "https://openrouter.ai/api/v1"
def _extract_region_value(params: object) -> str | None:
if not isinstance(params, Mapping):
def _extract_region_value(params: Mapping[str, object] | None) -> str | None:
if params is None or not isinstance(params, Mapping):
return None
for key in ("region", "region_name", "data_residency"):
if key in params:
val: Final[object] = params[key]
if isinstance(val, str) and val.strip():
return val.strip()
val: Final[object] = params.get(key)
if isinstance(val, str) and val.strip():
return val.strip()
return None
def resolve_openrouter_api_base(
api_base: str | None = None,
region: str | None = None,
litellm_params: object = None,
optional_params: object = None,
litellm_params: Mapping[str, object] | None = None,
optional_params: Mapping[str, object] | None = None,
) -> str:
"""
Resolve the OpenRouter API base URL based on custom api_base, explicit region, or environment.

View file

@ -7,7 +7,8 @@ OpenRouter is OpenAI-compatible and supports embeddings via the /v1/embeddings e
Docs: https://openrouter.ai/docs
"""
from typing import TYPE_CHECKING, Any, Final
from collections.abc import Mapping
from typing import TYPE_CHECKING, Any, Final, cast
import httpx
@ -85,10 +86,12 @@ class OpenrouterEmbeddingConfig(BaseEmbeddingConfig):
"""
Get the complete URL for OpenRouter Embedding API endpoint.
"""
casted_optional_params: Final[Mapping[str, object]] = cast(Mapping[str, object], optional_params)
casted_litellm_params: Final[Mapping[str, object]] = cast(Mapping[str, object], litellm_params)
resolved_base: Final = resolve_openrouter_api_base(
api_base=api_base,
litellm_params=litellm_params,
optional_params=optional_params,
litellm_params=casted_litellm_params,
optional_params=casted_optional_params,
).rstrip("/")
# Return the embeddings endpoint

View file

@ -3415,20 +3415,24 @@ def _complete_openrouter(ctx: CompletionDispatchContext) -> _CompletionDispatchR
## Load Config
config: Final = litellm.OpenrouterConfig.get_config()
config_region: Final[str | None] = (
ctx.provider_config.region
if isinstance(ctx.provider_config, litellm.OpenrouterConfig) and isinstance(ctx.provider_config.region, str)
else (litellm.OpenrouterConfig.region if isinstance(litellm.OpenrouterConfig.region, str) else None)
casted_optional_params: Final[Mapping[str, object]] = cast(Mapping[str, object], optional_params)
raw_region: Final[object] = (
litellm_params.get("region")
or litellm_params.get("region_name")
or litellm_params.get("data_residency")
or casted_optional_params.get("region")
or casted_optional_params.get("region_name")
or casted_optional_params.get("data_residency")
or getattr(ctx.provider_config, "region", None)
or getattr(litellm.OpenrouterConfig, "region", None)
)
resolved_region: Final[str | None] = raw_region if isinstance(raw_region, str) else None
api_base = resolve_openrouter_api_base( # rebind-ok: regional endpoint resolution for openrouter
api_base=api_base,
region=config_region,
litellm_params=litellm_params,
optional_params=optional_params,
region=resolved_region,
)
if litellm_params is not None:
litellm_params["api_base"] = api_base
litellm_params["data_residency"] = infer_openrouter_data_residency("openrouter", api_base)
litellm_params["api_base"] = api_base
litellm_params["data_residency"] = infer_openrouter_data_residency("openrouter", api_base)
api_key = (
api_key
@ -6793,14 +6797,23 @@ def embedding(
headers=headers,
)
elif custom_llm_provider == "openrouter":
casted_optional_params: Final[Mapping[str, object]] = cast(Mapping[str, object], optional_params)
raw_region: Final[object] = (
litellm_params_dict.get("region")
or litellm_params_dict.get("region_name")
or litellm_params_dict.get("data_residency")
or casted_optional_params.get("region")
or casted_optional_params.get("region_name")
or casted_optional_params.get("data_residency")
or getattr(litellm.OpenrouterConfig, "region", None)
)
resolved_region: Final[str | None] = raw_region if isinstance(raw_region, str) else None
api_base = resolve_openrouter_api_base( # rebind-ok: regional endpoint resolution for openrouter
api_base=api_base,
litellm_params=litellm_params_dict,
optional_params=optional_params,
region=resolved_region,
)
if litellm_params_dict is not None:
litellm_params_dict["api_base"] = api_base
litellm_params_dict["data_residency"] = infer_openrouter_data_residency("openrouter", api_base)
litellm_params_dict["api_base"] = api_base
litellm_params_dict["data_residency"] = infer_openrouter_data_residency("openrouter", api_base)
api_key = (
api_key