Skip to content
Slow ThinkerDocumentation
Technical reference
Documentation/Technical reference

Technical reference / System & configuration

Technical reference

The components, execution boundaries and data flow behind an experiment and its reports.

01

Architecture and data flow

#

The implementation separates collaboration, persistence, post-run analysis and presentation. Configuration supplies the council and storage; the task supplies the challenge. The executor records its output. The optional analyst reads that trace and stores a separate assessment. The renderer reads both and computes additional views without changing the experiment.

Component Responsibility
__main__.pyReviewed E 0.1.5 · A 0.1.4 · R 0.1.16 Parse a task path and optional base, load configuration, register/run the case, and optionally render reports afterwards.
planner/config.pyReviewed E 0.1.5 · A 0.1.4 · R 0.1.16 Resolve base chains and API keys, describe the effective configuration and populate planner module globals.
planner/graph.pyReviewed E 0.1.5 · A 0.1.4 · R 0.1.16 LangGraph orchestration: initial proposals, repeated refinements, voting, selection and error routing.
planner/calls.pyReviewed E 0.1.5 · A 0.1.4 · R 0.1.16 Build stage prompts, invoke providers, retry transient failures and collect raw exchanges and usage.
planner/models.pyReviewed E 0.1.5 · A 0.1.4 · R 0.1.16 Pydantic answer models, strict JSON schema conversion, parsing, step UUID assignment and context formatting.
prompts/Reviewed E 0.1.5 · A 0.1.4 · R 0.1.16 Source-controlled execution, analysis and writing-style templates. They are not loaded from a generic process-definition JSON.
llm/Reviewed E 0.1.5 · A 0.1.4 · R 0.1.16 Provider registry and adapters for client construction, effective settings, structured output and pricing rules.
storage/Reviewed E 0.1.5 · A 0.1.4 · R 0.1.16 Common record builders and Storage interface with JSON and PostgreSQL implementations.
report/analysis.pyReviewed E 0.1.5 · A 0.1.4 · R 0.1.16 Analysis models, prompt assembly, parallel round calls and sequential final evaluation stages.
report/diff.py / contributions.pyReviewed E 0.1.5 · A 0.1.4 · R 0.1.16 Deterministic title comparisons, immediate origins, recursive introducers, composition and convergence.
report/graph.py / process.pyReviewed E 0.1.5 · A 0.1.4 · R 0.1.16 Geometry and evidence for dependency and collaboration diagrams.
report/usage.py / render.pyReviewed E 0.1.5 · A 0.1.4 · R 0.1.16 Usage aggregation, presentation view models and HTML rendering.
report/templates/Reviewed E 0.1.5 · A 0.1.4 · R 0.1.16 Self-contained HTML/CSS/JavaScript and SVG markup for reports and history pages.
02

Execution boundaries

#

The LangGraph state holds the task ID and prompt, input elements, current round, proposal lists per round, final alternatives, votes, selected proposal and status/error messages. asyncio.gather parallelizes calls inside a stage; the graph waits at each stage boundary. Results are processed in configured slot order.

Each model invocation is a new prompt, not a persistent per-agent chat. Refinement context includes the immediately preceding round, not the full transcript of every earlier round. The reporting layer reconstructs longer lineage afterwards. source_proposal_ids records which proposals were made available, not which ones causally influenced the answer.

Configuration is held in module globals, so the current package is designed around one configured planning run per process. Treat a service supporting concurrent, independently configured runs as an integration change, not as a capability implied by asynchronous agent calls.

03

Structured output and failure handling

#

strict_json_schema() removes defaults, flattens references, makes object properties required and disallows extra properties for provider schema requests. Most adapters request json_schema; DeepSeek requests JSON mode and appends the schema to the human prompt. Responses are then parsed and validated locally.

The executor checks structural shape, not whether a plan is factually correct, complete or acyclic. Unknown/self dependency labels are dropped when UUIDs are assigned. Other cycles can remain and are flagged by the report layout. estimated_complexity is a string, not a validated enum or computed measure.

The wrapper retries up to three attempts for HTTP 408, 429, 500, 502, 503, 504 and 529, and for exceptions without an integer status. Other status codes fail immediately. Its waits are one then two seconds. Raw errors are converted to an ERROR_ response for callers; failed or invalid proposal/vote results are skipped. Provider SDK retries can occur underneath this wrapper.

04

Reference map

#
Source files used for this reference

Reviewed at 7361ea0b71a5.

← Documentation homeFind a report element →
Reference edition 2026-09-21Versions & compatibilityChangelogCHANGELOG.md ↓
Search documentation

Search both guides, report elements and the changelog.

Report screenshot