DeepSeek Harness · run failure

dsh run failed: 502 “status code (no body)” from the provider

502 status code (no body)

The provider returned a server-side error with no body. The turn ended with `{"kind":"error","code":"SERVER"}`.

provider 返回了一个没有响应体的服务端错误。turn 以 `{"kind":"error","code":"SERVER"}` 结束。

Why it happens根因

Something failed upstream of your request — a gateway, an overloaded backend, or a transient routing fault. The empty body is itself the tell: the request never reached an application that could explain itself.

在你的请求的上游出了问题——网关、过载的后端,或一次临时的路由故障。空响应体本身就是线索:请求从未到达一个能解释自己的应用。

How to fix it怎么修

  1. Re-run the turn: a 5xx is upstream and usually clears on its own.
  2. If it persists, switch model from the composer and retry — that moves you to a different route.
  3. `npx dsh-why run --all` will tell you whether it is isolated or part of a wider event on the provider side.
  1. 重跑这个 turn:5xx 来自上游,通常会自行恢复。
  2. 如果持续,在 composer 里换个模型再试——这会把你换到另一条路由。
  3. `npx dsh-why run --all` 会告诉你它是孤立的,还是 provider 侧更大范围事件的一部分。

Is this my plugin’s fault?这是我的插件引起的吗?

No. The turn failed between dsh and the provider — before, or instead of, a model reply. Plugins run inside dsh; none of them sits on the path to the API host. A failed plugin shows up as a load error at startup, not as a provider rejection.

不是。这个 turn 是在 dsh 与 provider 之间失败的——发生在模型回复之前,或取代了模型回复。插件跑在 dsh 里面,没有任何一个位于通往 API 主机的链路上。插件坏了会表现为启动时的加载错误,而不是 provider 的拒绝。

Related failures相关失败

FAQ常见问题

Should I reinstall dsh or a plugin after a 502?

No. A 502 comes from the provider, and reinstalling local packages cannot change it. Check whether the failure is chronic on your machine before changing anything.

How is 502 different from the transport failure?

A transport failure never completes the HTTP exchange; a 502 completes it with an error status. The first is your network path, the second is upstream of the provider’s front door.

遇到 502 需要重装 dsh 或插件吗?

不需要。502 来自 provider,重装本地包改变不了它。在动手之前,先确认这个失败在你机器上是否属于长期问题。

502 和 transport 失败有什么区别?

transport 失败根本没完成 HTTP 交换;502 则完成了交换并带回一个错误状态码。前者是你的网络链路,后者在 provider 前门的上游。