Skip to content

Releases: zeyadusf/TesseractResearch

TesseractResearch v1.0.0 — Production-Ready Release

Choose a tag to compare

@zeyadusf zeyadusf released this 05 Jul 18:41
150d8e7

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 through AsyncPostgresSaver, so a session can pause indefinitely and resume exactly where it left off.
  • AsyncSession injected via FastAPI dependency injection rather than opened inside repositories; repositories use flush() instead of commit() to keep transaction boundaries at the service layer.

🌐 Multi-Provider LLM Dispatch

  • New LLMDispatcher mapping 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-Id header.
  • 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 (pgvector image), Redis, and RedisInsight.
  • Redis-backed ProviderUsageTracker shared 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