feat: Stage 8 β eval dashboard, mandatory web search, docs update
65cee4e
Project Structure β Prism
prism/
βββ CLAUDE.md
βββ README.md
βββ requirements.txt
βββ .env.example
βββ config.yaml # All tunable params (chunk sizes, weights, eval flags)
βββ Dockerfile
βββ render.yaml
βββ .gitignore
β
βββ .claude/
β βββ settings.json
β βββ hooks/
β β βββ session-reflect.sh
β βββ rules/
β βββ memory-profile.md # Facts about Ben
β βββ memory-preferences.md # How Ben likes things done
β βββ memory-decisions.md # Technical decisions log
β βββ memory-sessions.md # Session log
β βββ coding-standards.md # Code style rules
β
βββ docs/
β βββ architecture.md
β βββ decisions.md
β βββ api-spec.md
β βββ structure.md # This file
β
βββ server/
β βββ __init__.py
β βββ main.py # FastAPI app, lifespan startup
β βββ ingest.py # Load β ParentDocumentRetriever β embed β store
β βββ retriever.py # Hybrid: dense + BM25 + RRF + reranker
β βββ bm25_index.py # BM25 index singleton
β βββ reranker.py # Cross-encoder reranker singleton
β βββ memory.py # ConversationBufferWindowMemory
β βββ chain.py # ConversationalRetrievalChain
β βββ utils.py # Config loader, logger, token counter
β βββ routes/
β β βββ __init__.py
β β βββ chat.py # POST /api/chat, DELETE /api/chat/memory
β β βββ upload.py # POST /api/upload
β β βββ eval.py # GET /api/eval/session, POST /api/eval/precision|ragas
β βββ eval/
β βββ __init__.py
β βββ precision.py # Precision@K
β βββ faithfulness.py # LLM-as-Judge (1β5 score)
β βββ ragas_eval.py # RAGAS (4 metrics)
β
βββ frontend/
β βββ package.json
β βββ vite.config.js
β βββ tailwind.config.js
β βββ index.html
β βββ src/
β βββ main.jsx
β βββ App.jsx # Tab nav: Chat | Eval | Upload
β βββ api.js # Axios client
β βββ components/
β βββ ChatTab.jsx
β βββ EvalDashboard.jsx # RAGAS scorecard + Precision@K + LangSmith link
β βββ UploadTab.jsx # Drag-and-drop upload
β βββ MessageBubble.jsx
β βββ SourceExpander.jsx
β
βββ scripts/
β βββ run_ingest.py # CLI ingestion
β βββ run_eval.py # CLI Precision@K eval
β βββ run_ragas_eval.py # CLI RAGAS eval
β βββ benchmark_chunks.py # Sweep chunk sizes, plot Precision@K
β
βββ tests/
β βββ test_ingest.py
β βββ test_retriever.py
β βββ test_reranker.py
β βββ test_chain.py
β βββ test_eval.py
β βββ test_ragas.py
β
βββ data/
β βββ raw/ # Drop PDFs here (gitignored)
β βββ ground_truth/
β βββ eval_pairs.json # 20 query/chunk pairs + ground_truth field
β
βββ sample_data/ # Seeded sample PDFs for demo
βββ chroma_db/ # Auto-created, gitignored