feat(inference): LLM 客户端全异步化(T8 架构审查整改)
- Issue9: client.py 由同步 httpx.Client 全异步化 - LLMClient Protocol / HttpLLMClient.chat → async;httpx.AsyncClient + asyncio.sleep 退避 - __enter__/__exit__ → __aenter__/__aexit__(async with 生命周期闭环) - engine.py chat/chat_structured/_call 全部 async + await - FakeLLMClient.chat → async;测试用 anyio pytest 插件转换(engine 32 + client 10 用例) - 同步 inference-engine spec 与 milestone3 review 的 httpx 描述 - 全量 182 passed / 100.00%(987 stmts/252 br)
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
|
||||
## 3. 关键设计决策
|
||||
|
||||
1. **httpx 选型**:`httpx.Client(timeout=..., transport=...)` 支持 transport 注入(MockTransport 离线测试);5xx/网络错误指数退避重试(1s/3s/7s),超时→LLMTimeoutError,4xx 不重试→LLMNetworkError,2xx 结构损坏→LLMResponseError,3xx 不误判成功。
|
||||
1. **httpx 选型**:`httpx.AsyncClient(timeout=..., transport=...)` 支持 transport 注入(MockTransport 离线测试);5xx/网络错误指数退避重试(1s/3s/7s),超时→LLMTimeoutError,4xx 不重试→LLMNetworkError,2xx 结构损坏→LLMResponseError,3xx 不误判成功。(T8 整改后为异步 AsyncClient + asyncio.sleep 退避 + async with 生命周期)
|
||||
2. **结构化重试语义**:`chat_structured` 对 JSON 解析失败带错误信息重试(retry_count+1),重试成功仍为 `status="ok"`(fallback 语义保留给模型降级);最终失败返回 `parse_error` + raw_text,不抛异常(spec §3.4 验收 3)。
|
||||
3. **异常折叠边界**:`chat` 失败降级备用模型(status=fallback),双模型全败 status=failed;仅折叠 LLMError,非 LLM 异常照常冒出。
|
||||
4. **显式延后(非目标)**:
|
||||
|
||||
Reference in New Issue
Block a user