Skip to content

CI मूल्यांकन

Potato मूल्यांकनों को अपने ही pytest सूट के भीतर चलाएँ और CI को स्कोर थ्रेशोल्ड पर गेट करें, ताकि एजेंट गुणवत्ता घटाने वाला कोई प्रॉम्प्ट या मॉडल परिवर्तन बिल्ड को यूनिट टेस्ट की तरह विफल कर दे। इसमें expect() असर्शन API और एक उदाहरण GitHub Actions वर्कफ़्लो शामिल है।

Potato मूल्यांकनों को अपने ही pytest सूट के भीतर चलाएँ और CI को समग्र स्कोर थ्रेशोल्ड पर गेट करें, ताकि गुणवत्ता घटाने वाला कोई प्रॉम्प्ट या मॉडल परिवर्तन बिल्ड को ठीक उसी तरह विफल कर दे जैसे कोई यूनिट टेस्ट करता है। यह प्रोग्रामेटिक इवैल्यूएटर और डेटासेट और प्रयोग के ऊपर बनी "eval को ऑपरेशनल बनाने" वाली परत है।

इंस्टॉल

प्लगइन Potato के साथ आता है और इंस्टॉल होते ही अपने आप लोड हो जाता है:

bash
pip install -e .          # registers the `potato_eval` pytest plugin

बिना इंस्टॉल किए, इसे स्पष्ट रूप से लोड करें: pytest -p potato.testing.pytest_plugin

eval टेस्ट लिखें

टेस्ट को @pytest.mark.potato_eval से मार्क करें और potato_eval फ़िक्स्चर माँगें:

python
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 assertion

expect(...) में .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 टेस्टों में समेकित होते हैं (प्रति कुंजी माध्य)।

बिल्ड को गेट करें

bash
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 पर सूट चलाता है, थ्रेशोल्ड पर गेट करता है, और प्रयोग रिकॉर्ड को आर्टिफ़ैक्ट के रूप में अपलोड करता है।

संबंधित