Parallax Agents Society
Inspiration
- Professors are drowning in AI-generated cold emails that look personalized but aren't. No tool helps them see through the noise from their side of the inbox.
- Every admissions tool serves the applicant. Parallax flips the vantage point: the professor's own publications and declared capacity become the yardstick every candidate is measured against.
What it does
- Parallax is a reactive triage tool for professors: inbound student outreach email is debated by a society of AI agents against the professor's own publications and lab capacity, returning a grounded decision with references, which I refer to as receipts.
- A cheap Gatekeeper pass (qwen-turbo) triages every email first, extracting a structured candidate profile and verifiable claims from the body and attached CV, and rejecting mass-mail spam before it costs a debate. Rejections land in a reviewable "Declined" queue, never a silent drop.
- Survivors go to a moderator-driven debate. The Gatekeeper opens by explaining why it let the candidate through; a Research-Fit Advocate, an Authenticity Auditor, and a Capacity & Funding Assessor then take sequential turns over one shared transcript, each rebutting or conceding what was just said, while a Moderator routes the floor. An Arbitrator judges the full transcript once at the end and drafts the reply.
- The debaters have names and personas and address each other and the professor by first name, so the transcript reads like a real admissions panel rather than role labels reciting findings:
| Persona | Role |
|---|---|
| Kumar | Gatekeeper |
| Leslie | Research-Fit Advocate |
| Karen | Authenticity Auditor |
| Lami | Capacity & Funding Assessor |
| Dumbledore | Arbitrator |
- Free-text custom instructions set at onboarding steer the society (e.g., "I want only theory students, no pure-applied ML"). The professor reviews the decision and approves, overrides, or edits the drafted reply no outbound email sends without explicit human approval.
- Every debate is persisted as a replayable trace: turns, receipts, cross-references between agents, and every tool call each agent made.
- The replay plays with voice. After a debate, each turn gets a short spoken line, synthesized with a distinct Qwen3-TTS Flash voice per persona so the professor can watch and hear the society deliberate instead of reading a transcript.
How we built it
- The debate design is grounded in two papers, one of which is indexed in the demo corpus: ChatEval (Chan et al., 2024) a panel of debating LLMs beats any single LLM judge and Liang et al. (2024), which introduced the judge-driven Multi-Agent-Debate (MAD) framework and named the Degeneration-of-Thought (DoT) failure mode. Debaters argue the same candidate, rebutting or conceding; an Arbitrator judges once at the end. Never a supervisor splitting sub-tasks.
- The engine is a LangGraph
StateGraphrunning MAD's judge-driven debate: a Moderator (qwen3.6-plus) routes the floor to whichever debater can best pressure-test the last turn, while debaters take sequential turns over one append-only transcript. Any debater may PASS, the Moderator can only end once every voice has been heard, and a hard turn cap guarantees termination of the structural defense against DoT. - Qwen Cloud, end to end one API key, no non-Qwen model anywhere:
| Component | Model / service |
|---|---|
| Triage | qwen-turbo |
| Debaters + Moderator | qwen3.6-plus |
| Arbitrator | qwen3.7-plus (via langchain-qwq ChatQwen, structured output + tool calling) |
| Corpus embeddings | text-embedding-v4 into pgvector |
| Retrieval re-sort | qwen3-rerank |
| Debate replay audio | qwen3-tts-flash |
| Live web lookups | DashScope native enable_search |
- Custom Agent Skills follow the open SKILL.md standard with progressive disclosure: claim-verification and capacity-math ship as skill folders whose full procedure loads only when an agent invokes them.
- Agents ground themselves through typed tools, each recorded on the turn as an AgentAction so the replay shows how each agent grounded itself: RAG over the corpus (
RETRIEVAL), the two skills (SKILL), and a live student-visa/mobility lookup over an in-process MCP tool bus (MCP). - The backend is hexagonal (ports & adapters): the debate contract lives in the pure domain layer; LangGraph and every Qwen call live in adapters. A compliance guard refuses to construct a client pointed at any non-Qwen-Cloud host, enforced by a test that greps the codebase for stray endpoints.
- Debate audio is generated off the critical path: a post-debate step reads the saved trace, compresses each turn into a spoken line, and synthesizes it so correctness never depends on TTS, and a synthesis failure degrades to a silent beat rather than breaking the run. The replay stays a deterministic function of one playhead clock, with the audio element slaved to it so scrub/step/speed keep working.
Challenges we ran into
| Challenge | Fix |
|---|---|
qwen3-rerank has no OpenAI-compatible surface the compatible-mode/v1/reranks endpoint 404s, silently emptying every retrieval. |
Called DashScope's native rerank service on the main host instead. |
| Rerank has one scarce free-quota model and ran on every retrieval ~10 requests per debate. | Cut to ≤1: rerank only the baseline retrieval, skip short queries, cache within a debate. |
| Thinking mode collides with three features: web search rejects it (HTTP 400), structured output intermittently returns empty, and it defaults ON for flash models a 4k–6k-token hidden stream per turn (95–173s each). | Disabled thinking for the visa lookup and all debate roles; the Arbitrator retries structured output. Latency and cost collapsed. |
| The debate optimized for internal consistency over ground truth: the Advocate could always build a corpus-to-candidate bridge, the Auditor only checked if a quote existed, and the Arbitrator saw only the transcript so it summarized instead of scoring. | Grounded Advocate/Auditor scope in what the candidate actually demonstrates; gave the Arbitrator the raw profile/claims plus a mandatory met/unmet scorecard where an unmet hard requirement forces a decline. |
One-point-per-turn continuation ([CONTINUES]) risked an unbounded debate ~9-turn debates could spiral past 30 round-trips, invisibly (logs were httpx "200 OK" noise). |
Capped continuations, decoupled the turn ceiling from the continuation budget, and routed the worker through one loguru sink emitting a per-turn narrative with token/latency and termination reason. |
| Re-sending the full transcript every turn re-billed one verbose 4,700-token turn on every later prompt quadratic growth to ~138k tokens per debate and re-primed the "live conversation" framing, so a speaker fabricated an interlocutor ("Karen's right…" before Karen spoke). | Capped per-turn output, truncated receipt excerpts in the re-sent transcript (originals kept for replay), and prepended a "you are continuing your own statement" directive. |
| File uploads on the Alibaba ECS instance failed with the HTTP error 413 (request entity is too large) this was caused by the nginx reverse proxy default limit of 1mb. | Set the nginx conf client_max_body_size to 25m so a 1 MB PDF plus multipart overhead cannot trip a 413. |
- Keeping the domain layer framework-free meant a hard line: the
NegotiationEnginecontract depends only on domain models; LangGraph, the tool loop, and prompt rendering live behind it in an adapter. - Naming mattered: a debate society (everyone argues the same question, a judge resolves) kept collapsing into task collaboration (a supervisor splitting sub-tasks). We wrote the distinction into the engine's contract.
Accomplishments that we're proud of
- Every agent claim carries a receipt traced to the professor's actual indexed publications the system cannot hallucinate alignment, only surface or refute it.
- Every mid-argument tool invocation is captured on its turn (kind, name, arguments, source), so the replay shows how each agent grounded itself, not just what it said.
- A rejected email is never silently dropped: triage rejections synthesize an overridable decline the professor can reverse in one click.
- We measured the society against a strong single-agent control same Qwen model, same RAG tool over the same corpus, explicit chain-of-thought, an equal per-call token budget, and the society at real production depth on 19 hand-labeled cases spanning fabricated citations, inflated alignment, capacity mismatches, and adversarial contradictions:
| Reliability Metric | Single-Agent Baseline | Parallax Agent Society |
|---|---|---|
| Overall Accuracy | 84% (16/19) | 90% (17/19) |
| High-Risk Failures (False Accepts) | 2 (Dangerous) | 1 (50% Risk Reduction) |
| Auditability | Black-box output | Full Debate Transcript & Receipts |
| Human Labor Efficiency | Low (Requires 100% manual audit) | High (Review by exception/skim) |
| Compute-to-Confidence Ratio | 1x (Cheap but risky) | 5.9x (Investment in correctness) |
The "Efficiency Gain" of the Society: While the Society uses more tokens, it solves the "Trust Threshold" problem. An 84% accurate baseline requires the Professor to manually read every inbound email to find errors. By implementing Sequential Rebuttals and Conflict Resolution, Parallax achieved a 50% reduction in catastrophic False-Accepts (cases where a student with fabricated credentials would have been invited).
In a high-stakes academic environment, the "Efficiency" of Parallax is measured in the hours of human auditing saved, as the Society handles the "Critical Pressure Testing" that a single prompt cannot reliably sustain.
What we learned
- Multi-agent debate needs a hard termination condition from day one. Without a round cap and a decisive arbitrator, the Degeneration-of-Thought failure mode is a real production risk, not a theoretical one.
- We assumed cadence could stay fixed (simultaneous rounds) with emergence living in the argument content, but debaters speaking simultaneously are blind to each other within a round and never actually respond. Real rebuttal required a moderator-routed sequential debate where each agent sees the turn it is answering.
- Structured output and free-form tool-calling pull in opposite directions. Splitting them, tool-loop for debaters, structured output for Gatekeeper and Arbitrator verdicts kept both reliable.
What's next for Parallax
- Integrating with email providers
- Qwen-VL over the figures and diagrams in the professor's own papers, so the corpus includes what the text alone misses.
- Potentially partnering with professors from multiple universities.
Built With
- alibaba-cloud-ecs
- celery
- cloudflare-r2
- fastapi
- next.js
- postgresql
- python
- qwen
- redis
- tailscale
Log in or sign up for Devpost to join the conversation.