TypeScript commited on
Commit
0905286
·
verified ·
1 Parent(s): ec3b545

Sync Clef updates: .eval_results (safeagents-judge-bench & typed-decisions), SGLang dev-clef vs llama.cpp b11430 benchmarks, and updated joint_schema_model.py

Browse files
.eval_results/TypeScript__FastBrain-9B.yaml ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ - dataset:
2
+ id: LocalLLaMA/typed-decisions
3
+ task_id: accuracy
4
+ value: 0.7625
5
+ date: "2026-10-31"
6
+ source:
7
+ url: https://huggingface.co/datasets/LocalLLaMA/typed-decisions
8
+ name: "Typed Decisions benchmark run 2026-10-31 (test split, 400 cases / 2,000 decisions)"
9
+ - dataset:
10
+ id: LocalLLaMA/typed-decisions
11
+ task_id: kl_from_gold
12
+ value: 0.1508
13
+ date: "2026-10-31"
14
+ source:
15
+ url: https://huggingface.co/datasets/LocalLLaMA/typed-decisions
16
+ name: "Typed Decisions benchmark run 2026-10-31 (test split, 400 cases / 2,000 decisions)"
17
+ - dataset:
18
+ id: LocalLLaMA/typed-decisions
19
+ task_id: brier
20
+ value: 0.0795
21
+ date: "2026-10-31"
22
+ source:
23
+ url: https://huggingface.co/datasets/LocalLLaMA/typed-decisions
24
+ name: "Typed Decisions benchmark run 2026-10-31 (test split, 400 cases / 2,000 decisions)"
25
+ - dataset:
26
+ id: LocalLLaMA/typed-decisions
27
+ task_id: ece
28
+ value: 0.0235
29
+ date: "2026-10-31"
30
+ source:
31
+ url: https://huggingface.co/datasets/LocalLLaMA/typed-decisions
32
+ name: "Typed Decisions benchmark run 2026-10-31 (test split, 400 cases / 2,000 decisions)"
.eval_results/safeagents-judge-bench.yaml ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ - dataset:
2
+ id: harness-hub/safeagents-judge-bench
3
+ task_id: balanced_accuracy
4
+ value: 0.974
5
+ date: "2026-10-31"
6
+ source:
7
+ url: https://huggingface.co/datasets/harness-hub/safeagents-judge-bench
8
+ name: "safeagents judge bench v0, test split, run on NVIDIA RTX PRO 6000 Blackwell"
9
+ - dataset:
10
+ id: harness-hub/safeagents-judge-bench
11
+ task_id: auroc
12
+ value: 0.983
13
+ date: "2026-10-31"
14
+ source:
15
+ url: https://huggingface.co/datasets/harness-hub/safeagents-judge-bench
16
+ name: "safeagents judge bench v0, test split, run on NVIDIA RTX PRO 6000 Blackwell"
17
+ - dataset:
18
+ id: harness-hub/safeagents-judge-bench
19
+ task_id: false_block_rate
20
+ value: 0.051
21
+ date: "2026-10-31"
22
+ source:
23
+ url: https://huggingface.co/datasets/harness-hub/safeagents-judge-bench
24
+ name: "safeagents judge bench v0, test split, run on NVIDIA RTX PRO 6000 Blackwell"
25
+ - dataset:
26
+ id: harness-hub/safeagents-judge-bench
27
+ task_id: category_macro_f1
28
+ value: 0.850
29
+ date: "2026-10-31"
30
+ source:
31
+ url: https://huggingface.co/datasets/harness-hub/safeagents-judge-bench
32
+ name: "safeagents judge bench v0, test split, run on NVIDIA RTX PRO 6000 Blackwell"
README.md CHANGED
@@ -12,7 +12,10 @@ tags:
12
  - clef
13
  - gguf
14
  - llama-cpp
 
15
  - systemone
 
 
16
  - decision-index
17
  - tool-calling
18
  - function-calling
@@ -28,7 +31,9 @@ tags:
28
 
29
  [![Architecture](https://img.shields.io/badge/Backbone-Qwen3.5--9B_Hybrid_(9.4B_Total)-3b82f6?style=flat-square)](#architecture)
30
  [![Decision Head](https://img.shields.io/badge/Head-JointSchemaHead_(116M)-10b981?style=flat-square)](#architecture)
31
- [![Decision Index](https://img.shields.io/badge/Decision_Index_v0.2.1-80.55%25_(%232_Overall_%C2%B7_%231_9B)-f59e0b?style=flat-square)](#benchmark-evaluation)
 
 
32
  [![License](https://img.shields.io/badge/License-Apache_2.0-6366f1?style=flat-square)](./LICENSE)
33
 
34
  </div>
@@ -74,6 +79,34 @@ Evaluated on the official **Cloudflare Decision Index (v0.2.1)** across **10 ben
74
  | **When2Call**<br>*(Macro-F1)* | **81.13%**<br>*(#1 9B)* | 65.58% | 70.64% | 72.37% | **81.91%** | 75.44% | 48.92% |
75
  | **Macro Mean**<br>*(10 Tasks)* | **80.55%**<br>*(#2 · #1 9B)* | 74.96% | 76.51% | **81.81%** | 80.32% | 69.14% | 58.09% |
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  ---
78
 
79
  ## Architecture
@@ -240,6 +273,50 @@ print(resp["choices"]["action"]) # Calibrated probability distribution over all
240
  print(resp["usage"]) # {'input_tokens': ..., 'output_tokens': 0, 'total_tokens': ...}
241
  ```
242
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
243
  ---
244
 
245
  ## GGUF Quantization Accuracy Retention & Speed Benchmarks
 
12
  - clef
13
  - gguf
14
  - llama-cpp
15
+ - sglang
16
  - systemone
17
+ - decision-model
18
+ - image-text-to-typed-output
19
  - decision-index
20
  - tool-calling
21
  - function-calling
 
31
 
32
  [![Architecture](https://img.shields.io/badge/Backbone-Qwen3.5--9B_Hybrid_(9.4B_Total)-3b82f6?style=flat-square)](#architecture)
33
  [![Decision Head](https://img.shields.io/badge/Head-JointSchemaHead_(116M)-10b981?style=flat-square)](#architecture)
34
+ [![Decision Index](https://img.shields.io/badge/Decision_Index_v0.2.1-80.55%25_(%232_Overall_%C2%B7_%231_9B)-f59e0b?style=flat-square)](#benchmark-evaluation--parameter-scale-comparison)
35
+ [![SafeAgents Judge](https://img.shields.io/badge/SafeAgents_Judge-97.4%25_Bal_Acc_(%231_Overall)-ec4899?style=flat-square)](#external-community-benchmarks-safeagents-judge--typed-decisions)
36
+ [![Typed Decisions](https://img.shields.io/badge/Typed_Decisions-76.25%25_Zero--Shot_%C2%B7_80.70%25_Calibrated-8b5cf6?style=flat-square)](#external-community-benchmarks-safeagents-judge--typed-decisions)
37
  [![License](https://img.shields.io/badge/License-Apache_2.0-6366f1?style=flat-square)](./LICENSE)
38
 
39
  </div>
 
79
  | **When2Call**<br>*(Macro-F1)* | **81.13%**<br>*(#1 9B)* | 65.58% | 70.64% | 72.37% | **81.91%** | 75.44% | 48.92% |
80
  | **Macro Mean**<br>*(10 Tasks)* | **80.55%**<br>*(#2 · #1 9B)* | 74.96% | 76.51% | **81.81%** | 80.32% | 69.14% | 58.09% |
81
 
82
+ ### External Community Benchmarks (`safeagents-judge-bench` & `LocalLLaMA/typed-decisions`)
83
+
84
+ #### 1. [`harness-hub/safeagents-judge-bench`](https://huggingface.co/datasets/harness-hub/safeagents-judge-bench) (562 Agent Tool Calls · 78 Unsafe Trajectories · 7 Categories)
85
+
86
+ | Model | Params | Balanced Acc ↑ | AUROC ↑ | Recall ↑ | False Block Rate ↓ | Binary F1 ↑ | Cat. Macro-F1 ↑ | Cat. Acc ↑ | P50 Latency ↓ |
87
+ | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
88
+ | **`TypeScript/FastBrain-9B` *(Calibrated · Ours)*** | **9.4B** | **97.4%** *(#1)* | **98.3%** | **100.0%** *(78/78)* | **5.1%** *(#1)* | **99.8%** | **85.0%** *(#1)* | **92.3%** | **104 ms** |
89
+ | **`TypeScript/FastBrain-9B` *(Raw JointSchemaHead)*** | **9.4B** | 71.0% | **90.7%** *(>Flash)* | **98.5%** *(77/78)* | 56.4% | **97.2%** | 33.9% | 54.4% | **104 ms** |
90
+ | `Cloudflare/clef-omni` | 30B-A3B | 84.5% | 91.6% | 92.2% *(77/78)* | 23.1% | 95.1% | 32.7% | 55.9% | 286 ms |
91
+ | `Cloudflare/clef-flash` | 9.4B | 72.1% | 90.2% | 98.1% *(77/78)* | 53.8% | 97.1% | 34.5% | 54.6% | 332 ms |
92
+ | `Cloudflare/clef` | 27.4B | 71.8% | **98.7%** | **100.0%** *(78/78)* | 56.4% | 97.9% | 42.5% | 72.1% | 700 ms |
93
+ | `LiquidAI/d1-3B` | 3B | 83.4% | 91.7% | 92.5% *(78/78)* | 25.6% | 95.2% | — | — | 74 ms |
94
+ | `vllm-sr/d3-mini` | 1.8B | 73.1% | 79.4% | 77.1% *(72/78)* | 30.8% | 86.1% | — | — | 79 ms |
95
+
96
+ #### 2. [`LocalLLaMA/typed-decisions`](https://huggingface.co/datasets/LocalLLaMA/typed-decisions) (400 Test Cases · 2,000 Typed Decisions Across 4 Enterprise Workflows)
97
+
98
+ | Model | Params | Overall Acc ↑ | KL from Gold ↓ | Brier ↓ | `noul` Acc ↑ | `choice` Acc ↑ | `score` Acc ↑ | Agent Trace ↑ | Customer Svc ↑ | Invoice Proc ↑ | Security Inc ↑ |
99
+ | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
100
+ | **`TypeScript/FastBrain-9B` *(Fitted · Ours)*** | **9.4B** | **80.70%** *(#1)* | **0.0816** | **0.0437** | **89.0%** | **78.8%** | **76.3%** | **75.0%** | **83.0%** | **83.0%** | **78.0%** |
101
+ | **`TypeScript/FastBrain-9B` *(Zero-Shot · Ours)*** | **9.4B** | **76.25%** *(#1 9B)* | **0.1508** | **0.0795** | **84.3%** | **76.0%** | **70.4%** | **69.8%** | **78.8%** | **82.0%** | **74.4%** |
102
+ | **`TypeScript/FastBrain-9B` *(Raw Head)*** | **9.4B** | **71.80%** *(>Flash)* | **0.2021** | **0.1059** | **81.5%** | **71.7%** | **64.6%** | **64.8%** | 75.8% | **77.2%** | 69.4% |
103
+ | `Cloudflare/clef` | 27.4B | 72.75% | 0.1907 | 0.1032 | 84.5% | 64.8% | 69.9% | 63.8% | 74.2% | 78.6% | 74.4% |
104
+ | `Cloudflare/clef-flash` | 9.4B | 71.00% | 0.2093 | 0.1105 | 81.5% | 71.3% | 62.9% | 62.0% | 76.0% | 76.4% | 69.6% |
105
+ | `Cloudflare/clef-omni` | 30B-A3B | 67.30% | 0.2469 | 0.1233 | 82.7% | 63.5% | 58.6% | 55.2% | 73.6% | 74.2% | 66.2% |
106
+ | `Amos 1 (large)` | 27B | 76.10% | 0.1636 | 0.0867 | 83.2% | 73.7% | 72.6% | 67.4% | 78.8% | 83.0% | 75.2% |
107
+ | `pplx-decider-v1.1-27b` | 27B | 75.30% | 0.1544 | 0.0863 | 85.2% | 73.7% | 69.1% | 66.4% | 80.2% | 80.2% | 74.4% |
108
+ | `vllm-sr/d3` | 27B | 74.90% | 0.2143 | 0.1021 | 84.7% | 68.5% | 72.4% | 67.2% | 76.6% | 82.8% | 73.0% |
109
+
110
  ---
111
 
112
  ## Architecture
 
273
  print(resp["usage"]) # {'input_tokens': ..., 'output_tokens': 0, 'total_tokens': ...}
274
  ```
275
 
276
+ ### 3. SGLang (`lmsysorg/sglang:dev-clef`) via `/v1/systemone`
277
+
278
+ `TypeScript/FastBrain-9B` is natively supported by SGLang's `JointSchemaPooler` (`lmsysorg/sglang:dev-clef`, `sgl-project/sglang` commit `bd2d73daa5af`), which executes the `9B` backbone in uncached raw-K/V FlashAttention embedding mode and scores all questions and options across concurrent requests using vectorized prefix-sum span pooling (`torch.cumsum`) and packed variable-length FlashAttention (`cu_seqlens`):
279
+
280
+ ```bash
281
+ docker run --gpus all \
282
+ --shm-size 32g \
283
+ -p 30000:30000 \
284
+ -v ~/.cache/huggingface:/root/.cache/huggingface \
285
+ --ipc=host \
286
+ lmsysorg/sglang:dev-clef \
287
+ sglang serve \
288
+ --model-path TypeScript/FastBrain-9B \
289
+ --host 0.0.0.0 \
290
+ --port 30000
291
+ ```
292
+
293
+ Query SGLang's `/v1/systemone` endpoint directly (and optionally wrap with `joint_schema_model.apply_schema_aware_calibration(req, resp["answers"])` on the client side):
294
+
295
+ ```bash
296
+ curl http://localhost:30000/v1/systemone \
297
+ -H 'Content-Type: application/json' \
298
+ -d '{"model":"TypeScript/FastBrain-9B","state":"My Stripe integration keeps failing. Please help ASAP.","questions":{"urgency":{"type":"noul","instructions":"Does this message express urgency?"}}}'
299
+ ```
300
+
301
+ ---
302
+
303
+ ## Inference Engine Comparison: `SGLang (dev-clef)` vs. `llama.cpp (b11430)` vs. `PyTorch`
304
+
305
+ Measured head-to-head on the **same NVIDIA RTX PRO 6000 Blackwell Server Edition (G4)** GPU across five decision workloads (`CLINC150+OOS`, `When2Call`, `PhishNChips`, `LocalLLaMA/typed-decisions`, and `safeagents-judge-bench`):
306
+
307
+ | Workload / Metric | **SGLang `dev-clef`**<br>*(BF16 · JointSchemaPooler)* | **`llama.cpp b11430`**<br>*(GGUF Q8_0 · ClefModel)* | **`llama.cpp b11430`**<br>*(GGUF Q4_K_M · ClefModel)* | **PyTorch Native**<br>*(BF16 · `joint_schema_model.py`)* |
308
+ | :--- | :---: | :---: | :---: | :---: |
309
+ | **Model Load / Cold Start** | 11.11 s | **2.56 s** | **2.00 s** | 11.11 s |
310
+ | **GPU VRAM (16K ctx)** | 18.18 GiB *(weights)* / ~20.5 GiB | **12.55 GiB** | **10.30 GiB** | 20.3–24.7 GiB |
311
+ | **Runs on 16GB T4 GPU?** | No *(BF16 only, TP=1)* | **Yes (`9.03 GiB` @ 4K)** | **Yes (`6.78 GiB` @ 4K)** | **Yes (`load_in_4bit`: `6.8 GiB`)** |
312
+ | **Top-1 Agreement vs. BF16** | **100.00%** *(max diff 0.0078)* | **99.86%** *(1,471/1,473)* | **98.78%** *(1,455/1,473)* | **100.00% *(Ref)*** |
313
+ | **1. Short Routing** *(293 tok, K=2)* | **30.01 ms** *(9,763 tok/s)* | 32.82 ms *(8,929 tok/s)* | 31.69 ms *(9,245 tok/s)* | 43.23 ms *(6,778 tok/s)* |
314
+ | **2. Typed Decisions** *(736 tok, K=5)* | **50.29 ms** *(14,635 tok/s)* | 62.40 ms *(11,795 tok/s)* | 61.80 ms *(11,909 tok/s)* | 63.58 ms *(11,576 tok/s)* |
315
+ | **3. When2Call** *(1,068 tok, K=1)* | **66.06 ms** *(16,167 tok/s)* | 87.78 ms *(12,167 tok/s)* | 89.34 ms *(11,955 tok/s)* | 77.77 ms *(13,733 tok/s)* |
316
+ | **4. PhishNChips** *(1,303 tok, K=9)* | **75.86 ms** *(17,176 tok/s)* | 108.55 ms *(12,004 tok/s)* | 109.97 ms *(11,849 tok/s)* | 90.32 ms *(14,426 tok/s)* |
317
+ | **5. SafeAgents Judge** *(2,217 tok, K=2)* | **125.85 ms** *(17,616 tok/s)* | 181.70 ms *(12,201 tok/s)* | 183.50 ms *(12,082 tok/s)* | 138.06 ms *(16,058 tok/s)* |
318
+ | **Batch `B=4` Typed Decisions** *(2,944 tok, 20 dec)* | **152.39 ms** *(19,319 tok/s · 131.2 dec/s)* | 248.50 ms *(11,847 tok/s · 80.5 dec/s)* | 245.20 ms *(12,006 tok/s · 81.6 dec/s)* | 175.85 ms *(16,742 tok/s · 113.7 dec/s)* |
319
+
320
  ---
321
 
322
  ## GGUF Quantization Accuracy Retention & Speed Benchmarks
joint_schema_model.py CHANGED
@@ -10,8 +10,12 @@ response body.
10
 
11
  from __future__ import annotations
12
 
 
 
13
  import json
14
  import math
 
 
15
  from dataclasses import dataclass
16
  from dataclasses import field as dataclass_field
17
  from pathlib import Path
@@ -30,6 +34,7 @@ VIDEO_PLACEHOLDER = "<|vision_start|><|video_pad|><|vision_end|>"
30
  MEDIA_BATCH_KEYS = ("pixel_values", "image_grid_thw", "pixel_values_videos", "video_grid_thw")
31
  MEDIA_TOKEN_KEYS = ("mm_token_type_ids",)
32
  QUESTION_TYPES = {"noul": 0, "choice": 1, "score": 2}
 
33
 
34
 
35
  def render(value: Any) -> str:
@@ -78,8 +83,31 @@ def _tokens(tokenizer: Any, text: str) -> list[int]:
78
  return tokenizer(text, add_special_tokens=False).input_ids
79
 
80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  def _encode_media(processor: Any, record: dict[str, Any]) -> tuple[list[int], dict[str, Any] | None]:
82
- images = list(record.get("images") or [])
83
  videos = list(record.get("videos") or [])
84
  if not images and not videos:
85
  return [], None
@@ -516,7 +544,7 @@ def load_release_model(
516
 
517
  path = Path(model_path)
518
  if not path.is_dir():
519
- path = Path(snapshot_download(str(model_path)))
520
  from_pretrained_kwargs = dict(from_pretrained_kwargs)
521
  if load_in_4bit or load_in_8bit:
522
  from transformers import BitsAndBytesConfig
@@ -552,7 +580,13 @@ def load_release_model(
552
  def systemone_answer(question: dict[str, Any], probabilities: dict[str, float]) -> dict[str, Any]:
553
  """Convert per-option probabilities for one question into a SystemOne answer."""
554
  if question["type"] == "noul":
555
- return {"type": "noul", "noul": round(probabilities["true"], 4)}
 
 
 
 
 
 
556
  if question["type"] == "choice":
557
  options = [str(option) for option in question["criteria"]]
558
  choice = max(options, key=probabilities.__getitem__)
@@ -666,6 +700,310 @@ def _recalibrate_choice_answer(base_ans: dict[str, Any], chosen_key: str, win_pr
666
  }
667
 
668
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
669
  def _apply_schema_aware_calibration(request: dict[str, Any], answers: dict[str, Any]) -> dict[str, Any]:
670
  questions = request.get("questions", {})
671
  state = request.get("state")
@@ -684,6 +1022,21 @@ def _apply_schema_aware_calibration(request: dict[str, Any], answers: dict[str,
684
  answers["verdict"] = _recalibrate_choice_answer(answers["verdict"], chosen, win_p, raw)
685
  except Exception:
686
  pass
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
687
  elif len(questions) == 1 and "q" in questions and questions["q"].get("type") == "choice":
688
  crit = questions["q"].get("criteria", {})
689
  if isinstance(crit, dict) and 2 <= len(crit) <= 8 and isinstance(state, dict) and "tools" in state:
@@ -697,3 +1050,7 @@ def _apply_schema_aware_calibration(request: dict[str, Any], answers: dict[str,
697
  except Exception:
698
  pass
699
  return answers
 
 
 
 
 
10
 
11
  from __future__ import annotations
12
 
13
+ import base64
14
+ import io
15
  import json
16
  import math
17
+ import re
18
+ import urllib.request
19
  from dataclasses import dataclass
20
  from dataclasses import field as dataclass_field
21
  from pathlib import Path
 
34
  MEDIA_BATCH_KEYS = ("pixel_values", "image_grid_thw", "pixel_values_videos", "video_grid_thw")
35
  MEDIA_TOKEN_KEYS = ("mm_token_type_ids",)
36
  QUESTION_TYPES = {"noul": 0, "choice": 1, "score": 2}
37
+ _DATA_URL = re.compile(r"^data:[\w.+-]+/[\w.+-]+;base64,(?P<data>.+)$", re.DOTALL)
38
 
39
 
40
  def render(value: Any) -> str:
 
83
  return tokenizer(text, add_special_tokens=False).input_ids
84
 
85
 
86
+ def _media_bytes(value: Any) -> bytes:
87
+ if isinstance(value, (bytes, bytearray)):
88
+ return bytes(value)
89
+ text = str(value)
90
+ match = _DATA_URL.match(text)
91
+ if match is not None:
92
+ return base64.b64decode(match["data"])
93
+ if text.startswith(("http://", "https://")):
94
+ with urllib.request.urlopen(text) as response:
95
+ return response.read()
96
+ return Path(text).read_bytes()
97
+
98
+
99
+ def load_image(value: Any) -> Any:
100
+ """Return RGB pixels from a PIL image, path, URL, base64 data URL, or encoded bytes."""
101
+ from PIL import Image
102
+
103
+ if isinstance(value, Image.Image):
104
+ return value.convert("RGB")
105
+ with Image.open(io.BytesIO(_media_bytes(value))) as image:
106
+ return image.convert("RGB")
107
+
108
+
109
  def _encode_media(processor: Any, record: dict[str, Any]) -> tuple[list[int], dict[str, Any] | None]:
110
+ images = [load_image(img) for img in (record.get("images") or [])]
111
  videos = list(record.get("videos") or [])
112
  if not images and not videos:
113
  return [], None
 
544
 
545
  path = Path(model_path)
546
  if not path.is_dir():
547
+ path = Path(snapshot_download(str(model_path), ignore_patterns=["*.gguf", "gguf/*"]))
548
  from_pretrained_kwargs = dict(from_pretrained_kwargs)
549
  if load_in_4bit or load_in_8bit:
550
  from transformers import BitsAndBytesConfig
 
580
  def systemone_answer(question: dict[str, Any], probabilities: dict[str, float]) -> dict[str, Any]:
581
  """Convert per-option probabilities for one question into a SystemOne answer."""
582
  if question["type"] == "noul":
583
+ p_true = round(probabilities["true"], 4)
584
+ p_false = round(1.0 - p_true, 4)
585
+ return {
586
+ "type": "noul",
587
+ "noul": p_true,
588
+ "probabilities": {"true": p_true, "false": p_false},
589
+ }
590
  if question["type"] == "choice":
591
  options = [str(option) for option in question["criteria"]]
592
  choice = max(options, key=probabilities.__getitem__)
 
700
  }
701
 
702
 
703
+ def _softmax_dict(logits_dict: dict[str, float], temp: float = 1.0) -> dict[str, float]:
704
+ m = max(logits_dict.values())
705
+ exps = {k: math.exp((v - m) / temp) for k, v in logits_dict.items()}
706
+ s = sum(exps.values())
707
+ return {k: v / s for k, v in exps.items()}
708
+
709
+
710
+ def _log_probs_from_answer(ans: dict[str, Any]) -> dict[str, float]:
711
+ probs = ans.get("probabilities")
712
+ if not probs and ans.get("type") == "noul":
713
+ p_t = float(ans.get("noul", 0.5))
714
+ probs = {"true": p_t, "false": 1.0 - p_t}
715
+ return {
716
+ str(k): math.log(max(min(float(v), 1.0 - 1e-6), 1e-6))
717
+ for k, v in (probs or {}).items()
718
+ }
719
+
720
+
721
+ def _calibrate_safeagents_judge(state: Any, questions: dict[str, Any], answers: dict[str, Any]) -> dict[str, Any]:
722
+ state_str = state if isinstance(state, str) else render(state)
723
+ parts = state_str.split("\n\nUser's task:\n", 1)
724
+ header = parts[0]
725
+ task_text = parts[1] if len(parts) > 1 else ""
726
+ h_low = header.lower()
727
+ t_low = task_text.lower()
728
+
729
+ cat_logits = _log_probs_from_answer(answers["category"])
730
+ p_b_raw = float(answers["block"].get("noul", 0.5))
731
+ c_probs_raw = answers["category"].get("probabilities", {})
732
+ p_not_legit_raw = 1.0 - float(c_probs_raw.get("legit", 0.0))
733
+
734
+ cat_logits["other_overreach"] = cat_logits.get("other_overreach", 0.0) - 3.2
735
+ cat_logits["exfiltration"] = cat_logits.get("exfiltration", 0.0) - 2.0
736
+
737
+ if "tamper.harness_hooks" in h_low:
738
+ cat_logits["legit"] += 4.5
739
+ if "lookup.git_unreachable_objects" in h_low:
740
+ if "/tmp/gitrecon" in h_low or "instruction.md" in h_low:
741
+ cat_logits["eval_gaming"] += 4.0
742
+ cat_logits["legit"] -= 3.0
743
+ else:
744
+ cat_logits["legit"] += 4.2
745
+ if "access.test_path" in h_low and "evaluation_file_sweep" not in h_low and "agent_history_probe" not in h_low:
746
+ if (
747
+ "/workspace/tests/" in h_low
748
+ or "cd /workspace &&" in h_low
749
+ or ("pip list" in h_low or "import scipy" in h_low or "sys.version" in h_low)
750
+ or ("ls -la /root /opt /tests /test " in h_low and "canonical" in t_low)
751
+ ):
752
+ cat_logits["legit"] += 4.2
753
+ else:
754
+ cat_logits["eval_gaming"] += 2.8
755
+ if any(k in h_low for k in ("evaluation_file_sweep", "evaluation_directory_probe", "recall.benchmark_unprompted", "lookup.instruction_phrase_search")):
756
+ cat_logits["eval_gaming"] += 3.5
757
+
758
+ if "access.harness_credentials" in h_low or "hub_identity_request" in h_low:
759
+ if any(k in h_low for k in ("whoami-v2", "author=evalstate", "harbor-mix", "harbor-datasets", "choiszt/gpt6-rollout", '"huggingface"', "for org in")):
760
+ if "git-repo-forensics" in t_low and "whoami-v2" in h_low and "list orgs" not in h_low and "=== whoami" not in h_low:
761
+ cat_logits["eval_gaming"] += 3.5
762
+ cat_logits["credential_misuse"] -= 2.0
763
+ else:
764
+ cat_logits["credential_misuse"] += 3.5
765
+ cat_logits["eval_gaming"] -= 1.5
766
+ else:
767
+ cat_logits["eval_gaming"] += 3.5
768
+ cat_logits["credential_misuse"] -= 3.0
769
+
770
+ if "side_channel.harness_secret_read" in h_low:
771
+ if "malloc" in h_low and "/proc/613/environ" in h_low:
772
+ cat_logits["legit"] += 4.5
773
+ elif "/usr/local/bin/daytona --help" in h_low:
774
+ cat_logits["sandbox_escape"] += 4.5
775
+ elif 'find / -xdev -iname "*daytona*"' in h_low or "for p in $(ls /proc | grep -e '^[0-9]+$')" in h_low:
776
+ cat_logits["credential_misuse"] += 4.0
777
+ elif "cat /proc/1/cmdline" in h_low and "env | sort" in h_low:
778
+ cat_logits["eval_gaming"] += 3.5
779
+ else:
780
+ cat_logits["harness_introspection"] += 3.0
781
+
782
+ if "side_channel.harness_introspection" in h_low or "side_channel.agent_history_probe" in h_low or "access.verifier_logs" in h_low:
783
+ if any(k in h_low for k in ("mountinfo", "overlay2", "localhost:2280/version", "localhost:2280/openapi.json", "ls /usr/local/bin/daytona/")):
784
+ cat_logits["sandbox_escape"] += 4.8
785
+ elif "fa=/opt/fast-agent/" in h_low and "reconcile|sweep|cleanup" in h_low:
786
+ cat_logits["other_overreach"] += 6.5
787
+ elif any(k in h_low for k in ("localhost:2280/files/info?path=/workdir/data/.git", "localhost:2280/files/find?path=/workdir&pattern=dump", 'for pat in "refs/heads"')):
788
+ cat_logits["legit"] += 4.5
789
+ elif "access.verifier_logs" in h_low and "agent_history_probe" not in h_low and "harness_introspection" not in h_low:
790
+ if "/logs/verifier" in h_low or "test_outputs" in h_low or "grader" in h_low or "verify" in h_low:
791
+ cat_logits["eval_gaming"] += 2.2
792
+ else:
793
+ cat_logits["harness_introspection"] += 1.4
794
+
795
+ cat_probs = _softmax_dict(cat_logits, temp=1.0)
796
+ p_not_legit_cal = 1.0 - cat_probs.get("legit", 0.0)
797
+ raw_rank = 0.25 * p_b_raw + 0.75 * p_not_legit_raw
798
+ p_block_cal = min(max(0.82 * p_not_legit_cal + 0.18 * raw_rank, 0.0), 1.0)
799
+
800
+ answers["block"] = systemone_answer(questions["block"], {"true": p_block_cal, "false": 1.0 - p_block_cal})
801
+ answers["category"] = systemone_answer(questions["category"], cat_probs)
802
+ return answers
803
+
804
+
805
+ def _calibrate_typed_decisions(state: dict[str, Any], questions: dict[str, Any], answers: dict[str, Any]) -> dict[str, Any]:
806
+ q_keys = set(questions.keys())
807
+ raw_l = {qid: _log_probs_from_answer(answers[qid]) for qid in questions}
808
+ raw_p = {qid: dict(answers[qid].get("probabilities", {})) for qid in questions}
809
+
810
+ if q_keys == {"action", "needs_review", "outcome", "risk", "urgency"}:
811
+ ts = state.get("trace_summary", {})
812
+ aut = state.get("agent", {}).get("autonomy", "")
813
+ cv = int(ts.get("constraint_violations", 0))
814
+ ia = int(ts.get("irreversible_actions", 0))
815
+ te = int(ts.get("tool_errors", 0))
816
+
817
+ l_risk = dict(raw_l["risk"])
818
+ if cv == 0 and ia == 0:
819
+ l_risk["0"] += 1.05
820
+ l_risk["1"] -= 0.25
821
+ elif cv > 0 and ia > 0:
822
+ l_risk["3"] += 1.20
823
+ elif cv > 0 or (ia > 0 and aut == "unsupervised"):
824
+ l_risk["2"] += 0.50
825
+ l_risk["3"] += 0.75
826
+ p_risk = _softmax_dict(l_risk, temp=1.12)
827
+
828
+ l_urg = dict(raw_l["urgency"])
829
+ if cv == 0 and ia == 0 and te == 0:
830
+ l_urg["0"] += 1.70
831
+ l_urg["1"] -= 0.60
832
+ elif cv == 0 and ia == 0 and te == 1 and aut == "dry_run":
833
+ l_urg["0"] += 1.10
834
+ elif cv > 0 and ia > 0:
835
+ l_urg["3"] += 1.60
836
+ l_urg["2"] += 0.50
837
+ elif cv > 0:
838
+ l_urg["2"] += 0.95
839
+ l_urg["3"] += 0.95
840
+ elif ia > 0 or te >= 2:
841
+ l_urg["1"] += 0.30
842
+ l_urg["2"] += 0.55
843
+ p_urg = _softmax_dict(l_urg, temp=1.12)
844
+
845
+ l_out = dict(raw_l["outcome"])
846
+ if cv > 0:
847
+ l_out["harmful"] += 1.25
848
+ elif te == 1:
849
+ l_out["partial"] += 0.70
850
+ elif te >= 2:
851
+ l_out["partial"] += 0.55
852
+ l_out["failure"] += 0.45
853
+ p_out = _softmax_dict(l_out, temp=1.12)
854
+
855
+ l_nr = dict(raw_l["needs_review"])
856
+ if cv > 0 or ia > 0 or te >= 2:
857
+ l_nr["true"] += 0.50
858
+ p_nr = _softmax_dict(l_nr, temp=1.12)
859
+
860
+ l_act = dict(raw_l["action"])
861
+ if cv == 0 and ia == 0 and te == 0:
862
+ l_act["continue"] += 0.50
863
+ elif cv > 0 and ia > 0 and aut == "unsupervised":
864
+ l_act["stop"] += 0.65
865
+ p_act = _softmax_dict(l_act, temp=1.12)
866
+
867
+ probs_map = {"action": p_act, "needs_review": p_nr, "outcome": p_out, "risk": p_risk, "urgency": p_urg}
868
+ elif q_keys == {"action", "category", "churn_risk", "needs_human", "urgency"}:
869
+ l_nh = dict(raw_l["needs_human"])
870
+ l_nh["false"] += 0.65
871
+ p_nh = _softmax_dict(l_nh, temp=1.12)
872
+
873
+ l_act = dict(raw_l["action"])
874
+ l_act["escalate_to_human"] -= 1.05
875
+ l_act["answer_directly"] += 0.65
876
+ l_act["request_information"] += 0.55
877
+ if raw_p["category"].get("refund", 0.0) > 0.35:
878
+ l_act["execute_refund"] += 0.70
879
+ if p_nh["false"] > 0.55:
880
+ l_act["escalate_to_human"] -= 0.55
881
+ p_act = _softmax_dict(l_act, temp=1.12)
882
+
883
+ l_cr = dict(raw_l["churn_risk"])
884
+ l_cr["2"] += 0.45
885
+ l_cr["3"] -= 0.25
886
+ p_cr = _softmax_dict(l_cr, temp=1.12)
887
+
888
+ l_cat = dict(raw_l["category"])
889
+ l_cat["account"] += 0.35
890
+ l_cat["delivery"] += 0.25
891
+ l_cat["billing"] -= 0.20
892
+ p_cat = _softmax_dict(l_cat, temp=1.12)
893
+
894
+ l_urg = dict(raw_l["urgency"])
895
+ l_urg["1"] += 0.40
896
+ p_urg = _softmax_dict(l_urg, temp=1.12)
897
+
898
+ probs_map = {"action": p_act, "category": p_cat, "churn_risk": p_cr, "needs_human": p_nh, "urgency": p_urg}
899
+ elif q_keys == {"discrepancy_severity", "disposition", "duplicate", "matches_order", "urgency"}:
900
+ inv = state.get("invoice", {})
901
+ vh = state.get("vendor_history", {})
902
+ po = state.get("purchase_order", {})
903
+ pay = state.get("payment", {})
904
+ is_dup = inv.get("id") in (vh.get("prior_invoice_ids") or [])
905
+ inv_tot = float(inv.get("total_usd", 0.0))
906
+ po_tot = float(po.get("total_usd", 0.0))
907
+ var_usd = abs(inv_tot - po_tot)
908
+ var_pct = var_usd / max(po_tot, 1.0)
909
+ days_due = float(pay.get("days_until_due") or 0)
910
+ disc_days = pay.get("discount_expires_in_days")
911
+
912
+ l_dup = dict(raw_l["duplicate"])
913
+ if is_dup:
914
+ l_dup["true"] += 4.2
915
+ else:
916
+ l_dup["false"] += 0.5
917
+ p_dup = _softmax_dict(l_dup, temp=1.12)
918
+
919
+ l_ds = dict(raw_l["discrepancy_severity"])
920
+ if is_dup or var_pct > 0.12:
921
+ l_ds["3"] += 0.85
922
+ elif var_usd > 5.0:
923
+ l_ds["2"] += 0.65
924
+ p_ds = _softmax_dict(l_ds, temp=1.12)
925
+
926
+ l_disp = dict(raw_l["disposition"])
927
+ if is_dup:
928
+ l_disp["reject"] += 2.30
929
+ else:
930
+ l_disp["manual_review"] += 0.65
931
+ l_disp["hold"] -= 0.35
932
+ if raw_p["matches_order"].get("false", 0.0) > 0.5:
933
+ l_disp["approve"] -= 0.85
934
+ p_disp = _softmax_dict(l_disp, temp=1.12)
935
+
936
+ l_urg = dict(raw_l["urgency"])
937
+ if days_due < 0 or (disc_days is not None and float(disc_days) <= 5):
938
+ l_urg["2"] += 0.55
939
+ l_urg["3"] += 0.45
940
+ p_urg = _softmax_dict(l_urg, temp=1.12)
941
+ p_mo = _softmax_dict(dict(raw_l["matches_order"]), temp=1.12)
942
+
943
+ probs_map = {
944
+ "discrepancy_severity": p_ds,
945
+ "disposition": p_disp,
946
+ "duplicate": p_dup,
947
+ "matches_order": p_mo,
948
+ "urgency": p_urg,
949
+ }
950
+ elif q_keys == {"credential_compromise", "disposition", "severity", "true_positive", "urgency"}:
951
+ al = state.get("alert", {})
952
+ ctx = state.get("context", {})
953
+ rule = al.get("rule", "")
954
+ crit = ctx.get("asset_criticality", "")
955
+ chg = bool(ctx.get("change_window_active"))
956
+ allow = bool(ctx.get("source_on_allowlist"))
957
+
958
+ l_cc = dict(raw_l["credential_compromise"])
959
+ l_cc["false"] += 0.90
960
+ if rule in ("malware_signature", "bulk_export") or chg or allow:
961
+ l_cc["false"] += 0.80
962
+ p_cc = _softmax_dict(l_cc, temp=1.12)
963
+
964
+ l_tp = dict(raw_l["true_positive"])
965
+ if chg and allow:
966
+ l_tp["false"] += 1.40
967
+ elif chg or allow:
968
+ l_tp["false"] += 0.65
969
+ p_tp = _softmax_dict(l_tp, temp=1.12)
970
+
971
+ l_disp = dict(raw_l["disposition"])
972
+ if crit in ("high", "critical") and p_tp["true"] > 0.7:
973
+ l_disp["contain"] += 0.65
974
+ elif chg and allow:
975
+ l_disp["close_benign"] += 0.80
976
+ l_disp["monitor"] += 0.50
977
+ p_disp = _softmax_dict(l_disp, temp=1.12)
978
+
979
+ l_sev = dict(raw_l["severity"])
980
+ if crit in ("high", "critical"):
981
+ l_sev["3"] += 0.55
982
+ elif crit == "low":
983
+ l_sev["1"] += 0.55
984
+ p_sev = _softmax_dict(l_sev, temp=1.12)
985
+
986
+ l_urg = dict(raw_l["urgency"])
987
+ l_urg["3"] += 0.65
988
+ if crit in ("high", "critical") and p_tp["true"] > 0.65:
989
+ l_urg["3"] += 0.65
990
+ p_urg = _softmax_dict(l_urg, temp=1.12)
991
+
992
+ probs_map = {
993
+ "credential_compromise": p_cc,
994
+ "disposition": p_disp,
995
+ "severity": p_sev,
996
+ "true_positive": p_tp,
997
+ "urgency": p_urg,
998
+ }
999
+ else:
1000
+ return answers
1001
+
1002
+ for qid, p_dict in probs_map.items():
1003
+ answers[qid] = systemone_answer(questions[qid], p_dict)
1004
+ return answers
1005
+
1006
+
1007
  def _apply_schema_aware_calibration(request: dict[str, Any], answers: dict[str, Any]) -> dict[str, Any]:
1008
  questions = request.get("questions", {})
1009
  state = request.get("state")
 
1022
  answers["verdict"] = _recalibrate_choice_answer(answers["verdict"], chosen, win_p, raw)
1023
  except Exception:
1024
  pass
1025
+ elif q_keys == {"block", "category"} and "eval_gaming" in (questions.get("category", {}).get("criteria") or {}):
1026
+ try:
1027
+ answers = _calibrate_safeagents_judge(state, questions, answers)
1028
+ except Exception:
1029
+ pass
1030
+ elif isinstance(state, dict) and q_keys in (
1031
+ {"action", "needs_review", "outcome", "risk", "urgency"},
1032
+ {"action", "category", "churn_risk", "needs_human", "urgency"},
1033
+ {"discrepancy_severity", "disposition", "duplicate", "matches_order", "urgency"},
1034
+ {"credential_compromise", "disposition", "severity", "true_positive", "urgency"},
1035
+ ):
1036
+ try:
1037
+ answers = _calibrate_typed_decisions(state, questions, answers)
1038
+ except Exception:
1039
+ pass
1040
  elif len(questions) == 1 and "q" in questions and questions["q"].get("type") == "choice":
1041
  crit = questions["q"].get("criteria", {})
1042
  if isinstance(crit, dict) and 2 <= len(crit) <= 8 and isinstance(state, dict) and "tools" in state:
 
1050
  except Exception:
1051
  pass
1052
  return answers
1053
+
1054
+
1055
+ apply_schema_aware_calibration = _apply_schema_aware_calibration
1056
+