← Về thư mục
📄 / / profiles / r-and-d / raw_evidence / OpenAI4S / openai4s / llm / providers / README_zh.md

LLM wire 适配器

English

四种 wire 协议放在这里,一种一个模块。每个模块把标准化的客户端请求翻译成自己那家供应商的 HTTP payload,再把该供应商的响应或流式事件翻译回引擎其余部分统一使用的 assistant-message 形状。

在架构中的位置

wire adapter 是 ../client.py 之下的叶子模块。endpoint 形状、header、stream event 和 usage 字段是它们该知道的;provider 注册、配置优先级、动作路由、权限检查和内核执行不是,这些都在本目录之上。

文件

文件 职责
__init__.py 把每个 wire 名字(openai、anthropic、gemini、responses)映射到对应的 adapter 函数。这张内部 dispatch 表就是本模块的全部内容。
anthropic.py Anthropic Messages 这条 wire。它把 system 消息提到顶层 system 字段,应用原生工具与 tool choice,再把返回的 content block 读成文本、标准化的工具调用和 usage。调用方传了 delta 回调时走流式,从事件序列里重建 content block;只有流在吐出第一个事件之前就失败,才退回阻塞式请求。不认识的 content block 原样透传,因为 wire_state 会被当作下一轮的 assistant 内容回放。
gemini.py 构造 Gemini generateContent 请求,映射 system 指令、历史消息和工具声明。返回后取第一个 candidate,从中解析出文本、function call 和 usage。
openai.py OpenAI-compatible Chat Completions 这条 wire。调用方传了 delta 回调时逐 token 流式输出。HTTP 200 流里携带的 error 事件只按一份精确的 provider 错误码允许名单判定——绝不看消息正文——并作为带 HTTP 等价状态码的类型化 TransportError 抛出,交给 transport 那套有界重试策略;任何重放之前,本次尝试尚未提交的状态都会先被丢弃。阻塞式回退是给根本不实现 SSE 的端点留的兼容路径,不是第二份重试预算:只有流在吐出第一个事件之前失败、且失败不是类型化的鉴权、容量或连接错误时才会走;已经吐过 token 之后再出错,一律直接抛出,不再重试。
responses.py OpenAI Responses 这条 wire,始终走 SSE。它负责 input 与工具的映射,从 output item 事件里拼出文本和 function call 参数;流在 response.completed 之前结束即视为失败。

适配器契约