Abacus is a chat client bolted to a job scheduler. An LLM agent turns your input into a structured portfolio analysis request, a broker leases it to a stateless worker, and a CPU-bound solve runs for a configured amount of time while the transcript streams.
Kill the socket mid-solve, reconnect, and no result is lost.
The chat client connects to the backend over a WebSocket connection. Postgres is the system of record for both transcripts and jobs; RabbitMQ owns the handoff on quorum queues, with retry through a per-message-TTL delay queue and a dead-letter exchange. Workers hold one lease against a spawned child process for CPU-bound computation tasks.
Versioned JSON frames over /ws/chat/{id}. Resumes from a seq cursor.
Session management and seq allocation, holder of model key.
Quorum queues, delay queue and dead-letter exchange for delayed retry.
A supervised spawned process for computational tasks. Stateless, horizontally scaled.
Persistence storage of chat sessions, chat messages, work orders, leases.
Analysis result captured in charts and data series.
Enqueued and deduplicated on (session_id, idempotency_key) — a retried submit returns the same job as created before.
With a lease claimed by a worker. The supervisor extends timer for unfinished computation, acks or nacks completed or failed job.
Artifact written, job acked, S3 url persisted in database. An ack on a reassigned lease is fenced by database check to ensure the same job is only worked on by one worker.
Dead and cancelled are terminal states. A job is in dead state if its retry count has exceeded the limit. A queued or failed job with a cancellation request is put to cancelled state right away.
Walkthrough on request, get in touch for a demo.