diff --git a/PROJECT_MEMORY.md b/PROJECT_MEMORY.md index 20069cf..6b85195 100644 --- a/PROJECT_MEMORY.md +++ b/PROJECT_MEMORY.md @@ -110,7 +110,7 @@ - 系统内部模型 key 格式: - `{provider_name}/{model_name}` - 代理接口请求体中的 `model` 必须使用该格式 -- 转发给上游前,`ProxyService` 会把模型名裁剪成最后一段真实模型名 +- 转发给上游前,`ProxyService` 会只移除 `provider_name/` 前缀,保留真实模型名剩余部分原样不变 ## 模型探测链路 - `ProviderController.fetch_models()` diff --git a/src/services/proxy_service.py b/src/services/proxy_service.py index 007f14c..3812acd 100644 --- a/src/services/proxy_service.py +++ b/src/services/proxy_service.py @@ -52,7 +52,7 @@ class ProxyService: body = dict(request_data) body = provider.apply_input_body_hook(request_ctx, body) - body["model"] = model_name.rsplit("/", 1)[-1] + body["model"] = self._get_upstream_model_name(provider.name, model_name) return headers, body, request_ctx for attempt in range(max_retries): @@ -156,6 +156,13 @@ class ProxyService: retryable_status_codes = {408, 409, 425, 429, 500, 502, 503, 504} return status_code in retryable_status_codes + @staticmethod + def _get_upstream_model_name(provider_name: str, requested_model_name: str) -> str: + prefix = f"{provider_name}/" + if requested_model_name.startswith(prefix): + return requested_model_name[len(prefix):] + return requested_model_name + def _get_http_session(self) -> requests.Session: session = getattr(self._http_local, "session", None) if session is None: