feat(engine): #873 dual-Claw event contract + SseAdapter/BufferAdapter + chat.py SSE delegate + im_llm EngineCore thin-shell (gray-gated)
- app/core/engine_event.py (#880): EngineEvent dataclass + make_* factories, single construction entry, byte-compatible wire with legacy ChatPage.tsx - app/core/claw_adapters.py (#884): SseAdapter (hot frames zero-metadata, terminal keeps trace_id) + BufferAdapter (assemble() preserves __media__) - app/api/chat.py (#881): /messages/stream now delegates to SseAdapter; wire bytes unchanged (46B delta / done+message_id) - app/api/im_llm.py (#883): IM_USE_ENGINE_CORE gray gate; _call_engine_core reuses EngineCore via BufferAdapter (default OFF, preserves media fast-path) - app/api/chat_service.py: capture 3 container-ahead fixes (stray import asyncio removed, logger.info format, LiteLLM master key)
This commit is contained in:
1 parent
34648e4810
commit
037c965c26
5 files changed
+752
-21
No files matched your search
@@ -1619,7 +1619,6 @@ async def _send_message_core(
|
||||
_ct = completion_tokens if "completion_tokens" in dir() else 0
|
||||
_uid = user_id if "user_id" in dir() else "unknown"
|
||||
if _pt or _ct:
|
||||
import asyncio
|
||||
asyncio.create_task(_bill_tokens(
|
||||
_uid, _pt, _ct,
|
||||
ai_model if "ai_model" in dir() else "unknown",
|
||||
@@ -2899,7 +2898,7 @@ async def _send_message_core(
|
||||
# Defensive guard: 即使 model_id 指向 image/video 模型,若用户输入无媒体意图词,
|
||||
# 强制回退到 text 默认模型。修复 bug:普通多轮对话被误判走图片生成。
|
||||
if ai_model and ("image" in caps or "video" in caps) and not detect_media_intent(req.content):
|
||||
logger.info("[chat] Override media-cap model {} -> text (no media intent in: {:.50r})".format(ai_model.name, req.content))
|
||||
logger.info("[chat] Override media-cap model %s -> text (no media intent in: %.50s)", ai_model.name, req.content)
|
||||
ai_model = resolve_auto_model("text", db)
|
||||
caps = [c.lower() for c in (ai_model.capabilities or [])] if ai_model else []
|
||||
if ai_model and ("image" in caps or "video" in caps):
|
||||
@@ -3081,6 +3080,13 @@ async def _send_message_core(
|
||||
|
||||
api_url = ai_model.endpoint
|
||||
|
||||
# 2026-07-29 fix: 调用 LiteLLM 端点时,必须用 master key (sk-litellm-...) 而非模型自身 key (tp-c...)
|
||||
# LiteLLM 内置每个 model 的真实 key 在 litellm_config.yaml,chat 不应直接传模型的 key
|
||||
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