openai-core 0.1.1

Rust SDK for OpenAI-compatible ecosystem
Documentation
# openai-rs 实施总结

## 1. 文档目标

本文档总结 `specs/0001.md` 的最终落地结果,记录:

- 最终代码结构
- 已实现能力
-`openai-node` 的对齐策略
- 测试覆盖与验证结果
- 当前实现上的工程性取舍

## 2. 最终形态

`openai-rs` 最终实现为一个单 crate 的 Rust 2024 SDK,目标是覆盖 `openai-node` 当前公开的资源面与运行时能力,并兼顾 Rust 侧的可维护性。

工具链固定为:

- Rust stable `1.94.1`
- `rust-toolchain.toml` 固定版本
- 依赖统一升级到当前发布版本

核心目录:

```text
openai-rs/
├── Cargo.toml
├── README.md
├── specs/
│   ├── 0001.md
│   └── 0002.md
├── src/
│   ├── auth.rs
│   ├── client.rs
│   ├── config.rs
│   ├── error.rs
│   ├── files/
│   ├── helpers/
│   ├── pagination/
│   ├── providers/
│   ├── resource.rs
│   ├── resources/
│   ├── response_meta.rs
│   ├── stream/
│   ├── transport/
│   ├── webhooks/
│   └── websocket/
└── tests/
    ├── contract/
    ├── provider_live/
    └── websocket.rs
```

## 3. 已实现能力

### 3.1 Client 与基础设施

已经实现:

- `Client` / `ClientBuilder`
- `Client::with_options`
- 默认超时、默认重试、默认 header/query 合并
- 静态 API Key、同步动态 provider、异步动态 provider
- `ApiResponse<T>``ResponseMeta`
- 统一错误类型与错误映射

### 3.2 Provider 兼容层

已经实现的内置 Provider:

- OpenAI
- Azure OpenAI
- Zhipu
- MiniMax
- ZenMux
- Custom

Azure 侧已补齐的关键语义:

- `endpoint``base_url` 区分
- `/openai` 前缀自动补齐
- `api-version` 注入
- deployment 路径注入
- Realtime deployment query 注入
- `api-key` 认证
- Bearer Token / Azure AD Token 认证

兼容性规则:

- MiniMax strict 模式下:
  - `n != 1` 报错
  - `function_call` 报错
  - 图像/音频输入报错
- ZenMux strict 模式下:
  - `model` 必须为 `<provider>/<model_name>`

### 3.3 传输层

已经实现:

- `RequestSpec`
- JSON / Bytes / SSE 三种 HTTP 返回形态
- 重试、超时、取消令牌
- `429` / `5xx` 重试
- `retry-after` / `retry-after-ms`
- Provider 请求前校验与改写
- Multipart 展开与上传

### 3.4 流式与 WebSocket

SSE 已实现:

- `LineDecoder`
- `RawSseStream`
- `SseStream<T>`
- `ChatCompletionStream`
- `ResponseStream`

WebSocket 已实现:

- `RealtimeSocket`
- `ResponsesSocket`
- `SocketStreamMessage<T>`
- `SocketCloseOptions`
- 生命周期事件流:`Connecting` / `Open` / `Closing` / `Close`
- 服务端 JSON 事件解析
- 错误事件转 `WebSocketError`

### 3.5 Webhook、Structured Output 与 Tool Runner

已经实现:

- `WebhookVerifier::verify_signature`
- `WebhookVerifier::unwrap`
- `json_schema_for<T>()`
- `parse_json_payload<T>()`
- `chat.completions.parse::<T>()`
- `responses.parse::<T>()`
- `chat.completions.run_tools()`

工具运行器保留完整 assistant message 历史,不会只回填被抽取出的文本字段。

## 4. 资源面落地

### 4.1 顶层命名空间

`Client` 已暴露以下顶层命名空间:

- `completions`
- `chat`
- `embeddings`
- `files`
- `images`
- `audio`
- `moderations`
- `models`
- `fine_tuning`
- `graders`
- `vector_stores`
- `webhooks`
- `batches`
- `uploads`
- `responses`
- `realtime`
- `conversations`
- `evals`
- `containers`
- `skills`
- `videos`
- `beta`

### 4.2 实现策略

实现分为两层:

- 高频接口做强类型实现:
  - `chat.completions`
  - `chat.completions.stream`
  - `chat.completions.parse`
  - `chat.completions.run_tools`
  - `responses`
  - `responses.stream`
  - `responses.parse`
  - `models`
  - `files`
  - `uploads`
- 长尾接口用通用 builder 承载:
  - `JsonRequestBuilder<T>`
  - `BytesRequestBuilder`
  - `ListRequestBuilder<T>`

这样可以在不牺牲功能面的前提下控制样板代码规模。

## 5. 测试与验证

当前测试覆盖分为三层:

### 5.1 单元测试

已经覆盖:

- Provider 默认地址与 Azure 规则
- MiniMax / ZenMux strict 校验
- SSE 行解码
- Multipart 展开
- Webhook 验签
- WebSocket URL 构造与错误事件解析

### 5.2 合约测试

已经覆盖:

- Client 默认 header/query 合并
- OpenAI 聊天补全请求
- Structured Output
- Responses 创建与解析
- 分页翻页
- Azure endpoint / deployment / auth 语义

### 5.3 WebSocket 集成测试

已经覆盖:

- Realtime 握手 URL
- Responses 握手 URL
- OpenAI Bearer 鉴权
- Azure `api-key` 鉴权
- Azure Realtime deployment query
- 事件发送与接收

### 5.4 实际验证结果

已验证通过:

- `cargo build`
- `cargo test`
- `cargo +nightly fmt`
- `cargo clippy --all-targets --all-features -- -D warnings`

测试现状:

- 单元测试:20 个
- 集成测试:18 个
  - `tests/contract.rs` 15 个
  - `tests/websocket.rs` 3 个
- live smoke tests:3 个,默认 `#[ignore]`
- doctest:9 个,示例默认 `ignore`

## 6. 工程取舍

最终实现没有把所有长尾资源都拆成超细粒度文件或超重强类型,而是采用:

- 统一 provider/transport/request builder 抽象
- 高频路径强类型
- 长尾路径通用 builder

这是一个刻意选择:

- 可以覆盖完整功能面
- 可以保持代码体量可维护
- 可以先把运行时能力补齐,再逐步增强个别资源的人体工学

## 7. 最终结论

`specs/0001.md` 中规划的核心能力已经全部落地,包括此前未完成的:

- Azure 完整鉴权与 deployment 语义
- Realtime WebSocket
- Responses WebSocket
- 对应测试补齐

当前仓库已经从“第一阶段可用 SDK”收敛为“功能面完整、测试通过、可持续迭代”的 Rust SDK 基线版本。