feat(#875): LLM Router shadow mode + consolidate litellm master key
This commit is contained in:
1 parent
037c965c26
commit
180409d317
3 files changed
+390
-5
No files matched your search
@@ -193,6 +193,23 @@ from ..middleware.log_service import LogService
|
||||
|
||||
|
||||
from ..capability_registry import resolve_auto_model
|
||||
try:
|
||||
from ..core.llm_router import (
|
||||
resolve_api_key as _llm_resolve_api_key,
|
||||
route as _llm_route,
|
||||
set_route_ctx as _set_route_ctx,
|
||||
SHADOW as _LLM_ROUTER_SHADOW,
|
||||
)
|
||||
except Exception as _llm_router_err:
|
||||
import os as _os, logging as _logging
|
||||
_logging.getLogger(__name__).warning(f"[chat] llm_router import failed, router disabled: {_llm_router_err}")
|
||||
def _llm_resolve_api_key(api_url, model_api_key, provider_api_key):
|
||||
if api_url and "qihu-aiflow-litellm" in api_url:
|
||||
return _os.environ.get("LITELLM_MASTER_KEY") or "sk-litellm-master-key-aiflow-2026"
|
||||
return model_api_key or provider_api_key
|
||||
_llm_route = None
|
||||
_set_route_ctx = None
|
||||
_LLM_ROUTER_SHADOW = True
|
||||
|
||||
|
||||
|
||||
@@ -2820,6 +2837,16 @@ async def _send_message_core(
|
||||
|
||||
_try_models.extend([m for m in _fallbacks if m not in _try_models])
|
||||
|
||||
# ===== LLM Router(#875 影子模式)=====
|
||||
try:
|
||||
if _llm_route is not None:
|
||||
_set_route_ctx(tenant_id=getattr(current_user, "tenant_id", "") or "", claw_type="web")
|
||||
_rm = _llm_route("text", db=db, legacy_primary=_try_models[0].name if _try_models else None)
|
||||
if not _LLM_ROUTER_SHADOW and _rm.models:
|
||||
_try_models = _rm.models
|
||||
except Exception as _e:
|
||||
logger.warning(f"[chat] LLM Router 观测失败(降级忽略): {_e}")
|
||||
|
||||
_retry_log = []
|
||||
|
||||
_all_failed = False
|
||||
@@ -3082,8 +3109,8 @@ async def _send_message_core(
|
||||
|
||||
# 2026-07-29 fix: 调用 LiteLLM 端点时,必须用 master key (sk-litellm-...) 而非模型自身 key (tp-c...)
|
||||
# LiteLLM 内置每个 model 的真实 key 在 litellm_config.yaml,chat 不应直接传模型的 key
|
||||
api_key = _llm_resolve_api_key(api_url, api_key, provider.api_key if provider else None)
|
||||
if api_url and "qihu-aiflow-litellm" in api_url:
|
||||
api_key = os.environ.get("LITELLM_MASTER_KEY") or "sk-litellm-master-key-aiflow-2026"
|
||||
auth_header = None # 用默认 Authorization: Bearer
|
||||
logger.info("[chat] LiteLLM endpoint detected, using master key instead of model key")
|
||||
|
||||
|
||||
Reference in new issue
Block a user