Skip to content

异步任务

图片和视频都可以使用统一任务查询接口,但提交入口不同:图片仍从 POST /v1/images/generationsPOST /v1/images/edits 提交,并在 JSON(或 multipart 表单)中设置 async: true;视频继续从 POST /v1/videos 提交。客户端应保存 SourcesData 的 task_xxx,轮询任务并按媒体类型从本站代理下载结果。

状态机

mermaid
flowchart LR
  A["提交请求"] --> B["queued"]
  B --> C["in_progress"]
  C --> D["completed"]
  B --> E["failed"]
  C --> E

公开状态固定为 queuedin_progresscompletedfailed,其中终态为 completedfailed。供应商状态会在服务端归一化,客户端不应依赖其他历史状态名。

轮询规则

  1. 从提交响应的 idtask_id 提取任务 ID。
  2. 请求 GET /v1/videos/{task_id}
  3. 服务端返回 Retry-After 时优先使用该秒数;否则等待 4 秒。
  4. 图片成功后下载任务响应中的本站 urldata[].url;视频成功后请求 /v1/videos/{task_id}/content
  5. 失败时记录 SourcesData 请求 ID和标准错误码,不记录完整提示词或资源 URL。

不要每秒高频轮询。客户端整体等待时间应根据模型最长时长设置,网络超时与任务超时要分开处理。

可执行 Bash 示例

异步图片任务(图片接口 + async: true):

bash
./examples/bash/async-media.sh \
  image gpt-image-2 \
  'A clean studio photograph of a glass perfume bottle' \
  output.png 1024x1024

异步视频任务:

bash
./examples/bash/async-media.sh \
  video seedance-2.0-fast \
  'A paper boat drifting through a rain puddle' \
  output.mp4 4 1280x720

同步图片请求:

bash
./examples/bash/generate-image.sh \
  gpt-image-2 \
  'A clean studio photograph of a glass perfume bottle' \
  output.png

脚本只读取:

bash
export SOURCESDATA_BASE_URL='<YOUR_SOURCESDATA_BASE_URL>'
export SOURCESDATA_API_KEY='<YOUR_SOURCESDATA_API_KEY>'

视频断点下载

内容接口支持 RangeHEAD。中断后可使用 curl --continue-at - 续传:

bash
curl --fail-with-body --location --continue-at - \
  "$SOURCESDATA_BASE_URL/v1/videos/$TASK_ID/content" \
  -H "Authorization: Bearer $SOURCESDATA_API_KEY" \
  --output output.mp4

Sources Dance · Gateway v0.1.1-private.15