You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
infer's message queue gains configurable backends through inference-gateway/cli PR 1555 (resolves inference-gateway/cli issue 1390): the process-local memory queue stays the default, and sqlite, postgres and redis reuse the existing storage. connection settings so queued work survives a restart and one queue can be shared by several infer processes. The CLI repo carries the user-facing docs in its own docs/ directory (docs/message-queue.md plus the configuration-reference queues entries); this ticket tracks mirroring the same operator story in the docs repo so operators find it there too.
Affected pages
The conversation storage / backend area: fold in or link the message queue backends (memory default, sqlite, postgres, redis) with queue.name scoping and the poll_interval wake-up
The configuration reference: queue.type, queue.name, queue.poll_interval and INFER_QUEUE_TYPE, INFER_QUEUE_NAME, INFER_QUEUE_POLL_INTERVAL
Any operators / distributed deployment page: sharing one queue across infer processes and feeding it from external producers
External producers contract (source of truth in the CLI docs)
Record format: JSON with role, content, source, request_id, queued_at
Redis: key infer:queue:, RPUSH to append to the tail, the consumer drains the head atomically
SQL: message_queue table (queue_name, role, content, source, request_id, queued_at), consumed with one DELETE ... RETURNING statement (PostgreSQL locks rows with FOR UPDATE SKIP LOCKED)
Everything landed in cli.md, since the repo convention is that CLI features are sections of that page, not new cli-*.md pages.
New ### Message Queue section under Advanced Features, right after Conversation Management: backend table (memory default, sqlite, postgres, redis), which backends survive a restart or can be shared, and the storage.<type> block each reuses
Config reference for queue.type, queue.name, queue.poll_interval with their INFER_QUEUE_* overrides, plus those three added to the Essential Environment Variables block and a pointer line in Key Configuration Areas
Semantics: FIFO per scope, atomic drain, at-most-once delivery, startup failure on an unreachable backend (no silent fallback to memory), chat.status_bar.indicators.queue
External producers: JSON record format table, the infer:queue:<name> Redis list with an RPUSH example, and the message_queue table with an INSERT example plus the DELETE ... RETURNING / FOR UPDATE SKIP LOCKED drain
Cross-link from the Conversation Management storage backends list so the queue is reachable from the storage area
Not done
No infer operators / distributed deployment page exists here (operator.md is the gateway's Kubernetes operator), so the shared-queue and external-producer story lives in the new section rather than a separate operators page. Noted in the PR body.
Activity
feat(queue): configurable message queue backends (memory, sqlite, pos…
edenreich commentedon Oct 13, 2026
@claude Can you document this?
inference-gateway-maintainer commentedon Oct 13, 2026
Claude finished @edenreich's task in 3m 6s —— View job •
docs/issue-1007-20261013-1553• Create PR ➔Done
docs/message-queue.md, local pages)queue.*/INFER_QUEUE_*in the configuration referencelint:md,format:check,buildall pass)What changed
Everything landed in
cli.md, since the repo convention is that CLI features are sections of that page, not newcli-*.mdpages.### Message Queuesection under Advanced Features, right after Conversation Management: backend table (memorydefault,sqlite,postgres,redis), which backends survive a restart or can be shared, and thestorage.<type>block each reusesqueue.type,queue.name,queue.poll_intervalwith theirINFER_QUEUE_*overrides, plus those three added to the Essential Environment Variables block and a pointer line in Key Configuration Areaschat.status_bar.indicators.queueinfer:queue:<name>Redis list with anRPUSHexample, and themessage_queuetable with anINSERTexample plus theDELETE ... RETURNING/FOR UPDATE SKIP LOCKEDdrainNot done
No infer operators / distributed deployment page exists here (
operator.mdis the gateway's Kubernetes operator), so the shared-queue and external-producer story lives in the new section rather than a separate operators page. Noted in the PR body.| Branch