siyuan-note/siyuan · error
model request timeout
Error message
model request timeout
What it means
errModelRequestTimeout is a sentinel error indicating the HTTP request to the model provider exceeded the configured request timeout. createStreamWithRetry maps a timer expiration onto this sentinel (optionally overriding the transport error) and classifyRetry labels it "timeout" so the retry logic can back off and retry.
Source
Thrown at kernel/agent/agent.go:2444
}
e := SessionEntry{
ID: id,
Type: "assistant",
Content: m.Content,
ReasoningCont: m.ReasoningContent,
ResponseOutput: util.CloneOpenAIResponseOutput(m.ResponseOutput),
ResponseOutputTokens: m.ResponseOutputTokens,
RoundID: m.RoundID,
ToolCalls: m.ToolCalls,
}
entries = append(entries, e)
}
}
return entries
}
var (
errModelRequestTimeout = errors.New("model request timeout")
errModelStreamIdleTimeout = errors.New("model stream idle timeout")
)
func createStreamWithRetry(ctx context.Context, client *openai.Client, req openai.ChatCompletionRequest, maxRetries int,
requestTimeout, streamIdleTimeout time.Duration, retryDelay func(string, int) time.Duration,
ch chan<- AgentEvent) (*util.OpenAICompletionStream, openai.ChatCompletionStreamResponse, context.CancelFunc, error) {
return createProtocolStreamWithRetry(ctx, client, util.OpenAIProtocolChatCompletions, req, nil, maxRetries,
requestTimeout, streamIdleTimeout, retryDelay, ch)
}
func createProtocolStreamWithRetry(ctx context.Context, client *openai.Client, protocol string,
req openai.ChatCompletionRequest, responseInput []any, maxRetries int, requestTimeout, streamIdleTimeout time.Duration,
retryDelay func(string, int) time.Duration,
ch chan<- AgentEvent) (*util.OpenAICompletionStream, openai.ChatCompletionStreamResponse, context.CancelFunc, error) {
if maxRetries < 0 {
maxRetries = 0
}
View on GitHub (pinned to 8641553a1f)
Solutions
- Increase the model request timeout configuration
- Check provider status/network connectivity and proxy settings
- Retry — the built-in retry loop already classifies this as retryable ("timeout")
- Reduce prompt size so the request completes within the timeout
- Verify maxRetries is not 0 if automatic retries are desired
Defensive patterns
Strategy: retry
Try / catch
if errors.Is(err, errModelRequestTimeout) {
// back off and retry; also consider raising the request timeout
} Prevention
- Set requestTimeout generously relative to prompt size
- Keep maxRetries > 0 so timeout classification triggers automatic retries
- Monitor provider status pages and configure sane retry delays
When it happens
Trigger: In createStreamWithRetry/createProtocolStreamWithRetry, the per-request context timer fires before the stream is established (requestTimedOut is true), so err is replaced with errModelRequestTimeout; also returned by createResponseCompaction and covered by TestCreateStreamRequestTimeoutAndZeroRetries.
Common situations: Slow or overloaded model provider endpoints; requestTimeout configured too aggressively low; network latency/proxy delays; very large prompts taking longer than the timeout to be accepted.
Understand the failure class
Background: Request timed out: what client-side request timeouts mean across libraries (Request timed out, TIMED_OUT, APITimeoutError) — this error's family across 39 libraries.
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
- model stream idle timeout
- read body failed: %s
- host has no public IP:
- compaction summary request failed: %w
- compaction summary stream failed: %w
AI-assisted analysis of siyuan-note/siyuan@8641553a1f (2026-09-11).
Data as JSON: /api/errors/e704236803979d36.
Report an issue: GitHub.