Production-ish applied-science demo for a PowerPoint copilot:
- ingest slides
- summarize
- retrieval-grounded QA with citations
- scenario eval harness
- finetune reproducibility pipeline
- latency/cost benchmarking
python -m pip install -e .python scripts/generate_sample_pptx.py -o data/raw/sample_deck.pptx
pptcopilot ingest data/raw/sample_deck.pptx -o data/processed/sample.jsonlExpected output:
{"status":"ok",...,"n_records":6}
pptcopilot index data/processed/sample.jsonl --index-dir artifacts/index/sample
pptcopilot summarize data/processed/sample.jsonl --model mock -o reports/summaries/sample_summary.json
pptcopilot qa --index-dir artifacts/index/sample --question "Which slide discusses evaluation harness?" -o reports/qa/sample_qa.jsonExpected artifacts:
reports/summaries/sample_summary.jsonreports/qa/sample_qa.json
pptcopilot eval run --suite smoke --model mock --outdir reports/evalExpected artifacts:
reports/eval/latest_report.jsonreports/eval/latest_report.md
pptcopilot bench latency --suite smoke --out reports/bench/latency.json --iterations 5 --warmup 1 --batch 1
pptcopilot bench cost --in reports/bench/latency.json --out reports/bench/cost.json --summary-out reports/bench/summary.mdExpected artifacts:
reports/bench/latency.jsonreports/bench/cost.jsonreports/bench/summary.md
Install API extras:
python -m pip install -e ".[api]"Run server:
uvicorn pptcopilot.api.app:app --host 0.0.0.0 --port 8000Endpoints:
POST /summarizePOST /qaPOST /eval/run
Example:
curl -s http://localhost:8000/summarize \
-H "Content-Type: application/json" \
-d '{"input_jsonl":"data/processed/sample.jsonl","model":"mock"}'Workflow: .github/workflows/nightly_eval.yml
- PR/push: runs
pytest - nightly cron: runs smoke eval
- uploads
reports/eval/latest_report.json+.mdas artifacts
Smoke finetune:
pptcopilot finetune --config configs/finetune_small.yamlDetails: reports/finetune/README.md.
Terminal capture (portable):
script -q demo_terminal.txt
# run ingest -> index -> summarize -> qa -> eval commands
exitOptional GIF route:
- Record terminal with any recorder (
asciinema rec demo.castor screen recorder). - Convert to GIF (
agg,asciinema + svg-term, or editor export). - Attach the GIF to your repo/PR.
- CLI now emits structured JSON errors and logs stack traces.
- API endpoints return HTTP 400 with informative
detailmessages.