初始化项目,由ModelHub XC社区提供模型
Model: tburns-actual/legion-ares Source: Original Platform
This commit is contained in:
41
.gitattributes
vendored
Normal file
41
.gitattributes
vendored
Normal file
@@ -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
|
||||
146
README.md
Normal file
146
README.md
Normal file
@@ -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
|
||||
---
|
||||
|
||||
<p align="center">
|
||||
<img src="https://huggingface.co/tburns-actual/legion-ares/resolve/main/legion-ares.png" alt="Legion Ares" width="70%">
|
||||
</p>
|
||||
|
||||
# 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.
|
||||
|
||||
<!-- ares:latest-run:start -->
|
||||
|
||||
## 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.
|
||||
|
||||
<!-- ares:latest-run:end -->
|
||||
|
||||
## 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.
|
||||
209
adapters/qwen3-1.7b-20260627T181044Z/README.md
Normal file
209
adapters/qwen3-1.7b-20260627T181044Z/README.md
Normal file
@@ -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
|
||||
|
||||
<!-- Provide a quick summary of what the model is/does. -->
|
||||
|
||||
|
||||
|
||||
## Model Details
|
||||
|
||||
### Model Description
|
||||
|
||||
<!-- Provide a longer summary of what this model is. -->
|
||||
|
||||
|
||||
|
||||
- **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]
|
||||
|
||||
<!-- Provide the basic links for the model. -->
|
||||
|
||||
- **Repository:** [More Information Needed]
|
||||
- **Paper [optional]:** [More Information Needed]
|
||||
- **Demo [optional]:** [More Information Needed]
|
||||
|
||||
## Uses
|
||||
|
||||
<!-- Address questions around how the model is intended to be used, including the foreseeable users of the model and those affected by the model. -->
|
||||
|
||||
### Direct Use
|
||||
|
||||
<!-- This section is for the model use without fine-tuning or plugging into a larger ecosystem/app. -->
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
### Downstream Use [optional]
|
||||
|
||||
<!-- This section is for the model use when fine-tuned for a task, or when plugged into a larger ecosystem/app -->
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
### Out-of-Scope Use
|
||||
|
||||
<!-- This section addresses misuse, malicious use, and uses that the model will not work well for. -->
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
## Bias, Risks, and Limitations
|
||||
|
||||
<!-- This section is meant to convey both technical and sociotechnical limitations. -->
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
### Recommendations
|
||||
|
||||
<!-- This section is meant to convey recommendations with respect to the bias, risk, and technical limitations. -->
|
||||
|
||||
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
|
||||
|
||||
<!-- This should link to a Dataset Card, perhaps with a short stub of information on what the training data is all about as well as documentation related to data pre-processing or additional filtering. -->
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
### Training Procedure
|
||||
|
||||
<!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. -->
|
||||
|
||||
#### Preprocessing [optional]
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
|
||||
#### Training Hyperparameters
|
||||
|
||||
- **Training regime:** [More Information Needed] <!--fp32, fp16 mixed precision, bf16 mixed precision, bf16 non-mixed precision, fp16 non-mixed precision, fp8 mixed precision -->
|
||||
|
||||
#### Speeds, Sizes, Times [optional]
|
||||
|
||||
<!-- This section provides information about throughput, start/end time, checkpoint size if relevant, etc. -->
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
## Evaluation
|
||||
|
||||
<!-- This section describes the evaluation protocols and provides the results. -->
|
||||
|
||||
### Testing Data, Factors & Metrics
|
||||
|
||||
#### Testing Data
|
||||
|
||||
<!-- This should link to a Dataset Card if possible. -->
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
#### Factors
|
||||
|
||||
<!-- These are the things the evaluation is disaggregating by, e.g., subpopulations or domains. -->
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
#### Metrics
|
||||
|
||||
<!-- These are the evaluation metrics being used, ideally with a description of why. -->
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
### Results
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
#### Summary
|
||||
|
||||
|
||||
|
||||
## Model Examination [optional]
|
||||
|
||||
<!-- Relevant interpretability work for the model goes here -->
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
## Environmental Impact
|
||||
|
||||
<!-- Total emissions (in grams of CO2eq) and additional considerations, such as electricity usage, go here. Edit the suggested text below accordingly -->
|
||||
|
||||
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]
|
||||
|
||||
<!-- If there is a paper or blog post introducing the model, the APA and Bibtex information for that should go in this section. -->
|
||||
|
||||
**BibTeX:**
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
**APA:**
|
||||
|
||||
[More Information Needed]
|
||||
|
||||
## Glossary [optional]
|
||||
|
||||
<!-- If relevant, include terms and calculations in this section that can help readers understand the model or model card. -->
|
||||
|
||||
[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
|
||||
46
adapters/qwen3-1.7b-20260627T181044Z/adapter_config.json
Normal file
46
adapters/qwen3-1.7b-20260627T181044Z/adapter_config.json
Normal file
@@ -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
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:850c63632fde11a4df2a22146145591a500d78fc10a22fc12b54cd430502c0ee
|
||||
size 278973888
|
||||
89
adapters/qwen3-1.7b-20260627T181044Z/chat_template.jinja
Normal file
89
adapters/qwen3-1.7b-20260627T181044Z/chat_template.jinja
Normal file
@@ -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 <tools></tools> XML tags:\n<tools>" }}
|
||||
{%- for tool in tools %}
|
||||
{{- "\n" }}
|
||||
{{- tool | tojson }}
|
||||
{%- endfor %}
|
||||
{{- "\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" }}
|
||||
{%- 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('<tool_response>') and message.content.endswith('</tool_response>')) %}
|
||||
{%- 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 '</think>' in content %}
|
||||
{%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
|
||||
{%- set content = content.split('</think>')[-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<think>\n' + reasoning_content.strip('\n') + '\n</think>\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 %}
|
||||
{{- '<tool_call>\n{"name": "' }}
|
||||
{{- tool_call.name }}
|
||||
{{- '", "arguments": ' }}
|
||||
{%- if tool_call.arguments is string %}
|
||||
{{- tool_call.arguments }}
|
||||
{%- else %}
|
||||
{{- tool_call.arguments | tojson }}
|
||||
{%- endif %}
|
||||
{{- '}\n</tool_call>' }}
|
||||
{%- endfor %}
|
||||
{%- endif %}
|
||||
{{- '<|im_end|>\n' }}
|
||||
{%- elif message.role == "tool" %}
|
||||
{%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
|
||||
{{- '<|im_start|>user' }}
|
||||
{%- endif %}
|
||||
{{- '\n<tool_response>\n' }}
|
||||
{{- content }}
|
||||
{{- '\n</tool_response>' }}
|
||||
{%- 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 %}
|
||||
{{- '<think>\n\n</think>\n\n' }}
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
3
adapters/qwen3-1.7b-20260627T181044Z/tokenizer.json
Normal file
3
adapters/qwen3-1.7b-20260627T181044Z/tokenizer.json
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:be75606093db2094d7cd20f3c2f385c212750648bd6ea4fb2bf507a6a4c55506
|
||||
size 11422650
|
||||
30
adapters/qwen3-1.7b-20260627T181044Z/tokenizer_config.json
Normal file
30
adapters/qwen3-1.7b-20260627T181044Z/tokenizer_config.json
Normal file
@@ -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
|
||||
}
|
||||
3
adapters/qwen3-1.7b-20260627T181044Z/training_args.bin
Normal file
3
adapters/qwen3-1.7b-20260627T181044Z/training_args.bin
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e6d247153c951ff7f4a07a0c44c7fda271fd5b5915ce8bed9446b6f5c5406bbd
|
||||
size 5713
|
||||
3
legion-ares-original.png
Normal file
3
legion-ares-original.png
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b5ab197cdad14d8202dcb15c49da3466d20a4158164d5fe7ccacfd4ae06d057b
|
||||
size 3253687
|
||||
3
legion-ares-qwen3-1.7b.Q4_K_M.gguf
Normal file
3
legion-ares-qwen3-1.7b.Q4_K_M.gguf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:91f7057ed4b40f90d0a681e09184a42e899b0c524a78dbf114e72108c6f4af9e
|
||||
size 1107408576
|
||||
3
legion-ares-qwen3-1.7b.q8_0.gguf
Normal file
3
legion-ares-qwen3-1.7b.q8_0.gguf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4a8e740c6801ba0015587562fc81445796cf404c0c53988716afaf57a6242a45
|
||||
size 1834426048
|
||||
3
legion-ares-qwen3-4b.Q4_K_M.gguf
Normal file
3
legion-ares-qwen3-4b.Q4_K_M.gguf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0f7e323f6bd0f31ca360f37c20b0d20305dd179024b588e0d12255a2d0021201
|
||||
size 2497280320
|
||||
3
legion-ares.png
Normal file
3
legion-ares.png
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8bb3618997b41741ae18434e70ab899a2ef5a19c1e6475d90955c0af668c44be
|
||||
size 3263151
|
||||
89
training-runs/iterate-summary-20260627T181044Z.json
Normal file
89
training-runs/iterate-summary-20260627T181044Z.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
175
training-runs/iterate-summary-20260706T124233Z.json
Normal file
175
training-runs/iterate-summary-20260706T124233Z.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user