ai-deepresearch-flow
From documents to deep research insight — automatically.
Core Pain Points
- OCR Chaos: Raw markdown from OCR tools is often broken — tables drift, formulas break, references are non-clickable.
- Translation Nightmares: Translating technical papers often destroys code blocks, LaTeX formulas, and table structures.
- Information Overload: Extracting structured insights (authors, venues, summaries) from hundreds of PDFs manually is impossible.
- Context Switching: Managing PDFs, summaries, and translations in different windows kills focus.
Solution
DeepResearch Flow provides a unified pipeline to Repair, Translate, Extract, and Serve your research library.
Key Features
- Smart Extraction — Turn unstructured Markdown into schema-enforced JSON (summaries, metadata, Q&A) using LLMs.
- Precision Translation — Translate OCR Markdown to Chinese/Japanese while freezing formulas, code, tables, and references.
- Local Knowledge DB — Web UI with Split View (Source/Translation/Summary), full-text search, and multi-dimensional filtering.
- Snapshot + API Serve — Production-ready SQLite snapshot with static assets and read-only JSON API.
- OCR Post-Processing — Fix broken references, merge split paragraphs, repair LaTeX and Mermaid diagrams.
- Semantic Search — LanceDB-backed vector search with hybrid recall and cloud reranking.
- MCP Integration — FastMCP server for AI agent access with bounded read tools, static-bearer Streamable HTTP/SSE, and GitHub OAuth at
/oauth/mcp.
Quick Start
1) Installation
uv pip install deepresearch-flow
# or: pip install deepresearch-flow
2) Configuration
cp config.example.toml config.toml
Minimal config with weighted multi-provider routing:
main_model = [
{ model = "openai/gpt-4o-mini", weight = 4 },
{ model = "claude/claude-sonnet-4-5-20250929", weight = 1 }
]
[[providers]]
name = "openai"
type = "openai_compatible"
base = [
{ url = "https://api.openai.com/v1", weight = 1, key = [
{ value = "env:OPENAI_API_KEY", weight = 4 }
] }
]
models = [
{ model_name = "gpt-4o-mini", is_support_json_schema = true }
]
[[providers]]
name = "claude"
type = "claude"
base = [
{ url = "https://api.anthropic.com", weight = 1, key = [
{ value = "env:ANTHROPIC_API_KEY", weight = 1 }
] }
]
models = [
{ model_name = "claude-sonnet-4-5-20250929" }
]
Keys use env:VAR_NAME syntax to keep secrets out of config files. Multiple providers (Ollama, Gemini, DashScope, Azure OpenAI) are supported. For full configuration options (embedding, rerank, translator defaults, search), see config.example.toml.
3) Process a batch of PDFs
Prepare a project directory that holds pdf/ and exactly one .bib file, then generate and run run.sh:
mkdir myproj
cp -r /path/to/pdfs myproj/pdf
cp /path/to/library.bib myproj/
cp ocr.example.toml ocr.toml # fill in the OCR backend token
uv run deepresearch-flow utils init-run ./myproj
Open myproj/run.sh and replace each --model PROVIDER/MODEL with a provider/model declared in config.toml. Different steps can use different models. Then run:
./myproj/run.sh
The script runs OCR, formula and format repair, structured summary extraction, and translation, and finally builds the snapshot database in myproj/dist/. Failed items are retried automatically, and a rerun after an interruption resumes at the failed step. For details, see From PDFs to a snapshot.
4) Browse the result
After run.sh finishes, open the local web UI:
uv run deepresearch-flow paper db serve \
--input myproj/deep_read.json \
--bibtex myproj/library.bib \
--md-root myproj/md_simple \
--md-translated-root myproj/md_base64_translated \
--pdf-root myproj/pdf
To deploy the snapshot and static assets in production, see the Deployment Guide.
Documentation
| Document | Content |
|---|---|
| From PDFs to a snapshot | Process one project with run.sh: steps, retries, exit codes, notifications |
| Advanced workflows | Incremental builds, merging, supplementing templates and translations for existing data |
| Reference | Translator, Extract, Recognize, semantic search, exit codes, init-run options |
| Snapshot management | Migrate, supplement, and update snapshots |
| Deployment guide | CDN, Nginx/Caddy, Docker, Compose, admin pipeline |
| API and MCP | Admin API, push, MCP endpoints, auth, and tools |
Built with love for the Open Science community.
Metadata
Release files for deepresearch-flow 0.16.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| deepresearch_flow-0.16.0.tar.gz | 6.2 MB | With provenance | Details for deepresearch_flow-0.16.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| deepresearch_flow-0.16.0-py3-none-any.whl | Python 3 | none | any | Details for deepresearch_flow-0.16.0-py3-none-any.whl |
Total release size: 12.8 MB
Release files / deepresearch_flow-0.16.0.tar.gz
| Download URL | deepresearch_flow-0.16.0.tar.gz |
|---|---|
| Size | 6.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
94138c77a80e85f6aea4bd19969696161a79a60855d6e795c681d9dfa7943270
|
|
BLAKE2b-256 checksum How to use checksums |
4c78d4268092580103b5f0e122dea0dc5e0e4bb13d65246a8f3461becf3311ae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logRelease files / deepresearch_flow-0.16.0-py3-none-any.whl
| Download URL | deepresearch_flow-0.16.0-py3-none-any.whl |
|---|---|
| Size | 6.7 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5a4a2d76709b469c64efe5f0c2f170579b157b71efed8e316d6bdc91372cb956
|
|
BLAKE2b-256 checksum How to use checksums |
c765665265e087be2799f98d1a8528af73f3c72c6dd3bec5a5ea6a32be36bcf1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logSecurity for deepresearch-flow 0.16.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for deepresearch_flow-0.16.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.