TypeScript API 参考
TypeScript API 参考
必填配置
本页所有 TypeScript 示例都使用应用启动时已校验的 API Key:
导入
JoyTokenClient
模型调用、模型元数据和价格接口必须配置 apiKey。缺少 Key 时,SDK 会在发送请求前直接抛出明确错误。models.list() 是唯一无需鉴权的目录方法。
同一个 JoyTokenClient 无需全局协议开关,即可使用 Chat Completions、Responses 和 Anthropic 兼容 Messages。Chat 与 Responses 使用 Gateway 原生 OpenAI 入口;Messages 由 SDK 本地转换并通过 Chat Completions 发送。
兼容接口方法
OpenAI
Anthropic
使用 JOY_TOKEN_OPENAI_BASE_URL 配置 openAIBaseUrl。
chat.completions.create
调用 POST /openai/v1/chat/completions,返回非流式 Chat Completions 响应。
chat.completions.stream
调用同一接口,使用 SSE 读取流式 chunks。
responses.create
调用 POST /openai/v1/responses,返回非流式 Responses 响应。input 支持字符串或 message input items。
responses.stream
读取 Responses SSE 事件,包括 response.output_text.delta 和 response.completed。
images.generate
调用 POST /openai/v1/images/generations。model 和 prompt 为必填字段。图片生成仅支持非流式响应:images.generate 会在完整 JSON 响应返回后完成,不会返回 AsyncIterable 或 SSE 事件。不要传 stream: true。生成结果位于 data,如有 JoyToken 路由和计费信息则位于 metadata。
images.edit
调用 POST /openai/v1/images/edits。prompt 和 image 为必填字段,model 必须为 "auto"。image 接受单个 http(s) URL 或 base64 data URI,也可传入数组以同时编辑多张图片。图片编辑仅支持非流式响应:images.edit 会在完整 JSON 响应返回后完成,不会返回 AsyncIterable 或 SSE 事件。不要传 stream: true。输出默认为 b64_json,仅当需要托管 URL 时才设置 response_format: "url"。编辑结果位于 data,如有 JoyToken 路由和计费信息则位于 metadata。
Tools 工具参考
Client 工具选项
工具执行方法
原语 create 和 stream 不会执行请求级或 Client 注册工具。仅当不存在任何用户工具来源时,create() 才可能自动执行 SDK 默认工具闭环。
chat.completions
responses
Responses 方法发送原生扁平工具声明,并接收原生 output item 与 SSE 事件。
Response.output_text 是所有 output_text 内容的拼接。工具循环追加 function_call_output 输入项。Hosted tools 保持原生 Responses 形状。
messages
Messages 方法对外暴露 Anthropic 兼容输入、输出、tool_use 内容块与流式事件,内部请求 Gateway Chat Completions。
Anthropic tool_choice 映射如下:
工具类型与辅助函数
defineTool() 原样返回传入工具并保留泛型输入/输出类型。Tool 包含 name、可选 description、JSON Schema parameters,以及可选 execute(input, context) handler。
ToolCall.extra_content?: Record<string, unknown> 保存不透明的厂商扩展数据。SDK 会在非流式和流式 Chat 续轮、Responses function_call item、Messages tool_use block 以及工具 handler 上下文中保留该字段。Gemini thought_signature 只是其中一个示例;类型和透传逻辑不绑定任何厂商。
应用自行实现工具循环时,必须复用完整返回的 ToolCall、Responses function_call 或 Messages tool_use item,不能只用 id、name 和 arguments 重建。
显式执行器收到没有匹配注册 handler 的工具调用时,会生成结构化 tool_handler_not_found 工具结果;绝不会回退到 SDK 同名默认实现。
工具优先级
Responses hosted file_search 必须包含非空 vector_store_ids,SDK 不会自动创建 ID。本地 function file_search 使用 { type: "function", name: "file_search", ... },两者属于不同工具。
models.list
调用无需鉴权的 GET /api/v1/models 接口。需要英文描述时传 { locale: "en" };不传 locale 时接口默认返回英文描述。SDK 保留 HTTP 响应层级,目录项位于 models.data.models。
models.meta
携带已配置的 API Key 调用 GET /api/v1/models/meta,返回档位、SKU、能力标签、行业包、提供商和目录更新时间。
pricing.retrieve
携带已配置的 API Key 调用 GET /api/v1/pricing,返回面向客户的档位兑换价格元数据。
编排(Orchestration)
当网关为 model: "auto" 的一轮请求规划并执行多个子任务时,SDK 会聚合结果,而不是暴露原始 JSON 负载。
非流式 create() 仍在 choices[0].message.content 中返回最终答案文本,拆解则挂在 orchestration 上。流式 chunk 包含中间子任务文本,因此请按 chunk.orchestration?.task_id === ORCHESTRATION_FINAL_TASK_ID 过滤以只渲染最终回复,或使用 runStream——其 onTextDelta 已只发出最终答案文本。
JoyTokenAPIError
编排执行失败时,可能返回 HTTP 200 但 body 或 SSE 流中携带错误信封({ "error": { ... }, "choices": [] })。SDK 会在非流式和流式的 Chat 路径上都检测该信封,并抛出同样的 JoyTokenAPIError,网关错误对象通过 body 暴露。
