背景
#332 的接缝已由 #561 落地:JobProtocol 与 OpenAI 面实现在 providers/protocol/。本 issue 承接第二步,只新增 Fal 队列面的协议实现与脱网单测,不接线、不换主力模型。
问题
veo / seedance / vidu 与 kling 的多数型号只在队列面,/v1/videos 的 model 枚举里没有它们。而队列面与 OpenAI 面有三处形态不同,没有一处能靠拼字符串推出来:
- 鉴权头是
Authorization: Key,不是 Bearer
- 首帧字段名按型号族不同:
fal-ai/kling-video/o1 是 start_image_url,seedance / veo / vidu 是 image_url
- 轮询与取结果的地址不是提交路径加
/requests,而是取提交端点的前两段
另有两处只能靠实测发现的行为:/status 对成功与失败都返回 COMPLETED,成败只在取结果那一步显形;取结果时的 HTTP 400 可能表示「还没好」而非请求错。
范围
providers/protocol/fal_queue.py:FalQueueVideoProtocol,端点 → 首帧字段名走显式表,不按字符串猜
JobProtocol 补 parse_fetch:原五函数接口没有解析取结果响应的位置,而这一面的成败恰在那一步
- 脱网单测,用实测响应体当 fixture
不包含
验收
- 鉴权头、queue 前缀、两种首帧字段名、轮询前缀规则各有用例
- 「
COMPLETED 但取结果 500」判失败、「取结果 400 且体内 IN_PROGRESS」判未就绪,各有用例
- 同一个
VideoRequest 分别过两个协议,AdapterResult 字段集一致
ruff check .、lint-imports、pytest -q、export_openapi 后 openapi.json 无漂移
Refs #332
背景
#332 的接缝已由 #561 落地:
JobProtocol与 OpenAI 面实现在providers/protocol/。本 issue 承接第二步,只新增 Fal 队列面的协议实现与脱网单测,不接线、不换主力模型。问题
veo / seedance / vidu 与 kling 的多数型号只在队列面,
/v1/videos的 model 枚举里没有它们。而队列面与 OpenAI 面有三处形态不同,没有一处能靠拼字符串推出来:Authorization: Key,不是Bearerfal-ai/kling-video/o1是start_image_url,seedance / veo / vidu 是image_url/requests,而是取提交端点的前两段另有两处只能靠实测发现的行为:
/status对成功与失败都返回COMPLETED,成败只在取结果那一步显形;取结果时的 HTTP 400 可能表示「还没好」而非请求错。范围
providers/protocol/fal_queue.py:FalQueueVideoProtocol,端点 → 首帧字段名走显式表,不按字符串猜JobProtocol补parse_fetch:原五函数接口没有解析取结果响应的位置,而这一面的成败恰在那一步不包含
ALLOWED_VIDEO_MODELS、不换主力模型、不改时长策略(Proposal: 接入 Fal 队列协议面,并把协议表达为显式接缝 #332 第三步)验收
COMPLETED但取结果 500」判失败、「取结果 400 且体内IN_PROGRESS」判未就绪,各有用例VideoRequest分别过两个协议,AdapterResult字段集一致ruff check .、lint-imports、pytest -q、export_openapi后openapi.json无漂移Refs #332