Next-generation deep research platform unifying three lineages:
- LangChain Open Deep Research — the research operating system: LangGraph nested graphs, a supervisor that plans and delegates, parallel researchers, tool loops, context compression.
- Stanford STORM / Co-STORM — the intelligence layer: multi-perspective expert personas, simulated collaborative discourse with a moderator surfacing unknown unknowns, hierarchical knowledge maps, outline-first cited writing.
- Local Deep Research — the platform layer: persistence, sessions, REST + WebSocket APIs, background jobs, pluggable search engines/strategies/LLM providers, self-hosting.
| Pipeline | Flow |
|---|---|
fast_research |
plan → search → summarize → answer |
deep_research |
plan → parallel research → perspectives → discourse → knowledge map → outline → cited sections → criticism → report |
open_deep_research |
plan → parallel research (supervisor loop only) → report |
academic_research |
literature search → citation verification → outline → synthesis → peer review → bibliography |
autonomous_research |
hypothesize → investigate → gap discovery → new research paths → knowledge base update → repeat (bounded) |
apps/
api/ FastAPI gateway (REST + WebSocket, optional auth)
worker/ Queue consumer that executes LangGraph pipelines
web/ React + Vite UI
packages/
core/ Domain models, ports, events
adapters/ LLM providers, search engines, search strategies, MCP bridge
intelligence/ Perspectives, discourse, knowledge map, outline writer
orchestration/ LangGraph pipelines + pipeline registry
persistence/ SQLAlchemy models, repositories, Alembic migrations
sdk/ Python client
uv sync # install workspace
uv run pytest # run tests
uv run uvicorn synthora.api.main:app --reload --port 8000
uv run python -m synthora.worker.main # in another shellLangGraph Studio: uv run langgraph dev (uses langgraph.json).
docker compose up -dBrings up: API (:8000), worker, web UI (:3000), Postgres, Redis, SearXNG.
Default model profile is auto — resolves LLM roles from env keys,
Ollama, or free fallback chains (llm_fallbacks via LiteLLM; set HF_TOKEN from hf auth login for Hugging Face inference).
Optional local LLM (Ollama profile):
docker compose --profile ollama -f docker-compose.yml -f docker-compose.ollama.yml up -dLocal-first preset (Ollama + SYNTHORA_MODEL_PROFILE=local):
docker compose -f docker-compose.yml -f docker-compose.local.yml --profile ollama up -dThe Ollama overlay sets OLLAMA_BASE_URL=http://ollama:11434 on API/worker.
Embeddings follow profile (hash by default; Ollama when local profile active).
Key environment variables (see .env.example): SYNTHORA_MODEL_PROFILE
(auto|local|cloud|free), SYNTHORA_DATABASE_URL, SYNTHORA_REDIS_URL,
SYNTHORA_AUTH_MODE (none|session), OPENAI_API_KEY / OPENAI_BASE_URL,
TAVILY_API_KEY, SEARXNG_URL, SYNTHORA_EXTENDED_ENGINES.
- docs/architecture.md — layer contracts and data flow
- docs/pipelines.md — pipeline graph designs
- docs/feature-parity.md — parity matrix vs the three source projects
- docs/eval-storm.md — STORM FreshWiki evaluation harness