@miller-tech/uap 1.136.2 → 1.137.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/benchmarks/paired/report.d.ts +13 -0
  3. package/dist/benchmarks/paired/report.d.ts.map +1 -1
  4. package/dist/benchmarks/paired/report.js +29 -3
  5. package/dist/benchmarks/paired/report.js.map +1 -1
  6. package/dist/benchmarks/paired/types.d.ts +59 -0
  7. package/dist/benchmarks/paired/types.d.ts.map +1 -1
  8. package/dist/benchmarks/paired/types.js +60 -0
  9. package/dist/benchmarks/paired/types.js.map +1 -1
  10. package/dist/bin/cli.js +30 -0
  11. package/dist/bin/cli.js.map +1 -1
  12. package/dist/cli/deliver.d.ts.map +1 -1
  13. package/dist/cli/deliver.js +111 -7
  14. package/dist/cli/deliver.js.map +1 -1
  15. package/dist/cli/react.d.ts.map +1 -1
  16. package/dist/cli/react.js +18 -0
  17. package/dist/cli/react.js.map +1 -1
  18. package/dist/cli/self-tuning.d.ts +33 -0
  19. package/dist/cli/self-tuning.d.ts.map +1 -0
  20. package/dist/cli/self-tuning.js +139 -0
  21. package/dist/cli/self-tuning.js.map +1 -0
  22. package/dist/cli/tune-adapter.d.ts +8 -0
  23. package/dist/cli/tune-adapter.d.ts.map +1 -0
  24. package/dist/cli/tune-adapter.js +26 -0
  25. package/dist/cli/tune-adapter.js.map +1 -0
  26. package/dist/config/settings-registry.d.ts.map +1 -1
  27. package/dist/config/settings-registry.js +10 -0
  28. package/dist/config/settings-registry.js.map +1 -1
  29. package/dist/coordination/adaptation-signal.d.ts +19 -0
  30. package/dist/coordination/adaptation-signal.d.ts.map +1 -0
  31. package/dist/coordination/adaptation-signal.js +36 -0
  32. package/dist/coordination/adaptation-signal.js.map +1 -0
  33. package/dist/delivery/agentic-executor.d.ts +16 -1
  34. package/dist/delivery/agentic-executor.d.ts.map +1 -1
  35. package/dist/delivery/agentic-executor.js +45 -4
  36. package/dist/delivery/agentic-executor.js.map +1 -1
  37. package/dist/delivery/decompose.d.ts +27 -0
  38. package/dist/delivery/decompose.d.ts.map +1 -1
  39. package/dist/delivery/decompose.js +31 -1
  40. package/dist/delivery/decompose.js.map +1 -1
  41. package/dist/delivery/repair-escalation.d.ts +49 -0
  42. package/dist/delivery/repair-escalation.d.ts.map +1 -0
  43. package/dist/delivery/repair-escalation.js +83 -0
  44. package/dist/delivery/repair-escalation.js.map +1 -0
  45. package/dist/delivery/verifier-ladder.d.ts +47 -0
  46. package/dist/delivery/verifier-ladder.d.ts.map +1 -1
  47. package/dist/delivery/verifier-ladder.js +87 -1
  48. package/dist/delivery/verifier-ladder.js.map +1 -1
  49. package/dist/self-harness/mods.d.ts +20 -1
  50. package/dist/self-harness/mods.d.ts.map +1 -1
  51. package/dist/self-harness/mods.js +41 -0
  52. package/dist/self-harness/mods.js.map +1 -1
  53. package/dist/self-harness/orchestrator.js +4 -0
  54. package/dist/self-harness/orchestrator.js.map +1 -1
  55. package/dist/self-harness/transfer.d.ts.map +1 -1
  56. package/dist/self-harness/transfer.js +2 -0
  57. package/dist/self-harness/transfer.js.map +1 -1
  58. package/dist/self-tuning/flag-writer.d.ts +48 -0
  59. package/dist/self-tuning/flag-writer.d.ts.map +1 -0
  60. package/dist/self-tuning/flag-writer.js +102 -0
  61. package/dist/self-tuning/flag-writer.js.map +1 -0
  62. package/dist/self-tuning/flags.d.ts +88 -0
  63. package/dist/self-tuning/flags.d.ts.map +1 -0
  64. package/dist/self-tuning/flags.js +189 -0
  65. package/dist/self-tuning/flags.js.map +1 -0
  66. package/dist/self-tuning/index.d.ts +25 -0
  67. package/dist/self-tuning/index.d.ts.map +1 -0
  68. package/dist/self-tuning/index.js +25 -0
  69. package/dist/self-tuning/index.js.map +1 -0
  70. package/dist/self-tuning/judge.d.ts +66 -0
  71. package/dist/self-tuning/judge.d.ts.map +1 -0
  72. package/dist/self-tuning/judge.js +145 -0
  73. package/dist/self-tuning/judge.js.map +1 -0
  74. package/dist/self-tuning/llm-tuner.d.ts +83 -0
  75. package/dist/self-tuning/llm-tuner.d.ts.map +1 -0
  76. package/dist/self-tuning/llm-tuner.js +191 -0
  77. package/dist/self-tuning/llm-tuner.js.map +1 -0
  78. package/dist/self-tuning/orchestrator.d.ts +90 -0
  79. package/dist/self-tuning/orchestrator.d.ts.map +1 -0
  80. package/dist/self-tuning/orchestrator.js +126 -0
  81. package/dist/self-tuning/orchestrator.js.map +1 -0
  82. package/dist/self-tuning/paired-validator.d.ts +50 -0
  83. package/dist/self-tuning/paired-validator.d.ts.map +1 -0
  84. package/dist/self-tuning/paired-validator.js +78 -0
  85. package/dist/self-tuning/paired-validator.js.map +1 -0
  86. package/dist/self-tuning/profiles/index.d.ts +11 -0
  87. package/dist/self-tuning/profiles/index.d.ts.map +1 -0
  88. package/dist/self-tuning/profiles/index.js +15 -0
  89. package/dist/self-tuning/profiles/index.js.map +1 -0
  90. package/dist/self-tuning/profiles/opus48.d.ts +11 -0
  91. package/dist/self-tuning/profiles/opus48.d.ts.map +1 -0
  92. package/dist/self-tuning/profiles/opus48.js +27 -0
  93. package/dist/self-tuning/profiles/opus48.js.map +1 -0
  94. package/dist/self-tuning/profiles/qwen36.d.ts +11 -0
  95. package/dist/self-tuning/profiles/qwen36.d.ts.map +1 -0
  96. package/dist/self-tuning/profiles/qwen36.js +33 -0
  97. package/dist/self-tuning/profiles/qwen36.js.map +1 -0
  98. package/dist/self-tuning/quality-scorer.d.ts +90 -0
  99. package/dist/self-tuning/quality-scorer.d.ts.map +1 -0
  100. package/dist/self-tuning/quality-scorer.js +180 -0
  101. package/dist/self-tuning/quality-scorer.js.map +1 -0
  102. package/dist/self-tuning/realtime-adaptor.d.ts +78 -0
  103. package/dist/self-tuning/realtime-adaptor.d.ts.map +1 -0
  104. package/dist/self-tuning/realtime-adaptor.js +127 -0
  105. package/dist/self-tuning/realtime-adaptor.js.map +1 -0
  106. package/dist/self-tuning/run.d.ts +61 -0
  107. package/dist/self-tuning/run.d.ts.map +1 -0
  108. package/dist/self-tuning/run.js +122 -0
  109. package/dist/self-tuning/run.js.map +1 -0
  110. package/dist/self-tuning/search-reducer.d.ts +76 -0
  111. package/dist/self-tuning/search-reducer.d.ts.map +1 -0
  112. package/dist/self-tuning/search-reducer.js +349 -0
  113. package/dist/self-tuning/search-reducer.js.map +1 -0
  114. package/dist/self-tuning/tuning-profile.d.ts +72 -0
  115. package/dist/self-tuning/tuning-profile.d.ts.map +1 -0
  116. package/dist/self-tuning/tuning-profile.js +134 -0
  117. package/dist/self-tuning/tuning-profile.js.map +1 -0
  118. package/dist/telemetry/session-telemetry.d.ts +25 -0
  119. package/dist/telemetry/session-telemetry.d.ts.map +1 -1
  120. package/dist/telemetry/session-telemetry.js +32 -0
  121. package/dist/telemetry/session-telemetry.js.map +1 -1
  122. package/dist/types/config.d.ts +13 -0
  123. package/dist/types/config.d.ts.map +1 -1
  124. package/dist/types/config.js +3 -0
  125. package/dist/types/config.js.map +1 -1
  126. package/docs/design/LLM_SELF_TUNING_ANALYSIS.md +617 -0
  127. package/docs/guides/SELF_TUNING.md +137 -0
  128. package/package.json +1 -1
  129. package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
  130. package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
  131. package/tools/agents/scripts/anthropic_proxy.py +355 -29
  132. package/tools/agents/scripts/confidence_escalation.py +60 -4
  133. package/tools/agents/tests/test_confidence_escalation.py +77 -0
@@ -0,0 +1,76 @@
1
+ /**
2
+ * LLM Self-Tuning — the Search-Space Reducer (P1): a real Gaussian-process
3
+ * Bayesian optimizer over the tunable-flag space.
4
+ *
5
+ * With 16 flags of mixed type the naive grid is intractable (design §3.3.3), so
6
+ * this module implements the three reduction techniques the design calls for as
7
+ * an actual GP-BO loop:
8
+ * 1. DEPENDENCY AWARENESS — inactive flags (whose parent gates them off) do
9
+ * not contribute to the kernel distance and are never perturbed, so the
10
+ * optimizer never wastes samples on a knob that has no effect.
11
+ * 2. BAYESIAN OPTIMIZATION — a Gaussian process with an ARD kernel over mixed
12
+ * numeric (squared-exponential) + categorical (Hamming) dimensions models
13
+ * the quality surface; the next point maximizes Expected Improvement.
14
+ * 3. TRANSFER LEARNING — prior good configs (from other models) are injected
15
+ * into the candidate pool as high-value seeds.
16
+ *
17
+ * The GP math is dependency-free: standardized targets, a Cholesky solve of
18
+ * (K+σ²I), a small log-marginal-likelihood grid over the lengthscales, and the
19
+ * closed-form EI acquisition. Everything is seeded for reproducible reports.
20
+ */
21
+ import { FlagConfig } from './flags.js';
22
+ /** One observed (config, quality) datapoint the GP is conditioned on. */
23
+ export interface Observation {
24
+ config: FlagConfig;
25
+ /** Composite quality score (0-100) measured for this config. */
26
+ quality: number;
27
+ }
28
+ /** The four search phases (design §3.3.2). Bias which flags get perturbed. */
29
+ export type SearchPhase = 'coarse' | 'medium' | 'fine' | 'combinatorial';
30
+ export interface SearchOptions {
31
+ /** RNG seed for reproducibility. Default 1. */
32
+ seed?: number;
33
+ /** Candidate pool size to score with the acquisition. Default 256. */
34
+ poolSize?: number;
35
+ /** EI exploration margin (ξ). Higher = more exploratory. Default 1.0 (std units). */
36
+ xi?: number;
37
+ /** Observation noise variance on the standardized scale. Default 0.05. */
38
+ noise?: number;
39
+ /** Prior good configs (e.g. cross-model transfer) seeded into the pool. */
40
+ priors?: FlagConfig[];
41
+ /** Search phase controlling candidate generation. Default 'combinatorial'. */
42
+ phase?: SearchPhase;
43
+ /**
44
+ * Cold-start anchor: the config to explore around when there are NO
45
+ * observations yet (nothing to fit a GP on). Lets the loop bootstrap its first
46
+ * proposal from the current config instead of stalling.
47
+ */
48
+ seedConfig?: FlagConfig;
49
+ }
50
+ export interface Suggestion {
51
+ config: FlagConfig;
52
+ /** Expected Improvement (standardized units) of this config. */
53
+ ei: number;
54
+ /** GP predictive mean quality (0-100). */
55
+ mean: number;
56
+ /** GP predictive std (0-100 scale). */
57
+ std: number;
58
+ }
59
+ /**
60
+ * Generate a de-duplicated candidate pool around `best`: single- and
61
+ * double-flag perturbations (phase-scoped) + priors + a few random configs.
62
+ */
63
+ export declare function generateCandidates(best: FlagConfig, opts?: SearchOptions): FlagConfig[];
64
+ /**
65
+ * The core BO step: fit a GP on `observations` and return the candidate config
66
+ * that maximizes Expected Improvement over the current best observed quality.
67
+ * With <2 observations there is nothing to model, so it returns the best
68
+ * single-flag neighbor deterministically (pure exploration).
69
+ */
70
+ export declare function proposeNext(observations: Observation[], opts?: SearchOptions): Suggestion | null;
71
+ /** Expose the fitted-GP prediction for callers that want the surface directly. */
72
+ export declare function fitAndPredict(observations: Observation[], at: FlagConfig, noise?: number): {
73
+ mean: number;
74
+ std: number;
75
+ } | null;
76
+ //# sourceMappingURL=search-reducer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-reducer.d.ts","sourceRoot":"","sources":["../../src/self-tuning/search-reducer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAGL,UAAU,EAKX,MAAM,YAAY,CAAC;AAEpB,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,8EAA8E;AAC9E,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,eAAe,CAAC;AAEzE,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;CACb;AA+OD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE,aAAkB,GACvB,UAAU,EAAE,CAsDd;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,UAAU,GAAG,IAAI,CAsCpG;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAC3B,YAAY,EAAE,WAAW,EAAE,EAC3B,EAAE,EAAE,UAAU,EACd,KAAK,SAAO,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAItC"}
@@ -0,0 +1,349 @@
1
+ /**
2
+ * LLM Self-Tuning — the Search-Space Reducer (P1): a real Gaussian-process
3
+ * Bayesian optimizer over the tunable-flag space.
4
+ *
5
+ * With 16 flags of mixed type the naive grid is intractable (design §3.3.3), so
6
+ * this module implements the three reduction techniques the design calls for as
7
+ * an actual GP-BO loop:
8
+ * 1. DEPENDENCY AWARENESS — inactive flags (whose parent gates them off) do
9
+ * not contribute to the kernel distance and are never perturbed, so the
10
+ * optimizer never wastes samples on a knob that has no effect.
11
+ * 2. BAYESIAN OPTIMIZATION — a Gaussian process with an ARD kernel over mixed
12
+ * numeric (squared-exponential) + categorical (Hamming) dimensions models
13
+ * the quality surface; the next point maximizes Expected Improvement.
14
+ * 3. TRANSFER LEARNING — prior good configs (from other models) are injected
15
+ * into the candidate pool as high-value seeds.
16
+ *
17
+ * The GP math is dependency-free: standardized targets, a Cholesky solve of
18
+ * (K+σ²I), a small log-marginal-likelihood grid over the lengthscales, and the
19
+ * closed-form EI acquisition. Everything is seeded for reproducible reports.
20
+ */
21
+ import { mulberry32 } from '../benchmarks/paired/stats.js';
22
+ import { TUNABLE_FLAGS, flagValue, isFlagActive, coerceToDomain, } from './flags.js';
23
+ // ---------------------------------------------------------------------------
24
+ // Normal helpers (erf-based CDF) for the EI closed form.
25
+ // ---------------------------------------------------------------------------
26
+ function erf(x) {
27
+ // Abramowitz & Stegun 7.1.26 — max error 1.5e-7.
28
+ const t = 1 / (1 + 0.3275911 * Math.abs(x));
29
+ const y = 1 -
30
+ ((((1.061405429 * t - 1.453152027) * t + 1.421413741) * t - 0.284496736) * t + 0.254829592) *
31
+ t *
32
+ Math.exp(-x * x);
33
+ return x >= 0 ? y : -y;
34
+ }
35
+ function normCdf(z) {
36
+ return 0.5 * (1 + erf(z / Math.SQRT2));
37
+ }
38
+ function normPdf(z) {
39
+ return Math.exp(-0.5 * z * z) / Math.sqrt(2 * Math.PI);
40
+ }
41
+ // ---------------------------------------------------------------------------
42
+ // Mixed numeric/categorical ARD kernel.
43
+ // ---------------------------------------------------------------------------
44
+ /** Normalize a flag's value to a comparable scalar, or a categorical token. */
45
+ function normNumeric(flag, v) {
46
+ const d = flag.domain;
47
+ if (d.kind === 'number') {
48
+ const n = typeof v === 'number' ? v : Number(v);
49
+ if (!Number.isFinite(n))
50
+ return 0;
51
+ return (Math.max(d.min, Math.min(d.max, n)) - d.min) / Math.max(1e-9, d.max - d.min);
52
+ }
53
+ // bool as 0/1
54
+ return v === true || v === 'true' || v === 1 ? 1 : 0;
55
+ }
56
+ /** k(a,b) with signal variance 1. Inactive-in-both dims contribute nothing. */
57
+ function kernel(a, b, p) {
58
+ let exponent = 0;
59
+ for (const flag of TUNABLE_FLAGS) {
60
+ const activeA = isFlagActive(flag, a);
61
+ const activeB = isFlagActive(flag, b);
62
+ if (!activeA && !activeB)
63
+ continue; // both agree the dim is irrelevant
64
+ const va = flagValue(a, flag.key);
65
+ const vb = flagValue(b, flag.key);
66
+ if (flag.domain.kind === 'enum') {
67
+ // Categorical (Hamming): mismatch OR active-in-one-only is a full mismatch.
68
+ const mism = activeA !== activeB || String(va) !== String(vb) ? 1 : 0;
69
+ exponent += mism / (p.lenCat * p.lenCat);
70
+ }
71
+ else {
72
+ const ua = activeA ? normNumeric(flag, va) : normNumeric(flag, undefined);
73
+ const ub = activeB ? normNumeric(flag, vb) : normNumeric(flag, undefined);
74
+ // active-in-one-only adds a structural penalty on top of the value gap.
75
+ const struct = activeA !== activeB ? 0.5 : 0;
76
+ const diff = ua - ub;
77
+ exponent += (diff * diff + struct) / (p.lenNum * p.lenNum);
78
+ }
79
+ }
80
+ return Math.exp(-0.5 * exponent);
81
+ }
82
+ // ---------------------------------------------------------------------------
83
+ // Linear algebra: Cholesky of an SPD matrix + triangular solves.
84
+ // ---------------------------------------------------------------------------
85
+ function cholesky(A) {
86
+ const n = A.length;
87
+ const L = Array.from({ length: n }, () => new Array(n).fill(0));
88
+ for (let i = 0; i < n; i++) {
89
+ for (let j = 0; j <= i; j++) {
90
+ let sum = A[i][j];
91
+ for (let k = 0; k < j; k++)
92
+ sum -= L[i][k] * L[j][k];
93
+ if (i === j) {
94
+ L[i][j] = Math.sqrt(Math.max(sum, 1e-10));
95
+ }
96
+ else {
97
+ L[i][j] = sum / L[j][j];
98
+ }
99
+ }
100
+ }
101
+ return L;
102
+ }
103
+ /** Solve L y = b (forward) then Lᵀ x = y (back) for A x = b given A=LLᵀ. */
104
+ function cholSolve(L, b) {
105
+ const n = L.length;
106
+ const y = new Array(n).fill(0);
107
+ for (let i = 0; i < n; i++) {
108
+ let s = b[i];
109
+ for (let k = 0; k < i; k++)
110
+ s -= L[i][k] * y[k];
111
+ y[i] = s / L[i][i];
112
+ }
113
+ const x = new Array(n).fill(0);
114
+ for (let i = n - 1; i >= 0; i--) {
115
+ let s = y[i];
116
+ for (let k = i + 1; k < n; k++)
117
+ s -= L[k][i] * x[k];
118
+ x[i] = s / L[i][i];
119
+ }
120
+ return x;
121
+ }
122
+ function buildK(configs, p, noise) {
123
+ const n = configs.length;
124
+ const K = Array.from({ length: n }, () => new Array(n).fill(0));
125
+ for (let i = 0; i < n; i++) {
126
+ for (let j = i; j < n; j++) {
127
+ const k = kernel(configs[i], configs[j], p);
128
+ K[i][j] = k;
129
+ K[j][i] = k;
130
+ }
131
+ K[i][i] += noise; // jitter + observation noise on the diagonal
132
+ }
133
+ return K;
134
+ }
135
+ /** Log marginal likelihood (up to constants) for hyperparameter selection. */
136
+ function logMarginalLikelihood(configs, yStd, p, noise) {
137
+ const K = buildK(configs, p, noise);
138
+ const L = cholesky(K);
139
+ const alpha = cholSolve(L, yStd);
140
+ let dataFit = 0;
141
+ for (let i = 0; i < yStd.length; i++)
142
+ dataFit += yStd[i] * alpha[i];
143
+ let logDet = 0;
144
+ for (let i = 0; i < L.length; i++)
145
+ logDet += Math.log(L[i][i]);
146
+ return -0.5 * dataFit - logDet - 0.5 * yStd.length * Math.log(2 * Math.PI);
147
+ }
148
+ function fitGP(obs, noise) {
149
+ const configs = obs.map((o) => o.config);
150
+ const ys = obs.map((o) => o.quality);
151
+ const yMean = ys.reduce((a, b) => a + b, 0) / ys.length;
152
+ const varY = ys.reduce((a, b) => a + (b - yMean) * (b - yMean), 0) / Math.max(1, ys.length - 1);
153
+ const yStd = Math.max(1e-6, Math.sqrt(varY));
154
+ const yz = ys.map((y) => (y - yMean) / yStd);
155
+ // Light hyperparameter search: pick (lenNum, lenCat) maximizing log-ML over a
156
+ // small grid. This is standard GP model selection, kept cheap.
157
+ const numGrid = [0.15, 0.3, 0.5, 0.8];
158
+ const catGrid = [0.5, 1.0, 2.0];
159
+ let best = { lenNum: 0.3, lenCat: 1.0 };
160
+ let bestLml = -Infinity;
161
+ for (const lenNum of numGrid) {
162
+ for (const lenCat of catGrid) {
163
+ const lml = logMarginalLikelihood(configs, yz, { lenNum, lenCat }, noise);
164
+ if (Number.isFinite(lml) && lml > bestLml) {
165
+ bestLml = lml;
166
+ best = { lenNum, lenCat };
167
+ }
168
+ }
169
+ }
170
+ const K = buildK(configs, best, noise);
171
+ const L = cholesky(K);
172
+ const alpha = cholSolve(L, yz);
173
+ return { L, alpha, yMean, yStd, params: best, configs, noise };
174
+ }
175
+ /** Predict (mean, std) in ORIGINAL quality units at a candidate config. */
176
+ function predict(gp, x) {
177
+ const ks = gp.configs.map((c) => kernel(x, c, gp.params));
178
+ let mz = 0;
179
+ for (let i = 0; i < ks.length; i++)
180
+ mz += ks[i] * gp.alpha[i];
181
+ const v = cholSolve(gp.L, ks);
182
+ let kxx = kernel(x, x, gp.params) + gp.noise;
183
+ for (let i = 0; i < ks.length; i++)
184
+ kxx -= ks[i] * v[i];
185
+ const varz = Math.max(0, kxx);
186
+ return { mean: gp.yMean + mz * gp.yStd, std: Math.sqrt(varz) * gp.yStd };
187
+ }
188
+ // ---------------------------------------------------------------------------
189
+ // Candidate generation (phase-aware, dependency-respecting).
190
+ // ---------------------------------------------------------------------------
191
+ function configKey(cfg) {
192
+ // Only active flags define identity — two configs differing solely in an
193
+ // inactive flag are the same point.
194
+ return TUNABLE_FLAGS.filter((f) => isFlagActive(f, cfg))
195
+ .map((f) => `${f.key}=${flagValue(cfg, f.key)}`)
196
+ .sort()
197
+ .join('|');
198
+ }
199
+ /** The set of flag values reachable for a numeric flag (grid over its range). */
200
+ function numericGrid(flag) {
201
+ if (flag.domain.kind !== 'number')
202
+ return [];
203
+ const { min, max, step, int } = flag.domain;
204
+ const out = [];
205
+ for (let v = min; v <= max + 1e-9; v += step)
206
+ out.push(int ? Math.round(v) : Number(v.toFixed(6)));
207
+ return out.length ? out : [int ? Math.round(min) : min];
208
+ }
209
+ /** All alternative values for a flag (excluding its current value). */
210
+ function alternatives(flag, current) {
211
+ if (flag.domain.kind === 'bool')
212
+ return [!(current === true)];
213
+ if (flag.domain.kind === 'enum')
214
+ return flag.domain.values.filter((v) => v !== current);
215
+ return numericGrid(flag).filter((v) => v !== current);
216
+ }
217
+ /** Which flags a phase is allowed to perturb. */
218
+ function phaseFlags(phase, cfg) {
219
+ const active = TUNABLE_FLAGS.filter((f) => isFlagActive(f, cfg) || f.dependsOn.length === 0);
220
+ switch (phase) {
221
+ case 'coarse': // toggle the top-level boolean enablers only
222
+ return active.filter((f) => f.domain.kind === 'bool' && f.dependsOn.length === 0);
223
+ case 'medium': // enum choices (recipe type, intensity)
224
+ return active.filter((f) => f.domain.kind === 'enum');
225
+ case 'fine': // numeric refinement
226
+ return active.filter((f) => f.domain.kind === 'number');
227
+ case 'combinatorial':
228
+ default:
229
+ return active;
230
+ }
231
+ }
232
+ function mutate(cfg, flag, value) {
233
+ const next = { ...cfg };
234
+ const coerced = coerceToDomain(flag.key, value);
235
+ if (coerced !== null)
236
+ next[flag.key] = coerced;
237
+ return next;
238
+ }
239
+ /**
240
+ * Generate a de-duplicated candidate pool around `best`: single- and
241
+ * double-flag perturbations (phase-scoped) + priors + a few random configs.
242
+ */
243
+ export function generateCandidates(best, opts = {}) {
244
+ const rng = mulberry32(opts.seed ?? 1);
245
+ const phase = opts.phase ?? 'combinatorial';
246
+ const poolSize = opts.poolSize ?? 256;
247
+ const seen = new Set([configKey(best)]);
248
+ const pool = [];
249
+ const push = (c) => {
250
+ const k = configKey(c);
251
+ if (!seen.has(k)) {
252
+ seen.add(k);
253
+ pool.push(c);
254
+ }
255
+ };
256
+ const flags = phaseFlags(phase, best);
257
+ // Priors (transfer seeds) first — highest-value candidates.
258
+ for (const prior of opts.priors ?? [])
259
+ push({ ...best, ...prior });
260
+ // Single-flag neighbors.
261
+ for (const flag of flags) {
262
+ for (const v of alternatives(flag, flagValue(best, flag.key))) {
263
+ push(mutate(best, flag, v));
264
+ if (pool.length >= poolSize)
265
+ return pool;
266
+ }
267
+ }
268
+ // Double-flag neighbors (combinatorial phase captures interactions).
269
+ if (phase === 'combinatorial') {
270
+ for (let i = 0; i < flags.length && pool.length < poolSize; i++) {
271
+ for (let j = i + 1; j < flags.length && pool.length < poolSize; j++) {
272
+ const av = alternatives(flags[i], flagValue(best, flags[i].key));
273
+ const bv = alternatives(flags[j], flagValue(best, flags[j].key));
274
+ if (!av.length || !bv.length)
275
+ continue;
276
+ const a = av[(rng() * av.length) | 0];
277
+ const b = bv[(rng() * bv.length) | 0];
278
+ push(mutate(mutate(best, flags[i], a), flags[j], b));
279
+ }
280
+ }
281
+ }
282
+ // A few fully-random configs for exploration.
283
+ const nRandom = Math.min(32, poolSize - pool.length);
284
+ for (let r = 0; r < nRandom; r++) {
285
+ let c = { ...best };
286
+ for (const flag of flags) {
287
+ if (rng() < 0.5)
288
+ continue;
289
+ const alts = alternatives(flag, flagValue(c, flag.key));
290
+ if (alts.length)
291
+ c = mutate(c, flag, alts[(rng() * alts.length) | 0]);
292
+ }
293
+ push(c);
294
+ }
295
+ return pool;
296
+ }
297
+ /**
298
+ * The core BO step: fit a GP on `observations` and return the candidate config
299
+ * that maximizes Expected Improvement over the current best observed quality.
300
+ * With <2 observations there is nothing to model, so it returns the best
301
+ * single-flag neighbor deterministically (pure exploration).
302
+ */
303
+ export function proposeNext(observations, opts = {}) {
304
+ if (observations.length === 0) {
305
+ // Cold start with no data: explore around the seed config if given.
306
+ if (!opts.seedConfig)
307
+ return null;
308
+ const cands = generateCandidates(opts.seedConfig, opts);
309
+ return cands.length ? { config: cands[0], ei: Number.POSITIVE_INFINITY, mean: 0, std: 0 } : null;
310
+ }
311
+ const noise = opts.noise ?? 0.05;
312
+ const xi = opts.xi ?? 1.0;
313
+ const best = observations.reduce((a, b) => (b.quality > a.quality ? b : a));
314
+ const candidates = generateCandidates(best.config, opts);
315
+ if (candidates.length === 0)
316
+ return null;
317
+ // Cold start: not enough data to condition a GP — explore the first neighbor.
318
+ if (observations.length < 3) {
319
+ const c = candidates[0];
320
+ return { config: c, ei: Number.POSITIVE_INFINITY, mean: best.quality, std: 0 };
321
+ }
322
+ const gp = fitGP(observations, noise);
323
+ const fBestZ = (best.quality - gp.yMean) / gp.yStd;
324
+ let bestCand = null;
325
+ for (const c of candidates) {
326
+ const { mean, std } = predict(gp, c);
327
+ const stdZ = std / gp.yStd;
328
+ let ei;
329
+ if (stdZ < 1e-9) {
330
+ ei = 0;
331
+ }
332
+ else {
333
+ const muZ = (mean - gp.yMean) / gp.yStd;
334
+ const z = (muZ - fBestZ - xi) / stdZ;
335
+ ei = (muZ - fBestZ - xi) * normCdf(z) + stdZ * normPdf(z);
336
+ }
337
+ if (!bestCand || ei > bestCand.ei)
338
+ bestCand = { config: c, ei, mean, std };
339
+ }
340
+ return bestCand;
341
+ }
342
+ /** Expose the fitted-GP prediction for callers that want the surface directly. */
343
+ export function fitAndPredict(observations, at, noise = 0.05) {
344
+ if (observations.length < 2)
345
+ return null;
346
+ const gp = fitGP(observations, noise);
347
+ return predict(gp, at);
348
+ }
349
+ //# sourceMappingURL=search-reducer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-reducer.js","sourceRoot":"","sources":["../../src/self-tuning/search-reducer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * LLM Self-Tuning — model-specific tuning profiles (P1/P3).
3
+ *
4
+ * A `TuningProfile` is the best-known flag configuration for one executor model
5
+ * family, plus the accepted-step history that produced it. It is the durable
6
+ * output of the tuning loop and the prior for a fresh run on the same model.
7
+ * Persisted as JSON under `.uap/self-tuning/<model>.json`, mirroring the
8
+ * self-harness profile-snapshot pattern.
9
+ *
10
+ * Bundled starter profiles (qwen3.6, opus4.8) ship as typed constants (see
11
+ * ./profiles) so they are always present at runtime, and are used as the seed
12
+ * config + as cross-model transfer priors.
13
+ */
14
+ import { FlagChange, FlagConfig } from './flags.js';
15
+ /** One accepted (or recorded-rejected) tuning step. */
16
+ export interface TuningRecord {
17
+ at: string;
18
+ changes: FlagChange[];
19
+ /** Composite quality measured for the resulting config. */
20
+ quality: number;
21
+ /** Quality delta vs the config it was compared against. */
22
+ delta: number;
23
+ accepted: boolean;
24
+ provenance: string;
25
+ }
26
+ export interface TuningProfile {
27
+ /** Normalized model family (see normalizeModel). */
28
+ model: string;
29
+ /** Best-known flag configuration for this model. */
30
+ config: FlagConfig;
31
+ /** Composite quality (0-100) of `config` when it was accepted. */
32
+ quality: number;
33
+ updatedAt: string;
34
+ provenance: string;
35
+ /** Append-only accepted/rejected step history. */
36
+ history: TuningRecord[];
37
+ /** Monotonic version (bumped each accepted step). */
38
+ version: number;
39
+ }
40
+ /** A fresh profile seeded from the bundled starter (or all-defaults). */
41
+ export declare function seedProfile(model: string, now: string): TuningProfile;
42
+ /**
43
+ * Look up a bundled starter config by (normalized) model family. Matches the
44
+ * bundled key against the normalized model so `qwen3.6-a3b-q4` → `qwen36` etc.
45
+ */
46
+ export declare function getBundledProfile(model: string): FlagConfig | null;
47
+ /**
48
+ * Cross-model transfer priors: the best-known configs from OTHER model families
49
+ * — bundled starters plus any stored profiles — used to seed the optimizer for
50
+ * `model` (design §3.3.3 transfer learning). A config that worked elsewhere is a
51
+ * high-value candidate, not a shortcut: it still goes through full validation.
52
+ */
53
+ export declare function crossModelPriors(model: string, store?: TuningProfileStore): FlagConfig[];
54
+ /** JSON-file-backed profile store, one file per model under a base dir. */
55
+ export declare class TuningProfileStore {
56
+ private readonly baseDir;
57
+ constructor(baseDir: string);
58
+ /** The model families with a stored profile (basenames under the base dir). */
59
+ knownModels(): string[];
60
+ private pathFor;
61
+ load(model: string): TuningProfile | null;
62
+ /** Load the stored profile, or a fresh seeded one when none exists yet. */
63
+ loadOrSeed(model: string, now: string): TuningProfile;
64
+ save(profile: TuningProfile): void;
65
+ }
66
+ /**
67
+ * Fold an accepted step into a profile: adopt the new config, bump the version,
68
+ * update quality, and append the record. Rejected steps are appended to history
69
+ * (for learning) without changing the adopted config.
70
+ */
71
+ export declare function recordStep(profile: TuningProfile, record: TuningRecord, newConfig: FlagConfig): TuningProfile;
72
+ //# sourceMappingURL=tuning-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tuning-profile.d.ts","sourceRoot":"","sources":["../../src/self-tuning/tuning-profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAqB,MAAM,YAAY,CAAC;AAGvE,uDAAuD;AACvD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,MAAM,EAAE,UAAU,CAAC;IACnB,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAYrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAQlE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,kBAAkB,GAAG,UAAU,EAAE,CAiBxF;AAED,2EAA2E;AAC3E,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAE5C,+EAA+E;IAC/E,WAAW,IAAI,MAAM,EAAE;IAUvB,OAAO,CAAC,OAAO;IAIf,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAUzC,2EAA2E;IAC3E,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa;IAIrD,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;CAKnC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,GAAG,aAAa,CAa7G"}