Skip to main content

Module llm_slots

Module llm_slots 

Source
Expand description

GAP-004 (v1.0.82): Cross-process slot semaphore for LLM subprocesses. acquire_llm_slot limits concurrent codex/claude spawns per host to prevent OAuth rate limit saturation when N+ sessions run in parallel. GAP-004 (v1.0.82): Semáforo cross-process para spawn de subprocessos LLM.

Quando N sessões Claude Code rodam em paralelo no mesmo host, cada remember/edit/ recall/hybrid-search/enrich/deep-research/ingest quer spawnar seu próprio subprocesso codex exec ou claude -p. Sem coordenação, N subprocessos saturam o rate limit OAuth compartilhado (observado: 19+ codex simultâneos no transcript de 2026-06-15).

§Solução

  • Slot files em ${XDG_RUNTIME_DIR:-~/.local/share}/sqlite-graphrag/llm-slots/slot-{0..N}.lock
  • fs4::FileExt::try_lock_exclusive para atomic acquire cross-process (fcntl no Unix, LockFileEx no Windows — fs4 0.9 com trustScore 9.6 confirmado via context7)
  • RAII guard LlmSlotGuard com Drop libera automaticamente em panic
  • Integração com reaper.rs::scan_and_kill_orphans para detectar slots órfãos

§Uso

use crate::llm_slots::acquire_llm_slot;

let _guard = acquire_llm_slot(4, 30)?;
// ... spawn subprocesso LLM ...
// guard libera o slot automaticamente ao sair do escopo

Structs§

LlmSlotGuard
RAII guard que libera o slot automaticamente em panic, cancelamento abrupto ou término normal do escopo.
SlotStatus
Retorna o status atual dos slots LLM (para subcomando slots status --json).

Functions§

acquire_llm_slot
Adquire um slot LLM livre, aguardando até wait_secs segundos.
default_max_concurrency
Resolves the default LLM max-host-concurrency value.
find_stale_slots
Lista IDs de slots stale (PIDs órfãos) — para cleanup automático.
force_release
Libera um slot específico (para subcomando slots release --slot-id N --yes).
read_status
slot_path
slots_dir