> ## Documentation Index
> Fetch the complete documentation index at: https://docs.befailproof.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Evaluation suite

# मूल्यांकन सूट

AgentEye पूर्ण किए गए एजेंट सेशन को पूरी इवेंट ट्रांसक्रिप्ट को
**एकल ग्राहक-स्वामित्व वाली मूल्यांकनकर्ता सेवा** के लिए POST करके स्कोर करता है। मूल्यांकनकर्ता इनलाइन स्कोर लौटाता है या AgentEye के पोल करने के लिए एक `job_id` वापस कर देता है। परिणाम संग्रहीत किए जाते हैं और डैशबोर्ड में दिखाए जाते हैं।

यह गाइड निम्नलिखित को कवर करती है:

1. सेशन पूर्णता की पहचान कैसे की जाती है।
2. मूल्यांकनकर्ता को लागू करना चाहिए HTTP अनुबंध।
3. AgentEye सर्वर को कॉन्फ़िगर करना।
4. परिणाम देखना।
5. समस्या निवारण।

Python हेल्पर के लिए जो आपके लिए अनुबंध को लागू करता है, देखें
[PyPI पर `agenteye-evaluator` पैकेज](https://pypi.org/project/agenteye-evaluator/)।

***

## यह कैसे काम करता है

```text theme={null}
ingest /events  ──▶  AgentEye  ──── POST /evaluate ────▶  Evaluator service
   (agent_end)        server   ◀──── done | pending ────
                          │
                          │     GET /evaluate/{job_id} ─────▶
                          │     ◀──── done ──────────────
                          ▼
                     evaluations  (terminal results)
```

जब AgentEye SDK किसी सेशन के लिए एक `agent_end` इवेंट उत्सर्जित करता है, तो सर्वर एक मूल्यांकन शेड्यूल करता है। फिर यह पूरी इवेंट ट्रांसक्रिप्ट को आपकी मूल्यांकनकर्ता सेवा के लिए POST करता है, जो या तो:

* **परिणाम को इनलाइन लौटा सकता है** `{"status":"done", "scores":{...}, "reasoning":{...}, "summary":"..."}` के साथ। परिणाम सेशन की मूल्यांकन टाइमलाइन में जोड़ा जाता है। `reasoning` और `summary` वैकल्पिक हैं।
* **स्थगित** `{"status":"pending", "job_id":"abc-123"}` के साथ। AgentEye तब `GET {EVALUATOR_ENDPOINT}/evaluate/abc-123` को कॉल करता है जब तक आपका मूल्यांकनकर्ता `{"status":"done", ...}` या `{"status":"error", "error":"..."}` न लौटाए।

  पोलिंग की गति प्रति-जॉब है: एक `pending` प्रतिक्रिया में `next_poll_secs` शामिल हो सकता है; अन्यथा AgentEye `GET /config` से `default_poll_interval_secs` मान का उपयोग करता है; अन्यथा सर्वर `EVALUATOR_POLLING_INTERVAL_SECS` (डिफ़ॉल्ट 10s) पर वापस गिरता है। सभी मान \[1s, 1h] तक सीमित हैं।

सेशन जो कभी `agent_end` उत्सर्जित नहीं करते (उदाहरण के लिए, एक क्रैश एजेंट प्रक्रिया) भी उठाए जा सकते हैं: मूल्यांकनकर्ता का `GET /config` `{"inactivity_timeout_secs": 1800}` लौटा सकता है, और AgentEye किसी भी सेशन का मूल्यांकन करेगा जो उतने समय के लिए निष्क्रिय रहा है। इस फॉलबैक को अक्षम करने के लिए फ़ील्ड को `null` पर सेट करें या इसे छोड़ दें।

`EVALUATOR_ENDPOINT` अनसेट होने पर पाइपलाइन पूरी तरह से no-op है।

एक सेशन समय के साथ **कई टर्मिनल मूल्यांकन जमा कर सकता है**: प्रत्येक `agent_end` इवेंट (और डैशबोर्ड से प्रत्येक मैनुअल पुनः-मूल्यांकन) एक नई मूल्यांकन पंक्ति जोड़ता है। यह एक पुनः शुरू किए गए कथोपकथन का मूल्यांकन करने का समर्थित तरीका है: एक उपयोगकर्ता एक एजेंट को समाप्त करता है, बाद में वापस आता है, अधिक इवेंट भेजता है, एजेंट को फिर से समाप्त करता है, और एक दूसरा मूल्यांकन पूरी अपडेट की गई ट्रांसक्रिप्ट के विरुद्ध चलता है। डैशबोर्ड सबसे हाल के मूल्यांकन को हेडलाइन के रूप में और पूर्व मूल्यांकन को एक संक्षिप्त टाइमलाइन के रूप में प्रदर्शित करता है। जब एक मूल्यांकन एक सेशन के लिए चल रहा है, तो उस सेशन के लिए अतिरिक्त `agent_end` इवेंट को अनदेखा किया जाता है; चलने वाला मूल्यांकन पूरा होने के बाद अगला एक सामान्य तरीके से एक नया मूल्यांकन कतार में डालेगा।

निष्क्रियता फॉलबैक पुनः शुरू किए गए सेशन पर भी फिर से जुड़ता है: यदि एक पूर्व टर्मिनल मूल्यांकन के बाद नए इवेंट आते हैं और सेशन तब `inactivity_timeout_secs` को पार करके निष्क्रिय हो जाता है, तो एक नया मूल्यांकन कतार में डाला जाता है।

क्षणिक विफलताएं (5xx, 429, टाइमआउट, नेटवर्क त्रुटियां) `EVALUATOR_MAX_ATTEMPTS` तक घातीय बैकऑफ के साथ पुनः प्रयास की जाती हैं; 4xx प्रतिक्रियाएं टर्मिनल होती हैं। AgentEye को कई क्षैतिज रूप से स्केल किए गए सर्वर इंस्टेंस के साथ चलाना सुरक्षित है; कार्य विभाजित किया जाता है ताकि एक ही सेशन को कभी दो बार एक साथ भेजा न जाए।

***

## HTTP अनुबंध

प्रत्येक प्रमाणित रूट **बियरर टोकन प्रमाणीकरण** का उपयोग करता है। दोनों पक्षों पर समान मान को कॉन्फ़िगर किया जाना चाहिए:

* AgentEye सर्वर: env var `EVALUATOR_TOKEN`
* मूल्यांकनकर्ता सेवा: समान तरीके से कॉन्फ़िगर किया गया (SDK `agenteye-evaluator` सम्मेलन के अनुसार `EVALUATOR_TOKEN` पढ़ता है)

यदि `EVALUATOR_TOKEN` अनसेट है, तो सर्वर कोई `Authorization` हेडर नहीं भेजता है; मूल्यांकनकर्ता तब अनाम अनुरोधों को स्वीकार कर सकता है, जो आंतरिक-केवल नेटवर्क के लिए ठीक है लेकिन सार्वजनिक इंटरनेट पर हतोत्साहित है।

### मूल्यांकनकर्ता को सेवा देना चाहिए के रूट

| रूट                  | बॉडी / पैरामीटर    | प्रतिक्रिया                                                                                  |
| -------------------- | ------------------ | -------------------------------------------------------------------------------------------- |
| `GET /health`        | कोई नहीं           | `{"status":"ok"}` (खुला, कोई प्रमाणीकरण नहीं)                                                |
| `GET /config`        | कोई नहीं           | `{"inactivity_timeout_secs": <int> \| null, "default_poll_interval_secs": <int> \| omitted}` |
| `POST /evaluate`     | `EvalRequest` JSON | `{"status":"done", ...}` या `{"status":"pending", "job_id":"..."}`                           |
| `GET /evaluate/{id}` | कोई नहीं           | `/evaluate` जैसी ही प्रतिक्रिया आकार                                                         |

### सर्वर द्वारा भेजा गया `EvalRequest` बॉडी

```json theme={null}
{
  "schema_version": "1",
  "session_id":     "session-abc123",
  "agent_id":       "planner",
  "environment":    "production",
  "started_at":     "2026-05-10T12:00:00Z",
  "ended_at":       "2026-05-10T12:05:00Z",
  "events": [
    { "id": 1234, "ts": "...", "event_type": "agent_start", "payload": { ... } },
    ...
  ]
}
```

### प्रतिक्रिया आकार

**सिंक (पूर्ण):**

```json theme={null}
{
  "status": "done",
  "scores": { "helpfulness": 0.85, "tool_efficiency": 0.6 },
  "reasoning": {
    "helpfulness": "answered the question directly with citations",
    "tool_efficiency": "called list_files three times when one would have done"
  },
  "summary": "strong answer quality, weak tool selection"
}
```

`reasoning` (एक प्रति-स्कोर न्यायसंगत नक्शा) और `summary` (एक समग्र एक-पैराग्राफ आख्यान) दोनों वैकल्पिक हैं। `reasoning` में कुंजियाँ `scores` में कुंजियों को प्रतिबिंबित करनी चाहिए; डैशबोर्ड प्रत्येक प्रविष्टि को इसके स्कोर बार के नीचे प्रस्तुत करता है। पुरानी मूल्यांकनकर्ता जो केवल `scores` लौटाते हैं वे अपरिवर्तित काम करना जारी रखते हैं; `reasoning` और `summary` बस null के रूप में पढ़े जाते हैं और संबंधित UI सामर्थ्य छोड़ दी जाती हैं।

**अतुल्यकालिक (स्थगित):**

```json theme={null}
{ "status": "pending", "job_id": "abc-123", "next_poll_secs": 30 }
```

`next_poll_secs` वैकल्पिक है; यदि छोड़ा जाता है तो सर्वर `/config` से मूल्यांकनकर्ता के `default_poll_interval_secs` पर वापस गिरता है, फिर अपने `EVALUATOR_POLLING_INTERVAL_SECS` env var पर।

**टर्मिनल मूल्यांकनकर्ता-पक्ष त्रुटि:**

```json theme={null}
{ "status": "error", "error": "model service unavailable" }
```

सर्वर किसी भी अन्य 2xx बॉडी को प्रोटोकॉल त्रुटि के रूप में मानता है और सेशन के लिए एक टर्मिनल `error` रिकॉर्ड करता है।

***

## SDK के साथ मूल्यांकनकर्ता लिखना

`agenteye-evaluator` Python पैकेज आपको एक टाइप किया हुआ FastAPI
रैपर देता है जो ऊपर HTTP अनुबंध को लागू करता है। PyPI से इसे इंस्टॉल करें:

```bash theme={null}
pip install agenteye-evaluator
```

न्यूनतम व्यवहार्य मूल्यांकनकर्ता:

```python theme={null}
import os
from agenteye_evaluator import Evaluator, EvalRequest, EvalResponse

app = Evaluator(token=os.environ["EVALUATOR_TOKEN"])

@app.evaluator
def run(req: EvalRequest) -> EvalResponse:
    # Inspect req.events (the full session transcript) and return scores.
    tool_calls = sum(1 for e in req.events if e.event_type == "tool_use")
    return EvalResponse(
        scores={"tool_calls": float(tool_calls)},
        reasoning={"tool_calls": f"{tool_calls} tool invocations in the transcript"},
        summary="tight tool loop" if tool_calls < 5 else "agent looped on tools",
    )
```

`app` इंस्टेंस ASGI-कॉल योग्य है, इसलिए `uvicorn module:app` इसे चलाता है।

मूल्यांकनकर्ता के लिए जो महंगे कार्य को स्थगित करने की आवश्यकता है, इसके बजाय `JobPending` लौटाएं और एक `@app.job_lookup` हैंडलर पंजीकृत करें; AgentEye सर्वर `GET /evaluate/{job_id}` को पोल करता है जब तक आप एक टर्मिनल स्थिति न लौटाएं या `EVALUATOR_MAX_POLL_DURATION_SECS` कैप (डिफ़ॉल्ट 1 h) समाप्त न हो जाए।

पूर्ण API संदर्भ, अतुल्यकालिक पैटर्न, और इवेंट स्कीमा: `agenteye-evaluator` README प्रत्येक रिलीज़ टारबॉल के अंदर
[agenteye-enterprise रिलीज़ पृष्ठ](https://github.com/agenteye-enterprise/releases) पर भेज दिया जाता है, या आप इसे पैकेज के PyPI पृष्ठ पर पढ़ सकते हैं।

***

## Kubernetes पर मूल्यांकनकर्ता चलाना

मूल्यांकनकर्ता **आपकी सेवा** है: AgentEye कोई डिफ़ॉल्ट मूल्यांकनकर्ता कंटेनर शिप नहीं करता है। रिलीज़ में `deploy/examples/evaluator/` के तहत संदर्भ Kubernetes मैनिफ़ेस्ट शामिल हैं जिन्हें आप अपनी इमेज और एक साझा बियरर टोकन को स्वैप करने के बाद यथावत लागू कर सकते हैं।

### 1. अपने मूल्यांकनकर्ता को कंटेनरीकृत करें

आपके मूल्यांकनकर्ता के लिए एक न्यूनतम Dockerfile:

```dockerfile theme={null}
FROM python:3.12-slim
WORKDIR /app
RUN pip install --no-cache-dir agenteye-evaluator uvicorn
COPY my_evaluator.py .
RUN useradd --uid 10001 --create-home --shell /usr/sbin/nologin evaluator \
    && chown -R evaluator:evaluator /app
USER evaluator
EXPOSE 9000
CMD ["uvicorn", "my_evaluator:app", "--host", "0.0.0.0", "--port", "9000"]
```

`runAsNonRoot` (UID 10001) कंटेनर को Pod Security प्रतिबंधित प्रोफ़ाइल के साथ संगत रखता है।

### 2. साझा बियरर टोकन बनाएं

```bash theme={null}
kubectl -n agenteye create secret generic evaluator-token \
  --from-literal=token="$(openssl rand -hex 32)"
```

AgentEye सर्वर पर समान मान को `EVALUATOR_TOKEN` के रूप में उपयोग करें। सर्वर हर अनुरोध पर `Authorization: Bearer <token>` भेजता है; SDK `hmac.compare_digest` का उपयोग करता है और HTTP 401 के साथ मेल खाने से इनकार करता है।

### 3. उदाहरण मैनिफ़ेस्ट लागू करें

```bash theme={null}
# Edit deploy/examples/evaluator/deployment.yaml first to point
# `image:` at your registry, then:
kubectl apply -k deploy/examples/evaluator/
```

उदाहरण में शामिल हैं:

* `runAsNonRoot`, पढ़ने के लिए केवल रूट फ़ाइलसिस्टम, सभी क्षमताएं छोड़े गए, `/health` पर जीवित + तैयारी के साथ 2-प्रतिकृति तैनाती
* पोर्ट 9000 पर ClusterIP सेवा
* एक `secret.example.yaml` टेम्पलेट (जानबूझकर Kustomization से बाहर रखा गया; वास्तविक गुप्त आउट-ऑफ-बैंड बनाएं ताकि कोई टोकन git में न पड़े)

### 4. AgentEye को इसके साथ जोड़ें

AgentEye सर्वर पर, सेट करें:

```bash theme={null}
EVALUATOR_ENDPOINT=http://evaluator:9000
EVALUATOR_TOKEN=<the value generated above>
```

सर्वर सभी मूल्यांकनकर्ता pods में `EVALUATOR_WORKERS × EVALUATOR_CLAIM_BATCH` समवर्ती अनुरोधों को प्रशंसक करता है (डिफ़ॉल्ट: `2 × 4 = 8`)। इन सर्वर-पक्ष नॉब्स के साथ संगति में `replicas` और प्रति-pod संसाधन सीमाएं स्केल करें।

### सत्यापन

```bash theme={null}
kubectl -n agenteye port-forward svc/evaluator 9000:9000
curl -s http://localhost:9000/health   # → {"status":"ok"}
```

एजेंट समाप्त-से-अंत तक चलने के बाद, AgentEye सर्वर पर `GET /evaluations` को `status: "done"` और आपके मूल्यांकनकर्ता द्वारा उत्पादित स्कोर के साथ एक पंक्ति लौटानी चाहिए।

***

## AgentEye सर्वर को कॉन्फ़िगर करना

सर्वर प्रक्रिया पर सेट करें:

| Env var                            | अर्थ                                                                                                                                                                                                      |
| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `EVALUATOR_ENDPOINT`               | आपके मूल्यांकनकर्ता का आधार URL (`http://evaluator:9000`)। Unset = पाइपलाइन अक्षम।                                                                                                                        |
| `EVALUATOR_TOKEN`                  | बियरर टोकन। मूल्यांकनकर्ता सेवा को कॉन्फ़िगर किए गए मान के बराबर होना चाहिए।                                                                                                                              |
| `EVALUATOR_WORKERS`                | सर्वर इंस्टेंस प्रति कार्यकर्ता कार्य (डिफ़ॉल्ट 2)।                                                                                                                                                       |
| `EVALUATOR_CLAIM_BATCH`            | प्रति कार्यकर्ता टिक पंक्तियां दावी की गई (डिफ़ॉल्ट 4)। बैच को **समवर्ती** रूप से संसाधित किया जाता है; आपके मूल्यांकनकर्ता endpoint पर प्रभावी समवर्तिता `EVALUATOR_WORKERS × EVALUATOR_CLAIM_BATCH` है। |
| `EVALUATOR_POLL_IDLE_SECS`         | जब कोई मूल्यांकन होने वाला नहीं है तो कार्यकर्ता को डिस्पैच प्रयास के बीच कितना सोना चाहिए (डिफ़ॉल्ट 2s)।                                                                                                 |
| `EVALUATOR_POLLING_INTERVAL_SECS`  | `GET /evaluate/{id}` गति के लिए अंतिम फॉलबैक जब न तो प्रति-प्रतिक्रिया `next_poll_secs` और न ही मूल्यांकनकर्ता का `default_poll_interval_secs` सेट हो (डिफ़ॉल्ट 10s)।                                     |
| `EVALUATOR_REQUEST_TIMEOUT_MS`     | प्रति-अनुरोध टाइमआउट (डिफ़ॉल्ट 30000)।                                                                                                                                                                    |
| `EVALUATOR_MAX_ATTEMPTS`           | इस कई क्षणिक विफलताओं के बाद परिणाम टर्मिनल `error` के रूप में दर्ज किया जाता है (डिफ़ॉल्ट 5)।                                                                                                            |
| `EVALUATOR_CONFIG_REFRESH_SECS`    | `GET /config` गति (डिफ़ॉल्ट 300)।                                                                                                                                                                         |
| `EVALUATOR_MAX_POLL_DURATION_SECS` | अधिकतम wallclock समय एक सेशन पोलिंग कतार में रह सकता है इससे पहले कि यह `timeout` के रूप में समाप्त हो (डिफ़ॉल्ट 3600s)। एक मूल्यांकनकर्ता को हमेशा `pending` लौटाना जारी रखने से बचाता है।               |

पूरे उदाहरण में स्वचालित स्कोरिंग को चालू करने के लिए, दोनों कुंजी सेट के साथ `agenteye-evaluator` Secret प्रदान करें। बंडल किए गए Kubernetes मैनिफ़ेस्ट पर, सर्वर इस वैकल्पिक Secret से `EVALUATOR_ENDPOINT` और `EVALUATOR_TOKEN` पढ़ता है। इसे अपने संगठन की मानक गुप्त-प्रबंधन प्रक्रिया के माध्यम से बनाएं, फिर परिवर्तन को उठाने के लिए सर्वर Deployment को पुनः शुरू करें।

ऊपर दिए गए ट्यूनिंग नॉब्स डिफ़ॉल्ट रूप से वायर्ड नहीं हैं; यदि आपको डिफ़ॉल्ट को ओवरराइड करने की आवश्यकता है तो अपने Deployment मैनिफ़ेस्ट में सर्वर कंटेनर पर संबंधित पर्यावरण चर को उजागर करें।

पूर्ण env var तालिका के लिए [deployment.md](/hi/agenteye/deployment) देखें।

***

## API संदर्भ

| विधि   | पथ                                  | आवश्यक अनुमति         | उद्देश्य                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| ------ | ----------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `GET`  | `/evaluations`                      | `evaluations:read`    | टर्मिनल परिणाम क्वेरी करें। `session_id`, `agent_id`, `environment`, `status` (`done`/`error`/`timeout`), `ts_from`, `ts_to`, `cursor`, `limit`, `score_filters`, `latest_per_session` का समर्थन करता है। `limit` डिफ़ॉल्ट रूप से 50 है और 200 पर सीमित है (ध्यान दें कि यह `/events` से भिन्न है, जो 1000 पर सीमित है)। `environment` अल्पविराम-अलग सूची (उदाहरण के लिए `environment=prod,staging`) स्वीकार करता है; एकल मान अभी भी काम करते हैं। `latest_per_session=true` के साथ प्रतिक्रिया में प्रति `session_id` सबसे अधिक एक पंक्ति होती है (`completed_at` के अनुसार सबसे हाल की) जिसका उपयोग सेशन-सूची पृष्ठ द्वारा सेशन की मूल्यांकन टाइमलाइन को इसकी वर्तमान हेडलाइन में संक्षिप्त करने के लिए किया जाता है। डिफ़ॉल्ट false है (पूरा इतिहास लौटाता है)। |
| `GET`  | `/evaluations/aggregate`            | `evaluations:read`    | एक फ़िल्टर किए गए स्लाइस के लिए रोल-अप मूल्यांकन स्वास्थ्य: कुल गणना, done/error/timeout ब्रेकडाउन, प्रति-स्कोर-कुंजी सांख्यिकी (मनमाने ढंग से `scores` कुंजियों पर गणना/औसत/न्यूनतम/अधिकतम/p50), और एक समय-बकेटेड टाइमलाइन। `/evaluations` के रूप में समान फ़िल्टर पैरामीटर स्वीकार करता है प्लस `featured_keys` (ट्रेंड करने के लिए स्कोर कुंजियों की CSV) और `latest_per_session`। डैशबोर्ड सुविधा को शक्ति देता है; मेट्रिक्स पूरे मेल खाने वाले सेट पर सटीक हैं, नमूना नहीं।                                                                                                                                                                                                                                                                                  |
| `GET`  | `/evaluations/environments`         | `evaluations:read`    | `evaluations` तालिका से विशिष्ट environment मान। मूल्यांकन-पठनीय डेटा के दायरे में फ़िल्टर ड्रॉपडाउन भरने के लिए उपयोग किया जाता है।                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `GET`  | `/evaluation-jobs`                  | `evaluations:read`    | इन-फ्लाइट मूल्यांकन में दृश्यमानता। `status` (`pending`/`polling`) द्वारा फ़िल्टर करें।                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `GET`  | `/events`                           | `events:read`         | सेशन के raw events स्ट्रीम करें। `session_id`, `agent_id`, `event_type` (CSV), `environment` (CSV), `ts_from`, `ts_to`, `cursor`, `limit`, और `order` का समर्थन करता है। `order` `desc` (newest-first, डिफ़ॉल्ट) या `asc` (oldest-first) है; एक अस्पष्ट मान `desc` पर वापस गिरता है। प्रतिक्रिया के `next_cursor` (एक event id) के माध्यम से कर्सर-पैगिनेट करें: अगला पृष्ठ प्राप्त करने के लिए इसे `cursor` के रूप में वापस पास करें; `asc` के साथ अगला पृष्ठ उस id के बाद की events है, `desc` के साथ इससे पहले की events है। `limit` डिफ़ॉल्ट रूप से 50 है और 1000 पर सीमित है।                                                                                                                                                                                 |
| `GET`  | `/sessions/:session_id/export`      | `events:read`         | `session-<id>.json` नामित डाउनलोड करने योग्य संलग्नक के रूप में सेवा की गई सटीक JSON बॉडी लौटाता है जो मूल्यांकनकर्ता को प्राप्त होगी। ऑफ़लाइन परीक्षण के लिए `agenteye-evaluator` के माध्यम से उत्पादन सेशन को पुनः चलाना उपयोगी है। बाइट वह हैं जो मूल्यांकनकर्ता पाइपलाइन भेजता है।                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `POST` | `/sessions/:session_id/re-evaluate` | `evaluations:trigger` | सेशन के लिए एक नया मूल्यांकन कतार में डालें; चाहे कोई पूर्व मूल्यांकन मौजूद हो या नहीं। नया परिणाम सेशन की मूल्यांकन टाइमलाइन में **जोड़ा जाता है** पिछले एक को ओवरराइट करने के बजाय, इसलिए पिछले स्कोर इतिहास के रूप में दृश्यमान रहते हैं। कतार पर `202` लौटाता है, अज्ञात सेशन के लिए `404`, यदि मूल्यांकन पहले से ही चल रहा है तो `409`। एक नए मूल्यांकनकर्ता को तैनात करने के बाद, या सेशन के लिए जो कभी `agent_end` उत्सर्जित नहीं करते, इसका उपयोग करें।                                                                                                                                                                                                                                                                                                    |

### स्कोर रेंज द्वारा फ़िल्टर करना: `score_filters`

`GET /evaluations` एक वैकल्पिक `score_filters` पैरामीटर स्वीकार करता है जो `scores` ऑब्जेक्ट के अंदर संख्यात्मक मान द्वारा परिणामों को सीमित करता है। पैरामीटर `key:min..max` प्रविष्टियों की अल्पविराम-अलग सूची है; या तो बाउंड छोड़ा जा सकता है। कई प्रविष्टियां तार्किक AND के साथ संयोजित होती हैं। जहां नामित कुंजी अनुपस्थित है या गैर-संख्यात्मक है वहां पंक्तियों को बाहर रखा जाता है। एक अनुरोध में सबसे अधिक 20 फ़िल्टर प्रविष्टियां हो सकती हैं; उससे अधिक HTTP 400 लौटाता है।

उदाहरण:

```text theme={null}
# helpfulness in [0.5, 0.8]
GET /evaluations?score_filters=helpfulness:0.5..0.8

# tool_efficiency at most 0.3 (no lower bound)
GET /evaluations?score_filters=tool_efficiency:..0.3

# helpfulness >= 0.5 AND factuality >= 0.9
GET /evaluations?score_filters=helpfulness:0.5..,factuality:0.9..
```

प्रत्येक `/evaluations` प्रतिक्रिया ऑब्जेक्ट में ये क्षेत्र हैं:

| क्षेत्र         | प्रकार                | नोट्स                                                                                                                                                                                                              |
| --------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `evaluation_id` | string (UUID)         | इस टर्मिनल मूल्यांकन के लिए विहित पहचानकर्ता। प्रत्येक टर्मिनल मूल्यांकन को एक नया UUID मिलता है; एक एकल सेशन कई रख सकता है।                                                                                       |
| `id`            | string (UUID)         | पिछड़े-संगतता उपनाम `evaluation_id` के समान मान ले जाता है।                                                                                                                                                        |
| `session_id`    | string                | सेशन जिस पर यह मूल्यांकन चला। एक सेशन टाइमलाइन में कई मूल्यांकन हो सकते हैं।                                                                                                                                       |
| `agent_id`      | string                | एजेंट की पहचान करता है जो सेशन का निर्माण किया।                                                                                                                                                                    |
| `environment`   | string                | सेशन से कॉपी किया गया Environment लेबल।                                                                                                                                                                            |
| `status`        | enum                  | `"done"`, `"error"`, `"timeout"` में से एक।                                                                                                                                                                        |
| `scores`        | object \| null        | आपके मूल्यांकनकर्ता द्वारा लौटाए गए स्कोर।                                                                                                                                                                         |
| `reasoning`     | object \| null        | आपके मूल्यांकनकर्ता द्वारा लौटाया गया वैकल्पिक प्रति-स्कोर न्यायसंगत नक्शा। कुंजियां आम तौर पर `scores` में उन लोगों को प्रतिबिंबित करती हैं। डैशबोर्ड अपने स्कोर बार के नीचे प्रत्येक प्रविष्टि प्रस्तुत करता है। |
| `summary`       | string \| null        | आपके मूल्यांकनकर्ता द्वारा लौटाया गया वैकल्पिक एक-पैराग्राफ समग्र आख्यान। डैशबोर्ड इसे प्रति-स्कोर ब्रेकडाउन के ऊपर मूल्यांकन की हेडलाइन के रूप में प्रस्तुत करता है।                                              |
| `error`         | string \| null        | `"error"` / `"timeout"` पर ही आबादी।                                                                                                                                                                               |
| `attempt_count` | integer               | डिस्पैच प्रयासों की संख्या (≥ 1)।                                                                                                                                                                                  |
| `duration_ms`   | integer \| null       | अंतिम प्रयास की अवधि।                                                                                                                                                                                              |
| `completed_at`  | string (ISO 8601 UTC) | जब टर्मिनल परिणाम दर्ज किया गया था। परिणाम `completed_at` द्वारा क्रमबद्ध हैं (newest first)।                                                                                                                      |
| `created_at`    | string (ISO 8601 UTC) | `completed_at` के समान टाइमस्टैम्प रखता है (write-once semantics)।                                                                                                                                                 |

***

## अनुमति

| अनुमति                | अनुदान                                                                                                                                                        |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `evaluations:read`    | मूल्यांकन परिणाम सूचीबद्ध करें, डैशबोर्ड में स्कोर देखें, और डैशबोर्ड स्वास्थ्य मेट्रिक्स लोड करें।                                                           |
| `evaluations:trigger` | `POST /sessions/:session_id/re-evaluate` के माध्यम से या डैशबोर्ड के पुनः-मूल्यांकन बटन के माध्यम से सेशन के लिए मैन्युअल रूप से एक मूल्यांकन कतार में डालें। |
| `dashboards:read`     | सहेजे गए डैशबोर्ड देखें (उनके मेट्रिक्स लोड करने के लिए `evaluations:read` की भी आवश्यकता है)।                                                                |
| `dashboards:write`    | डैशबोर्ड बनाएं और संपादित करें।                                                                                                                               |
| `dashboards:delete`   | डैशबोर्ड हटाएं।                                                                                                                                               |

बूटस्ट्रैप एडमिन (`ADMIN_KEY`, `ADMIN_EMAIL`) स्वचालित रूप से इन्हें प्राप्त करता है।

***

## परिणाम देखना

* **`/sessions/<id>`**: events टाइमलाइन + एक दाएं रेल जो सेशन के स्कोर और डिस्पैच प्रयास से कोई त्रुटि दिखाता है। यदि आपकी कुंजी के पास `evaluations:trigger` है, तो निर्यात बटन के बगल में एक **पुनः-मूल्यांकन** बटन दिखाई देता है, जो उन सेशन के लिए उपयोगी है जिन्होंने कभी `agent_end` उत्सर्जित नहीं किए, या नए मूल्यांकनकर्ता को तैनात करने के बाद स्कोर को ताज़ा करने के लिए। डैशबोर्ड नई परिणाम के लिए पोल करता है और दाएं रेल को अपडेट करता है जब यह पहुंचता है।
* **`/sessions`**: फ़िल्टर करने योग्य सेशन ग्रिड; स्कोर कॉलम प्रत्येक सेशन की मूल्यांकन स्थिति और स्कोर को एक नज़र में दिखाता है।
* **`/dashboards`**: सहेजे गए मूल्यांकन-स्वास्थ्य दृश्य (नीचे [डैशबोर्ड](#dashboards) देखें)।

<img src="https://mintcdn.com/exosphere/RgxYS1UZshqb4m7m/agenteye/images/sessions-list.png?fit=max&auto=format&n=RgxYS1UZshqb4m7m&q=85&s=10de161665eef64465d3d100e80b643f" alt="सेशन ग्रिड प्रति-सेशन मूल्यांकन स्थिति गोलियों और रंग-कोडित स्कोर बैज (helpfulness, factuality, tool_efficiency, safety, coherence) के साथ" width="2880" height="1800" data-path="agenteye/images/sessions-list.png" />

*सेशन ग्रिड प्रत्येक रन की मूल्यांकन स्थिति और स्कोर को एक नज़र में दिखाता है; लाल/एम्बर/हरी बैज कम स्कोर को बाहर निकालते हैं।*

<img src="https://mintcdn.com/exosphere/RgxYS1UZshqb4m7m/agenteye/images/session-detail.png?fit=max&auto=format&n=RgxYS1UZshqb4m7m&q=85&s=63cc2480e8124a05ea6a0a92d5f20690" alt="दाएं रेल में मूल्यांकन स्कोर और डिस्पैच स्थिति के साथ सेशन विस्तार दृश्य" width="2880" height="1800" data-path="agenteye/images/session-detail.png" />

*सेशन खोलने से पूरी टाइमलाइन दाएं रेल में मूल्यांकन स्कोर और कोई डिस्पैचर त्रुटि के साथ दिखाई देती है।*

***

## डैशबोर्ड

**डैशबोर्ड** पृष्ठ (`/dashboards`) आपको मूल्यांकन फ़िल्टर के एक संयोजन को एक नामित, पुन: उपयोग करने योग्य दृश्य के रूप में सहेजने देता है और देखता है कि मूल्यांकन का वह स्लाइस एक नज़र में कैसा कर रहा है। डैशबोर्ड **आपके पूरे संगठन में साझा हैं**; `dashboards:read` के साथ सभी को समान सेट दिखाई देता है।

प्रत्येक डैशबोर्ड पिन करता है:

* **फ़िल्टर**: सेशन पृष्ठ के समान नियंत्रण: environment, स्थिति, एजेंट, एक रोलिंग समय विंडो, और स्कोर-रेंज फ़िल्टर (`key:min..max`)।
* **एक प्रदर्शन कॉन्फ़िगरेशन**: कौन सी स्कोर कुंजियों को दिखाना है, हरी/एम्बर/लाल स्वास्थ्य थ्रेशोल्ड, कौन से पैनल दिखाएं, और क्या प्रति सेशन नवीनतम मूल्यांकन में संक्षिप्त करें।

प्रत्येक कार्ड मेल खाने वाले सेशन की संख्या, एक done/error/timeout ब्रेकडाउन, प्रत्येक विशेष स्कोर का औसत, और एक छोटा trend sparkline दिखाता है। डैशबोर्ड खोलने से पूर्ण आकार के पैनल दिखाई देते हैं; **"सेशन में खोलें"** आपको सेशन पृष्ठ पर ठीक उसी स्लाइस के साथ पूर्व-फ़िल्टर किया जाता है। मेट्रिक्स पूरे मेल खाने वाले सेट के ऊपर सर्वर-पक्ष (`GET /evaluations/aggregate`) पर गणना की जाती हैं, इसलिए संख्याएं नमूना के बजाय सटीक होती हैं।

<img src="https://mintcdn.com/exosphere/RgxYS1UZshqb4m7m/agenteye/images/dashboard-quality.png?fit=max&auto=format&n=RgxYS1UZshqb4m7m&q=85&s=0cbe5452995b2ff187f72b8978716bb3" alt="eval-health डैशबोर्ड प्रति evaluator आयाम औसत-स्कोर बार, एक tool ok-vs-error ब्रेकडाउन, top tools, और एक events-per-hour trend के साथ" width="2880" height="1800" data-path="agenteye/images/dashboard-quality.png" />

**अनुमतियां:** देखने के लिए `dashboards:read` और `evaluations:read` दोनों की आवश्यकता होती है; बनाने और संपादित करने के लिए `dashboards:write` की आवश्यकता होती है; हटाने के लिए `dashboards:delete` की आवश्यकता होती है। बूटस्ट्रैप एडमिन स्वचालित रूप से ये सभी प्राप्त करता है।

***

## समस्या निवारण

**सेशन मौजूद हैं लेकिन कोई मूल्यांकन नहीं बनाए जाते हैं।** पुष्टि करें कि `EVALUATOR_ENDPOINT` सर्वर प्रक्रिया पर सेट है, कि सर्वर और मूल्यांकनकर्ता समान `EVALUATOR_TOKEN` मान साझा करते हैं, और कि मूल्यांकनकर्ता का `/health` endpoint सर्वर से पहुंच योग्य है। `EVALUATOR_ENDPOINT` अनसेट के साथ पाइपलाइन एक no-op है।

**इन-फ्लाइट मूल्यांकन ढेर हो जाते हैं।** इन-फ्लाइट कतार देखने के लिए `GET /evaluation-jobs` क्वेरी करें। प्रत्येक पंक्ति पर `attempt_count`, `next_attempt_at`, और `last_error` की जांच करें। सामान्य कारण: मूल्यांकनकर्ता सेवा अप्राप्य या 5xx लौटा रहा है (बैकऑफ के साथ पुनः प्रयास किया गया), गलत `EVALUATOR_TOKEN` (401 टर्मिनल है), या एक async मूल्यांकनकर्ता जो `pending` को अनिश्चित काल तक लौटाता है (नीचे देखें)।

**सेशन पूर्ण होते हैं लेकिन कोई टर्मिनल मूल्यांकन नहीं।** `GET /evaluation-jobs?status=polling` क्वेरी करें; परिणाम अभी भी चल सकता है। यदि कोई जॉब `pending` में फंस गया है, तो सर्वर को मूल्यांकनकर्ता तक पहुंचने में परेशानी हो रही है; जांचें कि मूल्यांकनकर्ता ऊपर है और `EVALUATOR_TOKEN` मेल खाता है।

**मूल्यांकनकर्ता से `HTTP 401: invalid bearer token`।** सर्वर पर `EVALUATOR_TOKEN` मूल्यांकनकर्ता सेवा को कॉन्फ़िगर किए गए मान से मेल नहीं खाता है। वे समान होने चाहिए।

**Async मूल्यांकनकर्ता `pending` को हमेशा लौटाता है।** सर्वर `GET /evaluate/{job_id}` को पोल करता है जब तक मूल्यांकनकर्ता `done` या `error` न लौटाए, या जब तक `EVALUATOR_MAX_POLL_DURATION_SECS` (डिफ़ॉल्ट 1 h) समाप्त न हो जाए। कैप के बाद मूल्यांकन `timeout` के रूप में दर्ज किया जाता है और इन-फ्लाइट कतार से हटा दिया जाता है। यदि आपका मूल्यांकनकर्ता वैध रूप से डिफ़ॉल्ट से अधिक की आवश्यकता है तो `EVALUATOR_MAX_POLL_DURATION_SECS` बढ़ाएं।
