feat: support SDK#122
Conversation
|
很不错的重构,可以邮箱联系我下 给你提供账号 yuanhe@minimaxi.com |
raylanlin
left a comment
There was a problem hiding this comment.
测试报告
测试环境:Bun 1.3.11 / WSL2
✅ 通过项
| 检查项 | 结果 |
|---|---|
| 单元测试(137 个) | ✅ 全部通过 |
| 构建(build) | ✅ CLI 133KB + SDK 77KB |
| 真实 API 冒烟 | ✅ quota / text / search 正常 |
| 架构设计 | ✅ Client 基类 + 8 模块结构清晰,流式覆盖到位 |
🔴 阻塞项(合并前需修复)
- ESLint 报错 —
src/sdk/client.ts:2:18导入了Region但未使用,CI lint 会挂 - TypeScript 报错 —
src/types/api.ts中SpeechRequest.voice_setting标记为 required,但 SDK 内部有默认值填充,类型应改为 optional。导致tsc --noEmit和test/sdk/speech.test.ts类型不匹配 - Merge Conflict — 当前和 main 有冲突,git 层面无法直接合并
💡 建议项
- 风格一致性 —
src/sdk/video/index.ts:58的download方法用了new Error(...),其他模块统一用SDKError,建议统一
📝 作者已知问题
PR 描述里提到的三个设计层面问题(参数校验共享、安装体积、视频模块未实测)属于后续迭代方向,本次不作阻塞。
结论
架构和测试覆盖都不错,修掉上述 1+2 两项 CI 问题 + 解 conflict 后即可合并。
raylanlin
left a comment
There was a problem hiding this comment.
全模块真实 API 测试报告(补充)
补充测了 SDK 全部 8 个模块的真实 API 调用,结果如下:
| 模块 | 测试 | 结果 |
|---|---|---|
| quota | info() | ✅ 11 models |
| text | chat + chat(stream) | ✅ 均正常 |
| search | query() | ✅ 7 results |
| vision | describe() | ✅ 正常返回描述 |
| image | generate() | ✅ 正常返回图片 URL( |
| speech | synthesize() + voices() | ✅ 均正常,332 个音色 |
| video | generate(async) | ✅ 正常返回 task_id |
| music | generate(stream) / generate(sync) | ✅ 流式/同步均可,但音乐生成耗时 >2min(API 特性,非 bug) |
额外发现
- image.generate 缺少客户端校验 — SDK 未对 width/height 做范围校验(API 要求 512-2048),传入 256 直接被 API 拒绝。建议在 SDK 层加参数校验,提前报给用户。
综上,阻塞项仍是之前提到的 1+2(lint + tsc),建议作者一并修掉。
|
@raylanlin 感谢 review,已按反馈和自测做了处理,详情如下: 已处理项
关于
|
全功能冒烟测试通过,可以合并测试结果构建:✅ CLI 133KB + SDK 115KB,构建正常 Lint: TypeCheck:✅ 单元测试:✅ 137/137 全部通过 全模块真实 API 冒烟:✅ 10/10 通过
之前 report 的 4 项阻塞/建议已全部修掉,SDK 架构清晰、测试覆盖到位,没有新引入的阻塞问题。🚀 |
|
Extract SDK usage docs from README.md/README_CN.md into a dedicated SDK.md (English only) to keep the main README focused on CLI usage.

关联issue #83
1. PR简介
MiniMaxSDK主类,提供文本、图像、视频、语音、音乐、搜索、视觉、配额 8 大功能模块Client基类,封装配置加载和 HTTP 请求逻辑2. 可视化架构图
SDK 整体架构
graph TD subgraph "SDK 入口层" A["MiniMaxSDK<br/>src/sdk/index.ts"] end subgraph "核心基础设施" B["Client<br/>src/sdk/client.ts"] C["MiniMaxSDKOptions<br/>src/sdk/types.ts"] end subgraph "AI 能力模块" D["TextSDK<br/>文本对话"] E["SpeechSDK<br/>语音合成"] F["ImageSDK<br/>图像生成"] G["VideoSDK<br/>视频生成"] H["MusicSDK<br/>音乐生成"] I["SearchSDK<br/>网络搜索"] J["VisionSDK<br/>图像理解"] K["QuotaSDK<br/>配额查询"] end subgraph "底层服务" L["loadConfig<br/>配置加载"] M["request/requestJson<br/>HTTP 客户端"] N["parseSSE<br/>流式解析"] O["poll<br/>任务轮询"] end A -->|继承| B A -->|使用| C B -->|调用| L B -->|调用| M B -->|调用| N B -->|调用| O A -->|聚合| D A -->|聚合| E A -->|聚合| F A -->|聚合| G A -->|聚合| H A -->|聚合| I A -->|聚合| J A -->|聚合| K D -->|继承| B E -->|继承| B F -->|继承| B G -->|继承| B H -->|继承| B I -->|继承| B J -->|继承| B K -->|继承| B style A fill:#bbdefb,color:#0d47a1 style B fill:#c8e6c9,color:#1a5e20 style D fill:#fff3e0,color:#e65100 style E fill:#fff3e0,color:#e65100 style F fill:#fff3e0,color:#e65100 style G fill:#fff3e0,color:#e65100 style H fill:#fff3e0,color:#e65100 style I fill:#fff3e0,color:#e65100 style J fill:#fff3e0,color:#e65100 style K fill:#fff3e0,color:#e651003. 详细变更分析
3.1 核心基础设施
Client 基类 (
src/sdk/client.ts)MiniMaxSDKOptions,调用loadConfig加载配置request()方法处理流式请求requestJson<T>()方法处理 JSON 响应类型定义 (
src/sdk/types.ts)ModelPartial<T>- 可选化model字段的工具类型主 SDK 类 (
src/sdk/index.ts)MiniMaxSDK主入口类Client基类readonly属性3.2 构建配置
构建脚本 (
build.ts)src/main.tsdist/mmx.mjssrc/sdk/index.tsdist/sdk.mjs.d.tsbun-plugin-dts- 生成 TypeScript 类型声明文件包配置 (
package.json)filesdist/mmx.mjsdist/mmx.mjs,dist/sdk.mjs,dist/index.d.tsexports./sdk路径导出dependencies——bun-plugin-dts,es-toolkit3.3 文档更新
README.md & README_CN.md
3.4 测试覆盖
新增测试文件
test/sdk/text.test.tstest/sdk/speech.test.tstest/sdk/music.test.tstest/sdk/video.test.tstest/sdk/image.test.tstest/sdk/vision.test.tstest/sdk/search.test.tstest/sdk/quota.test.tscreateMockServer创建模拟服务器4. 影响与风险评估
✅ 兼容性
exports字段支持import { MiniMaxSDK } from 'mmx-cli/sdk'🧪 测试建议
📦 依赖项变更
bun-plugin-dts^0.4.0es-toolkit^1.46.1toMerged)5. 使用示例
快速开始
6. 总结
7. 问题&解决方向
参数校验
defineCommand内部,迁移成本较高,因此本次实现的参数校验功能并未与 CLI 复用。这会增加后续的维护负担。分包
问题:为遵循最小改动原则,仓库未进行 monorepo 改造。当前 SDK 通过
import { MiniMaxSDK } from 'mmx-cli/sdk'的方式引用,导致安装时附带了 CLI 相关功能,引入了非必要的依赖,增加了安装体积。当前构建产物大小如下:dist/mmx.mjsdist/sdk.mjsdist/index.d.ts方案(建议):monorepo 改造,抽离核心公共代码为
mmx,分别对外提供能力的代码采用mmx-sdk,mmx-cli,mmx-mcp,架构如下(改动较大)视频生成SDK