alibaba/page-agent · error · InvokeError
SERVER_ERROR
SERVER_ERROR
Error message
Server error: ${errorMessage} What it means
The endpoint returned an HTTP 5xx status — a server-side failure at the provider (overload, upstream crash, gateway timeout). The response body's error message (or statusText) is included, and the parsed errorData is attached as details.
Solutions
- Retry with exponential backoff — 5xx is usually transient
- If using a local/self-hosted server, check its logs and memory (reduce context length or model size)
- Check the provider status page for ongoing incidents
- Inspect attached errorData for the provider's specific error message
Defensive patterns
Strategy: retry
Type guard
const isServerError = (e: unknown): e is InvokeError => e instanceof InvokeError && e.code === 'SERVER_ERROR'
Try / catch
try {
return await withRetry(() => client.invoke(req), { retries: 3, on: isServerError })
} catch (e) {
if (isServerError(e)) notifyOps(`Provider 5xx: ${e.message}`)
throw e
} Prevention
- Wrap invoke in exponential-backoff retry for 5xx only
- Monitor provider status pages for incidents
- For self-hosted servers, watch memory and set timeouts
When it happens
Trigger: invoke() receives 500/502/503/504 from the provider: OpenAI incident, overloaded local inference server, OOM'd llama.cpp process, reverse proxy (nginx) returning 502 because the backend crashed.
Common situations: Provider outage (check status page); local model server running out of memory or crashing mid-request; gateway/proxy misrouting; very large prompts causing the upstream to time out and return 504.
Related errors
AI-assisted analysis of alibaba/page-agent@d02db1ee7c (2026-08-28).
Data as JSON: /api/errors/dbec91bef806a583.
Report an issue: GitHub.
Appendix: source
Thrown at packages/llms/src/OpenAIClient.ts:116
}
const errorMessage = errorData?.error?.message || response.statusText
if (response.status === 401 || response.status === 403) {
throw new InvokeError(
InvokeErrorTypes.AUTH_ERROR,
`Authentication failed: ${errorMessage}`,
errorData
)
}
if (response.status === 429) {
throw new InvokeError(
InvokeErrorTypes.RATE_LIMIT,
`Rate limit exceeded: ${errorMessage}`,
errorData
)
}
if (response.status >= 500) {
throw new InvokeError(
InvokeErrorTypes.SERVER_ERROR,
`Server error: ${errorMessage}`,
errorData
)
}
throw new InvokeError(
InvokeErrorTypes.UNKNOWN,
`HTTP ${response.status}: ${errorMessage}`,
errorData
)
}
// 4. Parse and validate response
let data: any
try {
data = await response.json()
} catch (error) {
if ((error as any)?.name === 'AbortError') throw errorView on GitHub (pinned to d02db1ee7c)