Skip to main content
任何失败都返回一个带 detail 字段的 JSON,HTTP 状态码说明这是哪一类失败。
绝大多数情况下 detail 是字符串。请求体校验是例外:FastAPI 返回数组,每个被拒的字段一条。
要渲染错误的客户端两种都得处理。loc 是出问题字段的路径,用点连接起来即可;msg 是值得展示给人看的那句。

状态码

读懂一次被拒的提交

POST /api/jobs 在任何调度动作之前就会拒绝,detail 会点名是哪道闸拦下的。下面这几种值得认识:
提交里的 recipe.lock.json 和服务端 catalog 对不上——名字、版本、digest 或 framework.runtime_id 有差异。通常是平台发布了新的 recipe 版本,而你的实验还锁在旧版本上。sf recipe status <exp> 看差异,sf recipe upgrade <exp> 应用它。
申请的 GPU 数超过了账号能同时占用的上限。在队列里排队不是这个错误——排队的作业是已经被准入的。 这是在门口就被拒绝,只有管理员能改。
--image 指向的仓库主机不在部署允许的范围内。允许列表放在服务端是有意的:它是阻止提交去任意地方 拉代码执行的那道闸。
spec.source.entrypoint 非空。entrypoint 归 recipe 所有,作业不能替换它。 确实要跑自己的命令,用 custom/custom recipe。
打包器发现了 .env*.pemid_rsa* 之类,拒绝生成归档——这一步在你本机就失败了,请求根本没发出去。 密钥通过平台的注入通道进入作业,不走工作目录。
一部分老代码路径抛出的错误文案目前仍是中文,正在随着相关代码被修改而逐步改成英文。 遇到这种情况,报缺陷时引用状态码和接口路径更可靠。