Views
No views yet
<|tool_call_start|>[...]<|tool_call_end|>); assistant-only loss; best-checkpoint by eval_loss.| Dataset | noval-corp-agentic-sft — train 14,933 / val 785 (chat messages) |
| Adapter | LoRA r=32, α=64, dropout 0.05, target all-linear (1.86% params; merged at push) |
| LR / epochs | 1e-4 cosine, warmup 0.05, 2 epochs, max_len 4096, eff_batch 64 |
| Tools | 8 (get_channel_stats, query_telemetry, lookup_sop, classify_alert, issue_command, schedule_maintenance, open_incident_report, acknowledge_alert) |
| Metric | Value | Note |
|---|---|---|
| pass@1 (full trajectory) | 0.782 | baseline ParamΔ: 0.00 |
| triage F1 (genuine) | 0.77 | ParamΔ: 0.29 |
| triage recall (genuine) | 0.63 | ParamΔ: 0.22 |
| triage precision (genuine) | 1.00 | ParamΔ: 0.45 — zero false alarms |
| action-loop accuracy | 0.782 | ParamΔ: 0.00 |
| tool-call schema / format / channel | 1.00 | — |
| pass@1 by difficulty (L1/L2/L3/L4) | 0.84 / 0.49 / 1.0 / 1.0 | see limitations |
noval-corp/scripts/eval_agentic.py.messages_json → the SAME dataset trains LFM2-1.2B and (next) Gemma-4-12B, each via its own chat template.1from transformers import AutoModelForCausalLM, AutoTokenizer
2
3tok = AutoTokenizer.from_pretrained("atenareply/lfm2.5-1.2b-noval-agentic")
4model = AutoModelForCausalLM.from_pretrained("atenareply/lfm2.5-1.2b-noval-agentic")
5TOOLS = [...] # the 8 OpenAI-style tool schemas (see noval-corp/config/curation.py: TOOL_SCHEMA)
6messages = [{"role": "system", "content": "You are an OMC operations assistant."},
7 {"role": "user", "content": "ALERT on NPWD2531: 1.12A. Routine or genuine?"}]
8inputs = tok.apply_chat_template(messages, tools=TOOLS, add_generation_prompt=True, return_tensors="pt", return_dict=True)
9# parse <|tool_call_start|>[...]<|tool_call_end|>, execute, append a {"role":"tool",...} message, repeat.noval-corp/scripts/eval_agentic.py::run_episode.noval-corp/scripts/gen_model_cards.py (standardized across the noval-corp model family).