coleam00/Archon · error · Error
Node '${node.id}': timed out (no output for ${String(effecti
Error message
Node '${node.id}': timed out (no output for ${String(effectiveIdleTimeout / 60000)} min) before producing the required structured output. What it means
When a node declares output_format and the turn ends via idle timeout (no output for effectiveIdleTimeout minutes) before any structured output was produced, the executor throws this dedicated timeout error rather than the generic 'no schema-valid structured output' message, so the real cause (a timeout/abort) is not misreported as the model replying with prose.
Source
Thrown at packages/workflows/src/dag-executor.ts:3069
}
throw new Error(
`Node '${node.id}': output_format declared but the provider's structured output failed schema validation: ${validation.errors.join('; ')}`
);
}
// No structured output at all (prose / refusal / parse miss / timeout).
getLog().warn(
{ nodeId: node.id, workflowRunId: workflowRun.id },
'dag.structured_output_missing'
);
if (canReask) {
await scheduleReask(['no JSON object was found in the response']);
continue;
}
// Surface the real cause: a timeout/abort produces no structured output too,
// and reporting it as "the model replied with prose" would mislead.
if (nodeIdleTimedOut) {
throw new Error(
`Node '${node.id}': timed out (no output for ${String(effectiveIdleTimeout / 60000)} min) before producing the required structured output.`
);
}
throw new Error(
`Node '${node.id}': output_format declared but the provider returned no schema-valid structured output. ` +
'The model likely replied with prose, refused, or emitted unparseable JSON.'
);
}
// Only post "completed via idle timeout" when output exists — zero-output timeout falls through to the empty-output guard below.
if (nodeIdleTimedOut && (nodeOutputText.trim() !== '' || structuredOutput !== undefined)) {
getLog().warn(
{ nodeId: node.id, timeoutMs: effectiveIdleTimeout },
'dag_node_completed_via_idle_timeout'
);
await safeSendMessage(
platform,
conversationId,View on GitHub (pinned to 0773b97458)
Solutions
- Increase the node's idle timeout so long generations are not cut off.
- Check provider status/network — a stalled stream is often environmental.
- Reduce output size or use a faster model so generation fits the idle window.
- Add retry so a timed-out attempt is retried instead of failing the run.
Example fix
// before node: idle_timeout_ms: 60000 // after node: idle_timeout_ms: 600000
Defensive patterns
Strategy: retry
Validate before calling
// ensure idle timeout is generous relative to expected generation time
if (node.idle_timeout_ms !== undefined && node.idle_timeout_ms < 120000) console.warn('idle_timeout_ms < 2min may cut off slow generations'); Try / catch
try {
await runNode(node);
} catch (e) {
if (String(e).includes('timed out (no output')) await retryWithBackoff(() => runNode(node), { attempts: 2 });
else throw e;
} Prevention
- Set idle timeouts well above worst-case generation latency.
- Check network stability and provider status for stalled streams.
- Configure retry policy on structured-output nodes.
When it happens
Trigger: The node's idle-timeout fired (no streaming output for effectiveIdleTimeout/60000 minutes) while output_format was declared and no valid structured output had arrived yet.
Common situations: Model hung or provider stalled mid-generation; extremely long generation exceeding the idle window; network stall; idle timeout configured too aggressively for a slow model or big output.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
- OpenAI token ${operation} request timed out.
- Container overlay did not become ready.${logs ? ` Container
- Node '${node.id}': failed to serialize structured_output to
- Node '${node.id}': output_format declared but the provider's
- Node '${node.id}': output_format declared but the provider r
AI-assisted analysis of coleam00/Archon@0773b97458 (2026-09-01).
Data as JSON: /api/errors/ba44b3bd8c7e04e1.
Report an issue: GitHub.