Evidence note: Metrics in this note refer to repository tests or controlled scenarios unless a live production source is explicitly linked.

During the 2026 Medipol META AI Hackathon, our team faced a tight constraint: design, implement, test, and live-pitch an end-to-end multi-agent AI product from scratch in exactly 7 hours.

The product we engineered is TruthNet: an adversarial fact-checking platform that pits specialized LLM agents against each other to evaluate breaking news and claims in real-time, eliminating single-model sycophancy and bias.

The Hackathon Verdict: Built in 7 hours with FastAPI, React, and an asynchronous agent orchestration debate graph, TruthNet was presented live on stage with real-time SSE streaming to the judging panel.

1. The 4-Agent Adversarial Debate Architecture

Rather than relying on a single prompt to verify a claim, TruthNet orchestrates 4 specialized autonomous agents structured as a directed verification graph:

Agent Role System Prompt Persona Task Objective Output Artifact
Investigator Agent Objective Evidence Gatherer Extracts verifiable entities, dates, and claims from input text Structured Entity Graph (JSON)
Prosecutor Agent Adversarial Debunker Constructs the strongest plausible counterarguments and flags logical fallacies Falsification Matrix
Defender Agent Corroborating Analyst Discovers supporting evidence, context nuances, and primary source citations Corroboration Trace
Judge Agent Impartial Arbiter Weights prosecutor vs defender evidence and computes a final 0–100 Truth Score Final Audited Verdict + Justification

2. Fast Pipeline Implementation: Streaming Agent State

Under high concurrency and time limits, synchronous blocking calls would cause UI freezes. TruthNet uses Python asyncio to run the Prosecutor and Defender in parallel, streaming intermediate reasoning tokens to the frontend via Server-Sent Events (SSE):

# truthnet/orchestrator.py
import asyncio
from typing import AsyncGenerator, Dict, Any
from truthnet.agents import Investigator, Prosecutor, Defender, Judge

class DebateOrchestrator:
    def __init__(self):
        self.investigator = Investigator()
        self.prosecutor = Prosecutor()
        self.defender = Defender()
        self.judge = Judge()

    async def run_audit_stream(self, claim: str) -> AsyncGenerator[Dict[str, Any], None]:
        # Step 1: Sequential Fact Extraction
        yield {"status": "investigating", "message": "Extracting key claim entities..."}
        entities = await self.investigator.analyze(claim)
        yield {"status": "entities_ready", "data": entities}

        # Step 2: Parallel Adversarial Debate
        yield {"status": "debating", "message": "Launching Prosecutor and Defender in parallel..."}
        prosecutor_task = asyncio.create_task(self.prosecutor.argue(claim, entities))
        defender_task = asyncio.create_task(self.defender.argue(claim, entities))

        # Await both parallel arguments simultaneously
        prosecution, defense = await asyncio.gather(prosecutor_task, defender_task)
        yield {"status": "debate_complete", "prosecution": prosecution, "defense": defense}

        # Step 3: Synthesis & Final Verdict
        yield {"status": "judging", "message": "Judge synthesizing evidence and computing Truth Score..."}
        verdict = await self.judge.evaluate(claim, entities, prosecution, defense)
        yield {"status": "final_verdict", "verdict": verdict}

3. Live Demo Resilience Strategies

To prevent live stage failures during a hackathon demo:

  • Fallback Mock Cache: Pre-warmed mock debate traces stored locally in IndexedDB if the hackathon Wi-Fi dropped.
  • Strict JSON Schema Enforcement: Used Pydantic validation on all agent outputs to prevent unparseable Markdown blobs.
  • Sub-Second Visual Feedback: Pulsing status indicators and live typing effects kept the judging audience visually engaged throughout the 7-second debate loop.

Sources, Code & Further Reading

  • Open Source Codebase: github.com/kais-aljammal/truthnet — The official 7-hour Medipol META AI Hackathon repository.
  • Multi-Agent Debate Research: Du, Y., et al. (2023). Improving Factuality and Reasoning in Language Models through Multiagent Debate. ICML 2024. arXiv:2305.14325.
  • Automated Fact-Checking Benchmarks: Thorne, J., et al. (2018). FEVER: a large-scale dataset for Fact Extraction and VERification. NAACL-HLT 2018. arXiv:1803.05355.