Model configsSix modes: single · synthesize · vote · consensus · judge_best · moe. An optional Mixture-of-Agents pass, in which several models improve on each other's answers, loops improve → combine → score → refine, stopping on a score target, a minimum gain, or a maximum number of iterations, and pruning models that underperform.
Mixture of expertsThe moe mode routes instead of running every model: a router picks one member — the expert — so a round costs one generation whatever the member count. It matches the prompt by meaning against each model's capability sentence (free, no model call), escalating only a tie to the trusted judge at temperature 0. Every routing decision is recorded per round.
Prompt enhancementOptional switch (enable_prompt_enhancer, off by default): before answering, the middle tier rewrites the enrollee's raw prompt into a sharper one, aimed at the rubric — one pass on the judge model, under a versioned enhancer asset. Both raw and effective prompts are kept; frozen per experiment, so a study stays comparable.
ConversationChat memory (enable_chat_history) replays earlier turns, bounded by the smallest context window in the configuration. Socratic mode (socratic_enabled) decides how the sufficiency gate replies when it stops a request — the judge asks for one missing piece at a time, or asks for a rewrite — under wording frozen on the experiment. Stopped attempts count in retry_count.
Controlled parametersEach run varies exactly four: the nudge (guidance shown to the enrollee), the model configuration, the cohort, and the Socratic switch. Everything else is held constant across the experiment's runs — the system prompt (built as a two-layer cascade), the opening message, the scenario, the context files, and the scoring configuration.
Scoring rubricOne trusted judge scores on a rubric that is configurable per experiment — the default four factors (groundedness, relevance, coherence, instruction-following) or a custom rubric picked from the middle tier's bundled registry — yielding a weighted 0–100 composite. The same judge grades every run, so scores are comparable within an experiment.
Live observationExperimenters watch a run stream live, drill into any enrollee's session exchange-by-exchange, and message enrollees out-of-band. Operational recovery — retry a failed model call, pause or abort a run, withdraw an enrollee — runs alongside a live session without changing its frozen set-up.
IntegrityA run's set-up stays fixed because the definitions it references — the experiment, nudge, model configuration, and cohort — are held immutable while any run references them, so a finished run's results stay valid without a stored copy. A disjoint-cohort gate keeps any enrollee from joining two live runs at once. Cost is split per round between generating answers and judging them.
Ask engineA question in plain language becomes a read-only SQL (Structured Query Language) database query, run under the asker's own row-level security. Saved queries take parameters and are matched to a question by meaning. Each answer is a short narrative plus zero or more downloadable tables and/or charts; run results (CSV/XLSX/JSON) and transcripts (text) also export for outside tools.
Retrieval (RAG)Retrieval-augmented generation (RAG) brings relevant document text into a run's chats. Each document is extracted, using optical character recognition (OCR) for scanned files, then split into chunks and embedded into one shared HNSW index with pgvector. The relevant chunks are retrieved into a run's chats.
DatabasePostgreSQL · 24 tables across 4 modules · row-level security throughout
Rolesadmin · experimenter · enrollee
Scoringrubric factors (4 by default), chosen from a built-in list → weighted 0–100 composite · one trusted judge, applied identically across every run
ModelsProvider-agnostic catalog · single or ensemble · hosted or local
Embeddingspgvector · HNSW (cosine) · fixed 1024-dim
Front endSingle-page app on Cloudflare Pages
Middle tierPersistent Python service on fly.io (holds the provider API keys)
Auth / RealtimeSupabase · passwordless (OAuth + email one-time passcode, or OTP)