The first public release of TesseractResearch — an autonomous AI research agent built on LangGraph with real Human-in-the-Loop approval, multi-provider resilience across LLMs/search/scraping, and a production single-file frontend.
🧠 Agent & Orchestration
- Full LangGraph pipeline:
planner → search → approval (HITL) → scraper → analyzer → report, with a self-correction evaluator loop around the analyzer before the report is finalized. - Human approval implemented as a genuine graph suspension via
interrupt()— not a polling hack — with state persisted throughAsyncPostgresSaver, so a session can pause indefinitely and resume exactly where it left off. AsyncSessioninjected via FastAPI dependency injection rather than opened inside repositories; repositories useflush()instead ofcommit()to keep transaction boundaries at the service layer.
🌐 Multi-Provider LLM Dispatch
- New
LLMDispatchermapping each node to a primary model and an ordered fallback chain:- Planner: Groq → Cerebras → Hugging Face
- Analyzer: Mistral → Cerebras → Hugging Face → Groq
- Report: Hugging Face → Mistral → Cerebras → Groq
- Added Mistral as a primary provider and Cerebras as a new fallback provider, alongside the existing Groq and Hugging Face providers.
ainvoke_with_fallback()walks the chain on any runtime failure (since chat model construction never fails ahead of the actual API call) and automatically retries a step with a truncated payload when a smaller free-tier model rejects a request as too large for its rate limit.
🔎 Search & 🕷️ Scraping Dispatch
SearchDispatcher: Tavily → Serper → DuckDuckGo, driven by Redis-based credit-zone tracking (green/yellow/red) per provider, with automatic fallback on empty results.ScraperDispatcher: Firecrawl → Jina → BeautifulSoup, with the same green/yellow/red zone logic and round-robin behavior once Firecrawl's one-time credit allotment approaches its limit.- Both dispatchers back off gracefully instead of failing a session outright when a provider is exhausted or errors.
💻 Frontend
- Production single-file HTML/CSS/JS frontend with no build step, wired directly to the live FastAPI endpoints (
/research,/research/{id},/research/{id}/approve,/research/{id}/report,/research/{id}/events). - Responsive mobile layout with an off-canvas navigation drawer.
- Real-time pipeline step rendering via Server-Sent Events.
- From-scratch Markdown renderer for report output.
- Dynamic sidebar with TOC/Sources/Notes extraction from the generated report.
- About overlay with social links and a tech-stack grid.
- Persistent anonymous client identification via
localStorage+X-Client-Idheader. - Settings modal for configuring the backend API base URL.
🗄️ Database & Infra
- SQLAlchemy async models + Alembic migrations for research sessions, reports, and workflow checkpoints.
- Docker Compose stack: FastAPI app, PostgreSQL (
pgvectorimage), Redis, and RedisInsight. - Redis-backed
ProviderUsageTrackershared across search and scraper dispatchers.
🚀 Deployment
TesseractResearch is deployed using a fully managed, free-tier-friendly stack:
| Component | Provider | Notes |
|---|---|---|
| Backend (API) | Railway | FastAPI + LangGraph agent, deployed via Dockerfile from this repo |
| Database | Supabase | Managed PostgreSQL, used for LangGraph checkpoints, research sessions, and reports |
| Cache / Rate-limiting | Upstash | Serverless Redis for credit-zone tracking (green/yellow/red budget system) |
| Frontend | Cloudflare Workers | Static single-file frontend, served via Workers static assets |
📦 Stack
FastAPI · LangGraph 1.2.6 · PostgreSQL (pgvector) · Redis · Alembic · Groq · Mistral · Hugging Face · Cerebras · Tavily · Serper · DuckDuckGo · Firecrawl · Jina · BeautifulSoup
Full Changelog: initial release