When Should Enterprise Policy Decisions Be Learned, and When Should They Be Reasoned?
Organizations: ThakiCloud · Korea University
Abstract
An enterprise agent that answers under a written policy must choose an action before it says anything: answer, ask for a missing fact, ask for confirmation, call one or several tools, escalate, or refuse. Holding one 27B Korean enterprise model fixed, we vary whether the decision is a generated JSON object or a single constrained token, and whether the model may reason first. On 2800 in-distribution items we did not detect an accuracy difference between the two deployed paths (93.46% vs 94.14%), while they differ about tenfold in restart stability (3.00% of actions flip vs 0.29%); they also differ in reasoning, so this is an operational comparison. On a sealed benchmark of 300 items whose labels come from a hidden executable policy, reasoning is worth +17.3 points [+12.3, +23.0] on exact action. With reasoning off, the format difference was 0.0 points [-4.3, +4.0], a failure to detect an advantage for either interface, not equivalence; with reasoning on it is unresolved. Against a token-matched random control, boundary-targeted supervision moves the two covered boundaries by +17.5 and +20.0 points and leaves a held-out boundary unchanged. In a 3-seed training x reasoning factorial, the sealed-rendering interaction is -4.9 [-8.1, -1.7], consistent with partial substitution. All supervision was Korean. On independently rendered English versions, the model is 0.82 points lower [-2.68, +0.93] with reasoning on, the same order as re-rendering in Korean; the reasoning-off gain from targeted supervision is not stable in either language, so we do not claim transfer. The original text stays private as the confirmatory set. An open-model re-rendering made after these results reproduced the reasoning effect and the English verdict; the interaction kept its sign but did not replicate under item-clustered intervals. We release the model and that re-rendering with gold labels.
Figures & tables
| Operational path | Clean | Full | Restarts | Pairs | Flip mean | Flip range |
|---|---|---|---|---|---|---|
| Reasoning JSON action | 96.86% | 93.46% | 5 | 10 | 3.00% | 2.54–3.36% |
| No reasoning, single token | 96.75% | 94.14% | 4 | 6 | 0.29% | 0.18–0.50% |
| Metric | Reasoning | JSON object | Single token |
|---|---|---|---|
| Exact action | off | 70.7% | 70.7% |
| on | 85.3% | 88.0% | |
| Both-correct (CF pairs) | off | 46.7% | 36.7% |
| on | 76.7% | 80.0% |
| Random | Targeted | 95% CI | |||
| Pre-registered primary endpoints | |||||
| Exact action | 300 | 74.4% | 79.2% | lower pp | |
| Both-correct (CF pairs) | 30 | 46.7% | 55.6% | lower pp | |
| Any-tool recall | 118 | 60.2% | 70.1% | lower pp | |
| Per boundary (reporting only) | |||||
| ANSWER / CALL_TOOL | 42 | 64.3% | 81.7% | ||
| Configuration | Exact action |
|---|---|
| No thinking, constrained single token | 70.7% |
| No thinking, LoRA pointer head | 74.6% |
| Trained on random in-domain data | 74.4% |
| Trained on boundary-targeted data | 79.2% |
| Always thinking, constrained single token | 88.0% |
| Added supervision | No reasoning | Reasoning |
|---|---|---|
| Random, budget-matched | 72.1% | 88.7% |
| Boundary-targeted | 75.2% | 86.9% |
| Effect (pp) | All 300 items | Shortcut-clean 240 |
|---|---|---|
| Reasoning effect (single token) | ||
| Format effect, reasoning off | ||
| Format effect, reasoning on | ||
| Targeted random, exact action | ||
| Targeted random, CALL_TOOL-only recall | ||
| Targeted random, any-tool recall |
| Frame | Document | No reasoning | Reasoning |
|---|---|---|---|
| Korean | Korean | 77.51% | 89.16% |
| Korean | English | 76.34% | 88.34% |
| English | Korean | 76.81% | 89.63% |
| English | English | 77.86% | 88.34% |
| Korean | Korean, re-rendered | 76.22% | 88.69% |
| Finding (pp) | Original (sealed) | Open re-rendering | Grade |
|---|---|---|---|
| Reasoning, single-token column | Replicated | ||
| Format, reasoning off | Null replicated | ||
| Format, reasoning off, call_tool -only recall ( ) | Did not replicate | ||
| Format, reasoning on | Null replicated | ||
| Targeted random, exact action | (lo ) | (lo ) | Replicated |
| Targeted random, CF both-correct | (lo ) | (lo ) | Directionally consistent |
| Added supervision | Exact action | Boundary layers ( ) | CALL_TOOL-only |
| Random, budget-matched (C0) | 74.4% | 73.6% | 59.2% |
| Random, label-matched (C1) | 73.4% | 73.1% | 56.2% |
| Boundary-targeted (T) | 79.2% | 79.4% | 74.9% |
| exact action | indeterminate | ||
| boundary layers | indeterminate | ||
| exact action | stable |
| call_tool | |||||
| Arm | P | R | F1 | Pred. rate | Macro-F1 |
| Gold (n=300) | 29.7 | ||||
| Random, budget-matched (C0) | 91.9 | 59.2 | 72.0 | 19.1 | 72.8 |
| Random, label-matched (C1) | 91.2 | 56.2 | 69.2 | 18.3 | 72.9 |
| Boundary-targeted (T) | 89.9 | 74.9 | 81.3 | 24.8 | 76.1 |
| , mean (pp) | |||||
| C0 | C1 | T | |||||
| Gold action | P | R | P | R | P | R | |
| ANSWER | 52 | 91.9 | 94.2 | 93.3 | 84.0 | 91.2 | 98.7 |
| ASK_CLARIFICATION | 16 | 65.3 | 100.0 | 62.4 | 100.0 | 66.5 | 93.8 |
| ASK_CONFIRMATION | 24 | 66.2 | 94.4 | 67.5 | 94.4 | 78.4 | 91.7 |
| CALL_MULTIPLE_TOOLS | 29 | 40.3 | 63.2 | 47.4 | 59.8 | 58.0 | 55.2 |
| CALL_TOOL | 89 | 91.9 | 59.2 | 91.2 | 56.2 | 89.9 | 74.9 |
Appendix figures & tables7 assets
Supplementary material from the paper’s appendix.
Appendix
| Result | Checkpoint / interface | Runs / seeds | Denominator | Uncertainty | Harness | |
|---|---|---|---|---|---|---|
| Tab. 1 Reasoning+JSON vs no-reasoning single token, in-distribution | Qwen3.8-27B-Human-KO-Enterprise-v0.1 (no adapter) JSON action object (deployed path) vs constrained single token (letter code) | clean 2414; full 2800 | json restarts 5; json pairs 10; constrained restarts 4; constrained pairs 6; accuracy reps used 2,3,4,5 no training seeds; restarts of the same serving checkpoint (temperature 0) | accuracy: strict clean split 2414 / full 2800 items; flip: same two splits, items whose action differs between two restarts | none pooled; mean/min/max over restart pairs (pairs share restarts, not independent) | Section 3 harness (pace/r0, vLLM v0.28.0, H200 x1); NOT the Section 6 pointer-head harness |
| Tab. 2 , Fig. 2 , Fig. 3 Reasoning x output format 2x2 on sealed Blind-A | v0.1 base (no adapter) { reasoning on/off } x { JSON object, single token } | items 300; cf pairs 30; invariance pairs 15 | 1 run per cell single run per cell (no seeds); temperature 0 | exact action: all 300 items; both-correct: 30 CF pairs (pair is the unit); call_tool_recall (secondary): 89 CALL_TOOL-only items | paired item bootstrap, n_boot=2000, fixed seed 20261001; pair-level resampling for pair metrics | Section 5 serving harness pace/race/race_2x2.py (vLLM v0.28.0, B200 x1, concurrency 16) |
| Tab. 3 , Fig. 4 Boundary-targeted (T) vs token-budget-matched random (C) supervision | v0.1 + LoRA r=16 + pointer head, 3 seeds per arm trained pointer head (argmax over 7 options), no generation, no reasoning | items 300; cf pairs 30; any tool required 118; boundary pooled 128; invariance pairs 15 | 3 seeds x 2 arms 1,2,3 (T_i vs C_i seed-paired) | Recall endpoint here = ANY-tool-required items n=118 (CALL_TOOL + CALL_MULTIPLE_TOOLS); the 2x2 ledger CALL_TOOL-only n=89 | item-clustered bootstrap (item_clustered_bootstrap_v1): units with replacement; all seeds of a unit stay together; B=10000, seed 12345; stable = unchanged registered definition: per-seed signs agree (len({d¿0})==1) AND CI excludes 0 | Section 6 pointer-head harness (kev eval_kev.py, LocalPredictor + head.pt); trained T-s1/C-s1/T-s3/C-s3 on H200 NVL, T-s2/C-s2 on B200 |
| Tab. 4 , Fig. 5 Configuration ladder (competing options) | mixed: v0.1 base (rows 1,5), R1b pointer head (row 2), R3 C and T adapters (rows 3,4) row1 vLLM constrained token; row2-4 pointer head; row5 vLLM reasoning-on single token | items 300 | row1 1; row2 3; row3-4 3; row5 1 rows 2-4 seed means (3 each); rows 1,5 single run | exact action over 300 | no intervals in the table; bars = seed min/max in figure | MIXED: rows 1,5 = Section 5 vLLM probe (B200); rows 2,3,4 = Section 6 pointer-head harness |
| Tab. 5 , Fig. 6 Training x reasoning, 4 cells, one harness | v0.1 + LoRA r=16 (R3 adapters, pointer head unused), 3 seeds per arm, key-fixed for vLLM vLLM LoRA serving; no-think = enable_thinking=false 1-token; think = on_1tok two-stage | items 300 | 12 cells (6 adapters x 2 reasoning states) [1, 2, 3] | exact action over 300; recalls secondary (CALL_TOOL-only 89 / any-tool 118) | item-clustered bootstrap (item_clustered_bootstrap_v1): units with replacement; all seeds of a unit stay together; B=10000, seed 12345; stable = unchanged registered definition: per-seed signs agree (len({d¿0})==1) AND CI excludes 0 | Section 7 serving harness (one vLLM v0.28.0 server, –enable-lora, H200 x1 per r6en ledger reproduction_check.note; spec pace/r4/job/pace-r4-serve-h200.json) |
| Tab. 6 Denominator and shortcut sensitivity (recompute only) | as in Tables 2,3 as in Tables 2,3 | all 300; shortcut clean 240; call tool only 89; any tool 118 | reuses Table 2/3 predictions as source | CALL_TOOL-only n=89 vs any-tool n=118; clean layers = 5 of 7 (dialect_noisy, missing_information dropped) | point estimates only (P2 ledger has no CI) | mixed: 2x2 effects = Section 5 serving; T-C = Section 6 pointer head |
| Action | Code | Token id | Tokens in action name |
|---|---|---|---|
| ANSWER | A | 32 | 2 |
| ASK_CLARIFICATION | B | 33 | 4 |
| ASK_CONFIRMATION | C | 34 | 3 |
| CALL_TOOL | D | 35 | 2 |
| CALL_MULTIPLE_TOOLS | E | 36 | 5 |
| ESCALATE | F | 37 | 3 |
| Item | Value |
|---|---|
| Base checkpoint | Qwen3.8-27B, revision 1d4bf0f2 |
| Adapter | LoRA rank 16, alpha 32, dropout 0.05, bias none |
| LoRA targets | down_proj, gate_proj, in_proj_a, in_proj_b, in_proj_qkv, in_proj_z, k_proj, o_proj, out_proj, q_proj, up_proj, v_proj |
| Pointer head | hidden dim 256, trained from scratch |
| Trainable parameters | 119,349,760 |
| Learning rate | LoRA 5e-5, head 1e-3 |
| Flag | Value |
|---|---|
| Engine image | vllm/vllm-openai:v0.28.0 |
| dtype | bfloat16 |
| max-model-len | 8192 |
| max-num-seqs | 256 |
| gpu-memory-utilization | 0.9 |
| kv-cache-dtype | fp8 |
| Setting | Path | p50 (s) | p95 (s) | Median gen. tokens |
|---|---|---|---|---|
| In-distribution, | Reasoning + JSON (cold prefix) | 8.89 | 27.43 | 538 |
| No reasoning, single token (cold prefix) | 0.085 | 0.168 | 1 | |
| In-distribution, | Reasoning + JSON (cold prefix) | 10.68 | 27.71 | 568 |
| No reasoning, single token (cold prefix) | 0.107 | 0.173 | 1 | |
| Sealed benchmark, | Reasoning on, JSON | 12.55 | 68.27 | 972 |
| Reasoning on, single token (both stages) | 4.19 | 41.25 | 255 |
| Gate | Criterion | Value | Pass |
|---|---|---|---|
| G1 positive control, planted correct | both readouts % follow the planted action | 93.0 / 97.7 | yes |
| G1 positive control, planted wrong | both readouts % follow the planted action | 10.3 / 50.0 | no |
| G2 no collapse (real) | both readouts % | 85.7 / 86.0 | yes |
| G3 trace sensitivity | real shuffled pp in either readout | 67.7 / 66.3 pp | yes |
| G4 determinism | re-scored argmax agreement % | 100.0 | yes |
| G5 truncation | truncated traces % | 3.3 | yes |
LLM Decision-Making
LLM decision-making studies how language models choose, act, seek information, and allocate resources under goals, uncertainty, constraints, and social pressures.
See all 242 papers