pixie-qa 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pixie_qa-0.1.0/.claude/settings.local.json +42 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/SKILL.md +282 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/evals.json +52 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/email-classifier/extractor.py +40 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/email-classifier/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/email-classifier-mock/extractor.py +57 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/email-classifier-mock/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/qa-app-with-tests/pixie_datasets/qa-golden-set.json +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/qa-app-with-tests/qa_app.py +26 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/qa-app-with-tests/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/qa-app-with-tests/tests/test_qa.py +24 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/rag-chatbot/chatbot.py +53 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/rag-chatbot/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/rag-chatbot-mock/chatbot.py +46 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/rag-chatbot-mock/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev/references/pixie-api.md +190 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/benchmark.json +363 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/benchmark.md +13 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-debug-failures/eval_metadata.json +13 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-debug-failures/with_skill/outputs/metrics.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-debug-failures/with_skill/outputs/response.md +176 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-debug-failures/with_skill/run-1/grading.json +43 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-debug-failures/with_skill/run-1/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-debug-failures/without_skill/outputs/metrics.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-debug-failures/without_skill/outputs/response.md +180 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-debug-failures/without_skill/run-1/grading.json +44 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-debug-failures/without_skill/run-1/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-json-extraction/eval_metadata.json +13 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-json-extraction/with_skill/outputs/metrics.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-json-extraction/with_skill/outputs/response.md +330 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-json-extraction/with_skill/run-1/grading.json +44 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-json-extraction/with_skill/run-1/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-json-extraction/without_skill/outputs/metrics.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-json-extraction/without_skill/outputs/response.md +387 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-json-extraction/without_skill/run-1/grading.json +44 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-json-extraction/without_skill/run-1/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-rag-chatbot/eval_metadata.json +14 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-rag-chatbot/with_skill/outputs/metrics.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-rag-chatbot/with_skill/outputs/response.md +329 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-rag-chatbot/with_skill/run-1/grading.json +49 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-rag-chatbot/with_skill/run-1/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-rag-chatbot/without_skill/outputs/metrics.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-rag-chatbot/without_skill/outputs/response.md +243 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-rag-chatbot/without_skill/run-1/grading.json +49 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-rag-chatbot/without_skill/run-1/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/benchmark.json +353 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/benchmark.md +13 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/eval_metadata.json +13 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/with_skill/run-1/grading.json +51 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/with_skill/run-1/outputs/metrics.json +33 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/with_skill/run-1/outputs/summary.md +49 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/with_skill/run-1/project/pixie_datasets/qa-golden-set.json +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/with_skill/run-1/project/qa_app.py +26 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/with_skill/run-1/project/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/with_skill/run-1/project/tests/test_qa.py +24 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/with_skill/run-1/timing.json +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/without_skill/run-1/grading.json +51 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/without_skill/run-1/outputs/metrics.json +47 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/without_skill/run-1/outputs/summary.md +87 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/without_skill/run-1/project/pixie_datasets/qa-golden-set.json +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/without_skill/run-1/project/qa_app.py +26 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/without_skill/run-1/project/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/without_skill/run-1/project/tests/test_qa.py +46 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-debug-failures/without_skill/run-1/timing.json +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/eval_metadata.json +13 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/with_skill/run-1/grading.json +52 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/with_skill/run-1/outputs/metrics.json +45 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/with_skill/run-1/outputs/summary.md +80 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/with_skill/run-1/project/MEMORY.md +83 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/with_skill/run-1/project/build_dataset.py +141 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/with_skill/run-1/project/extractor.py +46 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/with_skill/run-1/project/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/with_skill/run-1/project/tests/__init__.py +0 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/with_skill/run-1/project/tests/test_email_extraction.py +229 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/with_skill/run-1/timing.json +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/without_skill/run-1/grading.json +52 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/without_skill/run-1/outputs/metrics.json +28 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/without_skill/run-1/outputs/summary.md +56 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/without_skill/run-1/project/build_dataset.py +108 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/without_skill/run-1/project/extractor.py +55 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/without_skill/run-1/project/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/without_skill/run-1/project/test_extractor.py +290 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-json-extraction/without_skill/run-1/timing.json +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/eval_metadata.json +13 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/with_skill/run-1/grading.json +51 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/with_skill/run-1/outputs/metrics.json +15 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/with_skill/run-1/outputs/summary.md +75 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/with_skill/run-1/project/MEMORY.md +52 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/with_skill/run-1/project/build_dataset.py +91 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/with_skill/run-1/project/chatbot.py +60 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/with_skill/run-1/project/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/with_skill/run-1/project/tests/test_rag_chatbot.py +109 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/with_skill/run-1/timing.json +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/without_skill/run-1/grading.json +52 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/without_skill/run-1/outputs/metrics.json +14 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/without_skill/run-1/outputs/summary.md +50 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/without_skill/run-1/project/build_dataset.py +56 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/without_skill/run-1/project/chatbot.py +66 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/without_skill/run-1/project/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/without_skill/run-1/project/test_chatbot.py +137 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-2/eval-rag-chatbot/without_skill/run-1/timing.json +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/benchmark.json +363 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/benchmark.md +13 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/eval_metadata.json +12 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/with_skill/grading.json +47 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/with_skill/project/MEMORY.md +40 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/with_skill/project/pixie_datasets/qa-golden-set.json +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/with_skill/project/qa_app.py +26 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/with_skill/project/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/with_skill/project/tests/test_qa.py +25 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/with_skill/run-1/grading.json +47 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/with_skill/run-1/outputs/MEMORY.md +40 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/with_skill/run-1/outputs/test_qa.py +25 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/with_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/without_skill/grading.json +53 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/without_skill/project/INVESTIGATION_NOTES.md +74 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/without_skill/project/pixie_datasets/qa-golden-set.json +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/without_skill/project/qa_app.py +26 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/without_skill/project/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/without_skill/project/tests/test_qa.py +83 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/without_skill/run-1/grading.json +53 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/without_skill/run-1/outputs/INVESTIGATION_NOTES.md +74 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/without_skill/run-1/outputs/test_qa.py +83 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-debug-failures/without_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/eval_metadata.json +14 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/with_skill/grading.json +57 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/with_skill/project/MEMORY.md +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/with_skill/project/build_dataset.py +91 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/with_skill/project/extractor.py +64 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/with_skill/project/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/with_skill/project/run_evals.sh +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/with_skill/project/tests/test_classifier.py +117 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/with_skill/run-1/grading.json +57 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/with_skill/run-1/outputs/MEMORY.md +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/with_skill/run-1/outputs/build_dataset.py +91 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/with_skill/run-1/outputs/extractor.py +64 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/with_skill/run-1/outputs/test_classifier.py +117 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/with_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/without_skill/grading.json +63 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/without_skill/project/collect_traces.py +80 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/without_skill/project/extractor.py +57 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/without_skill/project/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/without_skill/run-1/grading.json +63 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/without_skill/run-1/outputs/collect_traces.py +80 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/without_skill/run-1/outputs/extractor.py +57 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-email-classifier/without_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/eval_metadata.json +14 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/with_skill/grading.json +67 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/with_skill/project/MEMORY.md +27 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/with_skill/project/chatbot.py +51 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/with_skill/project/pixie_datasets/rag-chatbot-golden.json +37 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/with_skill/project/pixie_observations.db +0 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/with_skill/project/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/with_skill/project/tests/test_chatbot.py +21 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/with_skill/run-1/grading.json +67 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/with_skill/run-1/outputs/MEMORY.md +27 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/with_skill/run-1/outputs/chatbot.py +51 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/with_skill/run-1/outputs/test_chatbot.py +21 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/with_skill/timing.json +6 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/without_skill/grading.json +63 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/without_skill/project/capture_traces.py +92 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/without_skill/project/chatbot.py +53 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/without_skill/project/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/without_skill/project/test_chatbot_evals.py +273 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/without_skill/run-1/grading.json +63 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/without_skill/run-1/outputs/capture_traces.py +92 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/without_skill/run-1/outputs/chatbot.py +53 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/without_skill/run-1/outputs/test_chatbot_evals.py +273 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/without_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/benchmark.json +363 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/benchmark.md +13 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/eval_metadata.json +12 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/with_skill/grading.json +40 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/with_skill/project/MEMORY.md +40 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/with_skill/project/pixie_datasets/qa-golden-set.json +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/with_skill/project/qa_app.py +26 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/with_skill/project/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/with_skill/project/tests/test_qa.py +25 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/with_skill/run-1/grading.json +40 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/with_skill/run-1/outputs/MEMORY.md +40 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/with_skill/run-1/outputs/test_qa.py +25 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/with_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/without_skill/grading.json +51 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/without_skill/project/pixie_datasets/qa-golden-set.json +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/without_skill/project/qa_app.py +26 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/without_skill/project/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/without_skill/project/tests/test_qa.py +24 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/without_skill/run-1/grading.json +51 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/without_skill/run-1/outputs/test_qa.py +24 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-debug-failures/without_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/eval_metadata.json +14 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/with_skill/grading.json +50 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/with_skill/project/MEMORY.md +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/with_skill/project/extractor.py +63 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/with_skill/project/pixie_datasets/email-classifier-golden.json +29 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/with_skill/project/pixie_observations.db +0 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/with_skill/project/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/with_skill/project/tests/test_email_classifier.py +86 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/with_skill/run-1/grading.json +50 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/with_skill/run-1/outputs/MEMORY.md +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/with_skill/run-1/outputs/extractor.py +63 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/with_skill/run-1/outputs/test_email_classifier.py +86 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/with_skill/timing.json +6 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/without_skill/grading.json +57 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/without_skill/project/conftest.py +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/without_skill/project/extractor.py +57 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/without_skill/project/generate_dataset.py +78 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/without_skill/project/instrumented_extractor.py +22 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/without_skill/project/pytest.ini +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/without_skill/project/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/without_skill/project/test_email_classifier.py +329 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/without_skill/run-1/grading.json +57 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/without_skill/run-1/outputs/extractor.py +57 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/without_skill/run-1/outputs/test_email_classifier.py +329 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-email-classifier/without_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/eval_metadata.json +14 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/with_skill/grading.json +50 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/with_skill/project/MEMORY.md +22 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/with_skill/project/chatbot.py +52 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/with_skill/project/pixie_datasets/rag-chatbot-golden.json +29 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/with_skill/project/pixie_observations.db +0 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/with_skill/project/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/with_skill/project/tests/test_rag_chatbot.py +28 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/with_skill/run-1/grading.json +50 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/with_skill/run-1/outputs/MEMORY.md +22 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/with_skill/run-1/outputs/chatbot.py +52 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/with_skill/run-1/outputs/test_rag_chatbot.py +28 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/with_skill/timing.json +6 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/without_skill/grading.json +57 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/without_skill/project/chatbot.py +46 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/without_skill/project/chatbot_instrumented.py +72 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/without_skill/project/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/without_skill/project/save_dataset.py +86 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/without_skill/project/test_chatbot_evals.py +180 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/without_skill/run-1/grading.json +57 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/without_skill/run-1/outputs/chatbot_instrumented.py +72 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/without_skill/run-1/outputs/test_chatbot_evals.py +180 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/without_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/benchmark.json +363 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/benchmark.md +13 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/eval_metadata.json +12 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/with_skill/grading.json +71 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/with_skill/project/MEMORY.md +51 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/with_skill/project/pixie_datasets/qa-golden-set.json +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/with_skill/project/qa_app.py +26 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/with_skill/project/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/with_skill/project/tests/test_qa.py +60 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/with_skill/run-1/grading.json +71 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/with_skill/run-1/outputs/MEMORY.md +51 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/with_skill/run-1/outputs/pixie_datasets/qa-golden-set.json +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/with_skill/run-1/outputs/qa_app.py +26 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/with_skill/run-1/outputs/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/with_skill/run-1/outputs/tests/test_qa.py +60 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/with_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/without_skill/grading.json +77 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/without_skill/project/MEMORY.md +48 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/without_skill/project/pixie_datasets/qa-golden-set.json +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/without_skill/project/qa_app.py +26 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/without_skill/project/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/without_skill/project/tests/test_qa.py +44 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/without_skill/run-1/grading.json +77 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/without_skill/run-1/outputs/MEMORY.md +48 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/without_skill/run-1/outputs/pixie_datasets/qa-golden-set.json +23 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/without_skill/run-1/outputs/qa_app.py +26 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/without_skill/run-1/outputs/requirements.txt +2 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/without_skill/run-1/outputs/tests/test_qa.py +44 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-debug-failures/without_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/eval_metadata.json +14 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/with_skill/grading.json +77 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/with_skill/project/MEMORY.md +48 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/with_skill/project/build_dataset.py +93 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/with_skill/project/extractor.py +65 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/with_skill/project/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/with_skill/project/tests/test_email_classifier.py +22 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/with_skill/run-1/grading.json +77 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/with_skill/run-1/outputs/MEMORY.md +48 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/with_skill/run-1/outputs/build_dataset.py +93 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/with_skill/run-1/outputs/extractor.py +65 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/with_skill/run-1/outputs/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/with_skill/run-1/outputs/tests/test_email_classifier.py +22 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/with_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/without_skill/grading.json +82 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/without_skill/project/build_dataset.py +156 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/without_skill/project/extractor.py +62 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/without_skill/project/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/without_skill/project/test_email_classifier.py +345 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/without_skill/run-1/grading.json +82 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/without_skill/run-1/outputs/build_dataset.py +156 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/without_skill/run-1/outputs/extractor.py +62 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/without_skill/run-1/outputs/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/without_skill/run-1/outputs/test_email_classifier.py +345 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-email-classifier/without_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/eval_metadata.json +14 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/with_skill/grading.json +81 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/with_skill/project/MEMORY.md +71 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/with_skill/project/build_dataset.py +63 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/with_skill/project/chatbot.py +53 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/with_skill/project/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/with_skill/project/tests/test_rag_chatbot.py +54 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/with_skill/run-1/grading.json +81 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/with_skill/run-1/outputs/MEMORY.md +71 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/with_skill/run-1/outputs/build_dataset.py +63 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/with_skill/run-1/outputs/chatbot.py +53 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/with_skill/run-1/outputs/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/with_skill/run-1/outputs/tests/test_rag_chatbot.py +54 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/with_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/without_skill/grading.json +81 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/without_skill/project/MEMORY.md +62 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/without_skill/project/chatbot.py +52 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/without_skill/project/datasets/rag-chatbot-golden.json +41 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/without_skill/project/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/without_skill/project/test_chatbot_eval.py +152 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/without_skill/run-1/grading.json +81 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/without_skill/run-1/outputs/MEMORY.md +62 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/without_skill/run-1/outputs/chatbot.py +52 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/without_skill/run-1/outputs/datasets/rag-chatbot-golden.json +41 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/without_skill/run-1/outputs/requirements.txt +1 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/without_skill/run-1/outputs/test_chatbot_eval.py +152 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/iteration-5/eval-rag-chatbot/without_skill/timing.json +5 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/review-iteration-1.html +1325 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/review-iteration-2.html +1325 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/review-iteration-3.html +1325 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/review-iteration-4.html +1325 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/review-iteration-5.html +1325 -0
- pixie_qa-0.1.0/.claude/skills/eval-driven-dev-workspace/trigger-eval-set.json +82 -0
- pixie_qa-0.1.0/.github/copilot-instructions.md +526 -0
- pixie_qa-0.1.0/.github/workflows/daily-release.yml +139 -0
- pixie_qa-0.1.0/.github/workflows/deploy-docs.yml +171 -0
- pixie_qa-0.1.0/.github/workflows/publish.yml +80 -0
- pixie_qa-0.1.0/.gitignore +4 -0
- pixie_qa-0.1.0/LICENSE +21 -0
- pixie_qa-0.1.0/PKG-INFO +162 -0
- pixie_qa-0.1.0/README.md +97 -0
- pixie_qa-0.1.0/changelogs/async-handler-processing.md +96 -0
- pixie_qa-0.1.0/changelogs/autoevals-adapters.md +39 -0
- pixie_qa-0.1.0/changelogs/cli-dataset-commands.md +37 -0
- pixie_qa-0.1.0/changelogs/dataset-management.md +91 -0
- pixie_qa-0.1.0/changelogs/eval-harness.md +128 -0
- pixie_qa-0.1.0/changelogs/expected-output-in-evals.md +42 -0
- pixie_qa-0.1.0/changelogs/instrumentation-module-implementation.md +55 -0
- pixie_qa-0.1.0/changelogs/manual-instrumentation-usability.md +56 -0
- pixie_qa-0.1.0/changelogs/observation-store-implementation.md +53 -0
- pixie_qa-0.1.0/changelogs/usability-utils.md +60 -0
- pixie_qa-0.1.0/docs/package.md +213 -0
- pixie_qa-0.1.0/pixie/__init__.py +11 -0
- pixie_qa-0.1.0/pixie/cli/__init__.py +6 -0
- pixie_qa-0.1.0/pixie/cli/dataset_command.py +193 -0
- pixie_qa-0.1.0/pixie/cli/main.py +192 -0
- pixie_qa-0.1.0/pixie/cli/test_command.py +68 -0
- pixie_qa-0.1.0/pixie/config.py +41 -0
- pixie_qa-0.1.0/pixie/dataset/__init__.py +11 -0
- pixie_qa-0.1.0/pixie/dataset/models.py +21 -0
- pixie_qa-0.1.0/pixie/dataset/store.py +212 -0
- pixie_qa-0.1.0/pixie/evals/__init__.py +111 -0
- pixie_qa-0.1.0/pixie/evals/criteria.py +77 -0
- pixie_qa-0.1.0/pixie/evals/eval_utils.py +244 -0
- pixie_qa-0.1.0/pixie/evals/evaluation.py +112 -0
- pixie_qa-0.1.0/pixie/evals/runner.py +187 -0
- pixie_qa-0.1.0/pixie/evals/scorers.py +755 -0
- pixie_qa-0.1.0/pixie/evals/trace_capture.py +70 -0
- pixie_qa-0.1.0/pixie/evals/trace_helpers.py +57 -0
- pixie_qa-0.1.0/pixie/instrumentation/__init__.py +49 -0
- pixie_qa-0.1.0/pixie/instrumentation/context.py +86 -0
- pixie_qa-0.1.0/pixie/instrumentation/handler.py +72 -0
- pixie_qa-0.1.0/pixie/instrumentation/handlers.py +83 -0
- pixie_qa-0.1.0/pixie/instrumentation/instrumentors.py +31 -0
- pixie_qa-0.1.0/pixie/instrumentation/observation.py +211 -0
- pixie_qa-0.1.0/pixie/instrumentation/processor.py +366 -0
- pixie_qa-0.1.0/pixie/instrumentation/queue.py +88 -0
- pixie_qa-0.1.0/pixie/instrumentation/spans.py +165 -0
- pixie_qa-0.1.0/pixie/storage/__init__.py +27 -0
- pixie_qa-0.1.0/pixie/storage/evaluable.py +129 -0
- pixie_qa-0.1.0/pixie/storage/piccolo_conf.py +10 -0
- pixie_qa-0.1.0/pixie/storage/piccolo_migrations/__init__.py +1 -0
- pixie_qa-0.1.0/pixie/storage/serialization.py +227 -0
- pixie_qa-0.1.0/pixie/storage/store.py +231 -0
- pixie_qa-0.1.0/pixie/storage/tables.py +21 -0
- pixie_qa-0.1.0/pixie/storage/tree.py +199 -0
- pixie_qa-0.1.0/pyproject.toml +101 -0
- pixie_qa-0.1.0/specs/agent-skill.md +54 -0
- pixie_qa-0.1.0/specs/autoevals-adapters.md +301 -0
- pixie_qa-0.1.0/specs/dataset-management.md +727 -0
- pixie_qa-0.1.0/specs/evals-harness.md +542 -0
- pixie_qa-0.1.0/specs/expected-output-in-evals.md +141 -0
- pixie_qa-0.1.0/specs/instrumentation.md +726 -0
- pixie_qa-0.1.0/specs/manual-instrumentation-usability.md +767 -0
- pixie_qa-0.1.0/specs/storage.md +473 -0
- pixie_qa-0.1.0/specs/usability-utils.md +327 -0
- pixie_qa-0.1.0/tests/__init__.py +0 -0
- pixie_qa-0.1.0/tests/pixie/__init__.py +0 -0
- pixie_qa-0.1.0/tests/pixie/cli/__init__.py +0 -0
- pixie_qa-0.1.0/tests/pixie/cli/test_dataset_command.py +412 -0
- pixie_qa-0.1.0/tests/pixie/cli/test_main.py +261 -0
- pixie_qa-0.1.0/tests/pixie/dataset/__init__.py +0 -0
- pixie_qa-0.1.0/tests/pixie/dataset/test_models.py +64 -0
- pixie_qa-0.1.0/tests/pixie/dataset/test_store.py +222 -0
- pixie_qa-0.1.0/tests/pixie/evals/__init__.py +0 -0
- pixie_qa-0.1.0/tests/pixie/evals/test_criteria.py +116 -0
- pixie_qa-0.1.0/tests/pixie/evals/test_eval_utils.py +531 -0
- pixie_qa-0.1.0/tests/pixie/evals/test_evaluation.py +177 -0
- pixie_qa-0.1.0/tests/pixie/evals/test_runner.py +238 -0
- pixie_qa-0.1.0/tests/pixie/evals/test_scorers.py +558 -0
- pixie_qa-0.1.0/tests/pixie/evals/test_trace_capture.py +205 -0
- pixie_qa-0.1.0/tests/pixie/evals/test_trace_helpers.py +154 -0
- pixie_qa-0.1.0/tests/pixie/instrumentation/__init__.py +0 -0
- pixie_qa-0.1.0/tests/pixie/instrumentation/conftest.py +35 -0
- pixie_qa-0.1.0/tests/pixie/instrumentation/test_context.py +157 -0
- pixie_qa-0.1.0/tests/pixie/instrumentation/test_handler.py +192 -0
- pixie_qa-0.1.0/tests/pixie/instrumentation/test_integration.py +208 -0
- pixie_qa-0.1.0/tests/pixie/instrumentation/test_observation.py +150 -0
- pixie_qa-0.1.0/tests/pixie/instrumentation/test_processor.py +560 -0
- pixie_qa-0.1.0/tests/pixie/instrumentation/test_queue.py +223 -0
- pixie_qa-0.1.0/tests/pixie/instrumentation/test_spans.py +254 -0
- pixie_qa-0.1.0/tests/pixie/instrumentation/test_storage_handler.py +108 -0
- pixie_qa-0.1.0/tests/pixie/observation_store/__init__.py +0 -0
- pixie_qa-0.1.0/tests/pixie/observation_store/conftest.py +231 -0
- pixie_qa-0.1.0/tests/pixie/observation_store/test_evaluable.py +151 -0
- pixie_qa-0.1.0/tests/pixie/observation_store/test_serialization.py +156 -0
- pixie_qa-0.1.0/tests/pixie/observation_store/test_store.py +289 -0
- pixie_qa-0.1.0/tests/pixie/observation_store/test_tree.py +248 -0
- pixie_qa-0.1.0/tests/pixie/test_config.py +58 -0
- pixie_qa-0.1.0/uv.lock +1456 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(mkdir -p /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-rag-chatbot/with_skill/outputs\nmkdir -p /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-rag-chatbot/without_skill/outputs\nmkdir -p /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-json-extraction/with_skill/outputs\nmkdir -p /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-json-extraction/without_skill/outputs\nmkdir -p /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-debug-failures/with_skill/outputs\nmkdir -p /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-1/eval-debug-failures/without_skill/outputs\necho \"Directories created\")",
|
|
5
|
+
"Bash(cd /home/yiouli/repo/pixie-qa/.claude/skills/skill-creator && python -m scripts.aggregate_benchmark /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-1 --skill-name eval-driven-dev 2>&1)",
|
|
6
|
+
"Bash(python3 -c \"\nimport sys; sys.path.insert\\(0, '/home/yiouli/repo/pixie-qa/.claude/skills/skill-creator'\\)\nfrom scripts.aggregate_benchmark import generate_benchmark\nimport inspect, json\nsrc = inspect.getsource\\(generate_benchmark\\)\nprint\\(src[:3000]\\)\n\" 2>&1)",
|
|
7
|
+
"Bash(python3 -c \"\nimport sys; sys.path.insert\\(0, '/home/yiouli/repo/pixie-qa/.claude/skills/skill-creator'\\)\nfrom scripts.aggregate_benchmark import load_run_results\nimport inspect\nsrc = inspect.getsource\\(load_run_results\\)\nprint\\(src\\)\n\" 2>&1)",
|
|
8
|
+
"Bash(python -m scripts.aggregate_benchmark /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-1 --skill-name eval-driven-dev 2>&1)",
|
|
9
|
+
"Bash(python /home/yiouli/repo/pixie-qa/.claude/skills/skill-creator/eval-viewer/generate_review.py \\\\\n /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-1 \\\\\n --skill-name \"eval-driven-dev\" \\\\\n --benchmark /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-1/benchmark.json \\\\\n --static /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/review-iteration-1.html \\\\\n 2>&1)",
|
|
10
|
+
"Bash(mkdir -p /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev/evals/sample-projects/rag-chatbot\nmkdir -p /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev/evals/sample-projects/email-classifier\nmkdir -p /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev/evals/sample-projects/qa-app-with-tests/tests\nmkdir -p /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev/evals/sample-projects/qa-app-with-tests/pixie_datasets\necho \"done\")",
|
|
11
|
+
"Bash(python -m scripts.aggregate_benchmark /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-2 --skill-name eval-driven-dev 2>&1)",
|
|
12
|
+
"Bash(python /home/yiouli/repo/pixie-qa/.claude/skills/skill-creator/eval-viewer/generate_review.py \\\\\n /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-2 \\\\\n --skill-name \"eval-driven-dev\" \\\\\n --benchmark /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-2/benchmark.json \\\\\n --previous-workspace /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-1 \\\\\n --static /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/review-iteration-2.html \\\\\n 2>&1)",
|
|
13
|
+
"Bash(mkdir -p /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev/evals/sample-projects/rag-chatbot-mock\nmkdir -p /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev/evals/sample-projects/email-classifier-mock\necho \"done\")",
|
|
14
|
+
"Bash(cd /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-3/eval-rag-chatbot/with_skill/project && PYTHONPATH=/home/yiouli/repo/pixie-qa python chatbot.py)",
|
|
15
|
+
"Bash(PYTHONPATH=/home/yiouli/repo/pixie-qa pixie dataset create rag-chatbot-golden && PYTHONPATH=/home/yiouli/repo/pixie-qa pixie dataset list)",
|
|
16
|
+
"Bash(for i:*)",
|
|
17
|
+
"Bash(for f:*)",
|
|
18
|
+
"Bash(for id:*)",
|
|
19
|
+
"Bash(cd /home/yiouli/repo/pixie-qa/.claude/skills/skill-creator && python -m scripts.aggregate_benchmark /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-3 --skill-name eval-driven-dev 2>&1)",
|
|
20
|
+
"Bash(python eval-viewer/generate_review.py \\\\\n /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-3 \\\\\n --skill-name \"eval-driven-dev\" \\\\\n --benchmark /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-3/benchmark.json \\\\\n --previous-workspace /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-2 \\\\\n --static /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/review-iteration-3.html \\\\\n 2>&1)",
|
|
21
|
+
"Bash(python eval-viewer/generate_review.py --help 2>&1 | head -30)",
|
|
22
|
+
"Bash(python -m scripts.aggregate_benchmark /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-3 --skill-name eval-driven-dev 2>&1 && cat /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-3/benchmark.md)",
|
|
23
|
+
"Bash(WORKSPACE=/home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-4\nEVALS_DIR=/home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev/evals/sample-projects\n\nmkdir -p \"$WORKSPACE/eval-rag-chatbot/with_skill/project\"\nmkdir -p \"$WORKSPACE/eval-rag-chatbot/without_skill/project\"\nmkdir -p \"$WORKSPACE/eval-email-classifier/with_skill/project\"\nmkdir -p \"$WORKSPACE/eval-email-classifier/without_skill/project\"\nmkdir -p \"$WORKSPACE/eval-debug-failures/with_skill/project\"\nmkdir -p \"$WORKSPACE/eval-debug-failures/without_skill/project\"\n\ncp \"$EVALS_DIR/rag-chatbot-mock/chatbot.py\" \"$WORKSPACE/eval-rag-chatbot/with_skill/project/\"\ncp \"$EVALS_DIR/rag-chatbot-mock/requirements.txt\" \"$WORKSPACE/eval-rag-chatbot/with_skill/project/\"\ncp \"$EVALS_DIR/rag-chatbot-mock/chatbot.py\" \"$WORKSPACE/eval-rag-chatbot/without_skill/project/\"\ncp \"$EVALS_DIR/rag-chatbot-mock/requirements.txt\" \"$WORKSPACE/eval-rag-chatbot/without_skill/project/\"\n\ncp \"$EVALS_DIR/email-classifier-mock/extractor.py\" \"$WORKSPACE/eval-email-classifier/with_skill/project/\"\ncp \"$EVALS_DIR/email-classifier-mock/requirements.txt\" \"$WORKSPACE/eval-email-classifier/with_skill/project/\"\ncp \"$EVALS_DIR/email-classifier-mock/extractor.py\" \"$WORKSPACE/eval-email-classifier/without_skill/project/\"\ncp \"$EVALS_DIR/email-classifier-mock/requirements.txt\" \"$WORKSPACE/eval-email-classifier/without_skill/project/\"\n\ncp -r \"$EVALS_DIR/qa-app-with-tests/.\" \"$WORKSPACE/eval-debug-failures/with_skill/project/\"\ncp -r \"$EVALS_DIR/qa-app-with-tests/.\" \"$WORKSPACE/eval-debug-failures/without_skill/project/\"\n\necho \"Done\")",
|
|
24
|
+
"Bash(cd /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-4/eval-rag-chatbot/with_skill/project\n\nPYTHONPATH=/home/yiouli/repo/pixie-qa python chatbot.py\nPYTHONPATH=/home/yiouli/repo/pixie-qa pixie dataset create rag-chatbot-golden\nfor i in 1 2 3 4; do PYTHONPATH=/home/yiouli/repo/pixie-qa pixie dataset save rag-chatbot-golden; done\nPYTHONPATH=/home/yiouli/repo/pixie-qa pixie dataset list)",
|
|
25
|
+
"Bash(git checkout:*)",
|
|
26
|
+
"Bash(cd /home/yiouli/repo/pixie-qa/.claude/skills/skill-creator\n\npython -m scripts.aggregate_benchmark /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-4 --skill-name eval-driven-dev 2>&1\n\npython eval-viewer/generate_review.py \\\\\n /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-4 \\\\\n --skill-name \"eval-driven-dev\" \\\\\n --benchmark /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-4/benchmark.json \\\\\n --previous-workspace /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-3 \\\\\n --static /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/review-iteration-4.html \\\\\n 2>&1)",
|
|
27
|
+
"Bash(xdg-open /tmp/eval_review_eval-driven-dev.html 2>/dev/null || open /tmp/eval_review_eval-driven-dev.html 2>/dev/null || echo \"no browser available\")",
|
|
28
|
+
"Bash(python -m scripts.run_loop \\\\\n --eval-set /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/trigger-eval-set.json \\\\\n --skill-path /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev \\\\\n --model claude-sonnet-4-6 \\\\\n --max-iterations 5 \\\\\n --verbose 2>&1 | tee /tmp/run_loop_output.txt)",
|
|
29
|
+
"Bash(ls /tmp/skill_description_report_*.html 2>/dev/null | tail -1)",
|
|
30
|
+
"Bash(xdg-open /tmp/skill_description_report_eval-driven-dev_20260312_004156.html 2>/dev/null; echo \"done\")",
|
|
31
|
+
"Bash(python -m scripts.run_eval \\\\\n --skill-path /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev \\\\\n --query \"i have a rag chatbot in ~/projects/support-bot/chatbot.py that answers questions based on our zendesk docs. it's been giving inconsistent answers lately and i want to make sure it's actually working correctly\" \\\\\n --runs 1 2>&1)",
|
|
32
|
+
"Bash(python -m scripts.run_loop \\\\\n --eval-set /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/trigger-eval-set.json \\\\\n --skill-path /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev \\\\\n --model claude-sonnet-4-6 \\\\\n --max-iterations 5 \\\\\n --verbose 2>&1 | tee /tmp/run_loop_output_v2.txt)",
|
|
33
|
+
"Bash(cd /home/yiouli/repo/pixie-qa && env -u CLAUDECODE claude -p \"list all available skills you can see\" --output-format text 2>&1 | head -30)",
|
|
34
|
+
"Bash(find /home/yiouli/repo/pixie-qa/.claude -name \"*.json\" -o -name \"settings*\" 2>/dev/null | head -20)",
|
|
35
|
+
"Bash(env -u CLAUDECODE claude -p \"what is the FULL description of the eval-driven-dev skill?\" --output-format text 2>&1)",
|
|
36
|
+
"Bash(cat /home/yiouli/repo/pixie-qa/.claude/skills/mcp-builder/.openskills.json 2>/dev/null | python3 -m json.tool | head -20)",
|
|
37
|
+
"Bash(WORKSPACE=/home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace\nEVALS_DIR=/home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev/evals/sample-projects\n\nmkdir -p \"$WORKSPACE/iteration-5/eval-rag-chatbot/with_skill/project\"\nmkdir -p \"$WORKSPACE/iteration-5/eval-rag-chatbot/without_skill/project\"\nmkdir -p \"$WORKSPACE/iteration-5/eval-email-classifier/with_skill/project\"\nmkdir -p \"$WORKSPACE/iteration-5/eval-email-classifier/without_skill/project\"\nmkdir -p \"$WORKSPACE/iteration-5/eval-debug-failures/with_skill/project\"\nmkdir -p \"$WORKSPACE/iteration-5/eval-debug-failures/without_skill/project\"\n\ncp \"$EVALS_DIR/rag-chatbot-mock/chatbot.py\" \"$WORKSPACE/iteration-5/eval-rag-chatbot/with_skill/project/\"\ncp \"$EVALS_DIR/rag-chatbot-mock/requirements.txt\" \"$WORKSPACE/iteration-5/eval-rag-chatbot/with_skill/project/\"\ncp \"$EVALS_DIR/rag-chatbot-mock/chatbot.py\" \"$WORKSPACE/iteration-5/eval-rag-chatbot/without_skill/project/\"\ncp \"$EVALS_DIR/rag-chatbot-mock/requirements.txt\" \"$WORKSPACE/iteration-5/eval-rag-chatbot/without_skill/project/\"\n\ncp \"$EVALS_DIR/email-classifier-mock/extractor.py\" \"$WORKSPACE/iteration-5/eval-email-classifier/with_skill/project/\"\ncp \"$EVALS_DIR/email-classifier-mock/requirements.txt\" \"$WORKSPACE/iteration-5/eval-email-classifier/with_skill/project/\"\ncp \"$EVALS_DIR/email-classifier-mock/extractor.py\" \"$WORKSPACE/iteration-5/eval-email-classifier/without_skill/project/\"\ncp \"$EVALS_DIR/email-classifier-mock/requirements.txt\" \"$WORKSPACE/iteration-5/eval-email-classifier/without_skill/project/\"\n\ncp -r \"$EVALS_DIR/qa-app-with-tests/.\" \"$WORKSPACE/iteration-5/eval-debug-failures/with_skill/project/\"\ncp -r \"$EVALS_DIR/qa-app-with-tests/.\" \"$WORKSPACE/iteration-5/eval-debug-failures/without_skill/project/\"\n\necho \"Done\")",
|
|
38
|
+
"Bash(cd /home/yiouli/repo/pixie-qa/.claude/skills/skill-creator && python -m scripts.aggregate_benchmark /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-5 --skill-name eval-driven-dev 2>&1 && cat /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-5/benchmark.md)",
|
|
39
|
+
"Bash(python eval-viewer/generate_review.py \\\\\n /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-5 \\\\\n --skill-name \"eval-driven-dev\" \\\\\n --benchmark /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-5/benchmark.json \\\\\n --previous-workspace /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/iteration-4 \\\\\n --static /home/yiouli/repo/pixie-qa/.claude/skills/eval-driven-dev-workspace/review-iteration-5.html \\\\\n 2>&1)"
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eval-driven-dev
|
|
3
|
+
description: Instrument Python LLM apps, build golden datasets, write eval-based tests, run them, and root-cause failures — covering the full eval-driven development cycle. Make sure to use this skill whenever a user is developing, testing, QA-ing, evaluating, or benchmarking a Python project that calls an LLM, even if they don't say "evals" explicitly. Use for making sure an AI app works correctly, catching regressions after prompt changes, debugging why an agent started behaving differently, or validating output quality before shipping.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Eval-Driven Development with pixie
|
|
7
|
+
|
|
8
|
+
This skill is about doing the work, not describing it. When a user asks you to set up evals for their app, you should be reading their code, editing their files, running commands, and producing a working test pipeline — not writing a plan for them to follow later.
|
|
9
|
+
|
|
10
|
+
The loop is: understand the app → instrument it → write the test file → build a dataset → run the tests → investigate failures → iterate. In practice the stages blur and you'll be going back and forth, but this ordering helps: write all the files (instrumentation, test file, MEMORY.md) before running any commands. That way your work survives even if an execution step hits a snag.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Stage 1: Understand the Application
|
|
15
|
+
|
|
16
|
+
Before touching any code, spend time actually reading the source. The code will tell you more than asking the user would, and it puts you in a much better position to make good decisions about what and how to evaluate.
|
|
17
|
+
|
|
18
|
+
What you're looking for:
|
|
19
|
+
|
|
20
|
+
- The entry point and the main function(s) that do the LLM-powered work
|
|
21
|
+
- Every place external data flows into a prompt — user input, retrieved documents, database results, API responses, system prompts
|
|
22
|
+
- The final output (what the user sees or what gets returned)
|
|
23
|
+
- Any intermediate steps that might be worth evaluating separately (e.g. a retrieval step)
|
|
24
|
+
|
|
25
|
+
Write your findings down in a `MEMORY.md` file in the project (or `.claude/memory/eval-notes.md`) as you go. Include:
|
|
26
|
+
|
|
27
|
+
- How to run the app
|
|
28
|
+
- Which function(s) you'll instrument and what their `eval_input` / `eval_output` will look like
|
|
29
|
+
- The use cases the app handles
|
|
30
|
+
- Your eval plan: what to measure and which evaluators make sense
|
|
31
|
+
|
|
32
|
+
This file is how your understanding persists across sessions. Keep it updated as you learn more.
|
|
33
|
+
|
|
34
|
+
If something is genuinely unclear from the code, ask the user — but most questions answer themselves once you've read the code carefully.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Stage 2: Decide What to Evaluate
|
|
39
|
+
|
|
40
|
+
Now that you understand the app, you can make thoughtful choices about what to measure:
|
|
41
|
+
|
|
42
|
+
- **What quality dimension matters most?** Factual accuracy for QA apps, output format for structured extraction, relevance for RAG, safety for user-facing text.
|
|
43
|
+
- **Which span to evaluate:** the whole pipeline (`root`) or just the LLM call (`last_llm_call`)? If you're debugging retrieval, you might evaluate at a different point than if you're checking final answer quality.
|
|
44
|
+
- **Which evaluators fit:** see `references/pixie-api.md` → Evaluators. For factual QA: `FactualityEval`. For structured output: `ValidJSONEval` / `JSONDiffEval`. For RAG pipelines: `ContextRelevancyEval` / `FaithfulnessEval`.
|
|
45
|
+
- **Pass criteria:** `ScoreThreshold(threshold=0.7, pct=0.8)` means 80% of cases must score ≥ 0.7. Think about what "good enough" looks like for this app.
|
|
46
|
+
- **Expected outputs:** `FactualityEval` needs them. Format evaluators usually don't.
|
|
47
|
+
|
|
48
|
+
Update your MEMORY.md with the plan before writing any code.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Stage 3: Instrument the Application
|
|
53
|
+
|
|
54
|
+
Edit the app's source files to add pixie instrumentation. The goal is to make every run capture its inputs and outputs as observable spans, so you can later replay those runs as eval cases.
|
|
55
|
+
|
|
56
|
+
### Add `enable_storage()` at startup
|
|
57
|
+
|
|
58
|
+
Somewhere in the app's entry point — main function or module top-level — call:
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
from pixie import enable_storage
|
|
62
|
+
enable_storage() # creates SQLite DB, registers handler — idempotent
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
This is what actually persists traces to disk. Without it, `@observe` decorators will still fire but nothing gets saved.
|
|
66
|
+
|
|
67
|
+
### Wrap the function(s) you want to evaluate
|
|
68
|
+
|
|
69
|
+
`@observe` on a function captures all its kwargs as `eval_input` and its return value as `eval_output`:
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
import pixie.instrumentation as px
|
|
73
|
+
|
|
74
|
+
@px.observe(name="answer_question")
|
|
75
|
+
def answer_question(question: str, context: str) -> str:
|
|
76
|
+
...
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
For more control, use the context manager:
|
|
80
|
+
|
|
81
|
+
```python
|
|
82
|
+
with px.start_observation(input={"question": question, "context": context}, name="answer_question") as obs:
|
|
83
|
+
result = run_pipeline(question, context)
|
|
84
|
+
obs.set_output(result)
|
|
85
|
+
obs.set_metadata("retrieved_chunks", len(chunks))
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Wrap at the outermost boundary that represents one "test case" — for a RAG app that's probably `answer_question(question, context)`, not the internal LLM call. The dataset items will have the same shape as whatever this function receives and returns.
|
|
89
|
+
|
|
90
|
+
After instrumentation, call `px.flush()` at the end of runs to make sure all spans are written before you try to save them to a dataset.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Stage 4: Write the Eval Test File
|
|
95
|
+
|
|
96
|
+
Write the test file before building the dataset. This might seem backwards, but it forces you to decide what you're actually measuring before you start collecting data — otherwise the data collection has no direction.
|
|
97
|
+
|
|
98
|
+
Create `tests/test_<feature>.py`. The pattern is: a `runnable` adapter that calls your app function, plus an async test function that calls `assert_dataset_pass`:
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
from pixie import enable_storage
|
|
102
|
+
from pixie.evals import assert_dataset_pass, FactualityEval, ScoreThreshold
|
|
103
|
+
from pixie.evals import last_llm_call # or: from pixie.evals import root
|
|
104
|
+
|
|
105
|
+
from myapp import answer_question
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def runnable(eval_input):
|
|
109
|
+
"""Replays one dataset item through the app. enable_storage() here ensures traces are captured."""
|
|
110
|
+
enable_storage()
|
|
111
|
+
answer_question(**eval_input) # or answer_question(eval_input) if it's a plain string
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
async def test_factuality():
|
|
115
|
+
await assert_dataset_pass(
|
|
116
|
+
runnable=runnable,
|
|
117
|
+
dataset_name="<dataset-name>",
|
|
118
|
+
evaluators=[FactualityEval()],
|
|
119
|
+
pass_criteria=ScoreThreshold(threshold=0.7, pct=0.8),
|
|
120
|
+
from_trace=last_llm_call, # tells the harness which span's output to evaluate
|
|
121
|
+
)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Note that `enable_storage()` belongs inside the `runnable`, not at module level in the test file — it needs to fire on each invocation so the trace is captured for that specific run.
|
|
125
|
+
|
|
126
|
+
The test runner is `pixie-test` (not `pytest` or `python -m pixie test` — those won't set up the async environment correctly):
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
pixie-test # run all test_*.py in current directory
|
|
130
|
+
pixie-test tests/ # specify path
|
|
131
|
+
pixie-test -k factuality # filter by name
|
|
132
|
+
pixie-test -v # verbose: shows per-case scores and reasoning
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Stage 5: Build the Dataset
|
|
138
|
+
|
|
139
|
+
Create the dataset first, then populate it by running the app:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
pixie dataset create <dataset-name>
|
|
143
|
+
pixie dataset list # verify it exists
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Option A: Capture from real runs (the natural starting point)
|
|
147
|
+
|
|
148
|
+
Run the app with representative inputs, then save each trace to the dataset:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
# Run the app (enable_storage() must be active)
|
|
152
|
+
python -c "from myapp import main; main('What is the capital of France?')"
|
|
153
|
+
|
|
154
|
+
# Save the root span to the dataset
|
|
155
|
+
pixie dataset save <dataset-name>
|
|
156
|
+
|
|
157
|
+
# Or specifically save the last LLM call:
|
|
158
|
+
pixie dataset save <dataset-name> --select last_llm_call
|
|
159
|
+
|
|
160
|
+
# Add context:
|
|
161
|
+
pixie dataset save <dataset-name> --notes "basic geography question"
|
|
162
|
+
|
|
163
|
+
# Attach expected output for evaluators like FactualityEval:
|
|
164
|
+
echo '"Paris"' | pixie dataset save <dataset-name> --expected-output
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Try to cover the range of inputs you actually care about: normal cases, edge cases, things the app might plausibly get wrong (empty input, ambiguous queries, no-answer cases).
|
|
168
|
+
|
|
169
|
+
### Option B: Build programmatically
|
|
170
|
+
|
|
171
|
+
When you want to bulk-load items or add expected outputs directly:
|
|
172
|
+
|
|
173
|
+
```python
|
|
174
|
+
from pixie.dataset.store import DatasetStore
|
|
175
|
+
from pixie.storage.evaluable import Evaluable
|
|
176
|
+
|
|
177
|
+
store = DatasetStore()
|
|
178
|
+
store.create("<dataset-name>")
|
|
179
|
+
store.append("<dataset-name>", Evaluable(
|
|
180
|
+
eval_input={"question": "What is the capital of France?", "context": "Paris is the capital..."},
|
|
181
|
+
eval_output="Paris is the capital of France.",
|
|
182
|
+
expected_output="Paris",
|
|
183
|
+
))
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Stage 6: Run the Tests
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
pixie-test tests/ -v
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
The `-v` flag shows per-case scores and reasoning, which makes it much easier to see what's passing and what isn't. Check that the pass rates look reasonable given your `ScoreThreshold`.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Stage 7: Investigate Failures
|
|
199
|
+
|
|
200
|
+
When tests fail, the goal is to understand _why_, not to adjust thresholds until things pass.
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
pixie-test -v # start here — shows score and reasoning per case
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
If you need to dig into a specific trace, look up the `trace_id` from the dataset:
|
|
207
|
+
|
|
208
|
+
```python
|
|
209
|
+
from pixie.dataset.store import DatasetStore
|
|
210
|
+
store = DatasetStore()
|
|
211
|
+
ds = store.get("<dataset-name>")
|
|
212
|
+
for i, item in enumerate(ds.items):
|
|
213
|
+
print(i, item.eval_metadata) # trace_id is here if saved via pixie dataset save
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Then inspect the full span tree:
|
|
217
|
+
|
|
218
|
+
```python
|
|
219
|
+
import asyncio
|
|
220
|
+
from pixie.storage.store import ObservationStore
|
|
221
|
+
|
|
222
|
+
async def inspect(trace_id: str):
|
|
223
|
+
store = ObservationStore()
|
|
224
|
+
roots = await store.get_trace(trace_id)
|
|
225
|
+
for root in roots:
|
|
226
|
+
print(root.to_text()) # full span tree: inputs, outputs, LLM messages
|
|
227
|
+
|
|
228
|
+
asyncio.run(inspect("the-trace-id-here"))
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
Common patterns to look for:
|
|
232
|
+
|
|
233
|
+
| Symptom | Likely cause |
|
|
234
|
+
| -------------------------------- | ----------------------------------------------- |
|
|
235
|
+
| Output is factually wrong | Prompt or retrieved context is bad |
|
|
236
|
+
| Output is right but score is low | Wrong `expected_output`, or criteria too strict |
|
|
237
|
+
| Score 0.0 with error details | Evaluator crashed (missing API key, etc.) |
|
|
238
|
+
| All cases fail at same point | `@observe` is on the wrong function |
|
|
239
|
+
|
|
240
|
+
Once you've diagnosed the issue, make a targeted change — to the code, prompt, dataset item, or pass criteria — and re-run. Always finish by giving the user the exact command to verify:
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
pixie-test tests/test_<feature>.py -v
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Memory Template
|
|
249
|
+
|
|
250
|
+
```markdown
|
|
251
|
+
## Project: <name>
|
|
252
|
+
|
|
253
|
+
### Entry point
|
|
254
|
+
|
|
255
|
+
`python chatbot.py` or `answer_question(question, context)` etc.
|
|
256
|
+
|
|
257
|
+
### Instrumented spans
|
|
258
|
+
|
|
259
|
+
- `answer_question(question, context)` — @observe wraps the full pipeline
|
|
260
|
+
- eval_input: {"question": str, "context": str}
|
|
261
|
+
- eval_output: str (the answer)
|
|
262
|
+
|
|
263
|
+
### Datasets
|
|
264
|
+
|
|
265
|
+
- `qa-golden-set`: N items, factual QA, includes expected_output
|
|
266
|
+
|
|
267
|
+
### Eval plan
|
|
268
|
+
|
|
269
|
+
- Evaluator: FactualityEval
|
|
270
|
+
- Pass criteria: ScoreThreshold(0.7, pct=0.8)
|
|
271
|
+
- Test file: tests/test_qa.py::test_factuality
|
|
272
|
+
|
|
273
|
+
### Known issues / findings
|
|
274
|
+
|
|
275
|
+
- ...
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Reference
|
|
281
|
+
|
|
282
|
+
See `references/pixie-api.md` for all CLI commands, evaluator signatures, and the Python dataset/store API.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "eval-driven-dev",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "I have a RAG chatbot project at PROJECT_DIR (chatbot.py). The app runs without any API key needed. Please set up the full eval pipeline using pixie: instrument the code with pixie, actually run the app to capture traces, save them to a dataset with pixie, and write a test file.",
|
|
7
|
+
"expected_output": "The agent should: (1) read chatbot.py, (2) add enable_storage() and @observe/start_observation instrumentation, (3) actually run the app to generate traces (python -c or python chatbot.py), (4) run 'pixie dataset create' to create a dataset, (5) run 'pixie dataset save' to save traces from the run, (6) write a test file with assert_dataset_pass, (7) create a MEMORY.md.",
|
|
8
|
+
"files": ["evals/sample-projects/rag-chatbot-mock/chatbot.py"],
|
|
9
|
+
"expectations": [
|
|
10
|
+
"The agent edited chatbot.py to add @observe or start_observation wrapping answer_question",
|
|
11
|
+
"The agent added enable_storage() in chatbot.py (not just px.init())",
|
|
12
|
+
"The agent created a test file (test_*.py) with assert_dataset_pass or assert_pass",
|
|
13
|
+
"The test file calls enable_storage() inside the runnable (not at module level in the test)",
|
|
14
|
+
"The agent wrote code or commands to create a named dataset (DatasetStore().create() or 'pixie dataset create' CLI)",
|
|
15
|
+
"The agent wrote code or commands to save traces to the dataset ('pixie dataset save' CLI or DatasetStore().append())",
|
|
16
|
+
"The agent created a MEMORY.md or notes file in the project directory"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": 2,
|
|
21
|
+
"prompt": "My email classifier app is at PROJECT_DIR (extractor.py). It extracts JSON with category, priority, and summary from emails. No API key needed to run it. Please add proper eval-based testing using pixie: instrument it, run it on some sample inputs, save the traces as a dataset, and write tests that check the JSON structure.",
|
|
22
|
+
"expected_output": "The agent should: (1) read extractor.py, (2) add @observe/enable_storage() instrumentation, (3) actually run the classifier on several emails, (4) use pixie dataset create + pixie dataset save to capture those runs into a dataset, (5) add expected_output to dataset items, (6) write a test file with ValidJSONEval or custom field-checking evaluator + assert_dataset_pass, (7) create MEMORY.md.",
|
|
23
|
+
"files": ["evals/sample-projects/email-classifier-mock/extractor.py"],
|
|
24
|
+
"expectations": [
|
|
25
|
+
"The agent edited extractor.py to add @observe or start_observation to extract_from_email",
|
|
26
|
+
"The agent added enable_storage() to extractor.py (not just px.init())",
|
|
27
|
+
"The agent actually ran the extractor on sample emails to generate traces",
|
|
28
|
+
"The agent used 'pixie dataset create' or DatasetStore().create() to create a named dataset",
|
|
29
|
+
"The agent used 'pixie dataset save' (CLI or equivalent) to save traces into the dataset",
|
|
30
|
+
"The agent wrote a test file using ValidJSONEval, JSONDiffEval, or a custom field evaluator",
|
|
31
|
+
"The agent created a MEMORY.md or notes file in the project directory"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": 3,
|
|
36
|
+
"prompt": "My pixie eval tests are failing. Project is at PROJECT_DIR. The test in tests/test_qa.py runs assert_dataset_pass against 'qa-golden-set' and I'm getting low scores. Please investigate — look at the dataset, the test code, the app code, find the root cause, fix it, and show me how to re-run.",
|
|
37
|
+
"expected_output": "The agent should: (1) read all three files (test_qa.py, qa_app.py, qa-golden-set.json), (2) identify that eval_output is null in the dataset so FactualityEval is scoring nulls, (3) fix either the dataset or the test logic, (4) explicitly show the pixie-test command to re-run and verify.",
|
|
38
|
+
"files": [
|
|
39
|
+
"evals/sample-projects/qa-app-with-tests/qa_app.py",
|
|
40
|
+
"evals/sample-projects/qa-app-with-tests/tests/test_qa.py",
|
|
41
|
+
"evals/sample-projects/qa-app-with-tests/pixie_datasets/qa-golden-set.json"
|
|
42
|
+
],
|
|
43
|
+
"expectations": [
|
|
44
|
+
"The agent read tests/test_qa.py, qa_app.py, and the dataset file",
|
|
45
|
+
"The agent identified that eval_output is null in the dataset items as the root cause",
|
|
46
|
+
"The agent made a concrete fix (populated eval_output in dataset OR rewrote test to run the app live)",
|
|
47
|
+
"The agent showed the 'pixie-test' command to re-run and verify the fix",
|
|
48
|
+
"The agent explained why the score was low (FactualityEval scoring null output vs expected answers)"
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/email-classifier/extractor.py
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Extract structured information from customer support emails using GPT-4."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
|
|
5
|
+
from openai import OpenAI
|
|
6
|
+
|
|
7
|
+
SYSTEM_PROMPT = """You are a support ticket classifier. Given a customer support email,
|
|
8
|
+
extract the following fields as JSON:
|
|
9
|
+
- category: one of "billing", "technical", "account", "general"
|
|
10
|
+
- priority: one of "low", "medium", "high"
|
|
11
|
+
- summary: a single sentence summarizing the issue
|
|
12
|
+
|
|
13
|
+
Respond with valid JSON only, no extra text."""
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def extract_from_email(email_text: str) -> dict:
|
|
17
|
+
"""Extract structured fields from a customer support email."""
|
|
18
|
+
client = OpenAI()
|
|
19
|
+
response = client.chat.completions.create(
|
|
20
|
+
model="gpt-4o-mini",
|
|
21
|
+
messages=[
|
|
22
|
+
{"role": "system", "content": SYSTEM_PROMPT},
|
|
23
|
+
{"role": "user", "content": email_text},
|
|
24
|
+
],
|
|
25
|
+
temperature=0,
|
|
26
|
+
)
|
|
27
|
+
raw = response.choices[0].message.content
|
|
28
|
+
return json.loads(raw)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# ---- ad-hoc testing (replace with proper eval tests) ----
|
|
32
|
+
if __name__ == "__main__":
|
|
33
|
+
sample_emails = [
|
|
34
|
+
"Hi, my subscription was charged twice this month. Please refund the duplicate charge ASAP.",
|
|
35
|
+
"The app keeps crashing when I try to upload files larger than 10MB. This is urgent.",
|
|
36
|
+
"Can you tell me how to reset my password? I can't find the option in settings.",
|
|
37
|
+
]
|
|
38
|
+
for email in sample_emails:
|
|
39
|
+
result = extract_from_email(email)
|
|
40
|
+
print(result)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""Email classifier — mock version that works without an API key.
|
|
2
|
+
|
|
3
|
+
This mock classifies emails using simple keyword rules.
|
|
4
|
+
Suitable for running eval infrastructure without needing OPENAI_API_KEY.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def extract_from_email(email_text: str) -> dict:
|
|
11
|
+
"""Extract structured info from a customer support email.
|
|
12
|
+
|
|
13
|
+
Returns a dict with:
|
|
14
|
+
- category: "billing" | "technical" | "account" | "general"
|
|
15
|
+
- priority: "low" | "medium" | "high"
|
|
16
|
+
- summary: one-sentence summary
|
|
17
|
+
|
|
18
|
+
(Mock: uses keyword rules — no LLM API call needed.)
|
|
19
|
+
"""
|
|
20
|
+
text = email_text.lower()
|
|
21
|
+
|
|
22
|
+
# Determine category
|
|
23
|
+
if any(w in text for w in ["charge", "refund", "invoice", "payment", "billing", "subscription"]):
|
|
24
|
+
category = "billing"
|
|
25
|
+
elif any(w in text for w in ["crash", "error", "bug", "broken", "not working", "upload", "download"]):
|
|
26
|
+
category = "technical"
|
|
27
|
+
elif any(w in text for w in ["password", "login", "account", "username", "sign in", "reset"]):
|
|
28
|
+
category = "account"
|
|
29
|
+
else:
|
|
30
|
+
category = "general"
|
|
31
|
+
|
|
32
|
+
# Determine priority
|
|
33
|
+
if any(w in text for w in ["urgent", "asap", "immediately", "critical", "crashing", "duplicate charge"]):
|
|
34
|
+
priority = "high"
|
|
35
|
+
elif any(w in text for w in ["soon", "when possible", "annoying", "frustrating"]):
|
|
36
|
+
priority = "medium"
|
|
37
|
+
else:
|
|
38
|
+
priority = "low"
|
|
39
|
+
|
|
40
|
+
# Generate summary
|
|
41
|
+
first_sentence = email_text.strip().split(".")[0].strip()
|
|
42
|
+
summary = first_sentence[:100] if first_sentence else "Customer support request."
|
|
43
|
+
|
|
44
|
+
return {"category": category, "priority": priority, "summary": summary}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
if __name__ == "__main__":
|
|
48
|
+
sample_emails = [
|
|
49
|
+
"Hi, my subscription was charged twice this month. Please refund the duplicate charge ASAP.",
|
|
50
|
+
"The app keeps crashing when I try to upload files larger than 10MB. This is urgent.",
|
|
51
|
+
"Can you tell me how to reset my password? I can't find the option in settings.",
|
|
52
|
+
"Just wondering when your mobile app will support dark mode.",
|
|
53
|
+
]
|
|
54
|
+
for email in sample_emails:
|
|
55
|
+
result = extract_from_email(email)
|
|
56
|
+
print(json.dumps(result, indent=2))
|
|
57
|
+
print()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pixie-qa
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "qa-golden-set",
|
|
3
|
+
"items": [
|
|
4
|
+
{
|
|
5
|
+
"eval_input": {"question": "What is the capital of France?", "context": "France is a country in Western Europe. Its capital city is Paris, which is also the largest city."},
|
|
6
|
+
"eval_output": null,
|
|
7
|
+
"eval_metadata": {"notes": "basic geography"},
|
|
8
|
+
"expected_output": "Paris"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"eval_input": {"question": "Who wrote Romeo and Juliet?", "context": "Romeo and Juliet is a tragedy written by the English playwright William Shakespeare, believed to have been written between 1594 and 1596."},
|
|
12
|
+
"eval_output": null,
|
|
13
|
+
"eval_metadata": {"notes": "literature question"},
|
|
14
|
+
"expected_output": "William Shakespeare"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"eval_input": {"question": "What is the boiling point of water?", "context": "Water boils at 100 degrees Celsius (212 degrees Fahrenheit) at standard atmospheric pressure (1 atm)."},
|
|
18
|
+
"eval_output": null,
|
|
19
|
+
"eval_metadata": {"notes": "science fact"},
|
|
20
|
+
"expected_output": "100 degrees Celsius (212 degrees Fahrenheit)"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
pixie_qa-0.1.0/.claude/skills/eval-driven-dev/evals/sample-projects/qa-app-with-tests/qa_app.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"""Q&A app instrumented with pixie — has some eval tests that are currently failing."""
|
|
2
|
+
|
|
3
|
+
import pixie.instrumentation as px
|
|
4
|
+
from pixie import enable_storage
|
|
5
|
+
from anthropic import Anthropic
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@px.observe(name="answer_question")
|
|
9
|
+
def answer_question(question: str, context: str = "") -> str:
|
|
10
|
+
"""Answer a question, optionally with context."""
|
|
11
|
+
client = Anthropic()
|
|
12
|
+
messages = [{"role": "user", "content": question}]
|
|
13
|
+
if context:
|
|
14
|
+
messages = [{"role": "user", "content": f"Context: {context}\n\nQuestion: {question}"}]
|
|
15
|
+
|
|
16
|
+
response = client.messages.create(
|
|
17
|
+
model="claude-haiku-4-5-20251001",
|
|
18
|
+
max_tokens=200,
|
|
19
|
+
messages=messages,
|
|
20
|
+
)
|
|
21
|
+
return response.content[0].text
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def main(question: str, context: str = "") -> str:
|
|
25
|
+
enable_storage()
|
|
26
|
+
return answer_question(question=question, context=context)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""Eval-based tests for the Q&A app — currently failing."""
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
from pixie import enable_storage
|
|
5
|
+
from pixie.evals import assert_dataset_pass, FactualityEval, ScoreThreshold
|
|
6
|
+
|
|
7
|
+
from qa_app import answer_question
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def runnable(eval_input):
|
|
11
|
+
enable_storage()
|
|
12
|
+
question = eval_input.get("question", "") if isinstance(eval_input, dict) else str(eval_input)
|
|
13
|
+
context = eval_input.get("context", "") if isinstance(eval_input, dict) else ""
|
|
14
|
+
answer_question(question=question, context=context)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
async def test_factuality():
|
|
18
|
+
"""Test that answers are factually accurate compared to expected outputs."""
|
|
19
|
+
await assert_dataset_pass(
|
|
20
|
+
runnable=runnable,
|
|
21
|
+
dataset_name="qa-golden-set",
|
|
22
|
+
evaluators=[FactualityEval()],
|
|
23
|
+
pass_criteria=ScoreThreshold(threshold=0.7, pct=0.8),
|
|
24
|
+
)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""Simple RAG chatbot that answers questions using retrieved doc chunks."""
|
|
2
|
+
|
|
3
|
+
from anthropic import Anthropic
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def retrieve_docs(query: str) -> list[str]:
|
|
7
|
+
"""Retrieve relevant document chunks for a query (stubbed)."""
|
|
8
|
+
# In production this would call a vector database
|
|
9
|
+
docs = {
|
|
10
|
+
"capital": ["Paris is the capital of France.", "Berlin is the capital of Germany."],
|
|
11
|
+
"population": ["France has a population of about 68 million.", "Germany has about 84 million people."],
|
|
12
|
+
"language": ["French is spoken in France.", "German is spoken in Germany and Austria."],
|
|
13
|
+
}
|
|
14
|
+
for keyword, chunks in docs.items():
|
|
15
|
+
if keyword in query.lower():
|
|
16
|
+
return chunks
|
|
17
|
+
return ["No relevant documents found."]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def answer_question(question: str) -> str:
|
|
21
|
+
"""Answer a question using retrieved context and Claude."""
|
|
22
|
+
context_chunks = retrieve_docs(question)
|
|
23
|
+
context = "\n".join(context_chunks)
|
|
24
|
+
|
|
25
|
+
client = Anthropic()
|
|
26
|
+
response = client.messages.create(
|
|
27
|
+
model="claude-haiku-4-5-20251001",
|
|
28
|
+
max_tokens=300,
|
|
29
|
+
system="You are a helpful assistant. Answer questions based only on the provided context.",
|
|
30
|
+
messages=[
|
|
31
|
+
{
|
|
32
|
+
"role": "user",
|
|
33
|
+
"content": f"Context:\n{context}\n\nQuestion: {question}",
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
)
|
|
37
|
+
return response.content[0].text
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def main():
|
|
41
|
+
questions = [
|
|
42
|
+
"What is the capital of France?",
|
|
43
|
+
"What language do people speak in Germany?",
|
|
44
|
+
"What is the population of France?",
|
|
45
|
+
]
|
|
46
|
+
for q in questions:
|
|
47
|
+
print(f"Q: {q}")
|
|
48
|
+
print(f"A: {answer_question(q)}")
|
|
49
|
+
print()
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
if __name__ == "__main__":
|
|
53
|
+
main()
|