Module 09: custom metrics
This module covers submitting a pod-local custom_rubric/inline rubric
(Module 06) for central registration, so other pods
can reference it by name without copying the full definition into their own
manifest.
9.1 Submit a rubric for central registration
Once a pod-local rubric has proven stable, submit it:
curl -X POST https://scoring-service.bravecliff-5469885d.swedencentral.azurecontainerapps.io/v1/evaluators/requests \
-H "Content-Type: application/json" \
-H "X-API-Key: <the workshop scoring-service key>" \
-d '{
"name": "intent_quality",
"criteria": "Score how correctly the system identified the user intent.",
"scale": {
"1": "Intent completely wrong.",
"2": "Intent partially related but would lead to a wrong response.",
"3": "Intent category right but specific label wrong.",
"4": "Intent correct but a more specific label existed.",
"5": "Intent label exact and unambiguous."
},
"input_fields": ["email_subject", "email_body"],
"output_fields": ["intent"],
"expected_output_fields": ["intent"],
"submitted_by": "your_name"
}'
The submission is written to the service's pending submissions directory.
The eval core team reviews pending submissions via GET /v1/evaluators/requests
and commits accepted rubrics to scoring_service/custom_evaluators/accepted/.
After the next service deployment, any pod can reference the evaluator as
framework: custom_rubric, evaluator: intent_quality; no need to copy the
criteria/scale/field-mapping definition into their own manifest at all.
graph TD
A["Pod submits rubric"] --> B["Pending submissions directory"]
B --> C["Eval core team reviews"]
C --> D["Accepted evaluators folder"]
D --> E["Any pod references it by name"]
Re-submitting the same name while it is still pending overwrites the file.
Submitting a name that is already accepted returns 409; corrections go
through the core team.
9.2 Checking submission status
The 201 response to your submission returns the stored record, which confirms
the service received it. Listing every pending submission
(GET /v1/evaluators/requests) needs the platform-admin caller, which a workshop
key is not: ask your facilitator to check the queue if you want to see it
there before the core team's review.
See scoring_service/custom_evaluators/README.md for the full schema and
lifecycle rules.
9.3 When central registration is worth it
| Situation | Central registration? |
|---|---|
| One pod, stable rubric, no other pod needs it | No: custom_rubric/inline in your own manifest is enough |
| Several pods measuring the same underlying quality (e.g. "routing correctness" across different intent taxonomies) | Yes: one canonical definition instead of N slightly-diverging copies |
| Rubric is still being iterated on | No: iterate inline first; submit once it has stopped changing between runs |
This is the end of the workshop's evaluation-pipeline content. From here, review the semantic-evaluation documentation for production guidance on dataset versioning, CI integration, and scaling the review workflow.