Manifest shape
Every suite version stores one manifest.| Limit | Value |
|---|---|
| Tasks per suite version | 1 to 100 |
| Task ID characters | Letters, numbers, _, ., and - |
| Few-shot examples per sample | 0 to 100 |
| Run models per run | 1 to 20 |
| Run concurrency | 1 to 25 |
Hugging Face max_rows | Up to 1,000,000 |
Task types
type labels the task for humans and downstream reporting.
Scoring is not hardcoded by task type.
The Python grader determines the actual metric behavior.
Supported task labels:
| Type | Common use |
|---|---|
classification | Label classification or rubric categories. |
multiple_choice | Multiple-choice answer selection. |
qa | Question answering with exact match, F1, semantic, or judge scoring. |
summarization | Summary quality, coverage, and factuality checks. |
semantic_similarity | Embedding or sentence-similarity scoring through Python. |
llm_judge | Model-backed rubric scoring through ctx.responses_create. |
numeric | Numeric extraction and tolerance scoring. |
math | Math or symbolic-answer evaluation. |
custom | Any task that does not fit the other labels. |
metadata on tasks and runs for your own experiment identifiers.
Metadata keys may be up to 64 characters and values up to 512 characters.
Uploaded datasets
Use uploaded files for controlled, reproducible datasets. Upload them through/files with purpose=evals, then reference the file ID in the task.
format can be jsonl or csv.
If you omit it, the gateway infers the format from the uploaded filename.
JSONL rows must be objects:
eval.jsonl
eval.csv
Hugging Face datasets
Use Hugging Face when your eval should run from a public or preconfigured private dataset. The gateway loads rows from the Hugging Face datasets server.| Field | Description |
|---|---|
source | Set to huggingface. It is inferred when path is present. |
path | Dataset path, such as facebook/belebele. |
name | Dataset config. If omitted, MKA1 tries to discover a config for the requested split. |
split | Split to load. Defaults to test. |
revision | Optional dataset revision. |
max_rows | Optional cap for loading and smoke tests. |
dataset_kwargs | Additional loading metadata retained for parity with existing eval definitions. |
Hugging Face json and csv builders
For path: "json" or path: "csv", provide data_files.
Only HTTP(S) URLs are allowed, and local/private network hosts are rejected.
data_files under dataset_kwargs.data_files.
Templates
prompt_template and target_template render with values from the current dataset row.
| Pattern | Result |
|---|---|
{{field}} | Reads a top-level row field. |
{{nested.field}} | Reads a nested object field. |
{{row}} | Inserts the full row as JSON. |
{{choices}} | Inserts the task choices array as JSON. |
{{choice_list}} | Inserts the task choices joined by newlines. |
Few-shot examples
Few-shot examples are rendered before the evaluated prompt. Usenum_fewshot for lm-eval style manifests, or the expanded fewshot object when you need more control.
| Field | Description |
|---|---|
count | Number of examples to prepend. |
dataset | Optional separate dataset. If omitted, examples come from the task dataset. Hugging Face few-shot datasets default to train when split is omitted. |
prompt_template | Optional template for few-shot prompts. Defaults to the task prompt_template. |
target_template | Optional template for few-shot targets. Defaults to the task target_template. |
example_template | Template that combines rendered {{prompt}} and {{target}}. Defaults to {{prompt}}\n{{target}}. |
separator | Separator between examples and the evaluated prompt. |
strategy | first or random. |
seed | Seed used by random selection. |
Python preprocessors
Use preprocessors to normalize dataset rows before prompt rendering. They run in the Python sandbox with the same file scoping rules as graders.| Contract | Function names | Use |
|---|---|---|
row | transform_row(row), transform(row), or process_doc(row) | Transform one row at a time. |
batch | transform_batch(rows) or process_docs(rows) | Transform, filter, duplicate, or join rows as a batch. |
| Return value | Meaning |
|---|---|
dict | One transformed row. |
list[dict] | Zero, one, or many transformed rows. |
None | No rows for that input. |
Output extraction
Output extraction turns raw model text intoextracted_output.
The grader receives both sample["output_text"] and sample["extracted_output"].
| Type | Fields | Behavior |
|---|---|---|
none | None | Trims common model noise and whitespace. |
take_first | lines | Takes the first non-empty line or lines. |
regex | pattern, group, flags | Returns the first regex match group. |
regex_last | pattern, group, flags | Returns the last regex match group. |
label_set | labels, case_sensitive | Returns the first matching label. |
number | None | Extracts a numeric value. |
Metrics
Metrics declare which score keys should be aggregated. Python graders produce the score values.| Field | Description |
|---|---|
id | Score key. Letters, numbers, _, ., and - are allowed. |
aggregation | mean or none. Defaults to mean. |
higher_is_better | Defaults to true. |
description | Optional description for dashboards and humans. |
metric_id, which defaults to score.
If a per-sample task omits metrics, MKA1 adds a default metric for that metric_id.
Aggregate batch graders can provide final task metrics through grade_batch.
Generation settings
Run-levelgeneration controls candidate model calls.
It includes normalized Responses fields, lm-eval aliases, provider passthrough fields, and eval execution controls.
| Field | Notes |
|---|---|
instructions | System/developer instruction text for compatible Responses models. |
temperature, top_p | Sampling controls. |
max_output_tokens | MKA1 Responses token cap. |
max_gen_toks | lm-eval alias for max_output_tokens. |
stop | String or list of stop sequences. |
until | lm-eval alias for stop sequences. |
tools, tool_choice, parallel_tool_calls, max_tool_calls | Responses tool settings. |
reasoning, text, truncation, service_tier | Passed to compatible Responses models. |
presence_penalty, frequency_penalty | Penalty settings. |
| Field | Notes |
|---|---|
top_k | For compatible non-OpenAI upstreams. |
min_p | For compatible non-OpenAI upstreams. |
repetition_penalty | For compatible non-OpenAI upstreams. |
do_sample | For compatible non-OpenAI upstreams. |
extra_body | Extra provider body fields after unsafe keys are removed. |
chat_template_kwargs | Chat-template options such as enable_thinking. |
prefill_think | Thinking/prefill control for compatible providers. |
use_cache | Provider cache control when supported. |
| Field | Description |
|---|---|
timeout_seconds | Per-model-call timeout. Range is 1 to 3600. |
max_retries | Retries for retryable provider/network errors. Range is 0 to 10. |
max_empty_retries | Retries when the candidate output is empty. Range is 0 to 10. |
Example: multiple-choice Hugging Face task
Example: few-shot task with a separate training split
Versioning guidance
Create a new suite version when you change any behavior that affects results:- Dataset file or Hugging Face path/config/split.
- Prompt, target, few-shot, preprocessing, or output extraction.
- Metric IDs or aggregation behavior.
- Python grader source or file ID.
- Candidate models.
- Judge model.
- Embedding model.
- Generation settings.
- Concurrency and sample caps.