Skip to content

Queued Ollama chat jobs stop failing at 300 s; one job at a time (0.1.88) - #134

Merged
sh1pt-actions-fleet[bot] merged 1 commit into
masterfrom
fix/ollama-queue-timeout
Nov 2, 2026
Merged

sh1pt-actions-fleet[bot] merged 1 commit into
masterfrom
fix/ollama-queue-timeout

Conversation

@sh1pt-actions-fleet

Copy link
Copy Markdown
Contributor

Why

Provider cullen@cullen3:b4ba4a16 (GTX 745 4 GB, 2 cores, ~0.7 tok/s) failed 51 of 56 jobs on 2026-11-02, almost all with a bare fetch failed at 302-345 s after assignment (queued jobs in one batch failed at 1125/1426/1727 s, exactly 300 s apart).

What

  • Ollama backend streams /api/chat over node:http (no headers/body timeout). Job expiry and cancel still apply.
  • Daemon runs at most INFERNET_MAX_CONCURRENT_JOBS chat jobs (default 1); the rest stay assigned and run when a slot frees.
  • CLI 0.1.88.

Tests

tests/ollama-http-fetch.test.js runs a fake Ollama with a delayed first byte, abort while queued, and cancel. Full suite: 972 passed.

🤖 Generated with Claude Code

….88)

Slow single-GPU providers failed almost every chat job with a bare
"fetch failed" at ~300 s (cullen3, GTX 745: 47 of 49 qwen3:4b jobs on
2026-11-02). Two causes:

- The poll loop fires every 15 s whether or not the last batch finished,
  so a node ran several chat jobs at once against one Ollama, which serves
  one request at a time. The rest waited in its queue.
- Ollama sends response headers with the first token, and Node's global
  fetch (undici) gives up after 300 s without headers.

The Ollama backend now streams /api/chat over node:http, which has no
headers/body timeout (the job keeps its own expiry and cancel), and the
daemon runs at most INFERNET_MAX_CONCURRENT_JOBS chat jobs (default 1);
the rest stay assigned and run when a slot frees.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

ThreatCrush Security Scan

40 finding(s)

HIGH/CRITICAL: 6 | MEDIUM: 14 | LOW: 20

Severity Rule Location
HIGH js-electron-node-integration apps/desktop/electron/main.js:27
HIGH secret-generic-api-key apps/web/app/getting-started/page.js:136
HIGH secret-generic-api-key docs/book/01-introduction/getting-started.md:40
HIGH secret-database-url docs/MIGRATIONS.md:56
HIGH secret-database-url ipips/ipip-0013.md:187
HIGH sensitive-file-committed sample.env:1
MEDIUM secret-hex-token apps/mobile/src/context/AuthContext.js:170
MEDIUM secret-hex-token apps/mobile/src/context/AuthContext.js:239
MEDIUM secret-hex-token apps/web/app/docs/page.js:293
MEDIUM js-unescaped-html-sink apps/web/app/layout.js:148
MEDIUM js-open-redirect apps/web/app/order/order-view.js:43
MEDIUM js-unescaped-html-sink apps/web/components/pit-footer.js:30
MEDIUM js-indirect-code-sink apps/web/lib/operator-vault.js:33
MEDIUM js-indirect-code-sink apps/web/lib/operator-vault.js:34
MEDIUM js-indirect-code-sink apps/web/lib/operator-vault.js:38
MEDIUM sh-remote-script-execution install.sh:583
MEDIUM sh-remote-script-execution install.sh:721
MEDIUM sh-remote-script-execution install.sh:971
MEDIUM sh-predictable-temp-path install.sh:1306
MEDIUM redos-nested-quantifier packages/gpu/src/interconnect.js:177
LOW secret-generic-credential docs/book/04-building-apps/index.md:33
LOW secret-generic-credential tests/auth-parse-body.test.js:43
LOW secret-generic-credential tests/auth-parse-body.test.js:46
LOW secret-generic-credential tests/auth-parse-body.test.js:64
LOW secret-generic-credential tests/auth-parse-body.test.js:70
LOW secret-generic-credential tests/auth-parse-body.test.js:73
LOW secret-hex-token tests/cli-peers.test.js:51
LOW secret-jwt tests/cpr-canary.test.js:26
LOW secret-hex-token tests/cpr-receipts.test.js:179
LOW secret-hex-token tests/cpr-receipts.test.js:182
LOW secret-generic-api-key tests/deploy-providers-foundation.test.js:220
LOW secret-private-key tests/liquid-agent.test.js:88
LOW secret-hex-token tests/node-commands-auth.test.js:68
LOW secret-hex-token tests/node-commands-auth.test.js:69
LOW secret-generic-api-key tests/operator-vault.test.js:62
LOW secret-generic-credential tests/profile-signup.test.js:53
LOW secret-generic-credential tests/profile-signup.test.js:65
LOW secret-generic-credential tests/profile-signup.test.js:90
LOW secret-generic-credential tests/reservation-orders.test.js:152
LOW secret-generic-credential tests/reservations.test.js:263

Snippets are redacted; ThreatCrush never prints matched credential material.

@sh1pt-actions-fleet
sh1pt-actions-fleet Bot merged commit ec3eb91 into master Nov 2, 2026
7 checks passed
@sh1pt-actions-fleet
sh1pt-actions-fleet Bot deleted the fix/ollama-queue-timeout branch November 2, 2026 20:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant