AVBala commited on
Commit
78f4dc7
·
verified ·
1 Parent(s): 1b91191

Publish Nimora Agent v0.0.1-alpha

Browse files

Passed gated held-out evaluation: 100% valid JSON, 100% semantic action accuracy, 97.5% exact arguments on 40 synthetic cases. Includes full report and reproducibility metadata.

.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ base_model: Qwen/Qwen3-4B
3
+ base_model_relation: finetune
4
+ library_name: peft
5
+ pipeline_tag: text-generation
6
+ license: apache-2.0
7
+ language:
8
+ - en
9
+ tags:
10
+ - coding
11
+ - agent
12
+ - tool-use
13
+ - qlora
14
+ - peft
15
+ - transformers
16
+ ---
17
+
18
+ # Nimora Agent v0.0.1-alpha
19
+
20
+ Nimora Agent is an experimental QLoRA adapter for `Qwen/Qwen3-4B`. It is trained to act as the controller in the open-source [Nimora coding-agent runtime](https://github.com/AshwinVBala/nimora): select one small, verifiable action at a time, use provider-neutral workspace/Git/change tools, and return canonical JSON decisions.
21
+
22
+ This release is an alpha protocol adapter, not a general-purpose coding model and not evidence of production-level autonomous software engineering.
23
+
24
+ ## Intended use
25
+
26
+ Use this adapter with the pinned base model and the Nimora runtime. The runtime supplies the system instruction, repository observations, tool execution, policy checks, revision binding, and approval boundaries. Keep a human in control of destructive actions, approvals, merges, and deployments.
27
+
28
+ The expected response is either:
29
+
30
+ ```json
31
+ {"plan":"brief reason","action":{"name":"tool.name","arguments":{}}}
32
+ ```
33
+
34
+ or:
35
+
36
+ ```json
37
+ {"result":"evidence-backed final response"}
38
+ ```
39
+
40
+ ## Evaluation
41
+
42
+ The publication gate used 40 held-out synthetic prefix-to-next-decision cases across 10 scenario families. The same cases were run with deterministic decoding against the pinned base model and this adapter.
43
+
44
+ | Model | Valid JSON | Correct action/result semantics | Exact action arguments |
45
+ |---|---:|---:|---:|
46
+ | Qwen3-4B base | 100% | 27.5% | 20.0% |
47
+ | Nimora adapter | 100% | 100% | 97.5% |
48
+
49
+ Final validation loss was `0.004358`. All publication gates passed. See `evaluation-report.json` for every expected decision, raw generation, parsed result, metric, version, and artifact hash.
50
+
51
+ These results measure conformance to a deterministic synthetic protocol. They do **not** measure real-repository coding quality and are not comparable to SWE-bench or other independent coding benchmarks.
52
+
53
+ ## Training
54
+
55
+ - Base: `Qwen/Qwen3-4B` at revision `1cfa9a7208912126459214e8b04321603b3df60c`
56
+ - Method: 4-bit NF4 QLoRA, rank 16, alpha 32
57
+ - Context: 2048 tokens
58
+ - Supervision: last assistant turn in balanced prefix-to-next-decision examples
59
+ - Data: 400 train, 40 validation, 40 held-out evaluation cases
60
+ - Hardware: one Tesla T4
61
+ - Train runtime: 805 seconds; total gated run: 1,526 seconds
62
+ - License: Apache-2.0
63
+
64
+ The data is deterministic synthetic template data authored for Nimora. It contains no private repositories, user logs, credentials, or scraped code. Dataset provenance and limitations are recorded in `dataset-manifest.json`; exact hyperparameters are in `training-config.yaml`.
65
+
66
+ ## Loading
67
+
68
+ ```python
69
+ from peft import PeftModel
70
+ from transformers import AutoModelForCausalLM, AutoTokenizer
71
+
72
+ base_id = "Qwen/Qwen3-4B"
73
+ adapter_id = "AVBala/nimora-agent"
74
+
75
+ tokenizer = AutoTokenizer.from_pretrained(adapter_id)
76
+ base = AutoModelForCausalLM.from_pretrained(base_id, device_map="auto")
77
+ model = PeftModel.from_pretrained(base, adapter_id)
78
+ model.eval()
79
+ ```
80
+
81
+ For actual agent inference, use the Nimora runtime rather than sending unconstrained standalone prompts.
82
+
83
+ ## Limitations and safety
84
+
85
+ - The corpus is small and templated; unfamiliar tools, repositories, languages, and long-horizon tasks are unvalidated.
86
+ - High held-out template accuracy may not transfer to real coding work.
87
+ - The model can still hallucinate, choose unsafe actions, or claim unsupported results outside the trained protocol.
88
+ - Never give the model unrestricted shell, credentials, merge, deployment, or approval authority.
89
+ - Provider operations should remain revision-bound, policy-checked, auditable, and human-reviewable.
90
+
91
+ ## Reproducibility
92
+
93
+ The repository contains the dataset builder, QLoRA trainer, runtime protocol, provider integrations, and tests. This model repository includes the adapter, tokenizer files, full evaluation report, training configuration, and dataset manifest.
adapter_config.json ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alora_invocation_tokens": null,
3
+ "alpha_pattern": {},
4
+ "arrow_config": null,
5
+ "auto_mapping": null,
6
+ "base_model_name_or_path": "Qwen/Qwen3-4B",
7
+ "bias": "none",
8
+ "corda_config": null,
9
+ "ensure_weight_tying": false,
10
+ "eva_config": null,
11
+ "exclude_modules": null,
12
+ "fan_in_fan_out": false,
13
+ "inference_mode": true,
14
+ "init_lora_weights": true,
15
+ "layer_replication": null,
16
+ "layers_pattern": null,
17
+ "layers_to_transform": null,
18
+ "loftq_config": {},
19
+ "lora_alpha": 32,
20
+ "lora_bias": false,
21
+ "lora_dropout": 0.05,
22
+ "lora_ga_config": null,
23
+ "megatron_config": null,
24
+ "megatron_core": "megatron.core",
25
+ "modules_to_save": null,
26
+ "monteclora_config": null,
27
+ "peft_type": "LORA",
28
+ "peft_version": "0.20.0",
29
+ "qalora_group_size": 16,
30
+ "r": 16,
31
+ "rank_pattern": {},
32
+ "revision": null,
33
+ "target_modules": [
34
+ "v_proj",
35
+ "o_proj",
36
+ "q_proj",
37
+ "down_proj",
38
+ "k_proj",
39
+ "gate_proj",
40
+ "up_proj"
41
+ ],
42
+ "target_parameters": null,
43
+ "task_type": "CAUSAL_LM",
44
+ "trainable_token_indices": null,
45
+ "use_bdlora": null,
46
+ "use_dora": false,
47
+ "use_qalora": false,
48
+ "use_rslora": false,
49
+ "velora_config": null
50
+ }
adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1e68eb27c9df735c435df84ea8efb8a9ec41827a2b9df9a6eb9291459b602d36
3
+ size 132187888
added_tokens.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "</think>": 151668,
3
+ "</tool_call>": 151658,
4
+ "</tool_response>": 151666,
5
+ "<think>": 151667,
6
+ "<tool_call>": 151657,
7
+ "<tool_response>": 151665,
8
+ "<|box_end|>": 151649,
9
+ "<|box_start|>": 151648,
10
+ "<|endoftext|>": 151643,
11
+ "<|file_sep|>": 151664,
12
+ "<|fim_middle|>": 151660,
13
+ "<|fim_pad|>": 151662,
14
+ "<|fim_prefix|>": 151659,
15
+ "<|fim_suffix|>": 151661,
16
+ "<|im_end|>": 151645,
17
+ "<|im_start|>": 151644,
18
+ "<|image_pad|>": 151655,
19
+ "<|object_ref_end|>": 151647,
20
+ "<|object_ref_start|>": 151646,
21
+ "<|quad_end|>": 151651,
22
+ "<|quad_start|>": 151650,
23
+ "<|repo_name|>": 151663,
24
+ "<|video_pad|>": 151656,
25
+ "<|vision_end|>": 151653,
26
+ "<|vision_pad|>": 151654,
27
+ "<|vision_start|>": 151652
28
+ }
chat_template.jinja ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- if tools %}
2
+ {{- '<|im_start|>system\n' }}
3
+ {%- if messages[0].role == 'system' %}
4
+ {{- messages[0].content + '\n\n' }}
5
+ {%- endif %}
6
+ {{- "# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}
7
+ {%- for tool in tools %}
8
+ {{- "\n" }}
9
+ {{- tool | tojson }}
10
+ {%- endfor %}
11
+ {{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }}
12
+ {%- else %}
13
+ {%- if messages[0].role == 'system' %}
14
+ {{- '<|im_start|>system\n' + messages[0].content + '<|im_end|>\n' }}
15
+ {%- endif %}
16
+ {%- endif %}
17
+ {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
18
+ {%- for message in messages[::-1] %}
19
+ {%- set index = (messages|length - 1) - loop.index0 %}
20
+ {%- if ns.multi_step_tool and message.role == "user" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}
21
+ {%- set ns.multi_step_tool = false %}
22
+ {%- set ns.last_query_index = index %}
23
+ {%- endif %}
24
+ {%- endfor %}
25
+ {%- for message in messages %}
26
+ {%- if message.content is string %}
27
+ {%- set content = message.content %}
28
+ {%- else %}
29
+ {%- set content = '' %}
30
+ {%- endif %}
31
+ {%- if (message.role == "user") or (message.role == "system" and not loop.first) %}
32
+ {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
33
+ {%- elif message.role == "assistant" %}
34
+ {%- set reasoning_content = '' %}
35
+ {%- if message.reasoning_content is string %}
36
+ {%- set reasoning_content = message.reasoning_content %}
37
+ {%- else %}
38
+ {%- if '</think>' in content %}
39
+ {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
40
+ {%- set content = content.split('</think>')[-1].lstrip('\n') %}
41
+ {%- endif %}
42
+ {%- endif %}
43
+ {%- if loop.index0 > ns.last_query_index %}
44
+ {%- if loop.last or (not loop.last and reasoning_content) %}
45
+ {{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content.strip('\n') + '\n</think>\n\n' + content.lstrip('\n') }}
46
+ {%- else %}
47
+ {{- '<|im_start|>' + message.role + '\n' + content }}
48
+ {%- endif %}
49
+ {%- else %}
50
+ {{- '<|im_start|>' + message.role + '\n' + content }}
51
+ {%- endif %}
52
+ {%- if message.tool_calls %}
53
+ {%- for tool_call in message.tool_calls %}
54
+ {%- if (loop.first and content) or (not loop.first) %}
55
+ {{- '\n' }}
56
+ {%- endif %}
57
+ {%- if tool_call.function %}
58
+ {%- set tool_call = tool_call.function %}
59
+ {%- endif %}
60
+ {{- '<tool_call>\n{"name": "' }}
61
+ {{- tool_call.name }}
62
+ {{- '", "arguments": ' }}
63
+ {%- if tool_call.arguments is string %}
64
+ {{- tool_call.arguments }}
65
+ {%- else %}
66
+ {{- tool_call.arguments | tojson }}
67
+ {%- endif %}
68
+ {{- '}\n</tool_call>' }}
69
+ {%- endfor %}
70
+ {%- endif %}
71
+ {{- '<|im_end|>\n' }}
72
+ {%- elif message.role == "tool" %}
73
+ {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
74
+ {{- '<|im_start|>user' }}
75
+ {%- endif %}
76
+ {{- '\n<tool_response>\n' }}
77
+ {{- content }}
78
+ {{- '\n</tool_response>' }}
79
+ {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
80
+ {{- '<|im_end|>\n' }}
81
+ {%- endif %}
82
+ {%- endif %}
83
+ {%- endfor %}
84
+ {%- if add_generation_prompt %}
85
+ {{- '<|im_start|>assistant\n' }}
86
+ {%- if enable_thinking is defined and enable_thinking is false %}
87
+ {{- '<think>\n\n</think>\n\n' }}
88
+ {%- endif %}
89
+ {%- endif %}
dataset-manifest.json ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "nimora-agent-alpha-v0.0.1",
3
+ "license": "Apache-2.0",
4
+ "provenance": "deterministic synthetic templates authored for Nimora",
5
+ "supervision": "prefix_to_next_decision",
6
+ "limitations": [
7
+ "Template-generated data does not establish real-world coding quality.",
8
+ "No private repositories, user logs, credentials, or scraped code are included.",
9
+ "Provider names appear in tasks, but actions use provider-neutral runtime tools."
10
+ ],
11
+ "families": [
12
+ "create_and_test",
13
+ "edit_and_test",
14
+ "git_to_change",
15
+ "inspect",
16
+ "permission_recovery",
17
+ "review_approve",
18
+ "review_block",
19
+ "review_merge",
20
+ "stale_write_recovery",
21
+ "test_recovery"
22
+ ],
23
+ "counts": {
24
+ "train": 400,
25
+ "validation": 40,
26
+ "eval": 40
27
+ },
28
+ "split_index_ranges": {
29
+ "train": [
30
+ 0,
31
+ 39
32
+ ],
33
+ "validation": [
34
+ 10000,
35
+ 10003
36
+ ],
37
+ "eval": [
38
+ 20000,
39
+ 20003
40
+ ]
41
+ }
42
+ }
evaluation-report.json ADDED
@@ -0,0 +1,2280 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "passed",
3
+ "release": "v0.0.1-alpha",
4
+ "base_model": "Qwen/Qwen3-4B",
5
+ "base_model_revision": "1cfa9a7208912126459214e8b04321603b3df60c",
6
+ "gpu": "Tesla T4",
7
+ "dataset": {
8
+ "name": "nimora-agent-alpha-v0.0.1",
9
+ "license": "Apache-2.0",
10
+ "provenance": "deterministic synthetic templates authored for Nimora",
11
+ "supervision": "prefix_to_next_decision",
12
+ "limitations": [
13
+ "Template-generated data does not establish real-world coding quality.",
14
+ "No private repositories, user logs, credentials, or scraped code are included.",
15
+ "Provider names appear in tasks, but actions use provider-neutral runtime tools."
16
+ ],
17
+ "families": [
18
+ "create_and_test",
19
+ "edit_and_test",
20
+ "git_to_change",
21
+ "inspect",
22
+ "permission_recovery",
23
+ "review_approve",
24
+ "review_block",
25
+ "review_merge",
26
+ "stale_write_recovery",
27
+ "test_recovery"
28
+ ],
29
+ "counts": {
30
+ "train": 400,
31
+ "validation": 40,
32
+ "eval": 40
33
+ },
34
+ "split_index_ranges": {
35
+ "train": [
36
+ 0,
37
+ 39
38
+ ],
39
+ "validation": [
40
+ 10000,
41
+ 10003
42
+ ],
43
+ "eval": [
44
+ 20000,
45
+ 20003
46
+ ]
47
+ }
48
+ },
49
+ "training": {
50
+ "train": {
51
+ "train_runtime": 805.2917,
52
+ "train_samples_per_second": 0.497,
53
+ "train_steps_per_second": 0.497,
54
+ "total_flos": 3575252515292160.0,
55
+ "train_loss": 0.3089988502621418,
56
+ "epoch": 1.0
57
+ },
58
+ "evaluation": {
59
+ "eval_loss": 0.004357926081866026,
60
+ "eval_runtime": 23.0059,
61
+ "eval_samples_per_second": 1.739,
62
+ "eval_steps_per_second": 1.739,
63
+ "epoch": 1.0
64
+ },
65
+ "adapter_dir": "/content/nimora-agent-alpha/run/final-adapter"
66
+ },
67
+ "base_evaluation": {
68
+ "count": 40,
69
+ "valid_rate": 1.0,
70
+ "semantic_rate": 0.275,
71
+ "arguments_exact_rate": 0.2,
72
+ "cases": [
73
+ {
74
+ "valid": true,
75
+ "semantic": false,
76
+ "arguments_exact": false,
77
+ "error": null,
78
+ "raw": "{\"plan\":\"Find the parser implementation file\",\"action\":{\"name\":\"find_file\",\"arguments\":{\"filename\":\"parser.py\"}}}",
79
+ "actual": {
80
+ "plan": "Find the parser implementation file",
81
+ "action": {
82
+ "name": "find_file",
83
+ "arguments": {
84
+ "filename": "parser.py"
85
+ }
86
+ },
87
+ "result": null
88
+ },
89
+ "family": "inspect",
90
+ "expected": {
91
+ "action": {
92
+ "arguments": {
93
+ "path": "src",
94
+ "query": "def parser"
95
+ },
96
+ "name": "workspace.search"
97
+ },
98
+ "plan": "Search narrowly before reading files."
99
+ }
100
+ },
101
+ {
102
+ "valid": true,
103
+ "semantic": true,
104
+ "arguments_exact": false,
105
+ "error": null,
106
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src/router.py\",\"query\":\"def router\"},\"name\":\"workspace.read\"},\"plan\":\"Read the file to find the relevant entry point.\"}",
107
+ "actual": {
108
+ "plan": "Read the file to find the relevant entry point.",
109
+ "action": {
110
+ "name": "workspace.read",
111
+ "arguments": {
112
+ "path": "src/router.py",
113
+ "query": "def router"
114
+ }
115
+ },
116
+ "result": null
117
+ },
118
+ "family": "inspect",
119
+ "expected": {
120
+ "action": {
121
+ "arguments": {
122
+ "end_line": 90,
123
+ "path": "src/router.py",
124
+ "start_line": 1
125
+ },
126
+ "name": "workspace.read"
127
+ },
128
+ "plan": "Read the matching implementation."
129
+ }
130
+ },
131
+ {
132
+ "valid": true,
133
+ "semantic": true,
134
+ "arguments_exact": true,
135
+ "error": null,
136
+ "raw": "{\"result\": \"The serializer implementation is located in src/serializer.py. The relevant entry point is the serializer function, which returns the normalized value of the input.\"}",
137
+ "actual": {
138
+ "plan": null,
139
+ "action": null,
140
+ "result": "The serializer implementation is located in src/serializer.py. The relevant entry point is the serializer function, which returns the normalized value of the input."
141
+ },
142
+ "family": "inspect",
143
+ "expected": {
144
+ "result": "Found `serializer` in `src/serializer.py` at line 17 and inspected its implementation."
145
+ }
146
+ },
147
+ {
148
+ "valid": true,
149
+ "semantic": false,
150
+ "arguments_exact": false,
151
+ "error": null,
152
+ "raw": "{\"plan\":\"Find the scheduler implementation file\",\"action\":{\"name\":\"find_file\",\"arguments\":{\"filename\":\"scheduler.py\"}}}",
153
+ "actual": {
154
+ "plan": "Find the scheduler implementation file",
155
+ "action": {
156
+ "name": "find_file",
157
+ "arguments": {
158
+ "filename": "scheduler.py"
159
+ }
160
+ },
161
+ "result": null
162
+ },
163
+ "family": "inspect",
164
+ "expected": {
165
+ "action": {
166
+ "arguments": {
167
+ "path": "src",
168
+ "query": "def scheduler"
169
+ },
170
+ "name": "workspace.search"
171
+ },
172
+ "plan": "Search narrowly before reading files."
173
+ }
174
+ },
175
+ {
176
+ "valid": true,
177
+ "semantic": false,
178
+ "arguments_exact": false,
179
+ "error": null,
180
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src/parser.py\",\"line_number\":1,\"content\":\"def handle(items):\\n return items[0]\\n\"},\"name\":\"workspace.write\"},\"plan\":\"Modify the parser to handle empty input by returning an empty list.\"}",
181
+ "actual": {
182
+ "plan": "Modify the parser to handle empty input by returning an empty list.",
183
+ "action": {
184
+ "name": "workspace.write",
185
+ "arguments": {
186
+ "path": "src/parser.py",
187
+ "line_number": 1,
188
+ "content": "def handle(items):\n return items[0]\n"
189
+ }
190
+ },
191
+ "result": null
192
+ },
193
+ "family": "edit_and_test",
194
+ "expected": {
195
+ "action": {
196
+ "arguments": {
197
+ "expected_occurrences": 1,
198
+ "expected_sha256": "58febb3133e74760e613269ec2e92f1c8861f4ca4b2fafe350bdb4eca1475779",
199
+ "new_text": "def handle(items):\n if not items:\n return None\n return items[0]",
200
+ "old_text": "def handle(items):\n return items[0]",
201
+ "path": "src/parser.py"
202
+ },
203
+ "name": "workspace.replace"
204
+ },
205
+ "plan": "Apply the smallest concurrency-safe replacement."
206
+ }
207
+ },
208
+ {
209
+ "valid": true,
210
+ "semantic": false,
211
+ "arguments_exact": false,
212
+ "error": null,
213
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src/config.py\",\"sha256\":\"e71ba961d8f5e8191e177c3a6280684464be7b4cba26445f75574f28aceb5347\"},\"name\":\"workspace.read\"},\"plan\":\"Verify the replacement and capture the new content hash.\"}",
214
+ "actual": {
215
+ "plan": "Verify the replacement and capture the new content hash.",
216
+ "action": {
217
+ "name": "workspace.read",
218
+ "arguments": {
219
+ "path": "src/config.py",
220
+ "sha256": "e71ba961d8f5e8191e177c3a6280684464be7b4cba26445f75574f28aceb5347"
221
+ }
222
+ },
223
+ "result": null
224
+ },
225
+ "family": "edit_and_test",
226
+ "expected": {
227
+ "action": {
228
+ "arguments": {
229
+ "argv": [
230
+ "pytest",
231
+ "-q",
232
+ "tests/test_config.py"
233
+ ],
234
+ "cwd": "."
235
+ },
236
+ "name": "shell.run"
237
+ },
238
+ "plan": "Run only the relevant test module first."
239
+ }
240
+ },
241
+ {
242
+ "valid": true,
243
+ "semantic": true,
244
+ "arguments_exact": true,
245
+ "error": null,
246
+ "raw": "{\"result\": \"The empty-input regression in the client has been fixed and the focused tests have passed successfully.\"}",
247
+ "actual": {
248
+ "plan": null,
249
+ "action": null,
250
+ "result": "The empty-input regression in the client has been fixed and the focused tests have passed successfully."
251
+ },
252
+ "family": "edit_and_test",
253
+ "expected": {
254
+ "result": "Fixed empty-input handling in `src/client.py`; all 6 focused tests pass."
255
+ }
256
+ },
257
+ {
258
+ "valid": true,
259
+ "semantic": false,
260
+ "arguments_exact": false,
261
+ "error": null,
262
+ "raw": "{\"plan\":\"Check for the presence of the empty-input regression in the cache module\",\"action\":{\"name\":\"check_regression\",\"arguments\":{\"module\":\"cache\",\"regression\":\"empty-input\"}}}",
263
+ "actual": {
264
+ "plan": "Check for the presence of the empty-input regression in the cache module",
265
+ "action": {
266
+ "name": "check_regression",
267
+ "arguments": {
268
+ "module": "cache",
269
+ "regression": "empty-input"
270
+ }
271
+ },
272
+ "result": null
273
+ },
274
+ "family": "edit_and_test",
275
+ "expected": {
276
+ "action": {
277
+ "arguments": {
278
+ "path": "src/cache.py"
279
+ },
280
+ "name": "workspace.read"
281
+ },
282
+ "plan": "Read the current implementation and capture its content hash."
283
+ }
284
+ },
285
+ {
286
+ "valid": true,
287
+ "semantic": false,
288
+ "arguments_exact": false,
289
+ "error": null,
290
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src/health.py\",\"source\":\"def health():\\n return \\\"ok\\\"\\n\"},\"name\":\"workspace.read\"},\"plan\":\"Verify the module's content.\"}",
291
+ "actual": {
292
+ "plan": "Verify the module's content.",
293
+ "action": {
294
+ "name": "workspace.read",
295
+ "arguments": {
296
+ "path": "src/health.py",
297
+ "source": "def health():\n return \"ok\"\n"
298
+ }
299
+ },
300
+ "result": null
301
+ },
302
+ "family": "create_and_test",
303
+ "expected": {
304
+ "action": {
305
+ "arguments": {
306
+ "argv": [
307
+ "pytest",
308
+ "-q",
309
+ "tests/test_health.py"
310
+ ],
311
+ "cwd": "."
312
+ },
313
+ "name": "shell.run"
314
+ },
315
+ "plan": "Verify the new behavior with its focused test."
316
+ }
317
+ },
318
+ {
319
+ "valid": true,
320
+ "semantic": true,
321
+ "arguments_exact": true,
322
+ "error": null,
323
+ "raw": "{\"result\": \"The version module was successfully created and its focused test passed.\"}",
324
+ "actual": {
325
+ "plan": null,
326
+ "action": null,
327
+ "result": "The version module was successfully created and its focused test passed."
328
+ },
329
+ "family": "create_and_test",
330
+ "expected": {
331
+ "result": "Added `src/version.py` and verified its 2 focused tests pass."
332
+ }
333
+ },
334
+ {
335
+ "valid": true,
336
+ "semantic": false,
337
+ "arguments_exact": false,
338
+ "error": null,
339
+ "raw": "{\"plan\":\"Add a diagnostics module and verify its test\",\"action\":{\"name\":\"add_file\",\"arguments\":{\"filename\":\"diagnostics.py\",\"content\":\"def check_system_status():\\n return \\\"System status: OK\\\"\\n\\n# Test the diagnostics module\\nif __name__ == \\\"__main__\\\":\\n print(check_system_status())\"}}}",
340
+ "actual": {
341
+ "plan": "Add a diagnostics module and verify its test",
342
+ "action": {
343
+ "name": "add_file",
344
+ "arguments": {
345
+ "filename": "diagnostics.py",
346
+ "content": "def check_system_status():\n return \"System status: OK\"\n\n# Test the diagnostics module\nif __name__ == \"__main__\":\n print(check_system_status())"
347
+ }
348
+ },
349
+ "result": null
350
+ },
351
+ "family": "create_and_test",
352
+ "expected": {
353
+ "action": {
354
+ "arguments": {
355
+ "limit": 100,
356
+ "path": "src"
357
+ },
358
+ "name": "workspace.list"
359
+ },
360
+ "plan": "List the package before creating a new module."
361
+ }
362
+ },
363
+ {
364
+ "valid": true,
365
+ "semantic": false,
366
+ "arguments_exact": false,
367
+ "error": null,
368
+ "raw": "{\"action\":{\"arguments\":{\"name\":\"metadata\",\"path\":\"src\"},\"name\":\"workspace.create_module\"},\"plan\":\"Create a new module named 'metadata' in the 'src' directory.\"}",
369
+ "actual": {
370
+ "plan": "Create a new module named 'metadata' in the 'src' directory.",
371
+ "action": {
372
+ "name": "workspace.create_module",
373
+ "arguments": {
374
+ "name": "metadata",
375
+ "path": "src"
376
+ }
377
+ },
378
+ "result": null
379
+ },
380
+ "family": "create_and_test",
381
+ "expected": {
382
+ "action": {
383
+ "arguments": {
384
+ "content": "def metadata():\n return \"ok\"\n",
385
+ "expected_sha256": null,
386
+ "path": "src/metadata.py"
387
+ },
388
+ "name": "workspace.write"
389
+ },
390
+ "plan": "Create only the requested module."
391
+ }
392
+ },
393
+ {
394
+ "valid": true,
395
+ "semantic": true,
396
+ "arguments_exact": false,
397
+ "error": null,
398
+ "raw": "{\"action\":{\"arguments\":{\"message\":\"Fix issue 20100\",\"path\":\"src/issue_20100.py\",\"staged\":true},\"name\":\"git.commit\"},\"plan\":\"Commit the changes for issue 20100.\"}",
399
+ "actual": {
400
+ "plan": "Commit the changes for issue 20100.",
401
+ "action": {
402
+ "name": "git.commit",
403
+ "arguments": {
404
+ "message": "Fix issue 20100",
405
+ "path": "src/issue_20100.py",
406
+ "staged": true
407
+ }
408
+ },
409
+ "result": null
410
+ },
411
+ "family": "git_to_change",
412
+ "expected": {
413
+ "action": {
414
+ "arguments": {
415
+ "expected_head": "d5af24fbbf21e7893bea19d858428447c72c6bbe25b1b76344f09b99b3c87845",
416
+ "message": "Fix issue 20100",
417
+ "paths": [
418
+ "src/issue_20100.py",
419
+ "tests/test_issue_20100.py"
420
+ ]
421
+ },
422
+ "name": "git.commit"
423
+ },
424
+ "plan": "Commit only the requested source and test files."
425
+ }
426
+ },
427
+ {
428
+ "valid": true,
429
+ "semantic": false,
430
+ "arguments_exact": false,
431
+ "error": null,
432
+ "raw": "{\"action\":{\"arguments\":{\"name\":\"fix/issue-20101\",\"head\":\"d256cce9835cecbb4881661161b01c78f7dbe7fc22b7b8b1a43523e0e9d5f9d3\",\"title\":\"Fix issue 20101\",\"description\":\"Fixes the issue 20101.\"},\"name\":\"gitlab.create_merge_request\"},\"plan\":\"Create a merge request on GitLab for the fix.\"}",
433
+ "actual": {
434
+ "plan": "Create a merge request on GitLab for the fix.",
435
+ "action": {
436
+ "name": "gitlab.create_merge_request",
437
+ "arguments": {
438
+ "name": "fix/issue-20101",
439
+ "head": "d256cce9835cecbb4881661161b01c78f7dbe7fc22b7b8b1a43523e0e9d5f9d3",
440
+ "title": "Fix issue 20101",
441
+ "description": "Fixes the issue 20101."
442
+ }
443
+ },
444
+ "result": null
445
+ },
446
+ "family": "git_to_change",
447
+ "expected": {
448
+ "action": {
449
+ "arguments": {
450
+ "branch": "fix/issue-20101",
451
+ "expected_head": "d256cce9835cecbb4881661161b01c78f7dbe7fc22b7b8b1a43523e0e9d5f9d3",
452
+ "remote": "origin"
453
+ },
454
+ "name": "git.push"
455
+ },
456
+ "plan": "Push the exact commit on the focused branch."
457
+ }
458
+ },
459
+ {
460
+ "valid": true,
461
+ "semantic": false,
462
+ "arguments_exact": false,
463
+ "error": null,
464
+ "raw": "{\"action\":{\"arguments\":{\"branch\":\"fix/issue-20102\",\"token\":\"gitea_token\"},\"name\":\"gitea.create_pr\"},\"plan\":\"Create a pull request on Gitea for the focused branch.\"}",
465
+ "actual": {
466
+ "plan": "Create a pull request on Gitea for the focused branch.",
467
+ "action": {
468
+ "name": "gitea.create_pr",
469
+ "arguments": {
470
+ "branch": "fix/issue-20102",
471
+ "token": "gitea_token"
472
+ }
473
+ },
474
+ "result": null
475
+ },
476
+ "family": "git_to_change",
477
+ "expected": {
478
+ "action": {
479
+ "arguments": {
480
+ "base_branch": "main",
481
+ "body": "Includes the minimal implementation and focused tests.",
482
+ "head_branch": "fix/issue-20102",
483
+ "title": "Fix issue 20102"
484
+ },
485
+ "name": "provider.open_change"
486
+ },
487
+ "plan": "Open the already-pushed branch as a Gitea change."
488
+ }
489
+ },
490
+ {
491
+ "valid": true,
492
+ "semantic": true,
493
+ "arguments_exact": true,
494
+ "error": null,
495
+ "raw": "{\"result\": \"The fix for issue 20103 has been prepared, committed, and opened on Forgejo. The pull request number is 20103.\"}",
496
+ "actual": {
497
+ "plan": null,
498
+ "action": null,
499
+ "result": "The fix for issue 20103 has been prepared, committed, and opened on Forgejo. The pull request number is 20103."
500
+ },
501
+ "family": "git_to_change",
502
+ "expected": {
503
+ "result": "Opened Forgejo change 20103 for `fix/issue-20103` at `48129e00357197548fdafe28042290aee84203362b4186b66a546729dd047b03`."
504
+ }
505
+ },
506
+ {
507
+ "valid": true,
508
+ "semantic": true,
509
+ "arguments_exact": true,
510
+ "error": null,
511
+ "raw": "{\"result\": \"Change 20020 has been approved with current-revision evidence.\"}",
512
+ "actual": {
513
+ "plan": null,
514
+ "action": null,
515
+ "result": "Change 20020 has been approved with current-revision evidence."
516
+ },
517
+ "family": "review_approve",
518
+ "expected": {
519
+ "result": "Approved change 20020 at exact revision `9f5e401f6663311689526f08efe6449c5684a219d1d0e7490537bcd8d1830fa9`."
520
+ }
521
+ },
522
+ {
523
+ "valid": true,
524
+ "semantic": false,
525
+ "arguments_exact": false,
526
+ "error": null,
527
+ "raw": "{\"plan\":\"Check the current-revision evidence for GitLab change 20021\",\"action\":{\"name\":\"get_gitlab_change_revision\",\"arguments\":{\"change_id\":20021}}}",
528
+ "actual": {
529
+ "plan": "Check the current-revision evidence for GitLab change 20021",
530
+ "action": {
531
+ "name": "get_gitlab_change_revision",
532
+ "arguments": {
533
+ "change_id": 20021
534
+ }
535
+ },
536
+ "result": null
537
+ },
538
+ "family": "review_approve",
539
+ "expected": {
540
+ "action": {
541
+ "arguments": {
542
+ "number": 20021
543
+ },
544
+ "name": "provider.get_change"
545
+ },
546
+ "plan": "Fetch the change and bind review to its current head."
547
+ }
548
+ },
549
+ {
550
+ "valid": true,
551
+ "semantic": false,
552
+ "arguments_exact": false,
553
+ "error": null,
554
+ "raw": "{\"action\":{\"arguments\":{\"number\":20022,\"sha\":\"8be1c0da0cf192d5742d40cb5e6a27ff82b4f9480a91572df36674bf6fb26a0a\",\"approval\":\"approved\"},\"name\":\"provider.review\"},\"plan\":\"Approve the change with current-revision evidence.\"}",
555
+ "actual": {
556
+ "plan": "Approve the change with current-revision evidence.",
557
+ "action": {
558
+ "name": "provider.review",
559
+ "arguments": {
560
+ "number": 20022,
561
+ "sha": "8be1c0da0cf192d5742d40cb5e6a27ff82b4f9480a91572df36674bf6fb26a0a",
562
+ "approval": "approved"
563
+ }
564
+ },
565
+ "result": null
566
+ },
567
+ "family": "review_approve",
568
+ "expected": {
569
+ "action": {
570
+ "arguments": {
571
+ "number": 20022
572
+ },
573
+ "name": "provider.get_diff"
574
+ },
575
+ "plan": "Inspect the diff for that exact revision."
576
+ }
577
+ },
578
+ {
579
+ "valid": true,
580
+ "semantic": false,
581
+ "arguments_exact": false,
582
+ "error": null,
583
+ "raw": "{\"action\":{\"arguments\":{\"number\":20023,\"head_sha\":\"53f79821d8640743877a35554e0bae3c3243b59cdd7461d79f4ac2b69fbe8381\"},\"name\":\"provider.approve\"},\"plan\":\"Approve the change with the current-revision evidence.\"}",
584
+ "actual": {
585
+ "plan": "Approve the change with the current-revision evidence.",
586
+ "action": {
587
+ "name": "provider.approve",
588
+ "arguments": {
589
+ "number": 20023,
590
+ "head_sha": "53f79821d8640743877a35554e0bae3c3243b59cdd7461d79f4ac2b69fbe8381"
591
+ }
592
+ },
593
+ "result": null
594
+ },
595
+ "family": "review_approve",
596
+ "expected": {
597
+ "action": {
598
+ "arguments": {
599
+ "sha": "53f79821d8640743877a35554e0bae3c3243b59cdd7461d79f4ac2b69fbe8381"
600
+ },
601
+ "name": "provider.get_checks"
602
+ },
603
+ "plan": "Check CI for the same commit SHA."
604
+ }
605
+ },
606
+ {
607
+ "valid": true,
608
+ "semantic": false,
609
+ "arguments_exact": false,
610
+ "error": null,
611
+ "raw": "{\"action\":{\"arguments\":{\"number\":20070,\"head_sha\":\"76c464eb4bfccce7c4b6d2fe3323268568f14d4e42334c495a47b617e439b035\"},\"name\":\"provider.get_check\"},\"plan\":\"Verify that all checks for the change have passed.\"}",
612
+ "actual": {
613
+ "plan": "Verify that all checks for the change have passed.",
614
+ "action": {
615
+ "name": "provider.get_check",
616
+ "arguments": {
617
+ "number": 20070,
618
+ "head_sha": "76c464eb4bfccce7c4b6d2fe3323268568f14d4e42334c495a47b617e439b035"
619
+ }
620
+ },
621
+ "result": null
622
+ },
623
+ "family": "review_block",
624
+ "expected": {
625
+ "action": {
626
+ "arguments": {
627
+ "number": 20070
628
+ },
629
+ "name": "provider.get_diff"
630
+ },
631
+ "plan": "Inspect the exact diff before reaching a conclusion."
632
+ }
633
+ },
634
+ {
635
+ "valid": true,
636
+ "semantic": false,
637
+ "arguments_exact": false,
638
+ "error": null,
639
+ "raw": "{\"action\":{\"arguments\":{\"number\":20071,\"head_sha\":\"9e2e60af0f84d475571455a80aa0b0f2eecf413611abe2db14f6c8366d2fd921\"},\"name\":\"provider.get_check\"},\"plan\":\"Verify if all checks have passed for the change.\"}",
640
+ "actual": {
641
+ "plan": "Verify if all checks have passed for the change.",
642
+ "action": {
643
+ "name": "provider.get_check",
644
+ "arguments": {
645
+ "number": 20071,
646
+ "head_sha": "9e2e60af0f84d475571455a80aa0b0f2eecf413611abe2db14f6c8366d2fd921"
647
+ }
648
+ },
649
+ "result": null
650
+ },
651
+ "family": "review_block",
652
+ "expected": {
653
+ "action": {
654
+ "arguments": {
655
+ "sha": "9e2e60af0f84d475571455a80aa0b0f2eecf413611abe2db14f6c8366d2fd921"
656
+ },
657
+ "name": "provider.get_checks"
658
+ },
659
+ "plan": "Read checks for the reviewed SHA."
660
+ }
661
+ },
662
+ {
663
+ "valid": true,
664
+ "semantic": true,
665
+ "arguments_exact": true,
666
+ "error": null,
667
+ "raw": "{\"result\": \"change_20072_not_approved\"}",
668
+ "actual": {
669
+ "plan": null,
670
+ "action": null,
671
+ "result": "change_20072_not_approved"
672
+ },
673
+ "family": "review_block",
674
+ "expected": {
675
+ "result": "Did not approve change 20072: required tests fail on `b330f4b4fd4dd0ae1dad0b47a8c7e835c03cd8dbce16d43021132128522b7a4a`."
676
+ }
677
+ },
678
+ {
679
+ "valid": true,
680
+ "semantic": false,
681
+ "arguments_exact": false,
682
+ "error": null,
683
+ "raw": "{\"plan\":\"Check if change 20073 has passed all necessary reviews.\",\"action\":{\"name\":\"get_change_reviews\",\"arguments\":{\"change_id\":20073}}}",
684
+ "actual": {
685
+ "plan": "Check if change 20073 has passed all necessary reviews.",
686
+ "action": {
687
+ "name": "get_change_reviews",
688
+ "arguments": {
689
+ "change_id": 20073
690
+ }
691
+ },
692
+ "result": null
693
+ },
694
+ "family": "review_block",
695
+ "expected": {
696
+ "action": {
697
+ "arguments": {
698
+ "number": 20073
699
+ },
700
+ "name": "provider.get_change"
701
+ },
702
+ "plan": "Fetch the current change revision."
703
+ }
704
+ },
705
+ {
706
+ "valid": true,
707
+ "semantic": false,
708
+ "arguments_exact": false,
709
+ "error": null,
710
+ "raw": "{\"action\":{\"arguments\":{\"number\":20150,\"head_sha\":\"1849708cc7094b7bc1b97ddc52582e7223c485948abaed97ce0c76b3f4b82d39\"},\"name\":\"provider.rebase\"},\"plan\":\"Rebase the change with the exact revision.\"}",
711
+ "actual": {
712
+ "plan": "Rebase the change with the exact revision.",
713
+ "action": {
714
+ "name": "provider.rebase",
715
+ "arguments": {
716
+ "number": 20150,
717
+ "head_sha": "1849708cc7094b7bc1b97ddc52582e7223c485948abaed97ce0c76b3f4b82d39"
718
+ }
719
+ },
720
+ "result": null
721
+ },
722
+ "family": "review_merge",
723
+ "expected": {
724
+ "action": {
725
+ "arguments": {
726
+ "number": 20150
727
+ },
728
+ "name": "provider.get_diff"
729
+ },
730
+ "plan": "Review the diff at the bound revision."
731
+ }
732
+ },
733
+ {
734
+ "valid": true,
735
+ "semantic": false,
736
+ "arguments_exact": false,
737
+ "error": null,
738
+ "raw": "{\"action\":{\"arguments\":{\"head_sha\":\"f0ec4f1cedc970a3cae4f059ea2e537fabf7271a93173ec56350b92f011387e7\",\"number\":20151},\"name\":\"provider.merge\"},\"plan\":\"Merge the change with squash after verification.\"}",
739
+ "actual": {
740
+ "plan": "Merge the change with squash after verification.",
741
+ "action": {
742
+ "name": "provider.merge",
743
+ "arguments": {
744
+ "head_sha": "f0ec4f1cedc970a3cae4f059ea2e537fabf7271a93173ec56350b92f011387e7",
745
+ "number": 20151
746
+ }
747
+ },
748
+ "result": null
749
+ },
750
+ "family": "review_merge",
751
+ "expected": {
752
+ "action": {
753
+ "arguments": {
754
+ "sha": "f0ec4f1cedc970a3cae4f059ea2e537fabf7271a93173ec56350b92f011387e7"
755
+ },
756
+ "name": "provider.get_checks"
757
+ },
758
+ "plan": "Verify required checks on the same SHA."
759
+ }
760
+ },
761
+ {
762
+ "valid": true,
763
+ "semantic": false,
764
+ "arguments_exact": false,
765
+ "error": null,
766
+ "raw": "{\"action\":{\"arguments\":{\"sha\":\"d49a6148616b6108f3db866a9b3128d95a7eafd8039ea0c27a1d9351d0e2086d\",\"number\":20152},\"name\":\"provider.merge\"},\"plan\":\"Merge the change after verifying its exact revision.\"}",
767
+ "actual": {
768
+ "plan": "Merge the change after verifying its exact revision.",
769
+ "action": {
770
+ "name": "provider.merge",
771
+ "arguments": {
772
+ "sha": "d49a6148616b6108f3db866a9b3128d95a7eafd8039ea0c27a1d9351d0e2086d",
773
+ "number": 20152
774
+ }
775
+ },
776
+ "result": null
777
+ },
778
+ "family": "review_merge",
779
+ "expected": {
780
+ "action": {
781
+ "arguments": {
782
+ "expected_sha": "d49a6148616b6108f3db866a9b3128d95a7eafd8039ea0c27a1d9351d0e2086d",
783
+ "method": "merge",
784
+ "number": 20152
785
+ },
786
+ "name": "provider.merge_change"
787
+ },
788
+ "plan": "Merge only the reviewed, passing revision."
789
+ }
790
+ },
791
+ {
792
+ "valid": true,
793
+ "semantic": true,
794
+ "arguments_exact": true,
795
+ "error": null,
796
+ "raw": "{\"result\": \"Change 20153 has been successfully merged with a rebase after verifying its exact revision.\"}",
797
+ "actual": {
798
+ "plan": null,
799
+ "action": null,
800
+ "result": "Change 20153 has been successfully merged with a rebase after verifying its exact revision."
801
+ },
802
+ "family": "review_merge",
803
+ "expected": {
804
+ "result": "Merged change 20153 at `0b23ed71c765205fd7341e8aab7e00290216a956dd17a7482ba3bc852667ca75` using rebase."
805
+ }
806
+ },
807
+ {
808
+ "valid": true,
809
+ "semantic": false,
810
+ "arguments_exact": false,
811
+ "error": null,
812
+ "raw": "{\"action\":{\"arguments\":{\"argv\":[\"grep\",\"\" ,\"tests/test_parser.py\"],\"cwd\":\".\"},\"name\":\"shell.run\"},\"plan\":\"Locate the test function causing the failure.\"}",
813
+ "actual": {
814
+ "plan": "Locate the test function causing the failure.",
815
+ "action": {
816
+ "name": "shell.run",
817
+ "arguments": {
818
+ "argv": [
819
+ "grep",
820
+ "",
821
+ "tests/test_parser.py"
822
+ ],
823
+ "cwd": "."
824
+ }
825
+ },
826
+ "result": null
827
+ },
828
+ "family": "test_recovery",
829
+ "expected": {
830
+ "action": {
831
+ "arguments": {
832
+ "path": "src",
833
+ "query": "def handle"
834
+ },
835
+ "name": "workspace.search"
836
+ },
837
+ "plan": "Locate the failing implementation named in the test."
838
+ }
839
+ },
840
+ {
841
+ "valid": true,
842
+ "semantic": false,
843
+ "arguments_exact": false,
844
+ "error": null,
845
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src/router.py\",\"line\":12},\"name\":\"workspace.open\"},\"plan\":\"Inspect the implementation to find the issue.\"}",
846
+ "actual": {
847
+ "plan": "Inspect the implementation to find the issue.",
848
+ "action": {
849
+ "name": "workspace.open",
850
+ "arguments": {
851
+ "path": "src/router.py",
852
+ "line": 12
853
+ }
854
+ },
855
+ "result": null
856
+ },
857
+ "family": "test_recovery",
858
+ "expected": {
859
+ "action": {
860
+ "arguments": {
861
+ "path": "src/router.py"
862
+ },
863
+ "name": "workspace.read"
864
+ },
865
+ "plan": "Read the implementation before changing it."
866
+ }
867
+ },
868
+ {
869
+ "valid": true,
870
+ "semantic": false,
871
+ "arguments_exact": false,
872
+ "error": null,
873
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src/worker.py\",\"query\":\"def handle\"},\"name\":\"workspace.search\"},\"plan\":\"Find the function that returns values[0] and is called in the test.\"}",
874
+ "actual": {
875
+ "plan": "Find the function that returns values[0] and is called in the test.",
876
+ "action": {
877
+ "name": "workspace.search",
878
+ "arguments": {
879
+ "path": "src/worker.py",
880
+ "query": "def handle"
881
+ }
882
+ },
883
+ "result": null
884
+ },
885
+ "family": "test_recovery",
886
+ "expected": {
887
+ "action": {
888
+ "arguments": {
889
+ "expected_occurrences": 1,
890
+ "expected_sha256": "76f726b7987c93d815f8ecc19abd415131e30ac0da260e9e9e7092388e09b33e",
891
+ "new_text": "return values[0] if values else None",
892
+ "old_text": "return values[0]",
893
+ "path": "src/worker.py"
894
+ },
895
+ "name": "workspace.replace"
896
+ },
897
+ "plan": "Guard the observed empty-input access."
898
+ }
899
+ },
900
+ {
901
+ "valid": true,
902
+ "semantic": true,
903
+ "arguments_exact": true,
904
+ "error": null,
905
+ "raw": "{\"action\":{\"arguments\":{\"argv\":[\"pytest\",\"-q\",\"tests/test_client.py\"],\"cwd\":\".\"},\"name\":\"shell.run\"},\"plan\":\"Verify the fix by re-running the test.\"}",
906
+ "actual": {
907
+ "plan": "Verify the fix by re-running the test.",
908
+ "action": {
909
+ "name": "shell.run",
910
+ "arguments": {
911
+ "argv": [
912
+ "pytest",
913
+ "-q",
914
+ "tests/test_client.py"
915
+ ],
916
+ "cwd": "."
917
+ }
918
+ },
919
+ "result": null
920
+ },
921
+ "family": "test_recovery",
922
+ "expected": {
923
+ "action": {
924
+ "arguments": {
925
+ "argv": [
926
+ "pytest",
927
+ "-q",
928
+ "tests/test_client.py"
929
+ ],
930
+ "cwd": "."
931
+ },
932
+ "name": "shell.run"
933
+ },
934
+ "plan": "Rerun the previously failing test."
935
+ }
936
+ },
937
+ {
938
+ "valid": true,
939
+ "semantic": true,
940
+ "arguments_exact": false,
941
+ "error": null,
942
+ "raw": "{\"action\":{\"arguments\":{\"expected_occurrences\":1,\"expected_sha256\":\"60191e1caf070507af2e7e67d03e4354ff5417a7166dfce552ff864e3cf59519\",\"new_text\":\"MODE='new'\\nTIMEOUT=30\",\"old_text\":\"MODE='old'\\nTIMEOUT=30\",\"path\":\"src/config_1.py\"},\"name\":\"workspace.replace\"},\"plan\":\"Replace the content with the new value while preserving the existing content.\"}",
943
+ "actual": {
944
+ "plan": "Replace the content with the new value while preserving the existing content.",
945
+ "action": {
946
+ "name": "workspace.replace",
947
+ "arguments": {
948
+ "expected_occurrences": 1,
949
+ "expected_sha256": "60191e1caf070507af2e7e67d03e4354ff5417a7166dfce552ff864e3cf59519",
950
+ "new_text": "MODE='new'\nTIMEOUT=30",
951
+ "old_text": "MODE='old'\nTIMEOUT=30",
952
+ "path": "src/config_1.py"
953
+ }
954
+ },
955
+ "result": null
956
+ },
957
+ "family": "stale_write_recovery",
958
+ "expected": {
959
+ "action": {
960
+ "arguments": {
961
+ "expected_occurrences": 1,
962
+ "expected_sha256": "60191e1caf070507af2e7e67d03e4354ff5417a7166dfce552ff864e3cf59519",
963
+ "new_text": "MODE='new'",
964
+ "old_text": "MODE='old'",
965
+ "path": "src/config_1.py"
966
+ },
967
+ "name": "workspace.replace"
968
+ },
969
+ "plan": "Preserve the concurrent addition and replace only the requested value."
970
+ }
971
+ },
972
+ {
973
+ "valid": true,
974
+ "semantic": false,
975
+ "arguments_exact": false,
976
+ "error": null,
977
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src/config_2.py\"},\"name\":\"workspace.read\"},\"plan\":\"Verify the change and capture the new hash for confirmation.\"}",
978
+ "actual": {
979
+ "plan": "Verify the change and capture the new hash for confirmation.",
980
+ "action": {
981
+ "name": "workspace.read",
982
+ "arguments": {
983
+ "path": "src/config_2.py"
984
+ }
985
+ },
986
+ "result": null
987
+ },
988
+ "family": "stale_write_recovery",
989
+ "expected": {
990
+ "result": "Applied the requested rename while preserving the concurrent timeout change."
991
+ }
992
+ },
993
+ {
994
+ "valid": true,
995
+ "semantic": false,
996
+ "arguments_exact": false,
997
+ "error": null,
998
+ "raw": "{\"plan\":\"Check for concurrent changes\",\"action\":{\"name\":\"check_concurrent_changes\",\"arguments\":{}}}",
999
+ "actual": {
1000
+ "plan": "Check for concurrent changes",
1001
+ "action": {
1002
+ "name": "check_concurrent_changes",
1003
+ "arguments": {}
1004
+ },
1005
+ "result": null
1006
+ },
1007
+ "family": "stale_write_recovery",
1008
+ "expected": {
1009
+ "action": {
1010
+ "arguments": {
1011
+ "path": "src/config_3.py"
1012
+ },
1013
+ "name": "workspace.read"
1014
+ },
1015
+ "plan": "Read the current file and capture its hash."
1016
+ }
1017
+ },
1018
+ {
1019
+ "valid": true,
1020
+ "semantic": false,
1021
+ "arguments_exact": false,
1022
+ "error": null,
1023
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src/config_4.py\",\"sha256\":\"c9d084c19f44101fd6296b21b2306c0ec7db0561bcf055c4378cb946975a4be9\"},\"name\":\"workspace.apply\"},\"plan\":\"Apply the current file without overwriting concurrent changes.\"}",
1024
+ "actual": {
1025
+ "plan": "Apply the current file without overwriting concurrent changes.",
1026
+ "action": {
1027
+ "name": "workspace.apply",
1028
+ "arguments": {
1029
+ "path": "src/config_4.py",
1030
+ "sha256": "c9d084c19f44101fd6296b21b2306c0ec7db0561bcf055c4378cb946975a4be9"
1031
+ }
1032
+ },
1033
+ "result": null
1034
+ },
1035
+ "family": "stale_write_recovery",
1036
+ "expected": {
1037
+ "action": {
1038
+ "arguments": {
1039
+ "expected_occurrences": 1,
1040
+ "expected_sha256": "c9d084c19f44101fd6296b21b2306c0ec7db0561bcf055c4378cb946975a4be9",
1041
+ "new_text": "MODE='new'",
1042
+ "old_text": "MODE='old'",
1043
+ "path": "src/config_4.py"
1044
+ },
1045
+ "name": "workspace.replace"
1046
+ },
1047
+ "plan": "Attempt the exact replacement against the observed hash."
1048
+ }
1049
+ },
1050
+ {
1051
+ "valid": true,
1052
+ "semantic": false,
1053
+ "arguments_exact": false,
1054
+ "error": null,
1055
+ "raw": "{\"action\":{\"arguments\":{\"argv\":[\"go\",\"test\",\"./...\"],\"cwd\":\".\"},\"name\":\"shell.run\"},\"plan\":\"Attempt the requested verification through the policy-checked shell tool.\"}",
1056
+ "actual": {
1057
+ "plan": "Attempt the requested verification through the policy-checked shell tool.",
1058
+ "action": {
1059
+ "name": "shell.run",
1060
+ "arguments": {
1061
+ "argv": [
1062
+ "go",
1063
+ "test",
1064
+ "./..."
1065
+ ],
1066
+ "cwd": "."
1067
+ }
1068
+ },
1069
+ "result": null
1070
+ },
1071
+ "family": "permission_recovery",
1072
+ "expected": {
1073
+ "result": "Could not run `go test ./...` because runtime policy denied it. No verification result is claimed; an operator must allowlist the command."
1074
+ }
1075
+ },
1076
+ {
1077
+ "valid": true,
1078
+ "semantic": false,
1079
+ "arguments_exact": false,
1080
+ "error": null,
1081
+ "raw": "{\"plan\":\"Run the project verification command\",\"action\":{\"name\":\"run_command\",\"arguments\":{\"command\":\"npm test\"}}}",
1082
+ "actual": {
1083
+ "plan": "Run the project verification command",
1084
+ "action": {
1085
+ "name": "run_command",
1086
+ "arguments": {
1087
+ "command": "npm test"
1088
+ }
1089
+ },
1090
+ "result": null
1091
+ },
1092
+ "family": "permission_recovery",
1093
+ "expected": {
1094
+ "action": {
1095
+ "arguments": {
1096
+ "argv": [
1097
+ "npm",
1098
+ "test"
1099
+ ],
1100
+ "cwd": "."
1101
+ },
1102
+ "name": "shell.run"
1103
+ },
1104
+ "plan": "Attempt the requested verification through the policy-checked shell tool."
1105
+ }
1106
+ },
1107
+ {
1108
+ "valid": true,
1109
+ "semantic": false,
1110
+ "arguments_exact": false,
1111
+ "error": null,
1112
+ "raw": "{\"action\":{\"arguments\":{\"argv\":[\"cargo\",\"test\"],\"cwd\":\".\"},\"name\":\"shell.run\"},\"plan\":\"Attempt the requested verification through the policy-checked shell tool.\"}",
1113
+ "actual": {
1114
+ "plan": "Attempt the requested verification through the policy-checked shell tool.",
1115
+ "action": {
1116
+ "name": "shell.run",
1117
+ "arguments": {
1118
+ "argv": [
1119
+ "cargo",
1120
+ "test"
1121
+ ],
1122
+ "cwd": "."
1123
+ }
1124
+ },
1125
+ "result": null
1126
+ },
1127
+ "family": "permission_recovery",
1128
+ "expected": {
1129
+ "result": "Could not run `cargo test` because runtime policy denied it. No verification result is claimed; an operator must allowlist the command."
1130
+ }
1131
+ },
1132
+ {
1133
+ "valid": true,
1134
+ "semantic": false,
1135
+ "arguments_exact": false,
1136
+ "error": null,
1137
+ "raw": "{\"plan\":\"Run the project verification command\",\"action\":{\"name\":\"run_command\",\"arguments\":{\"command\":\"go test ./...\"}}}",
1138
+ "actual": {
1139
+ "plan": "Run the project verification command",
1140
+ "action": {
1141
+ "name": "run_command",
1142
+ "arguments": {
1143
+ "command": "go test ./..."
1144
+ }
1145
+ },
1146
+ "result": null
1147
+ },
1148
+ "family": "permission_recovery",
1149
+ "expected": {
1150
+ "action": {
1151
+ "arguments": {
1152
+ "argv": [
1153
+ "go",
1154
+ "test",
1155
+ "./..."
1156
+ ],
1157
+ "cwd": "."
1158
+ },
1159
+ "name": "shell.run"
1160
+ },
1161
+ "plan": "Attempt the requested verification through the policy-checked shell tool."
1162
+ }
1163
+ }
1164
+ ]
1165
+ },
1166
+ "adapter_evaluation": {
1167
+ "count": 40,
1168
+ "valid_rate": 1.0,
1169
+ "semantic_rate": 1.0,
1170
+ "arguments_exact_rate": 0.975,
1171
+ "cases": [
1172
+ {
1173
+ "valid": true,
1174
+ "semantic": true,
1175
+ "arguments_exact": true,
1176
+ "error": null,
1177
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src\",\"query\":\"def parser\"},\"name\":\"workspace.search\"},\"plan\":\"Search narrowly before reading files.\"}",
1178
+ "actual": {
1179
+ "plan": "Search narrowly before reading files.",
1180
+ "action": {
1181
+ "name": "workspace.search",
1182
+ "arguments": {
1183
+ "path": "src",
1184
+ "query": "def parser"
1185
+ }
1186
+ },
1187
+ "result": null
1188
+ },
1189
+ "family": "inspect",
1190
+ "expected": {
1191
+ "action": {
1192
+ "arguments": {
1193
+ "path": "src",
1194
+ "query": "def parser"
1195
+ },
1196
+ "name": "workspace.search"
1197
+ },
1198
+ "plan": "Search narrowly before reading files."
1199
+ }
1200
+ },
1201
+ {
1202
+ "valid": true,
1203
+ "semantic": true,
1204
+ "arguments_exact": true,
1205
+ "error": null,
1206
+ "raw": "{\"action\":{\"arguments\":{\"end_line\":90,\"path\":\"src/router.py\",\"start_line\":1},\"name\":\"workspace.read\"},\"plan\":\"Read the matching implementation.\"}",
1207
+ "actual": {
1208
+ "plan": "Read the matching implementation.",
1209
+ "action": {
1210
+ "name": "workspace.read",
1211
+ "arguments": {
1212
+ "end_line": 90,
1213
+ "path": "src/router.py",
1214
+ "start_line": 1
1215
+ }
1216
+ },
1217
+ "result": null
1218
+ },
1219
+ "family": "inspect",
1220
+ "expected": {
1221
+ "action": {
1222
+ "arguments": {
1223
+ "end_line": 90,
1224
+ "path": "src/router.py",
1225
+ "start_line": 1
1226
+ },
1227
+ "name": "workspace.read"
1228
+ },
1229
+ "plan": "Read the matching implementation."
1230
+ }
1231
+ },
1232
+ {
1233
+ "valid": true,
1234
+ "semantic": true,
1235
+ "arguments_exact": true,
1236
+ "error": null,
1237
+ "raw": "{\"result\":\"Found `serializer` in `src/serializer.py` at line 17 and inspected its implementation.\"}",
1238
+ "actual": {
1239
+ "plan": null,
1240
+ "action": null,
1241
+ "result": "Found `serializer` in `src/serializer.py` at line 17 and inspected its implementation."
1242
+ },
1243
+ "family": "inspect",
1244
+ "expected": {
1245
+ "result": "Found `serializer` in `src/serializer.py` at line 17 and inspected its implementation."
1246
+ }
1247
+ },
1248
+ {
1249
+ "valid": true,
1250
+ "semantic": true,
1251
+ "arguments_exact": true,
1252
+ "error": null,
1253
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src\",\"query\":\"def scheduler\"},\"name\":\"workspace.search\"},\"plan\":\"Search narrowly before reading files.\"}",
1254
+ "actual": {
1255
+ "plan": "Search narrowly before reading files.",
1256
+ "action": {
1257
+ "name": "workspace.search",
1258
+ "arguments": {
1259
+ "path": "src",
1260
+ "query": "def scheduler"
1261
+ }
1262
+ },
1263
+ "result": null
1264
+ },
1265
+ "family": "inspect",
1266
+ "expected": {
1267
+ "action": {
1268
+ "arguments": {
1269
+ "path": "src",
1270
+ "query": "def scheduler"
1271
+ },
1272
+ "name": "workspace.search"
1273
+ },
1274
+ "plan": "Search narrowly before reading files."
1275
+ }
1276
+ },
1277
+ {
1278
+ "valid": true,
1279
+ "semantic": true,
1280
+ "arguments_exact": true,
1281
+ "error": null,
1282
+ "raw": "{\"action\":{\"arguments\":{\"expected_occurrences\":1,\"expected_sha256\":\"58febb3133e74760e613269ec2e92f1c8861f4ca4b2fafe350bdb4eca1475779\",\"new_text\":\"def handle(items):\\n if not items:\\n return None\\n return items[0]\",\"old_text\":\"def handle(items):\\n return items[0]\",\"path\":\"src/parser.py\"},\"name\":\"workspace.replace\"},\"plan\":\"Apply the smallest concurrency-safe replacement.\"}",
1283
+ "actual": {
1284
+ "plan": "Apply the smallest concurrency-safe replacement.",
1285
+ "action": {
1286
+ "name": "workspace.replace",
1287
+ "arguments": {
1288
+ "expected_occurrences": 1,
1289
+ "expected_sha256": "58febb3133e74760e613269ec2e92f1c8861f4ca4b2fafe350bdb4eca1475779",
1290
+ "new_text": "def handle(items):\n if not items:\n return None\n return items[0]",
1291
+ "old_text": "def handle(items):\n return items[0]",
1292
+ "path": "src/parser.py"
1293
+ }
1294
+ },
1295
+ "result": null
1296
+ },
1297
+ "family": "edit_and_test",
1298
+ "expected": {
1299
+ "action": {
1300
+ "arguments": {
1301
+ "expected_occurrences": 1,
1302
+ "expected_sha256": "58febb3133e74760e613269ec2e92f1c8861f4ca4b2fafe350bdb4eca1475779",
1303
+ "new_text": "def handle(items):\n if not items:\n return None\n return items[0]",
1304
+ "old_text": "def handle(items):\n return items[0]",
1305
+ "path": "src/parser.py"
1306
+ },
1307
+ "name": "workspace.replace"
1308
+ },
1309
+ "plan": "Apply the smallest concurrency-safe replacement."
1310
+ }
1311
+ },
1312
+ {
1313
+ "valid": true,
1314
+ "semantic": true,
1315
+ "arguments_exact": true,
1316
+ "error": null,
1317
+ "raw": "{\"action\":{\"arguments\":{\"argv\":[\"pytest\",\"-q\",\"tests/test_config.py\"],\"cwd\":\".\"},\"name\":\"shell.run\"},\"plan\":\"Run only the relevant test module first.\"}",
1318
+ "actual": {
1319
+ "plan": "Run only the relevant test module first.",
1320
+ "action": {
1321
+ "name": "shell.run",
1322
+ "arguments": {
1323
+ "argv": [
1324
+ "pytest",
1325
+ "-q",
1326
+ "tests/test_config.py"
1327
+ ],
1328
+ "cwd": "."
1329
+ }
1330
+ },
1331
+ "result": null
1332
+ },
1333
+ "family": "edit_and_test",
1334
+ "expected": {
1335
+ "action": {
1336
+ "arguments": {
1337
+ "argv": [
1338
+ "pytest",
1339
+ "-q",
1340
+ "tests/test_config.py"
1341
+ ],
1342
+ "cwd": "."
1343
+ },
1344
+ "name": "shell.run"
1345
+ },
1346
+ "plan": "Run only the relevant test module first."
1347
+ }
1348
+ },
1349
+ {
1350
+ "valid": true,
1351
+ "semantic": true,
1352
+ "arguments_exact": true,
1353
+ "error": null,
1354
+ "raw": "{\"result\":\"Fixed empty-input handling in `src/client.py`; all 6 focused tests pass.\"}",
1355
+ "actual": {
1356
+ "plan": null,
1357
+ "action": null,
1358
+ "result": "Fixed empty-input handling in `src/client.py`; all 6 focused tests pass."
1359
+ },
1360
+ "family": "edit_and_test",
1361
+ "expected": {
1362
+ "result": "Fixed empty-input handling in `src/client.py`; all 6 focused tests pass."
1363
+ }
1364
+ },
1365
+ {
1366
+ "valid": true,
1367
+ "semantic": true,
1368
+ "arguments_exact": true,
1369
+ "error": null,
1370
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src/cache.py\"},\"name\":\"workspace.read\"},\"plan\":\"Read the current implementation and capture its content hash.\"}",
1371
+ "actual": {
1372
+ "plan": "Read the current implementation and capture its content hash.",
1373
+ "action": {
1374
+ "name": "workspace.read",
1375
+ "arguments": {
1376
+ "path": "src/cache.py"
1377
+ }
1378
+ },
1379
+ "result": null
1380
+ },
1381
+ "family": "edit_and_test",
1382
+ "expected": {
1383
+ "action": {
1384
+ "arguments": {
1385
+ "path": "src/cache.py"
1386
+ },
1387
+ "name": "workspace.read"
1388
+ },
1389
+ "plan": "Read the current implementation and capture its content hash."
1390
+ }
1391
+ },
1392
+ {
1393
+ "valid": true,
1394
+ "semantic": true,
1395
+ "arguments_exact": true,
1396
+ "error": null,
1397
+ "raw": "{\"action\":{\"arguments\":{\"argv\":[\"pytest\",\"-q\",\"tests/test_health.py\"],\"cwd\":\".\"},\"name\":\"shell.run\"},\"plan\":\"Verify the new behavior with its focused test.\"}",
1398
+ "actual": {
1399
+ "plan": "Verify the new behavior with its focused test.",
1400
+ "action": {
1401
+ "name": "shell.run",
1402
+ "arguments": {
1403
+ "argv": [
1404
+ "pytest",
1405
+ "-q",
1406
+ "tests/test_health.py"
1407
+ ],
1408
+ "cwd": "."
1409
+ }
1410
+ },
1411
+ "result": null
1412
+ },
1413
+ "family": "create_and_test",
1414
+ "expected": {
1415
+ "action": {
1416
+ "arguments": {
1417
+ "argv": [
1418
+ "pytest",
1419
+ "-q",
1420
+ "tests/test_health.py"
1421
+ ],
1422
+ "cwd": "."
1423
+ },
1424
+ "name": "shell.run"
1425
+ },
1426
+ "plan": "Verify the new behavior with its focused test."
1427
+ }
1428
+ },
1429
+ {
1430
+ "valid": true,
1431
+ "semantic": true,
1432
+ "arguments_exact": true,
1433
+ "error": null,
1434
+ "raw": "{\"result\":\"Added `src/version.py` and verified its 2 focused tests pass.\"}",
1435
+ "actual": {
1436
+ "plan": null,
1437
+ "action": null,
1438
+ "result": "Added `src/version.py` and verified its 2 focused tests pass."
1439
+ },
1440
+ "family": "create_and_test",
1441
+ "expected": {
1442
+ "result": "Added `src/version.py` and verified its 2 focused tests pass."
1443
+ }
1444
+ },
1445
+ {
1446
+ "valid": true,
1447
+ "semantic": true,
1448
+ "arguments_exact": true,
1449
+ "error": null,
1450
+ "raw": "{\"action\":{\"arguments\":{\"limit\":100,\"path\":\"src\"},\"name\":\"workspace.list\"},\"plan\":\"List the package before creating a new module.\"}",
1451
+ "actual": {
1452
+ "plan": "List the package before creating a new module.",
1453
+ "action": {
1454
+ "name": "workspace.list",
1455
+ "arguments": {
1456
+ "limit": 100,
1457
+ "path": "src"
1458
+ }
1459
+ },
1460
+ "result": null
1461
+ },
1462
+ "family": "create_and_test",
1463
+ "expected": {
1464
+ "action": {
1465
+ "arguments": {
1466
+ "limit": 100,
1467
+ "path": "src"
1468
+ },
1469
+ "name": "workspace.list"
1470
+ },
1471
+ "plan": "List the package before creating a new module."
1472
+ }
1473
+ },
1474
+ {
1475
+ "valid": true,
1476
+ "semantic": true,
1477
+ "arguments_exact": true,
1478
+ "error": null,
1479
+ "raw": "{\"action\":{\"arguments\":{\"content\":\"def metadata():\\n return \\\"ok\\\"\\n\",\"expected_sha256\":null,\"path\":\"src/metadata.py\"},\"name\":\"workspace.write\"},\"plan\":\"Create only the requested module.\"}",
1480
+ "actual": {
1481
+ "plan": "Create only the requested module.",
1482
+ "action": {
1483
+ "name": "workspace.write",
1484
+ "arguments": {
1485
+ "content": "def metadata():\n return \"ok\"\n",
1486
+ "expected_sha256": null,
1487
+ "path": "src/metadata.py"
1488
+ }
1489
+ },
1490
+ "result": null
1491
+ },
1492
+ "family": "create_and_test",
1493
+ "expected": {
1494
+ "action": {
1495
+ "arguments": {
1496
+ "content": "def metadata():\n return \"ok\"\n",
1497
+ "expected_sha256": null,
1498
+ "path": "src/metadata.py"
1499
+ },
1500
+ "name": "workspace.write"
1501
+ },
1502
+ "plan": "Create only the requested module."
1503
+ }
1504
+ },
1505
+ {
1506
+ "valid": true,
1507
+ "semantic": true,
1508
+ "arguments_exact": true,
1509
+ "error": null,
1510
+ "raw": "{\"action\":{\"arguments\":{\"expected_head\":\"d5af24fbbf21e7893bea19d858428447c72c6bbe25b1b76344f09b99b3c87845\",\"message\":\"Fix issue 20100\",\"paths\":[\"src/issue_20100.py\",\"tests/test_issue_20100.py\"]},\"name\":\"git.commit\"},\"plan\":\"Commit only the requested source and test files.\"}",
1511
+ "actual": {
1512
+ "plan": "Commit only the requested source and test files.",
1513
+ "action": {
1514
+ "name": "git.commit",
1515
+ "arguments": {
1516
+ "expected_head": "d5af24fbbf21e7893bea19d858428447c72c6bbe25b1b76344f09b99b3c87845",
1517
+ "message": "Fix issue 20100",
1518
+ "paths": [
1519
+ "src/issue_20100.py",
1520
+ "tests/test_issue_20100.py"
1521
+ ]
1522
+ }
1523
+ },
1524
+ "result": null
1525
+ },
1526
+ "family": "git_to_change",
1527
+ "expected": {
1528
+ "action": {
1529
+ "arguments": {
1530
+ "expected_head": "d5af24fbbf21e7893bea19d858428447c72c6bbe25b1b76344f09b99b3c87845",
1531
+ "message": "Fix issue 20100",
1532
+ "paths": [
1533
+ "src/issue_20100.py",
1534
+ "tests/test_issue_20100.py"
1535
+ ]
1536
+ },
1537
+ "name": "git.commit"
1538
+ },
1539
+ "plan": "Commit only the requested source and test files."
1540
+ }
1541
+ },
1542
+ {
1543
+ "valid": true,
1544
+ "semantic": true,
1545
+ "arguments_exact": true,
1546
+ "error": null,
1547
+ "raw": "{\"action\":{\"arguments\":{\"branch\":\"fix/issue-20101\",\"expected_head\":\"d256cce9835cecbb4881661161b01c78f7dbe7fc22b7b8b1a43523e0e9d5f9d3\",\"remote\":\"origin\"},\"name\":\"git.push\"},\"plan\":\"Push the exact commit on the focused branch.\"}",
1548
+ "actual": {
1549
+ "plan": "Push the exact commit on the focused branch.",
1550
+ "action": {
1551
+ "name": "git.push",
1552
+ "arguments": {
1553
+ "branch": "fix/issue-20101",
1554
+ "expected_head": "d256cce9835cecbb4881661161b01c78f7dbe7fc22b7b8b1a43523e0e9d5f9d3",
1555
+ "remote": "origin"
1556
+ }
1557
+ },
1558
+ "result": null
1559
+ },
1560
+ "family": "git_to_change",
1561
+ "expected": {
1562
+ "action": {
1563
+ "arguments": {
1564
+ "branch": "fix/issue-20101",
1565
+ "expected_head": "d256cce9835cecbb4881661161b01c78f7dbe7fc22b7b8b1a43523e0e9d5f9d3",
1566
+ "remote": "origin"
1567
+ },
1568
+ "name": "git.push"
1569
+ },
1570
+ "plan": "Push the exact commit on the focused branch."
1571
+ }
1572
+ },
1573
+ {
1574
+ "valid": true,
1575
+ "semantic": true,
1576
+ "arguments_exact": true,
1577
+ "error": null,
1578
+ "raw": "{\"action\":{\"arguments\":{\"base_branch\":\"main\",\"body\":\"Includes the minimal implementation and focused tests.\",\"head_branch\":\"fix/issue-20102\",\"title\":\"Fix issue 20102\"},\"name\":\"provider.open_change\"},\"plan\":\"Open the already-pushed branch as a Gitea change.\"}",
1579
+ "actual": {
1580
+ "plan": "Open the already-pushed branch as a Gitea change.",
1581
+ "action": {
1582
+ "name": "provider.open_change",
1583
+ "arguments": {
1584
+ "base_branch": "main",
1585
+ "body": "Includes the minimal implementation and focused tests.",
1586
+ "head_branch": "fix/issue-20102",
1587
+ "title": "Fix issue 20102"
1588
+ }
1589
+ },
1590
+ "result": null
1591
+ },
1592
+ "family": "git_to_change",
1593
+ "expected": {
1594
+ "action": {
1595
+ "arguments": {
1596
+ "base_branch": "main",
1597
+ "body": "Includes the minimal implementation and focused tests.",
1598
+ "head_branch": "fix/issue-20102",
1599
+ "title": "Fix issue 20102"
1600
+ },
1601
+ "name": "provider.open_change"
1602
+ },
1603
+ "plan": "Open the already-pushed branch as a Gitea change."
1604
+ }
1605
+ },
1606
+ {
1607
+ "valid": true,
1608
+ "semantic": true,
1609
+ "arguments_exact": true,
1610
+ "error": null,
1611
+ "raw": "{\"result\":\"Opened Forgejo change 20103 for `fix/issue-20103` at `48129e00357197548fdafe28042290aee84203362b4186b66a546729dd047b03`.\"}",
1612
+ "actual": {
1613
+ "plan": null,
1614
+ "action": null,
1615
+ "result": "Opened Forgejo change 20103 for `fix/issue-20103` at `48129e00357197548fdafe28042290aee84203362b4186b66a546729dd047b03`."
1616
+ },
1617
+ "family": "git_to_change",
1618
+ "expected": {
1619
+ "result": "Opened Forgejo change 20103 for `fix/issue-20103` at `48129e00357197548fdafe28042290aee84203362b4186b66a546729dd047b03`."
1620
+ }
1621
+ },
1622
+ {
1623
+ "valid": true,
1624
+ "semantic": true,
1625
+ "arguments_exact": true,
1626
+ "error": null,
1627
+ "raw": "{\"result\":\"Approved change 20020 at exact revision `9f5e401f6663311689526f08efe6449c5684a219d1d0e7490537bcd8d1830fa9`.\"}",
1628
+ "actual": {
1629
+ "plan": null,
1630
+ "action": null,
1631
+ "result": "Approved change 20020 at exact revision `9f5e401f6663311689526f08efe6449c5684a219d1d0e7490537bcd8d1830fa9`."
1632
+ },
1633
+ "family": "review_approve",
1634
+ "expected": {
1635
+ "result": "Approved change 20020 at exact revision `9f5e401f6663311689526f08efe6449c5684a219d1d0e7490537bcd8d1830fa9`."
1636
+ }
1637
+ },
1638
+ {
1639
+ "valid": true,
1640
+ "semantic": true,
1641
+ "arguments_exact": true,
1642
+ "error": null,
1643
+ "raw": "{\"action\":{\"arguments\":{\"number\":20021},\"name\":\"provider.get_change\"},\"plan\":\"Fetch the change and bind review to its current head.\"}",
1644
+ "actual": {
1645
+ "plan": "Fetch the change and bind review to its current head.",
1646
+ "action": {
1647
+ "name": "provider.get_change",
1648
+ "arguments": {
1649
+ "number": 20021
1650
+ }
1651
+ },
1652
+ "result": null
1653
+ },
1654
+ "family": "review_approve",
1655
+ "expected": {
1656
+ "action": {
1657
+ "arguments": {
1658
+ "number": 20021
1659
+ },
1660
+ "name": "provider.get_change"
1661
+ },
1662
+ "plan": "Fetch the change and bind review to its current head."
1663
+ }
1664
+ },
1665
+ {
1666
+ "valid": true,
1667
+ "semantic": true,
1668
+ "arguments_exact": true,
1669
+ "error": null,
1670
+ "raw": "{\"action\":{\"arguments\":{\"number\":20022},\"name\":\"provider.get_diff\"},\"plan\":\"Inspect the diff for that exact revision.\"}",
1671
+ "actual": {
1672
+ "plan": "Inspect the diff for that exact revision.",
1673
+ "action": {
1674
+ "name": "provider.get_diff",
1675
+ "arguments": {
1676
+ "number": 20022
1677
+ }
1678
+ },
1679
+ "result": null
1680
+ },
1681
+ "family": "review_approve",
1682
+ "expected": {
1683
+ "action": {
1684
+ "arguments": {
1685
+ "number": 20022
1686
+ },
1687
+ "name": "provider.get_diff"
1688
+ },
1689
+ "plan": "Inspect the diff for that exact revision."
1690
+ }
1691
+ },
1692
+ {
1693
+ "valid": true,
1694
+ "semantic": true,
1695
+ "arguments_exact": true,
1696
+ "error": null,
1697
+ "raw": "{\"action\":{\"arguments\":{\"sha\":\"53f79821d8640743877a35554e0bae3c3243b59cdd7461d79f4ac2b69fbe8381\"},\"name\":\"provider.get_checks\"},\"plan\":\"Check CI for the same commit SHA.\"}",
1698
+ "actual": {
1699
+ "plan": "Check CI for the same commit SHA.",
1700
+ "action": {
1701
+ "name": "provider.get_checks",
1702
+ "arguments": {
1703
+ "sha": "53f79821d8640743877a35554e0bae3c3243b59cdd7461d79f4ac2b69fbe8381"
1704
+ }
1705
+ },
1706
+ "result": null
1707
+ },
1708
+ "family": "review_approve",
1709
+ "expected": {
1710
+ "action": {
1711
+ "arguments": {
1712
+ "sha": "53f79821d8640743877a35554e0bae3c3243b59cdd7461d79f4ac2b69fbe8381"
1713
+ },
1714
+ "name": "provider.get_checks"
1715
+ },
1716
+ "plan": "Check CI for the same commit SHA."
1717
+ }
1718
+ },
1719
+ {
1720
+ "valid": true,
1721
+ "semantic": true,
1722
+ "arguments_exact": true,
1723
+ "error": null,
1724
+ "raw": "{\"action\":{\"arguments\":{\"number\":20070},\"name\":\"provider.get_diff\"},\"plan\":\"Inspect the exact diff before reaching a conclusion.\"}",
1725
+ "actual": {
1726
+ "plan": "Inspect the exact diff before reaching a conclusion.",
1727
+ "action": {
1728
+ "name": "provider.get_diff",
1729
+ "arguments": {
1730
+ "number": 20070
1731
+ }
1732
+ },
1733
+ "result": null
1734
+ },
1735
+ "family": "review_block",
1736
+ "expected": {
1737
+ "action": {
1738
+ "arguments": {
1739
+ "number": 20070
1740
+ },
1741
+ "name": "provider.get_diff"
1742
+ },
1743
+ "plan": "Inspect the exact diff before reaching a conclusion."
1744
+ }
1745
+ },
1746
+ {
1747
+ "valid": true,
1748
+ "semantic": true,
1749
+ "arguments_exact": true,
1750
+ "error": null,
1751
+ "raw": "{\"action\":{\"arguments\":{\"sha\":\"9e2e60af0f84d475571455a80aa0b0f2eecf413611abe2db14f6c8366d2fd921\"},\"name\":\"provider.get_checks\"},\"plan\":\"Read checks for the reviewed SHA.\"}",
1752
+ "actual": {
1753
+ "plan": "Read checks for the reviewed SHA.",
1754
+ "action": {
1755
+ "name": "provider.get_checks",
1756
+ "arguments": {
1757
+ "sha": "9e2e60af0f84d475571455a80aa0b0f2eecf413611abe2db14f6c8366d2fd921"
1758
+ }
1759
+ },
1760
+ "result": null
1761
+ },
1762
+ "family": "review_block",
1763
+ "expected": {
1764
+ "action": {
1765
+ "arguments": {
1766
+ "sha": "9e2e60af0f84d475571455a80aa0b0f2eecf413611abe2db14f6c8366d2fd921"
1767
+ },
1768
+ "name": "provider.get_checks"
1769
+ },
1770
+ "plan": "Read checks for the reviewed SHA."
1771
+ }
1772
+ },
1773
+ {
1774
+ "valid": true,
1775
+ "semantic": true,
1776
+ "arguments_exact": true,
1777
+ "error": null,
1778
+ "raw": "{\"result\":\"Did not approve change 20072: required tests fail on `b330f4b4fd4dd0ae1dad0b47a8c7e835c03cd8dbce16d43021132128522b7a4a`.\"}",
1779
+ "actual": {
1780
+ "plan": null,
1781
+ "action": null,
1782
+ "result": "Did not approve change 20072: required tests fail on `b330f4b4fd4dd0ae1dad0b47a8c7e835c03cd8dbce16d43021132128522b7a4a`."
1783
+ },
1784
+ "family": "review_block",
1785
+ "expected": {
1786
+ "result": "Did not approve change 20072: required tests fail on `b330f4b4fd4dd0ae1dad0b47a8c7e835c03cd8dbce16d43021132128522b7a4a`."
1787
+ }
1788
+ },
1789
+ {
1790
+ "valid": true,
1791
+ "semantic": true,
1792
+ "arguments_exact": true,
1793
+ "error": null,
1794
+ "raw": "{\"action\":{\"arguments\":{\"number\":20073},\"name\":\"provider.get_change\"},\"plan\":\"Fetch the current change revision.\"}",
1795
+ "actual": {
1796
+ "plan": "Fetch the current change revision.",
1797
+ "action": {
1798
+ "name": "provider.get_change",
1799
+ "arguments": {
1800
+ "number": 20073
1801
+ }
1802
+ },
1803
+ "result": null
1804
+ },
1805
+ "family": "review_block",
1806
+ "expected": {
1807
+ "action": {
1808
+ "arguments": {
1809
+ "number": 20073
1810
+ },
1811
+ "name": "provider.get_change"
1812
+ },
1813
+ "plan": "Fetch the current change revision."
1814
+ }
1815
+ },
1816
+ {
1817
+ "valid": true,
1818
+ "semantic": true,
1819
+ "arguments_exact": true,
1820
+ "error": null,
1821
+ "raw": "{\"action\":{\"arguments\":{\"number\":20150},\"name\":\"provider.get_diff\"},\"plan\":\"Review the diff at the bound revision.\"}",
1822
+ "actual": {
1823
+ "plan": "Review the diff at the bound revision.",
1824
+ "action": {
1825
+ "name": "provider.get_diff",
1826
+ "arguments": {
1827
+ "number": 20150
1828
+ }
1829
+ },
1830
+ "result": null
1831
+ },
1832
+ "family": "review_merge",
1833
+ "expected": {
1834
+ "action": {
1835
+ "arguments": {
1836
+ "number": 20150
1837
+ },
1838
+ "name": "provider.get_diff"
1839
+ },
1840
+ "plan": "Review the diff at the bound revision."
1841
+ }
1842
+ },
1843
+ {
1844
+ "valid": true,
1845
+ "semantic": true,
1846
+ "arguments_exact": true,
1847
+ "error": null,
1848
+ "raw": "{\"action\":{\"arguments\":{\"sha\":\"f0ec4f1cedc970a3cae4f059ea2e537fabf7271a93173ec56350b92f011387e7\"},\"name\":\"provider.get_checks\"},\"plan\":\"Verify required checks on the same SHA.\"}",
1849
+ "actual": {
1850
+ "plan": "Verify required checks on the same SHA.",
1851
+ "action": {
1852
+ "name": "provider.get_checks",
1853
+ "arguments": {
1854
+ "sha": "f0ec4f1cedc970a3cae4f059ea2e537fabf7271a93173ec56350b92f011387e7"
1855
+ }
1856
+ },
1857
+ "result": null
1858
+ },
1859
+ "family": "review_merge",
1860
+ "expected": {
1861
+ "action": {
1862
+ "arguments": {
1863
+ "sha": "f0ec4f1cedc970a3cae4f059ea2e537fabf7271a93173ec56350b92f011387e7"
1864
+ },
1865
+ "name": "provider.get_checks"
1866
+ },
1867
+ "plan": "Verify required checks on the same SHA."
1868
+ }
1869
+ },
1870
+ {
1871
+ "valid": true,
1872
+ "semantic": true,
1873
+ "arguments_exact": true,
1874
+ "error": null,
1875
+ "raw": "{\"action\":{\"arguments\":{\"expected_sha\":\"d49a6148616b6108f3db866a9b3128d95a7eafd8039ea0c27a1d9351d0e2086d\",\"method\":\"merge\",\"number\":20152},\"name\":\"provider.merge_change\"},\"plan\":\"Merge only the reviewed, passing revision.\"}",
1876
+ "actual": {
1877
+ "plan": "Merge only the reviewed, passing revision.",
1878
+ "action": {
1879
+ "name": "provider.merge_change",
1880
+ "arguments": {
1881
+ "expected_sha": "d49a6148616b6108f3db866a9b3128d95a7eafd8039ea0c27a1d9351d0e2086d",
1882
+ "method": "merge",
1883
+ "number": 20152
1884
+ }
1885
+ },
1886
+ "result": null
1887
+ },
1888
+ "family": "review_merge",
1889
+ "expected": {
1890
+ "action": {
1891
+ "arguments": {
1892
+ "expected_sha": "d49a6148616b6108f3db866a9b3128d95a7eafd8039ea0c27a1d9351d0e2086d",
1893
+ "method": "merge",
1894
+ "number": 20152
1895
+ },
1896
+ "name": "provider.merge_change"
1897
+ },
1898
+ "plan": "Merge only the reviewed, passing revision."
1899
+ }
1900
+ },
1901
+ {
1902
+ "valid": true,
1903
+ "semantic": true,
1904
+ "arguments_exact": true,
1905
+ "error": null,
1906
+ "raw": "{\"result\":\"Merged change 20153 at `0b23ed71c765205fd7341e8aab7e00290216a956dd17a7482ba3bc852667ca75` using rebase.\"}",
1907
+ "actual": {
1908
+ "plan": null,
1909
+ "action": null,
1910
+ "result": "Merged change 20153 at `0b23ed71c765205fd7341e8aab7e00290216a956dd17a7482ba3bc852667ca75` using rebase."
1911
+ },
1912
+ "family": "review_merge",
1913
+ "expected": {
1914
+ "result": "Merged change 20153 at `0b23ed71c765205fd7341e8aab7e00290216a956dd17a7482ba3bc852667ca75` using rebase."
1915
+ }
1916
+ },
1917
+ {
1918
+ "valid": true,
1919
+ "semantic": true,
1920
+ "arguments_exact": true,
1921
+ "error": null,
1922
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src\",\"query\":\"def handle\"},\"name\":\"workspace.search\"},\"plan\":\"Locate the failing implementation named in the test.\"}",
1923
+ "actual": {
1924
+ "plan": "Locate the failing implementation named in the test.",
1925
+ "action": {
1926
+ "name": "workspace.search",
1927
+ "arguments": {
1928
+ "path": "src",
1929
+ "query": "def handle"
1930
+ }
1931
+ },
1932
+ "result": null
1933
+ },
1934
+ "family": "test_recovery",
1935
+ "expected": {
1936
+ "action": {
1937
+ "arguments": {
1938
+ "path": "src",
1939
+ "query": "def handle"
1940
+ },
1941
+ "name": "workspace.search"
1942
+ },
1943
+ "plan": "Locate the failing implementation named in the test."
1944
+ }
1945
+ },
1946
+ {
1947
+ "valid": true,
1948
+ "semantic": true,
1949
+ "arguments_exact": true,
1950
+ "error": null,
1951
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src/router.py\"},\"name\":\"workspace.read\"},\"plan\":\"Read the implementation before changing it.\"}",
1952
+ "actual": {
1953
+ "plan": "Read the implementation before changing it.",
1954
+ "action": {
1955
+ "name": "workspace.read",
1956
+ "arguments": {
1957
+ "path": "src/router.py"
1958
+ }
1959
+ },
1960
+ "result": null
1961
+ },
1962
+ "family": "test_recovery",
1963
+ "expected": {
1964
+ "action": {
1965
+ "arguments": {
1966
+ "path": "src/router.py"
1967
+ },
1968
+ "name": "workspace.read"
1969
+ },
1970
+ "plan": "Read the implementation before changing it."
1971
+ }
1972
+ },
1973
+ {
1974
+ "valid": true,
1975
+ "semantic": true,
1976
+ "arguments_exact": true,
1977
+ "error": null,
1978
+ "raw": "{\"action\":{\"arguments\":{\"expected_occurrences\":1,\"expected_sha256\":\"76f726b7987c93d815f8ecc19abd415131e30ac0da260e9e9e7092388e09b33e\",\"new_text\":\"return values[0] if values else None\",\"old_text\":\"return values[0]\",\"path\":\"src/worker.py\"},\"name\":\"workspace.replace\"},\"plan\":\"Guard the observed empty-input access.\"}",
1979
+ "actual": {
1980
+ "plan": "Guard the observed empty-input access.",
1981
+ "action": {
1982
+ "name": "workspace.replace",
1983
+ "arguments": {
1984
+ "expected_occurrences": 1,
1985
+ "expected_sha256": "76f726b7987c93d815f8ecc19abd415131e30ac0da260e9e9e7092388e09b33e",
1986
+ "new_text": "return values[0] if values else None",
1987
+ "old_text": "return values[0]",
1988
+ "path": "src/worker.py"
1989
+ }
1990
+ },
1991
+ "result": null
1992
+ },
1993
+ "family": "test_recovery",
1994
+ "expected": {
1995
+ "action": {
1996
+ "arguments": {
1997
+ "expected_occurrences": 1,
1998
+ "expected_sha256": "76f726b7987c93d815f8ecc19abd415131e30ac0da260e9e9e7092388e09b33e",
1999
+ "new_text": "return values[0] if values else None",
2000
+ "old_text": "return values[0]",
2001
+ "path": "src/worker.py"
2002
+ },
2003
+ "name": "workspace.replace"
2004
+ },
2005
+ "plan": "Guard the observed empty-input access."
2006
+ }
2007
+ },
2008
+ {
2009
+ "valid": true,
2010
+ "semantic": true,
2011
+ "arguments_exact": true,
2012
+ "error": null,
2013
+ "raw": "{\"action\":{\"arguments\":{\"argv\":[\"pytest\",\"-q\",\"tests/test_client.py\"],\"cwd\":\".\"},\"name\":\"shell.run\"},\"plan\":\"Rerun the previously failing test.\"}",
2014
+ "actual": {
2015
+ "plan": "Rerun the previously failing test.",
2016
+ "action": {
2017
+ "name": "shell.run",
2018
+ "arguments": {
2019
+ "argv": [
2020
+ "pytest",
2021
+ "-q",
2022
+ "tests/test_client.py"
2023
+ ],
2024
+ "cwd": "."
2025
+ }
2026
+ },
2027
+ "result": null
2028
+ },
2029
+ "family": "test_recovery",
2030
+ "expected": {
2031
+ "action": {
2032
+ "arguments": {
2033
+ "argv": [
2034
+ "pytest",
2035
+ "-q",
2036
+ "tests/test_client.py"
2037
+ ],
2038
+ "cwd": "."
2039
+ },
2040
+ "name": "shell.run"
2041
+ },
2042
+ "plan": "Rerun the previously failing test."
2043
+ }
2044
+ },
2045
+ {
2046
+ "valid": true,
2047
+ "semantic": true,
2048
+ "arguments_exact": true,
2049
+ "error": null,
2050
+ "raw": "{\"action\":{\"arguments\":{\"expected_occurrences\":1,\"expected_sha256\":\"60191e1caf070507af2e7e67d03e4354ff5417a7166dfce552ff864e3cf59519\",\"new_text\":\"MODE='new'\",\"old_text\":\"MODE='old'\",\"path\":\"src/config_1.py\"},\"name\":\"workspace.replace\"},\"plan\":\"Preserve the concurrent addition and replace only the requested value.\"}",
2051
+ "actual": {
2052
+ "plan": "Preserve the concurrent addition and replace only the requested value.",
2053
+ "action": {
2054
+ "name": "workspace.replace",
2055
+ "arguments": {
2056
+ "expected_occurrences": 1,
2057
+ "expected_sha256": "60191e1caf070507af2e7e67d03e4354ff5417a7166dfce552ff864e3cf59519",
2058
+ "new_text": "MODE='new'",
2059
+ "old_text": "MODE='old'",
2060
+ "path": "src/config_1.py"
2061
+ }
2062
+ },
2063
+ "result": null
2064
+ },
2065
+ "family": "stale_write_recovery",
2066
+ "expected": {
2067
+ "action": {
2068
+ "arguments": {
2069
+ "expected_occurrences": 1,
2070
+ "expected_sha256": "60191e1caf070507af2e7e67d03e4354ff5417a7166dfce552ff864e3cf59519",
2071
+ "new_text": "MODE='new'",
2072
+ "old_text": "MODE='old'",
2073
+ "path": "src/config_1.py"
2074
+ },
2075
+ "name": "workspace.replace"
2076
+ },
2077
+ "plan": "Preserve the concurrent addition and replace only the requested value."
2078
+ }
2079
+ },
2080
+ {
2081
+ "valid": true,
2082
+ "semantic": true,
2083
+ "arguments_exact": true,
2084
+ "error": null,
2085
+ "raw": "{\"result\":\"Applied the requested rename while preserving the concurrent timeout change.\"}",
2086
+ "actual": {
2087
+ "plan": null,
2088
+ "action": null,
2089
+ "result": "Applied the requested rename while preserving the concurrent timeout change."
2090
+ },
2091
+ "family": "stale_write_recovery",
2092
+ "expected": {
2093
+ "result": "Applied the requested rename while preserving the concurrent timeout change."
2094
+ }
2095
+ },
2096
+ {
2097
+ "valid": true,
2098
+ "semantic": true,
2099
+ "arguments_exact": false,
2100
+ "error": null,
2101
+ "raw": "{\"action\":{\"arguments\":{\"path\":\"src/config_1.py\"},\"name\":\"workspace.read\"},\"plan\":\"Read the current file and capture its hash.\"}",
2102
+ "actual": {
2103
+ "plan": "Read the current file and capture its hash.",
2104
+ "action": {
2105
+ "name": "workspace.read",
2106
+ "arguments": {
2107
+ "path": "src/config_1.py"
2108
+ }
2109
+ },
2110
+ "result": null
2111
+ },
2112
+ "family": "stale_write_recovery",
2113
+ "expected": {
2114
+ "action": {
2115
+ "arguments": {
2116
+ "path": "src/config_3.py"
2117
+ },
2118
+ "name": "workspace.read"
2119
+ },
2120
+ "plan": "Read the current file and capture its hash."
2121
+ }
2122
+ },
2123
+ {
2124
+ "valid": true,
2125
+ "semantic": true,
2126
+ "arguments_exact": true,
2127
+ "error": null,
2128
+ "raw": "{\"action\":{\"arguments\":{\"expected_occurrences\":1,\"expected_sha256\":\"c9d084c19f44101fd6296b21b2306c0ec7db0561bcf055c4378cb946975a4be9\",\"new_text\":\"MODE='new'\",\"old_text\":\"MODE='old'\",\"path\":\"src/config_4.py\"},\"name\":\"workspace.replace\"},\"plan\":\"Attempt the exact replacement against the observed hash.\"}",
2129
+ "actual": {
2130
+ "plan": "Attempt the exact replacement against the observed hash.",
2131
+ "action": {
2132
+ "name": "workspace.replace",
2133
+ "arguments": {
2134
+ "expected_occurrences": 1,
2135
+ "expected_sha256": "c9d084c19f44101fd6296b21b2306c0ec7db0561bcf055c4378cb946975a4be9",
2136
+ "new_text": "MODE='new'",
2137
+ "old_text": "MODE='old'",
2138
+ "path": "src/config_4.py"
2139
+ }
2140
+ },
2141
+ "result": null
2142
+ },
2143
+ "family": "stale_write_recovery",
2144
+ "expected": {
2145
+ "action": {
2146
+ "arguments": {
2147
+ "expected_occurrences": 1,
2148
+ "expected_sha256": "c9d084c19f44101fd6296b21b2306c0ec7db0561bcf055c4378cb946975a4be9",
2149
+ "new_text": "MODE='new'",
2150
+ "old_text": "MODE='old'",
2151
+ "path": "src/config_4.py"
2152
+ },
2153
+ "name": "workspace.replace"
2154
+ },
2155
+ "plan": "Attempt the exact replacement against the observed hash."
2156
+ }
2157
+ },
2158
+ {
2159
+ "valid": true,
2160
+ "semantic": true,
2161
+ "arguments_exact": true,
2162
+ "error": null,
2163
+ "raw": "{\"result\":\"Could not run `go test ./...` because runtime policy denied it. No verification result is claimed; an operator must allowlist the command.\"}",
2164
+ "actual": {
2165
+ "plan": null,
2166
+ "action": null,
2167
+ "result": "Could not run `go test ./...` because runtime policy denied it. No verification result is claimed; an operator must allowlist the command."
2168
+ },
2169
+ "family": "permission_recovery",
2170
+ "expected": {
2171
+ "result": "Could not run `go test ./...` because runtime policy denied it. No verification result is claimed; an operator must allowlist the command."
2172
+ }
2173
+ },
2174
+ {
2175
+ "valid": true,
2176
+ "semantic": true,
2177
+ "arguments_exact": true,
2178
+ "error": null,
2179
+ "raw": "{\"action\":{\"arguments\":{\"argv\":[\"npm\",\"test\"],\"cwd\":\".\"},\"name\":\"shell.run\"},\"plan\":\"Attempt the requested verification through the policy-checked shell tool.\"}",
2180
+ "actual": {
2181
+ "plan": "Attempt the requested verification through the policy-checked shell tool.",
2182
+ "action": {
2183
+ "name": "shell.run",
2184
+ "arguments": {
2185
+ "argv": [
2186
+ "npm",
2187
+ "test"
2188
+ ],
2189
+ "cwd": "."
2190
+ }
2191
+ },
2192
+ "result": null
2193
+ },
2194
+ "family": "permission_recovery",
2195
+ "expected": {
2196
+ "action": {
2197
+ "arguments": {
2198
+ "argv": [
2199
+ "npm",
2200
+ "test"
2201
+ ],
2202
+ "cwd": "."
2203
+ },
2204
+ "name": "shell.run"
2205
+ },
2206
+ "plan": "Attempt the requested verification through the policy-checked shell tool."
2207
+ }
2208
+ },
2209
+ {
2210
+ "valid": true,
2211
+ "semantic": true,
2212
+ "arguments_exact": true,
2213
+ "error": null,
2214
+ "raw": "{\"result\":\"Could not run `cargo test` because runtime policy denied it. No verification result is claimed; an operator must allowlist the command.\"}",
2215
+ "actual": {
2216
+ "plan": null,
2217
+ "action": null,
2218
+ "result": "Could not run `cargo test` because runtime policy denied it. No verification result is claimed; an operator must allowlist the command."
2219
+ },
2220
+ "family": "permission_recovery",
2221
+ "expected": {
2222
+ "result": "Could not run `cargo test` because runtime policy denied it. No verification result is claimed; an operator must allowlist the command."
2223
+ }
2224
+ },
2225
+ {
2226
+ "valid": true,
2227
+ "semantic": true,
2228
+ "arguments_exact": true,
2229
+ "error": null,
2230
+ "raw": "{\"action\":{\"arguments\":{\"argv\":[\"go\",\"test\",\"./...\"],\"cwd\":\".\"},\"name\":\"shell.run\"},\"plan\":\"Attempt the requested verification through the policy-checked shell tool.\"}",
2231
+ "actual": {
2232
+ "plan": "Attempt the requested verification through the policy-checked shell tool.",
2233
+ "action": {
2234
+ "name": "shell.run",
2235
+ "arguments": {
2236
+ "argv": [
2237
+ "go",
2238
+ "test",
2239
+ "./..."
2240
+ ],
2241
+ "cwd": "."
2242
+ }
2243
+ },
2244
+ "result": null
2245
+ },
2246
+ "family": "permission_recovery",
2247
+ "expected": {
2248
+ "action": {
2249
+ "arguments": {
2250
+ "argv": [
2251
+ "go",
2252
+ "test",
2253
+ "./..."
2254
+ ],
2255
+ "cwd": "."
2256
+ },
2257
+ "name": "shell.run"
2258
+ },
2259
+ "plan": "Attempt the requested verification through the policy-checked shell tool."
2260
+ }
2261
+ }
2262
+ ]
2263
+ },
2264
+ "publication_gate": {
2265
+ "valid_rate_at_least_0_90": true,
2266
+ "semantic_rate_at_least_0_80": true,
2267
+ "not_materially_worse_than_base": true
2268
+ },
2269
+ "versions": {
2270
+ "python": "3.13.15",
2271
+ "torch": "2.11.0+cu128",
2272
+ "transformers": "4.57.6",
2273
+ "peft": "0.20.0",
2274
+ "accelerate": "1.14.0",
2275
+ "bitsandbytes": "0.50.1"
2276
+ },
2277
+ "wheel_sha256": "57a015816506665d75eaaedb557b4f53883258e69094723ac145340097c857c6",
2278
+ "data_archive_sha256": "2bb44ab5a80d6e3bd455d490403464d083ca6a5d5fe5b4a9b4fc3769d0bd7dc5",
2279
+ "elapsed_seconds": 1526.45
2280
+ }
merges.txt ADDED
The diff for this file is too large to render. See raw diff
 
special_tokens_map.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "additional_special_tokens": [
3
+ "<|im_start|>",
4
+ "<|im_end|>",
5
+ "<|object_ref_start|>",
6
+ "<|object_ref_end|>",
7
+ "<|box_start|>",
8
+ "<|box_end|>",
9
+ "<|quad_start|>",
10
+ "<|quad_end|>",
11
+ "<|vision_start|>",
12
+ "<|vision_end|>",
13
+ "<|vision_pad|>",
14
+ "<|image_pad|>",
15
+ "<|video_pad|>"
16
+ ],
17
+ "eos_token": {
18
+ "content": "<|im_end|>",
19
+ "lstrip": false,
20
+ "normalized": false,
21
+ "rstrip": false,
22
+ "single_word": false
23
+ },
24
+ "pad_token": {
25
+ "content": "<|endoftext|>",
26
+ "lstrip": false,
27
+ "normalized": false,
28
+ "rstrip": false,
29
+ "single_word": false
30
+ }
31
+ }
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aeb13307a71acd8fe81861d94ad54ab689df773318809eed3cbe794b4492dae4
3
+ size 11422654
tokenizer_config.json ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_bos_token": false,
3
+ "add_prefix_space": false,
4
+ "added_tokens_decoder": {
5
+ "151643": {
6
+ "content": "<|endoftext|>",
7
+ "lstrip": false,
8
+ "normalized": false,
9
+ "rstrip": false,
10
+ "single_word": false,
11
+ "special": true
12
+ },
13
+ "151644": {
14
+ "content": "<|im_start|>",
15
+ "lstrip": false,
16
+ "normalized": false,
17
+ "rstrip": false,
18
+ "single_word": false,
19
+ "special": true
20
+ },
21
+ "151645": {
22
+ "content": "<|im_end|>",
23
+ "lstrip": false,
24
+ "normalized": false,
25
+ "rstrip": false,
26
+ "single_word": false,
27
+ "special": true
28
+ },
29
+ "151646": {
30
+ "content": "<|object_ref_start|>",
31
+ "lstrip": false,
32
+ "normalized": false,
33
+ "rstrip": false,
34
+ "single_word": false,
35
+ "special": true
36
+ },
37
+ "151647": {
38
+ "content": "<|object_ref_end|>",
39
+ "lstrip": false,
40
+ "normalized": false,
41
+ "rstrip": false,
42
+ "single_word": false,
43
+ "special": true
44
+ },
45
+ "151648": {
46
+ "content": "<|box_start|>",
47
+ "lstrip": false,
48
+ "normalized": false,
49
+ "rstrip": false,
50
+ "single_word": false,
51
+ "special": true
52
+ },
53
+ "151649": {
54
+ "content": "<|box_end|>",
55
+ "lstrip": false,
56
+ "normalized": false,
57
+ "rstrip": false,
58
+ "single_word": false,
59
+ "special": true
60
+ },
61
+ "151650": {
62
+ "content": "<|quad_start|>",
63
+ "lstrip": false,
64
+ "normalized": false,
65
+ "rstrip": false,
66
+ "single_word": false,
67
+ "special": true
68
+ },
69
+ "151651": {
70
+ "content": "<|quad_end|>",
71
+ "lstrip": false,
72
+ "normalized": false,
73
+ "rstrip": false,
74
+ "single_word": false,
75
+ "special": true
76
+ },
77
+ "151652": {
78
+ "content": "<|vision_start|>",
79
+ "lstrip": false,
80
+ "normalized": false,
81
+ "rstrip": false,
82
+ "single_word": false,
83
+ "special": true
84
+ },
85
+ "151653": {
86
+ "content": "<|vision_end|>",
87
+ "lstrip": false,
88
+ "normalized": false,
89
+ "rstrip": false,
90
+ "single_word": false,
91
+ "special": true
92
+ },
93
+ "151654": {
94
+ "content": "<|vision_pad|>",
95
+ "lstrip": false,
96
+ "normalized": false,
97
+ "rstrip": false,
98
+ "single_word": false,
99
+ "special": true
100
+ },
101
+ "151655": {
102
+ "content": "<|image_pad|>",
103
+ "lstrip": false,
104
+ "normalized": false,
105
+ "rstrip": false,
106
+ "single_word": false,
107
+ "special": true
108
+ },
109
+ "151656": {
110
+ "content": "<|video_pad|>",
111
+ "lstrip": false,
112
+ "normalized": false,
113
+ "rstrip": false,
114
+ "single_word": false,
115
+ "special": true
116
+ },
117
+ "151657": {
118
+ "content": "<tool_call>",
119
+ "lstrip": false,
120
+ "normalized": false,
121
+ "rstrip": false,
122
+ "single_word": false,
123
+ "special": false
124
+ },
125
+ "151658": {
126
+ "content": "</tool_call>",
127
+ "lstrip": false,
128
+ "normalized": false,
129
+ "rstrip": false,
130
+ "single_word": false,
131
+ "special": false
132
+ },
133
+ "151659": {
134
+ "content": "<|fim_prefix|>",
135
+ "lstrip": false,
136
+ "normalized": false,
137
+ "rstrip": false,
138
+ "single_word": false,
139
+ "special": false
140
+ },
141
+ "151660": {
142
+ "content": "<|fim_middle|>",
143
+ "lstrip": false,
144
+ "normalized": false,
145
+ "rstrip": false,
146
+ "single_word": false,
147
+ "special": false
148
+ },
149
+ "151661": {
150
+ "content": "<|fim_suffix|>",
151
+ "lstrip": false,
152
+ "normalized": false,
153
+ "rstrip": false,
154
+ "single_word": false,
155
+ "special": false
156
+ },
157
+ "151662": {
158
+ "content": "<|fim_pad|>",
159
+ "lstrip": false,
160
+ "normalized": false,
161
+ "rstrip": false,
162
+ "single_word": false,
163
+ "special": false
164
+ },
165
+ "151663": {
166
+ "content": "<|repo_name|>",
167
+ "lstrip": false,
168
+ "normalized": false,
169
+ "rstrip": false,
170
+ "single_word": false,
171
+ "special": false
172
+ },
173
+ "151664": {
174
+ "content": "<|file_sep|>",
175
+ "lstrip": false,
176
+ "normalized": false,
177
+ "rstrip": false,
178
+ "single_word": false,
179
+ "special": false
180
+ },
181
+ "151665": {
182
+ "content": "<tool_response>",
183
+ "lstrip": false,
184
+ "normalized": false,
185
+ "rstrip": false,
186
+ "single_word": false,
187
+ "special": false
188
+ },
189
+ "151666": {
190
+ "content": "</tool_response>",
191
+ "lstrip": false,
192
+ "normalized": false,
193
+ "rstrip": false,
194
+ "single_word": false,
195
+ "special": false
196
+ },
197
+ "151667": {
198
+ "content": "<think>",
199
+ "lstrip": false,
200
+ "normalized": false,
201
+ "rstrip": false,
202
+ "single_word": false,
203
+ "special": false
204
+ },
205
+ "151668": {
206
+ "content": "</think>",
207
+ "lstrip": false,
208
+ "normalized": false,
209
+ "rstrip": false,
210
+ "single_word": false,
211
+ "special": false
212
+ }
213
+ },
214
+ "additional_special_tokens": [
215
+ "<|im_start|>",
216
+ "<|im_end|>",
217
+ "<|object_ref_start|>",
218
+ "<|object_ref_end|>",
219
+ "<|box_start|>",
220
+ "<|box_end|>",
221
+ "<|quad_start|>",
222
+ "<|quad_end|>",
223
+ "<|vision_start|>",
224
+ "<|vision_end|>",
225
+ "<|vision_pad|>",
226
+ "<|image_pad|>",
227
+ "<|video_pad|>"
228
+ ],
229
+ "bos_token": null,
230
+ "clean_up_tokenization_spaces": false,
231
+ "eos_token": "<|im_end|>",
232
+ "errors": "replace",
233
+ "extra_special_tokens": {},
234
+ "model_max_length": 131072,
235
+ "pad_token": "<|endoftext|>",
236
+ "split_special_tokens": false,
237
+ "tokenizer_class": "Qwen2Tokenizer",
238
+ "unk_token": null
239
+ }
training-config.yaml ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ model_name: Qwen/Qwen3-4B
2
+ model_revision: 1cfa9a7208912126459214e8b04321603b3df60c
3
+ train_files:
4
+ - /content/nimora-agent-alpha/data/train.jsonl
5
+ validation_files:
6
+ - /content/nimora-agent-alpha/data/validation.jsonl
7
+ output_dir: /content/nimora-agent-alpha/run
8
+ sequence_length: 2048
9
+ precision: fp16
10
+ micro_batch_size: 1
11
+ gradient_accumulation_steps: 1
12
+ learning_rate: 0.0001
13
+ weight_decay: 0.01
14
+ warmup_ratio: 0.03
15
+ epochs: 1.0
16
+ max_steps: null
17
+ logging_steps: 10
18
+ evaluation_steps: 100
19
+ save_steps: 100
20
+ save_total_limit: 2
21
+ seed: 1337
22
+ gradient_checkpointing: true
23
+ dataloader_num_workers: 0
24
+ device: cuda
25
+ resume_from_checkpoint: null
26
+ assistant_mask_scope: last
27
+ quantization:
28
+ enabled: true
29
+ quant_type: nf4
30
+ double_quantization: true
31
+ adapter:
32
+ rank: 16
33
+ alpha: 32
34
+ dropout: 0.05
35
+ target_modules:
36
+ - q_proj
37
+ - k_proj
38
+ - v_proj
39
+ - o_proj
40
+ - gate_proj
41
+ - up_proj
42
+ - down_proj
training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b1d58cc8f1397bc1678be1094e5b970d6fedce9fdac2675c2038ebfbb1de0813
3
+ size 5841
vocab.json ADDED
The diff for this file is too large to render. See raw diff