ExamCram is a local AI-driven exam study system for material-grounded teaching, review, and problem solving.
It is designed around three levels of workflow:
Home: configure OpenRouter, choose a default model, and manage workspaces.Workspace: upload course materials, update the knowledge base, inspect extracted knowledge points, and create focused teaching conversations.Conversation: learn through professor cards, answer checkpoint questions, ask the TA for help, and track progress.
- Workspace-based material libraries with manual document refresh
- Automatic knowledge point extraction and lightweight course admin info extraction
- Teaching conversations scoped by module, knowledge point, or material
- Knowledge-point teaching cards with checkpoint questions and grading
- TA side panel with contextual answers
- Review overview and problem-solving workspace tools
- OpenRouter model detection with graceful fallback
- Light and dark theme support
FastAPIJinja2Tailwind CSSSQLModel+ SQLiteChromaDBPyMuPDFOpenRouter
app/
llm/ OpenRouter client and prompt loading
models/ SQLModel tables
routers/ FastAPI routes
services/ Workspace, teaching, TA, review, and problem services
templates/ Jinja templates for home, workspace, and conversation pages
static/
css/ App-level visual system
prompts/ System prompts for professor, TA, and problem solver flows
data/ Local runtime data, generated files, vector store, and uploads
uv syncIf you do not use uv, a standard virtual environment also works:
python -m venv .venv
source .venv/bin/activate
pip install -e .uv run uvicorn app.main:app --reloadOr use the one-command local dev script:
./scripts/dev.shThen open:
From the home page:
- add your OpenRouter API key
- choose a default model from the dropdown
- optionally add a global prompt supplement
OpenRouter uses the standard API base internally, so the app does not require a custom base URL in normal use.
- Create a workspace for one course.
- Upload slides, syllabus, subtitles, and exam materials.
- Click
更新文档to refresh the knowledge base. - Inspect extracted knowledge points and course admin info.
- Create a teaching conversation for a specific module or topic.
- Study through cards, answer checkpoint questions, and ask the TA when needed.
- Use
复习总览and题目攻关as the course progresses.
uv run uvicorn app.main:app --reloadpython -m compileall app- See docs/agent_evaluation_rubric.md for the current agent evaluation rubric and model allocation guidance.
- See docs/ee6222_agent_benchmark.md for the first concrete benchmark suite built from the uploaded EE6222 course materials.
- Local runtime data is stored in
data/ - Uploaded materials, generated text, and vector data are intentionally excluded from git
- Use the issue templates for bugs and feature ideas
- Open pull requests with the provided PR template
- Keep commits focused and descriptive
See CONTRIBUTING.md for the preferred contribution flow.
This repository currently contains a local-first working prototype and ongoing product iteration.
Some deeper production concerns are still intentionally lightweight at this stage, including:
- schema migration tooling
- stronger OCR fallback flows
- richer knowledge graph rendering
- more robust streaming from upstream LLM providers
No license has been added yet.