commit 3836d7b76b46957fa69e057722d3184fb418a282 Author: ModelHub XC Date: Sat Jul 25 13:52:10 2026 +0800 初始化项目,由ModelHub XC社区提供模型 Model: tburns-actual/legion-ares Source: Original Platform diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..82cddd9 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,41 @@ +*.7z filter=lfs diff=lfs merge=lfs -text +*.arrow filter=lfs diff=lfs merge=lfs -text +*.bin filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.ckpt filter=lfs diff=lfs merge=lfs -text +*.ftz filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.h5 filter=lfs diff=lfs merge=lfs -text +*.joblib filter=lfs diff=lfs merge=lfs -text +*.lfs.* filter=lfs diff=lfs merge=lfs -text +*.mlmodel filter=lfs diff=lfs merge=lfs -text +*.model filter=lfs diff=lfs merge=lfs -text +*.msgpack filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text +*.npz filter=lfs diff=lfs merge=lfs -text +*.onnx filter=lfs diff=lfs merge=lfs -text +*.ot filter=lfs diff=lfs merge=lfs -text +*.parquet filter=lfs diff=lfs merge=lfs -text +*.pb filter=lfs diff=lfs merge=lfs -text +*.pickle filter=lfs diff=lfs merge=lfs -text +*.pkl filter=lfs diff=lfs merge=lfs -text +*.pt filter=lfs diff=lfs merge=lfs -text +*.pth filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +*.safetensors filter=lfs diff=lfs merge=lfs -text +saved_model/**/* filter=lfs diff=lfs merge=lfs -text +*.tar.* filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.tflite filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.wasm filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text +*tfevents* filter=lfs diff=lfs merge=lfs -text +legion-ares-qwen3-4b.Q4_K_M.gguf filter=lfs diff=lfs merge=lfs -text +legion-ares.png filter=lfs diff=lfs merge=lfs -text +legion-ares-original.png filter=lfs diff=lfs merge=lfs -text +adapters/qwen3-1.7b-20260627T181044Z/tokenizer.json filter=lfs diff=lfs merge=lfs -text +legion-ares-qwen3-1.7b.q8_0.gguf filter=lfs diff=lfs merge=lfs -text +legion-ares-qwen3-1.7b.Q4_K_M.gguf filter=lfs diff=lfs merge=lfs -text diff --git a/README.md b/README.md new file mode 100644 index 0000000..eaae7f0 --- /dev/null +++ b/README.md @@ -0,0 +1,146 @@ +--- +license: mit +base_model: + - Qwen/Qwen3-1.7B + - Qwen/Qwen3-4B +base_model_relation: finetune +library_name: gguf +pipeline_tag: text-generation +language: + - en +tags: + - security + - blue-team + - threat-hunting + - cybersecurity + - incident-response + - qwen3 + - gguf + - ollama + - legion +--- + +

+ Legion Ares +

+ +# Legion Ares + +- Github Repo: https://github.com/OpenSource-For-Freedom/legion + +Ares is the on-device blue-team analyst built into Legion. It reads the findings that Legion's detection engine has already confirmed (alerts, rule hits, YARA matches, OSV vulnerabilities, and the local posture score) and writes a short, grounded summary for the operator: what the overall picture is, which finding matters most and why, and the single next action to take. Every claim points back to a concrete artifact (a file path, IP, package, or rule id), and it does not invent indicators. + +The model runs fully local through Ollama. The Legion app pulls it on first launch from the distribution manifest, checks the download against a SHA-256, and registers it with Ollama. Nothing about your machine leaves your machine. + +Ares ships in two tiers, both QLoRA fine-tunes quantized to GGUF for Ollama. The 1.7b tier is the default and the one under active training, since it fits an 8 GB GPU. The metrics below always reflect the current best build. + +- 1.7b tier: base Qwen/Qwen3-1.7B. GGUF Q4_K_M about 1.1 GB, Q8_0 about 1.8 GB. +- 4b tier: base Qwen/Qwen3-4B. GGUF Q4_K_M about 2.5 GB. +- Method: QLoRA fine-tune (4-bit NF4 base, LoRA rank 32), self-distilled from a local teacher. +- Language: English + +## What it does + +Ares takes a block of confirmed findings and turns it into a few sentences an operator can act on. It is not a chatbot and not a generalist. It has one job: grounded synthesis of security findings, in plain text, with no markdown, no restating the list line by line, and no claims of active compromise from rule candidates alone. When there are no findings, it says the host looks clean and names what was checked. + +Input (what Legion's engine produces): + +``` +Local posture: ELEVATED (score 0.50). + +CONFIRMED FINDINGS: +ACTIVE ALERTS (critical/high): + [High] npm postinstall script executed - node_modules/evil-pkg/install.js +RULE HITS: + [High] dev DEV-04 - postinstall touches process.env +``` + +Output: + +``` +The host is at an elevated posture because an npm postinstall script ran from +evil-pkg and reached into process.env, which rule DEV-04 flags as suspicious. +That postinstall execution is the finding that matters most, since it is a +common supply-chain foothold. Isolate the package, read install.js, and review +the dependency before trusting the build again. +``` + +## How it was trained + +The data is grounded synthesis pairs across the scenario types Legion detects: malicious peers, kernel rootkits, npm supply-chain, vulnerable packages, Windows persistence, YARA droppers, and clean baselines. A local teacher model wrote each gold answer, and every pair had to clear the same automated checks the project uses to score the student, so only grounded, plain-text, correctly-cited answers made it into the set. The model also sees several wordings of the same instruction during training, so it behaves the same whether the calling code asks tersely or in detail. + +A build only ships if it clears all of these on a frozen test set: + +- zero invented indicators +- grounding at or above 0.95 +- plain-text format at or above 0.98 +- citation coverage at or above 0.80 +- low restatement (anti-parrot) at or above 0.90 + +## Evaluation + +Ares is graded by code on a frozen test set held out from training. The best build across all runs, how it was reached from the stock base, and the run-over-run history are below, and they refresh on every training run. + + + +## Best build + +- run `20260627T181044Z`, tier legion-ares:qwen3-1.7b, base Qwen/Qwen3-1.7B, teacher qwen3:14b +- graded on a frozen 47-case test set held out from training +- curriculum: dual-OS (Linux and Windows), package and supply-chain, C2, exfil, obfuscation, and credential-harvesting specialties, five guardrail classes, and the CLLMSP AI and LLM security backbone + +| metric | base | trained | +|---|---|---| +| pass rate | 10/47 | 41/47 | +| grounding | 0.96 | 1.00 | +| citation coverage | - | 0.97 | +| anti-parrot | - | 0.98 | +| invented indicators | 4 | 0 | +| gates cleared | False | True | + +## How the best build was reached + +Each run sweeps several QLoRA configs against the base and keeps the best. This one climbed from the stock base: + +| stage | rank | steps | pass | gates | +|---|---|---|---|---| +| baseline | - | - | 10/47 | False | +| cycle 1 | 16 | 150 | 32/47 | False | +| cycle 2 | 32 | 250 | 37/47 | False | +| cycle 3 | 32 | 400 | 38/47 | False | +| cycle 4 | 64 | 300 | 39/47 | False | +| cycle 5 | 64 | 500 | 41/47 | True | + +## Training history + +One row per iterate run, newest first. The test set grows as new guardrail scenarios are added, so later runs are graded on a wider bar. + +| run | date | tier | test set | pass rate | grounding | invented | gates | +|---|---|---|---|---|---|---|---| +| `20260706T124233Z` | 2026-07-06 | legion-ares:qwen3-1.7b | 48 | 39/48 | 0.98 | 1 | False | +| `20260627T181044Z` (best) | 2026-06-27 | legion-ares:qwen3-1.7b | 47 | 41/47 | 1.00 | 0 | True | + +Every answer is graded by code, not a judge model: indicators are extracted by regex and checked against the evidence, markdown is detected structurally, and token overlap measures restatement. A build ships only if it clears every gate: zero invented indicators, grounding at or above 0.95, plain-text format at or above 0.98, citation coverage at or above 0.80, and anti-parrot at or above 0.90. + + + +## Running it + +Inside Legion this is automatic. The app reads its distribution manifest, downloads the GGUF, verifies the hash, and runs `ollama create`. + +To run it by hand, download the GGUF from this repo and register it with Ollama: + +``` +ollama create legion-ares -f Modelfile # Modelfile: FROM ./legion-ares-qwen3-4b.Q4_K_M.gguf +ollama run legion-ares +``` + +## Limitations + +- It only summarizes findings it is handed. It does not detect anything on its own. Legion's deterministic engine does the detection. +- It is tuned for short security syntheses in English. It is not a general assistant. +- By design it will not raise anything that is not in the findings. + +## License + +MIT, for the Legion Ares fine-tune and the surrounding Legion code. The base model is Qwen3-4B, released by Alibaba under Apache 2.0; those terms still cover the underlying weights, so keep the Qwen attribution if you redistribute. diff --git a/adapters/qwen3-1.7b-20260627T181044Z/README.md b/adapters/qwen3-1.7b-20260627T181044Z/README.md new file mode 100644 index 0000000..ded31d3 --- /dev/null +++ b/adapters/qwen3-1.7b-20260627T181044Z/README.md @@ -0,0 +1,209 @@ +--- +base_model: Qwen/Qwen3-1.7B +library_name: peft +pipeline_tag: text-generation +tags: +- base_model:adapter:Qwen/Qwen3-1.7B +- lora +- sft +- transformers +- trl +--- + +# Model Card for Model ID + + + + + +## Model Details + +### Model Description + + + + + +- **Developed by:** [More Information Needed] +- **Funded by [optional]:** [More Information Needed] +- **Shared by [optional]:** [More Information Needed] +- **Model type:** [More Information Needed] +- **Language(s) (NLP):** [More Information Needed] +- **License:** [More Information Needed] +- **Finetuned from model [optional]:** [More Information Needed] + +### Model Sources [optional] + + + +- **Repository:** [More Information Needed] +- **Paper [optional]:** [More Information Needed] +- **Demo [optional]:** [More Information Needed] + +## Uses + + + +### Direct Use + + + +[More Information Needed] + +### Downstream Use [optional] + + + +[More Information Needed] + +### Out-of-Scope Use + + + +[More Information Needed] + +## Bias, Risks, and Limitations + + + +[More Information Needed] + +### Recommendations + + + +Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations. + +## How to Get Started with the Model + +Use the code below to get started with the model. + +[More Information Needed] + +## Training Details + +### Training Data + + + +[More Information Needed] + +### Training Procedure + + + +#### Preprocessing [optional] + +[More Information Needed] + + +#### Training Hyperparameters + +- **Training regime:** [More Information Needed] + +#### Speeds, Sizes, Times [optional] + + + +[More Information Needed] + +## Evaluation + + + +### Testing Data, Factors & Metrics + +#### Testing Data + + + +[More Information Needed] + +#### Factors + + + +[More Information Needed] + +#### Metrics + + + +[More Information Needed] + +### Results + +[More Information Needed] + +#### Summary + + + +## Model Examination [optional] + + + +[More Information Needed] + +## Environmental Impact + + + +Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700). + +- **Hardware Type:** [More Information Needed] +- **Hours used:** [More Information Needed] +- **Cloud Provider:** [More Information Needed] +- **Compute Region:** [More Information Needed] +- **Carbon Emitted:** [More Information Needed] + +## Technical Specifications [optional] + +### Model Architecture and Objective + +[More Information Needed] + +### Compute Infrastructure + +[More Information Needed] + +#### Hardware + +[More Information Needed] + +#### Software + +[More Information Needed] + +## Citation [optional] + + + +**BibTeX:** + +[More Information Needed] + +**APA:** + +[More Information Needed] + +## Glossary [optional] + + + +[More Information Needed] + +## More Information [optional] + +[More Information Needed] + +## Model Card Authors [optional] + +[More Information Needed] + +## Model Card Contact + +[More Information Needed] +### Framework versions + +- PEFT 0.18.1 \ No newline at end of file diff --git a/adapters/qwen3-1.7b-20260627T181044Z/adapter_config.json b/adapters/qwen3-1.7b-20260627T181044Z/adapter_config.json new file mode 100644 index 0000000..5265b74 --- /dev/null +++ b/adapters/qwen3-1.7b-20260627T181044Z/adapter_config.json @@ -0,0 +1,46 @@ +{ + "alora_invocation_tokens": null, + "alpha_pattern": {}, + "arrow_config": null, + "auto_mapping": null, + "base_model_name_or_path": "Qwen/Qwen3-1.7B", + "bias": "none", + "corda_config": null, + "ensure_weight_tying": false, + "eva_config": null, + "exclude_modules": null, + "fan_in_fan_out": false, + "inference_mode": true, + "init_lora_weights": true, + "layer_replication": null, + "layers_pattern": null, + "layers_to_transform": null, + "loftq_config": {}, + "lora_alpha": 64, + "lora_bias": false, + "lora_dropout": 0.05, + "megatron_config": null, + "megatron_core": "megatron.core", + "modules_to_save": null, + "peft_type": "LORA", + "peft_version": "0.18.1", + "qalora_group_size": 16, + "r": 64, + "rank_pattern": {}, + "revision": null, + "target_modules": [ + "v_proj", + "o_proj", + "k_proj", + "gate_proj", + "up_proj", + "q_proj", + "down_proj" + ], + "target_parameters": null, + "task_type": "CAUSAL_LM", + "trainable_token_indices": null, + "use_dora": false, + "use_qalora": false, + "use_rslora": false +} \ No newline at end of file diff --git a/adapters/qwen3-1.7b-20260627T181044Z/adapter_model.safetensors b/adapters/qwen3-1.7b-20260627T181044Z/adapter_model.safetensors new file mode 100644 index 0000000..dcf5adf --- /dev/null +++ b/adapters/qwen3-1.7b-20260627T181044Z/adapter_model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:850c63632fde11a4df2a22146145591a500d78fc10a22fc12b54cd430502c0ee +size 278973888 diff --git a/adapters/qwen3-1.7b-20260627T181044Z/chat_template.jinja b/adapters/qwen3-1.7b-20260627T181044Z/chat_template.jinja new file mode 100644 index 0000000..b11e13e --- /dev/null +++ b/adapters/qwen3-1.7b-20260627T181044Z/chat_template.jinja @@ -0,0 +1,89 @@ +{%- if tools %} + {{- '<|im_start|>system\n' }} + {%- if messages[0].role == 'system' %} + {{- messages[0].content + '\n\n' }} + {%- endif %} + {{- "# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within XML tags:\n" }} + {%- for tool in tools %} + {{- "\n" }} + {{- tool | tojson }} + {%- endfor %} + {{- "\n\n\nFor each function call, return a json object with function name and arguments within XML tags:\n\n{\"name\": , \"arguments\": }\n<|im_end|>\n" }} +{%- else %} + {%- if messages[0].role == 'system' %} + {{- '<|im_start|>system\n' + messages[0].content + '<|im_end|>\n' }} + {%- endif %} +{%- endif %} +{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %} +{%- for message in messages[::-1] %} + {%- set index = (messages|length - 1) - loop.index0 %} + {%- if ns.multi_step_tool and message.role == "user" and message.content is string and not(message.content.startswith('') and message.content.endswith('')) %} + {%- set ns.multi_step_tool = false %} + {%- set ns.last_query_index = index %} + {%- endif %} +{%- endfor %} +{%- for message in messages %} + {%- if message.content is string %} + {%- set content = message.content %} + {%- else %} + {%- set content = '' %} + {%- endif %} + {%- if (message.role == "user") or (message.role == "system" and not loop.first) %} + {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }} + {%- elif message.role == "assistant" %} + {%- set reasoning_content = '' %} + {%- if message.reasoning_content is string %} + {%- set reasoning_content = message.reasoning_content %} + {%- else %} + {%- if '' in content %} + {%- set reasoning_content = content.split('')[0].rstrip('\n').split('')[-1].lstrip('\n') %} + {%- set content = content.split('')[-1].lstrip('\n') %} + {%- endif %} + {%- endif %} + {%- if loop.index0 > ns.last_query_index %} + {%- if loop.last or (not loop.last and reasoning_content) %} + {{- '<|im_start|>' + message.role + '\n\n' + reasoning_content.strip('\n') + '\n\n\n' + content.lstrip('\n') }} + {%- else %} + {{- '<|im_start|>' + message.role + '\n' + content }} + {%- endif %} + {%- else %} + {{- '<|im_start|>' + message.role + '\n' + content }} + {%- endif %} + {%- if message.tool_calls %} + {%- for tool_call in message.tool_calls %} + {%- if (loop.first and content) or (not loop.first) %} + {{- '\n' }} + {%- endif %} + {%- if tool_call.function %} + {%- set tool_call = tool_call.function %} + {%- endif %} + {{- '\n{"name": "' }} + {{- tool_call.name }} + {{- '", "arguments": ' }} + {%- if tool_call.arguments is string %} + {{- tool_call.arguments }} + {%- else %} + {{- tool_call.arguments | tojson }} + {%- endif %} + {{- '}\n' }} + {%- endfor %} + {%- endif %} + {{- '<|im_end|>\n' }} + {%- elif message.role == "tool" %} + {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %} + {{- '<|im_start|>user' }} + {%- endif %} + {{- '\n\n' }} + {{- content }} + {{- '\n' }} + {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %} + {{- '<|im_end|>\n' }} + {%- endif %} + {%- endif %} +{%- endfor %} +{%- if add_generation_prompt %} + {{- '<|im_start|>assistant\n' }} + {%- if enable_thinking is defined and enable_thinking is false %} + {{- '\n\n\n\n' }} + {%- endif %} +{%- endif %} \ No newline at end of file diff --git a/adapters/qwen3-1.7b-20260627T181044Z/tokenizer.json b/adapters/qwen3-1.7b-20260627T181044Z/tokenizer.json new file mode 100644 index 0000000..c7afbed --- /dev/null +++ b/adapters/qwen3-1.7b-20260627T181044Z/tokenizer.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be75606093db2094d7cd20f3c2f385c212750648bd6ea4fb2bf507a6a4c55506 +size 11422650 diff --git a/adapters/qwen3-1.7b-20260627T181044Z/tokenizer_config.json b/adapters/qwen3-1.7b-20260627T181044Z/tokenizer_config.json new file mode 100644 index 0000000..df142d0 --- /dev/null +++ b/adapters/qwen3-1.7b-20260627T181044Z/tokenizer_config.json @@ -0,0 +1,30 @@ +{ + "add_prefix_space": false, + "backend": "tokenizers", + "bos_token": null, + "clean_up_tokenization_spaces": false, + "eos_token": "<|im_end|>", + "errors": "replace", + "extra_special_tokens": [ + "<|im_start|>", + "<|im_end|>", + "<|object_ref_start|>", + "<|object_ref_end|>", + "<|box_start|>", + "<|box_end|>", + "<|quad_start|>", + "<|quad_end|>", + "<|vision_start|>", + "<|vision_end|>", + "<|vision_pad|>", + "<|image_pad|>", + "<|video_pad|>" + ], + "is_local": false, + "local_files_only": false, + "model_max_length": 131072, + "pad_token": "<|endoftext|>", + "split_special_tokens": false, + "tokenizer_class": "Qwen2Tokenizer", + "unk_token": null +} diff --git a/adapters/qwen3-1.7b-20260627T181044Z/training_args.bin b/adapters/qwen3-1.7b-20260627T181044Z/training_args.bin new file mode 100644 index 0000000..d39460f --- /dev/null +++ b/adapters/qwen3-1.7b-20260627T181044Z/training_args.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6d247153c951ff7f4a07a0c44c7fda271fd5b5915ce8bed9446b6f5c5406bbd +size 5713 diff --git a/legion-ares-original.png b/legion-ares-original.png new file mode 100644 index 0000000..7bac8c1 --- /dev/null +++ b/legion-ares-original.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5ab197cdad14d8202dcb15c49da3466d20a4158164d5fe7ccacfd4ae06d057b +size 3253687 diff --git a/legion-ares-qwen3-1.7b.Q4_K_M.gguf b/legion-ares-qwen3-1.7b.Q4_K_M.gguf new file mode 100644 index 0000000..b4d70c1 --- /dev/null +++ b/legion-ares-qwen3-1.7b.Q4_K_M.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91f7057ed4b40f90d0a681e09184a42e899b0c524a78dbf114e72108c6f4af9e +size 1107408576 diff --git a/legion-ares-qwen3-1.7b.q8_0.gguf b/legion-ares-qwen3-1.7b.q8_0.gguf new file mode 100644 index 0000000..7e92ffe --- /dev/null +++ b/legion-ares-qwen3-1.7b.q8_0.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a8e740c6801ba0015587562fc81445796cf404c0c53988716afaf57a6242a45 +size 1834426048 diff --git a/legion-ares-qwen3-4b.Q4_K_M.gguf b/legion-ares-qwen3-4b.Q4_K_M.gguf new file mode 100644 index 0000000..7ab4232 --- /dev/null +++ b/legion-ares-qwen3-4b.Q4_K_M.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f7e323f6bd0f31ca360f37c20b0d20305dd179024b588e0d12255a2d0021201 +size 2497280320 diff --git a/legion-ares.png b/legion-ares.png new file mode 100644 index 0000000..35bf5cd --- /dev/null +++ b/legion-ares.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bb3618997b41741ae18434e70ab899a2ef5a19c1e6475d90955c0af668c44be +size 3263151 diff --git a/training-runs/iterate-summary-20260627T181044Z.json b/training-runs/iterate-summary-20260627T181044Z.json new file mode 100644 index 0000000..adae096 --- /dev/null +++ b/training-runs/iterate-summary-20260627T181044Z.json @@ -0,0 +1,89 @@ +{ + "run_id": "20260627T181044Z", + "status": "ok", + "config": { + "tier": "legion-ares:qwen3-1.7b", + "base_model": "Qwen/Qwen3-1.7B", + "teacher_model": "qwen3:14b", + "time_budget_min": 360, + "n_per": 8, + "cycles": 6, + "wall_clock_min": 360, + "note": "run crashed at cycle6 eval (window-close); best=cycle5, summary reconstructed from runs.log" + }, + "dataset": { + "accepted": 601, + "rejected": 0, + "by_backend": { + "model": 430, + "template": 63 + }, + "train": 395, + "val": 98, + "test": 47 + }, + "baseline_eval": { + "model": "Qwen/Qwen3-1.7B (base)", + "passed": 10, + "n": 47, + "pass_rate": 0.213, + "invented_total": 4, + "grounding": 0.961, + "citation_coverage": null, + "anti_parrot": null, + "gates_cleared": false + }, + "best_eval": { + "model": "Qwen/Qwen3-1.7B+adapter (cycle5 rank64/steps500)", + "passed": 41, + "n": 47, + "pass_rate": 0.872, + "invented_total": 0, + "grounding": 1.0, + "citation_coverage": 0.968, + "anti_parrot": 0.979, + "gates_cleared": true + }, + "best_adapter": "F:\\dev\\legion-agent\\ares-training\\models\\best-181044Z-cycle5-41of47", + "promote": { + "promote": true, + "reason": "clears every eval gate (grounding 1.0, invented 0); pass 41/47 vs baseline 10/47" + }, + "cycles": [ + { + "cfg": "rank16/steps150", + "eval": { + "passed": 32, + "gates_cleared": false + } + }, + { + "cfg": "rank32/steps250", + "eval": { + "passed": 37, + "gates_cleared": false + } + }, + { + "cfg": "rank32/steps400", + "eval": { + "passed": 38, + "gates_cleared": false + } + }, + { + "cfg": "rank64/steps300", + "eval": { + "passed": 39, + "gates_cleared": false + } + }, + { + "cfg": "rank64/steps500", + "eval": { + "passed": 41, + "gates_cleared": true + } + } + ] +} \ No newline at end of file diff --git a/training-runs/iterate-summary-20260706T124233Z.json b/training-runs/iterate-summary-20260706T124233Z.json new file mode 100644 index 0000000..2a1a77a --- /dev/null +++ b/training-runs/iterate-summary-20260706T124233Z.json @@ -0,0 +1,175 @@ +{ + "run_id": "20260706T124233Z", + "status": "ok", + "config": { + "run_id": "20260706T124233Z", + "tier": "legion-ares:qwen3-1.7b", + "base_model": "Qwen/Qwen3-1.7B", + "teacher_model": "qwen3:14b", + "time_budget_min": 240.0, + "instructions_per": 3, + "n_per": 8, + "smoke": false, + "wall_clock_min": 256.7, + "cycles": 5 + }, + "dataset": { + "candidates": 329, + "accepted": 329, + "rejected": 0, + "deduped": 58, + "train": 217, + "val": 54, + "test": 48, + "by_backend": { + "model": 228, + "template": 43 + }, + "reject_reasons": [] + }, + "baseline_eval": { + "model": "Qwen/Qwen3-1.7B (base)", + "n": 48, + "passed": 8, + "pass_rate": 0.16666666666666666, + "invented_total": 4, + "grounding": 0.9583333333333334, + "format": 0.5208333333333334, + "citation_coverage": 0.84375, + "anti_parrot": 0.9236111111111112, + "mean_latency_s": 3.9846893250000903, + "gates_cleared": false + }, + "best_eval": { + "model": "Qwen/Qwen3-1.7B+adapter", + "n": 48, + "passed": 39, + "pass_rate": 0.8125, + "invented_total": 1, + "grounding": 0.9791666666666666, + "format": 1.0, + "citation_coverage": 0.9479166666666666, + "anti_parrot": 0.9340277777777778, + "mean_latency_s": 10.969979652083111, + "gates_cleared": false + }, + "best_adapter": "F:\\dev\\legion-agent\\ares-training\\.work\\iter-20260706T124233Z\\cycle4\\adapter", + "promote": { + "promote": false, + "reason": "candidate did not clear all eval gates", + "candidate_pass_rate": 0.8125, + "baseline_pass_rate": 0.16666666666666666 + }, + "cycles": [ + { + "cfg": { + "rank": 16, + "steps": 150, + "lr": 0.0002, + "cap_min": 45 + }, + "train": "ok", + "eval": { + "model": "Qwen/Qwen3-1.7B+adapter", + "n": 48, + "passed": 29, + "pass_rate": 0.6041666666666666, + "invented_total": 1, + "grounding": 0.9791666666666666, + "format": 1.0, + "citation_coverage": 0.9270833333333334, + "anti_parrot": 0.8767361111111112, + "mean_latency_s": 10.295820183333452, + "gates_cleared": false + } + }, + { + "cfg": { + "rank": 32, + "steps": 250, + "lr": 0.0002, + "cap_min": 60 + }, + "train": "ok", + "eval": { + "model": "Qwen/Qwen3-1.7B+adapter", + "n": 48, + "passed": 35, + "pass_rate": 0.7291666666666666, + "invented_total": 3, + "grounding": 0.9479166666666666, + "format": 1.0, + "citation_coverage": 0.8854166666666666, + "anti_parrot": 0.9826388888888888, + "mean_latency_s": 11.041281214583591, + "gates_cleared": false + } + }, + { + "cfg": { + "rank": 32, + "steps": 400, + "lr": 0.0001, + "cap_min": 70 + }, + "train": "ok", + "eval": { + "model": "Qwen/Qwen3-1.7B+adapter", + "n": 48, + "passed": 34, + "pass_rate": 0.7083333333333334, + "invented_total": 3, + "grounding": 0.9479166666666666, + "format": 1.0, + "citation_coverage": 0.9270833333333334, + "anti_parrot": 0.9513888888888888, + "mean_latency_s": 10.63382095000001, + "gates_cleared": false + } + }, + { + "cfg": { + "rank": 64, + "steps": 300, + "lr": 0.0002, + "cap_min": 70 + }, + "train": "ok", + "eval": { + "model": "Qwen/Qwen3-1.7B+adapter", + "n": 48, + "passed": 39, + "pass_rate": 0.8125, + "invented_total": 1, + "grounding": 0.9791666666666666, + "format": 1.0, + "citation_coverage": 0.9479166666666666, + "anti_parrot": 0.9340277777777778, + "mean_latency_s": 10.969979652083111, + "gates_cleared": false + } + }, + { + "cfg": { + "rank": 64, + "steps": 500, + "lr": 0.0001, + "cap_min": 80 + }, + "train": "partial", + "eval": { + "model": "Qwen/Qwen3-1.7B+adapter", + "n": 48, + "passed": 31, + "pass_rate": 0.6458333333333334, + "invented_total": 3, + "grounding": 0.9722222222222222, + "format": 1.0, + "citation_coverage": 0.9479166666666666, + "anti_parrot": 0.9201388888888888, + "mean_latency_s": 19.72521776874987, + "gates_cleared": false + } + } + ] +} \ No newline at end of file