bytedance/deer-flow · error
Failed to load features: ${res.statusText}
Error message
Failed to load features: ${res.statusText} What it means
Raised when timeout_seconds is not finite (NaN/inf) or is <= 0. The value feeds the HTTP client's per-request timeout; non-positive or non-finite values would either be rejected by the HTTP layer or disable timeouts entirely, so config validation rejects them up front.
Source
Thrown at frontend/src/core/features/api.ts:12
import { fetch } from "@/core/api/fetcher";
import { getBackendBaseURL } from "@/core/config";
export interface FeaturesResponse {
agents_api: { enabled: boolean };
browser_control?: { enabled: boolean };
}
export async function fetchFeatures(): Promise<FeaturesResponse> {
const res = await fetch(`${getBackendBaseURL()}/api/features`);
if (!res.ok) {
throw new Error(`Failed to load features: ${res.statusText}`);
}
return (await res.json()) as FeaturesResponse;
}
export async function fetchAgentsApiEnabled(): Promise<boolean> {
return (await fetchFeatures()).agents_api.enabled;
}
export async function fetchBrowserControlEnabled(): Promise<boolean> {
return (await fetchFeatures()).browser_control?.enabled ?? false;
}
View on GitHub (pinned to 1dd6ba1acb)
Solutions
- Set a sane positive finite timeout, e.g. timeout_seconds: 30 (the default).
- Make templating fail when the value is unset instead of emitting nan/inf.
- For slow servers raise it moderately (60-120) rather than trying to disable it.
Example fix
# before backend_config: timeout_seconds: 0 # or .nan # after backend_config: timeout_seconds: 30
Defensive patterns
Strategy: validation
Validate before calling
from math import isfinite
def check_timeout(value: float) -> None:
assert isfinite(value) and value > 0, 'timeout_seconds must be finite and > 0' Prevention
- Use explicit numeric literals (30, 60) in config; avoid templated math that can produce inf or nan.
- Never use 0 to mean 'no timeout'; pick a generous finite value instead.
- Lint config for non-finite numerics before deploy.
When it happens
Trigger: Setting timeout_seconds: 0 or a negative number, or a templated value that expands to .nan/.inf in YAML. int()/float() coercion of malformed values also lands here. Validation runs during _validate.
Common situations: Templated YAML expanding to .nan; setting 0 to mean 'no timeout'; huge values overflowing to inf; template leaving the value unset and a placeholder string failing coercion.
Related errors
- backend_unreachable
- request_failed
- Unable to recover SSE history after ${recoveryAttempts} atte
- Failed to submit feedback: ${res.status}
- Failed to delete feedback: ${res.status}
AI-assisted analysis of bytedance/deer-flow@1dd6ba1acb (2026-08-14).
Data as JSON: /api/errors/b51605a0de8c88df.
Report an issue: GitHub.