CI मूल्यांकन
Potato मूल्यांकनों को अपने ही pytest सूट के भीतर चलाएँ और CI को स्कोर थ्रेशोल्ड पर गेट करें, ताकि एजेंट गुणवत्ता घटाने वाला कोई प्रॉम्प्ट या मॉडल परिवर्तन बिल्ड को यूनिट टेस्ट की तरह विफल कर दे। इसमें expect() असर्शन API और एक उदाहरण GitHub Actions वर्कफ़्लो शामिल है।
Potato मूल्यांकनों को अपने ही pytest सूट के भीतर चलाएँ और CI को समग्र स्कोर थ्रेशोल्ड पर गेट करें, ताकि गुणवत्ता घटाने वाला कोई प्रॉम्प्ट या मॉडल परिवर्तन बिल्ड को ठीक उसी तरह विफल कर दे जैसे कोई यूनिट टेस्ट करता है। यह प्रोग्रामेटिक इवैल्यूएटर और डेटासेट और प्रयोग के ऊपर बनी "eval को ऑपरेशनल बनाने" वाली परत है।
इंस्टॉल
प्लगइन Potato के साथ आता है और इंस्टॉल होते ही अपने आप लोड हो जाता है:
pip install -e . # registers the `potato_eval` pytest pluginबिना इंस्टॉल किए, इसे स्पष्ट रूप से लोड करें: pytest -p potato.testing.pytest_plugin।
eval टेस्ट लिखें
टेस्ट को @pytest.mark.potato_eval से मार्क करें और potato_eval फ़िक्स्चर माँगें:
import pytest
from potato.testing import expect
@pytest.mark.potato_eval
@pytest.mark.parametrize("case", CASES, ids=[c["q"] for c in CASES])
def test_agent(case, potato_eval):
out = my_agent(case["q"])
potato_eval.log_inputs({"question": case["q"]})
potato_eval.log_outputs(out)
potato_eval.log_reference_outputs(case["expected"])
potato_eval.log_feedback("correct", 1.0 if out == case["expected"] else 0.0)
potato_eval.log_feedback("similarity", 1.0 - expect.edit_distance(out, case["expected"]).value)
expect(out).to_contain(case["expected"]) # per-case hard assertionexpect(...) में .to_equal, .to_contain, .to_be_less_than, .to_be_greater_than, .to_be_between, .to_be_close_to उपलब्ध हैं, साथ ही expect.edit_distance(a, b) और expect.embedding_distance(a, b) भी। log_feedback स्कोर सभी eval टेस्टों में समेकित होते हैं (प्रति कुंजी माध्य)।
बिल्ड को गेट करें
pytest tests/eval/ \
--potato-threshold correct=0.8 \
--potato-threshold similarity=0.7 \
--potato-experiment agent-regression| विकल्प | प्रभाव |
|---|---|
--potato-threshold KEY=MIN | यदि mean(KEY) < MIN हो तो रन विफल करता है। दोहराया जा सकता है। |
--potato-experiment DATASET | रन को एक प्रयोग के रूप में दर्ज करता है। |
--potato-no-sync | प्रयोग की रिकॉर्डिंग छोड़ देता है। |
यदि कोई थ्रेशोल्ड टूटता है तो रन गैर-शून्य कोड से समाप्त होता है (CI जॉब विफल हो जाती है) और THRESHOLD FAILED: <key> = <actual> < <min> प्रिंट करता है। दर्ज किए गए प्रयोग सादी फ़ाइलें हैं ($POTATO_EVAL_STORE, डिफ़ॉल्ट ./eval_store) जिन्हें आप CI आर्टिफ़ैक्ट के रूप में अपलोड कर सकते हैं।
GitHub Actions
एक उदाहरण वर्कफ़्लो examples/agent-traces/ci-eval/ci_workflow_example.yml पर मौजूद है। यह हर PR पर सूट चलाता है, थ्रेशोल्ड पर गेट करता है, और प्रयोग रिकॉर्ड को आर्टिफ़ैक्ट के रूप में अपलोड करता है।
संबंधित
- Read the Docs पर पूर्ण संदर्भ — सभी pytest विकल्प और पर्यावरण चर, संस्करण-अनुरूप
- प्रोग्रामेटिक इवैल्यूएटर
- डेटासेट और प्रयोग