researchpath / README.md
Chetan110801's picture
Upload folder using huggingface_hub
3f31583 verified
|
Raw
History Blame Contribute Delete
6.58 kB
---
title: ResearchPath
emoji: πŸ—ΊοΈ
colorFrom: blue
colorTo: indigo
sdk: docker
pinned: false
license: mit
short_description: Agentic RL reading-path planner with grounded Q&A
---
# ResearchPath
> An agentic research-onboarding companion. Give it a target paper and your background; it builds a personalized, dependency-ordered reading plan with grounded explanations.
>
> **Demo domain:** Reinforcement Learning. **Architecture:** domain-agnostic.
---
## The problem
Getting into a new research field is brutal. You open the SOTA paper, it assumes 8 prior concepts. You read those papers, they assume 5 more. Existing tools (Perplexity, Elicit, Consensus) retrieve papers but don't *plan* β€” they don't tell you what order to read things in *based on your specific background*.
## What ResearchPath does
Input:
- A target paper or topic (e.g., *"PPO"*)
- Your current background (e.g., *"basic supervised ML, calculus, no RL"*)
Output:
1. **Prerequisite reading plan** β€” a topologically-sorted reading list of foundational papers, with a "why this is next" justification grounded in the dependency chain
2. **Concept genealogy** β€” how each key concept evolved across the chain
3. **Notation glossary** β€” reconciles symbols across papers (X in paper A = ΞΈ in paper B)
4. **Grounded Q&A** β€” ask follow-ups, every claim cites a specific paper section
5. *(Stretch)* **Open problems surfacer** β€” clusters "Future Work" sections from recent papers in the subfield
## Why this is genuinely agentic (not RAG-with-extra-steps)
The reading-path builder is a real planning problem:
```
read(target_paper) β†’ extract assumed prerequisites
for each prerequisite:
if user_knows(prereq): skip
else: retrieve canonical paper for prereq β†’ recurse
build dependency DAG β†’ topologically sort β†’ generate bridge explanations
```
Graph traversal + recursive retrieval + reasoning over user state. Not "embed query, return top-5 chunks."
---
## Evaluation
Eval is the differentiator. Every change ships with numbers.
**Gold dataset:** 30 hand-authored (question, expected source, key claim) triples across 10 canonical RL papers. Difficulty-stratified: 7 easy / 15 medium / 8 hard. Questions adapted from OpenAI Spinning Up, Sutton & Barto concepts, and paper-specific mechanism questions.
### v1 β€” 10-paper corpus (1,093 chunks)
| Metric | Baseline RAG | + Hybrid Retrieval |
|---|---|---|
| Retrieval Recall@5 | **90.0%** | **89.7%** |
| Citation Presence | **86.7%** | **86.2%** |
| Answer Correctness | **36.7%** | **72.4%** |
| Avg Latency (s) | **5.07** | **4.58** |
| RAG Tokens (in/out) | **33,498 / 7,000** | **31,439 / 6,905** |
*Hybrid BM25+FAISS via RRF fusion (n=29). Answer Correctness nearly doubled (+35.7 pp) with no latency regression β€” driven by hybrid correctly surfacing in-paper chunks that dense embeddings de-prioritized.*
### v2 β€” Full 17-paper corpus (1,789 chunks)
Corpus expanded to all 17 canonical RL papers (PER, PPO, SAC, IMPALA, MuZero, DreamerV3, Decision Transformer added). Prerequisite graph updated with 11 new edges.
| Metric | Baseline RAG | + Hybrid Retrieval | + Reranker |
|---|---|---|---|
| Retrieval Recall@5 | **84.0%** | pending | **83.3%** |
| Citation Presence | **80.0%** | pending | **83.3%** |
| Answer Correctness | **48.0%** | pending | **56.7%** |
| Avg Latency (s) | **4.63** | pending | **5.13** |
| RAG Tokens (in/out) | **27,027 / 6,336** | pending | **31,579 / 11,215** |
*v2 baseline n=25 (5 skipped, Groq 100k TPD hit). Reranker: BM25+FAISS+CrossEncoder, n=30. Hybrid v2 pending token reset. Reranker adds +8.7 pp over v2 baseline; larger corpus raises baseline from 37% β†’ 48% even without retrieval improvements.*
---
## Stack
| Layer | Choice | Why |
|---|---|---|
| Planning LLM | Gemini 2.5 Flash Lite (free tier) | Strong reasoning, generous free quota |
| Fast LLM | Groq Llama 3.3 70B (free) | Fast inference for inner-loop retrieval |
| Embeddings | BAAI/bge-small-en-v1.5 | CPU-friendly, strong on academic text, free |
| Vector store | FAISS IndexFlatIP | Local, free, exact cosine, fast at ~5k chunks |
| Retrieval | BM25 + FAISS via RRF + CrossEncoder rerank | Three tiers, each measurably better |
| Agent framework | Static DAG + BFS + Kahn's topo sort | Deterministic planning, no LLM cost |
| UI | Streamlit | Demo-grade, ships fast |
| Eval | Custom harness + LLM-as-judge | Citation recall, answer correctness, latency |
| Deploy | Hugging Face Spaces | Free public URL |
---
## Status
- [x] Week 1 β€” Repo scaffold + smoke test
- [x] Week 1 β€” arXiv corpus ingestion (10/17 RL papers, 1,093 chunks)
- [x] Week 1 β€” Baseline RAG (FAISS + bge-small + Gemini/Groq), smoke tested
- [x] Week 2 β€” Eval harness + 30-question gold dataset
- [x] Week 2 β€” Baseline RAG numbers (Recall@5 90%, Answer Correctness 37%)
- [x] Week 2 β€” Hybrid BM25+FAISS retrieval via RRF (Answer Correctness 72%, +35 pp)
- [x] Week 3 β€” Reranker (cross-encoder): +8.7 pp over v2 baseline
- [x] Week 3 β€” Agentic planning loop: offline prerequisite-chain planner, 7 tests passing
- [x] Week 3 β€” Full 17-paper corpus (1,789 chunks) + expanded prerequisite DAG (21 edges)
- [x] Week 4 β€” Streamlit UI + HF Spaces deploy (Docker)
- [x] Week 4 β€” Tier 1 corpus expansion: Sutton & Barto, RLHF Book, CS224R, 5 web tutorials β†’ **5,531 chunks**
- [ ] Week 4 β€” Hybrid v2 eval (pending Groq token reset), ablation table complete, demo video
---
## Local development
```powershell
# 1. Install uv (one-time): https://astral.sh/uv
# 2. Sync dependencies
uv sync
# 3. Set up env
copy .env.example .env
# Fill in GEMINI_API_KEY and GROQ_API_KEY in .env
# 4. Run smoke test
uv run python scripts/smoke_test.py
# 5. Build corpus β€” three sources (one-time, ~25 min total)
# 5a. Research papers (17 arXiv PDFs)
uv run python scripts/fetch_corpus.py
# 5b. Textbooks + course notes (Sutton & Barto, RLHF Book, CS224R)
uv run python scripts/fetch_pdfs.py
# 5c. Web tutorials (Spinning Up, Lilian Weng, HF blog)
uv run python scripts/fetch_web_sources.py
# 5d. Parse all sources β†’ embed β†’ FAISS index (5,531 chunks)
uv run python scripts/parse_corpus.py
uv run python scripts/build_index.py
# 6. Ask a question
uv run python scripts/ask.py "What is the key idea behind PPO?"
uv run python scripts/ask.py --hybrid --rerank "How does Rainbow combine Double DQN and PER?"
# 7. Get a reading plan
uv run python scripts/plan.py --target PPO
uv run python scripts/plan.py --target Rainbow --known DQN
# 8. Run the full eval
uv run python scripts/run_eval.py --groq --hybrid
```