Sluiceline

Mock 行为

各平台在 mock 模式下返回的响应,以及强制触发失败的方式。

Mock 响应镜像各供应商的真实协议,因此解析、流式与错误处理都能端到端跑通, 且不接触供应商、不消耗配额。

各平台响应

平台非流式流式
OpenAI、DeepSeekchat.completion 响应体chat.completion.chunk SSE 事件,以 data: [DONE] 结束
Claude/v1/messages 响应体具名 SSE 事件:message_start、content_block_start、content_block_delta、content_block_stop、message_delta、message_stop
fal.ai(同步){ images: [{ url }] } 或 { video: { url } }SSE 进度事件,最后给出信封
fal.ai(队列)提交、状态、结果与取消,返回的 URL 会改写回 /falqueue 前缀状态流;状态依次为 IN_QUEUE → IN_PROGRESS → COMPLETED
ByteDance SeedancePOST /contents/generations/tasks 返回 id,轮询依次为 queued → running → succeeded,结果在 content.video_url不支持

响应内容

返回的文本取自创建密钥时配置的 mock 内容。请求体从不回显。

来源行为
custom原样返回配置的文本
random按配置的 token 数量生成随机文本
asset返回已上传的图片或视频:本网关 origin 上的绝对 URL(https://<网关>/api/mock-asset/<key>),与各厂商返回自家存储绝对 URL 的形状一致

响应里的 model 就是你请求里写的那个,mock 不猜也不替换模型名(含尚未发布的型号)。 缺 model 的请求按该厂商的错误信封以 400 拒绝 —— 与真实 API 一致,不会回一个占位名。

媒体类型

请求路径媒体类型
/chat/completions文本
/images/generations图片
其它路径密钥自身的媒体类型

Mock 时延

流式与任务类响应会加入延时,以贴近真实行为:

阶段时长
文本:首 token350 ms
文本:token 间隔18 ms
fal 队列与方舟任务:排队800 ms
fal 队列与方舟任务:执行2 000 ms

强制触发失败

请求头取值效果
x-mock-error100–599返回该状态码,响应体为平台自身的错误信封
x-mock-drop1中途掐断流,且不发送结束事件
x-mock-drop0从不掐断

未携带 x-mock-drop 时,流会在中途被掐断,因此重连逻辑默认就会被打到:文本流按 6% 的概率 截断 token 序列;按进度上报的媒体流则在每个进度步各自掷一次(整体概率与之接近)。

强制报错,或中途掐断流
curl https://sluiceline.com/openai/chat/completions \
  -H "Authorization: Bearer $SLUICELINE_MOCK_KEY" \
  -H "x-mock-error: 429" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-6-astra","messages":[{"role":"user","content":"hi"}]}'