pi-ghost-autocomplete 0.3.1 → 0.4.0
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.
- package/LICENSE +561 -0
- package/README.md +464 -236
- package/dist/bench-cli.js +1 -47
- package/dist/bench.d.ts +137 -5
- package/dist/bench.js +1 -241
- package/dist/config.d.ts +47 -1
- package/dist/context-aggregator.d.ts +18 -6
- package/dist/cycle-manager.d.ts +83 -0
- package/dist/entropy-stop.d.ts +105 -0
- package/dist/eval-dataset.d.ts +55 -0
- package/dist/fuzzy-matcher.d.ts +12 -1
- package/dist/ghost-editor.d.ts +332 -6
- package/dist/index.d.ts +21 -1
- package/dist/index.js +1 -210
- package/dist/intent.d.ts +179 -0
- package/dist/metrics.d.ts +103 -3
- package/dist/path-index.d.ts +4 -1
- package/dist/path-matcher.d.ts +13 -1
- package/dist/profile-store.d.ts +85 -0
- package/dist/profile.d.ts +167 -0
- package/dist/providers/cloud-provider.d.ts +14 -2
- package/dist/providers/local-provider.d.ts +12 -2
- package/dist/providers/openai-compat-provider.d.ts +35 -2
- package/dist/providers/race.d.ts +62 -2
- package/dist/providers/types.d.ts +109 -2
- package/dist/recent-paths.d.ts +4 -1
- package/dist/replay-cli.js +2 -0
- package/dist/replay.d.ts +102 -0
- package/package.json +90 -79
- package/dist/bench-cli.d.ts +0 -3
- package/dist/bench-cli.d.ts.map +0 -1
- package/dist/bench-cli.js.map +0 -1
- package/dist/bench.d.ts.map +0 -1
- package/dist/bench.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -187
- package/dist/config.js.map +0 -1
- package/dist/context-aggregator.d.ts.map +0 -1
- package/dist/context-aggregator.js +0 -58
- package/dist/context-aggregator.js.map +0 -1
- package/dist/fuzzy-matcher.d.ts.map +0 -1
- package/dist/fuzzy-matcher.js +0 -160
- package/dist/fuzzy-matcher.js.map +0 -1
- package/dist/ghost-editor.d.ts.map +0 -1
- package/dist/ghost-editor.js +0 -445
- package/dist/ghost-editor.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/metrics.d.ts.map +0 -1
- package/dist/metrics.js +0 -98
- package/dist/metrics.js.map +0 -1
- package/dist/path-index.d.ts.map +0 -1
- package/dist/path-index.js +0 -148
- package/dist/path-index.js.map +0 -1
- package/dist/path-matcher.d.ts.map +0 -1
- package/dist/path-matcher.js +0 -85
- package/dist/path-matcher.js.map +0 -1
- package/dist/providers/cloud-provider.d.ts.map +0 -1
- package/dist/providers/cloud-provider.js +0 -52
- package/dist/providers/cloud-provider.js.map +0 -1
- package/dist/providers/local-provider.d.ts.map +0 -1
- package/dist/providers/local-provider.js +0 -36
- package/dist/providers/local-provider.js.map +0 -1
- package/dist/providers/openai-compat-provider.d.ts.map +0 -1
- package/dist/providers/openai-compat-provider.js +0 -128
- package/dist/providers/openai-compat-provider.js.map +0 -1
- package/dist/providers/openai-completions-runner.d.ts +0 -28
- package/dist/providers/openai-completions-runner.d.ts.map +0 -1
- package/dist/providers/openai-completions-runner.js +0 -46
- package/dist/providers/openai-completions-runner.js.map +0 -1
- package/dist/providers/race.d.ts.map +0 -1
- package/dist/providers/race.js +0 -128
- package/dist/providers/race.js.map +0 -1
- package/dist/providers/truncate.d.ts +0 -7
- package/dist/providers/truncate.d.ts.map +0 -1
- package/dist/providers/truncate.js +0 -39
- package/dist/providers/truncate.js.map +0 -1
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -2
- package/dist/providers/types.js.map +0 -1
- package/dist/recent-paths.d.ts.map +0 -1
- package/dist/recent-paths.js +0 -114
- package/dist/recent-paths.js.map +0 -1
package/dist/bench.js
CHANGED
|
@@ -1,241 +1 @@
|
|
|
1
|
-
import { readFile } from "node:fs/promises";
|
|
2
|
-
/**
|
|
3
|
-
* PRD §Success Metrics initial candidate thresholds. These are red/green
|
|
4
|
-
* targets, not gates — the harness reports compliance but never errors out.
|
|
5
|
-
*/
|
|
6
|
-
export const THRESHOLDS = {
|
|
7
|
-
llmP50Ms: 300,
|
|
8
|
-
llmP95Ms: 700,
|
|
9
|
-
deterministicP50Ms: 30,
|
|
10
|
-
validOutputRate: 0.85,
|
|
11
|
-
badOutputRate: 0.15,
|
|
12
|
-
};
|
|
13
|
-
/**
|
|
14
|
-
* Read JSONL metrics records from `path`. Skips malformed lines and counts
|
|
15
|
-
* them in `parseErrors`. Never throws on malformed input — a benchmark harness
|
|
16
|
-
* should degrade gracefully so partial logs still produce a report.
|
|
17
|
-
*/
|
|
18
|
-
export async function loadMetrics(path) {
|
|
19
|
-
const text = await readFile(path, "utf8");
|
|
20
|
-
return parseMetricsText(text);
|
|
21
|
-
}
|
|
22
|
-
export function parseMetricsText(text) {
|
|
23
|
-
const records = [];
|
|
24
|
-
let parseErrors = 0;
|
|
25
|
-
for (const line of text.split(/\r?\n/)) {
|
|
26
|
-
if (!line.trim())
|
|
27
|
-
continue;
|
|
28
|
-
try {
|
|
29
|
-
const rec = JSON.parse(line);
|
|
30
|
-
if (isMetricsRecord(rec))
|
|
31
|
-
records.push(rec);
|
|
32
|
-
else
|
|
33
|
-
parseErrors++;
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
parseErrors++;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return { records, parseErrors };
|
|
40
|
-
}
|
|
41
|
-
function isMetricsRecord(v) {
|
|
42
|
-
if (!v || typeof v !== "object")
|
|
43
|
-
return false;
|
|
44
|
-
const r = v;
|
|
45
|
-
return (typeof r.ts === "number" &&
|
|
46
|
-
typeof r.requestId === "string" &&
|
|
47
|
-
(r.mode === "deterministic" || r.mode === "llm") &&
|
|
48
|
-
typeof r.result === "string");
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Quantile via nearest-rank on a sorted ascending array. Returns 0 on empty.
|
|
52
|
-
* `q` in [0, 1]. We don't interpolate — sample sizes here are tens-to-low-
|
|
53
|
-
* thousands and integer ms values, interpolation buys nothing.
|
|
54
|
-
*/
|
|
55
|
-
export function quantile(sorted, q) {
|
|
56
|
-
if (sorted.length === 0)
|
|
57
|
-
return 0;
|
|
58
|
-
if (q <= 0)
|
|
59
|
-
return sorted[0] ?? 0;
|
|
60
|
-
if (q >= 1)
|
|
61
|
-
return sorted[sorted.length - 1] ?? 0;
|
|
62
|
-
const idx = Math.min(sorted.length - 1, Math.ceil(q * sorted.length) - 1);
|
|
63
|
-
return sorted[idx] ?? 0;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Build a {@link BenchmarkReport} from parsed records. Pure: no I/O.
|
|
67
|
-
*
|
|
68
|
-
* For LLM mode, providers are aggregated from each record's `providers[]`
|
|
69
|
-
* trace so race members are tracked individually. For deterministic mode the
|
|
70
|
-
* single-element providers[] is used; provider name corresponds to the band
|
|
71
|
-
* (path-prefix / basename-prefix / fuzzy-basename / fuzzy-path).
|
|
72
|
-
*/
|
|
73
|
-
export function summarize(records, source = "<inline>", parseErrors = 0) {
|
|
74
|
-
const det = records.filter((r) => r.mode === "deterministic");
|
|
75
|
-
const llm = records.filter((r) => r.mode === "llm");
|
|
76
|
-
const deterministic = summarizeMode("deterministic", det);
|
|
77
|
-
const llmStats = summarizeMode("llm", llm);
|
|
78
|
-
return {
|
|
79
|
-
source,
|
|
80
|
-
records: records.length,
|
|
81
|
-
parseErrors,
|
|
82
|
-
deterministic,
|
|
83
|
-
llm: llmStats,
|
|
84
|
-
thresholds: checkThresholds(deterministic, llmStats),
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
function summarizeMode(mode, records) {
|
|
88
|
-
const byProvider = new Map();
|
|
89
|
-
for (const r of records) {
|
|
90
|
-
if (!r.providers)
|
|
91
|
-
continue;
|
|
92
|
-
for (const p of r.providers) {
|
|
93
|
-
let arr = byProvider.get(p.provider);
|
|
94
|
-
if (!arr) {
|
|
95
|
-
arr = [];
|
|
96
|
-
byProvider.set(p.provider, arr);
|
|
97
|
-
}
|
|
98
|
-
arr.push(p);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
const providers = [];
|
|
102
|
-
for (const [provider, entries] of byProvider) {
|
|
103
|
-
providers.push(buildProviderStats(provider, entries));
|
|
104
|
-
}
|
|
105
|
-
providers.sort((a, b) => a.provider.localeCompare(b.provider));
|
|
106
|
-
const shown = records.filter((r) => r.shown).length;
|
|
107
|
-
const accepted = countAcceptance(records, "accepted");
|
|
108
|
-
const dismissed = countAcceptance(records, "dismissed");
|
|
109
|
-
const stale = countAcceptance(records, "stale");
|
|
110
|
-
const expired = countAcceptance(records, "expired");
|
|
111
|
-
return {
|
|
112
|
-
mode,
|
|
113
|
-
count: records.length,
|
|
114
|
-
shown,
|
|
115
|
-
accepted,
|
|
116
|
-
dismissed,
|
|
117
|
-
stale,
|
|
118
|
-
expired,
|
|
119
|
-
acceptanceRate: shown > 0 ? accepted / shown : 0,
|
|
120
|
-
providers,
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
function countAcceptance(records, outcome) {
|
|
124
|
-
let n = 0;
|
|
125
|
-
for (const r of records)
|
|
126
|
-
if (r.acceptance === outcome)
|
|
127
|
-
n++;
|
|
128
|
-
return n;
|
|
129
|
-
}
|
|
130
|
-
function buildProviderStats(provider, entries) {
|
|
131
|
-
const latencies = entries.map((e) => e.latencyMs).sort((a, b) => a - b);
|
|
132
|
-
const counts = {
|
|
133
|
-
produced: 0,
|
|
134
|
-
empty: 0,
|
|
135
|
-
rejected: 0,
|
|
136
|
-
aborted: 0,
|
|
137
|
-
error: 0,
|
|
138
|
-
};
|
|
139
|
-
for (const e of entries)
|
|
140
|
-
counts[e.result]++;
|
|
141
|
-
const valid = counts.produced;
|
|
142
|
-
const bad = counts.empty + counts.rejected + counts.error;
|
|
143
|
-
return {
|
|
144
|
-
provider,
|
|
145
|
-
count: entries.length,
|
|
146
|
-
produced: counts.produced,
|
|
147
|
-
empty: counts.empty,
|
|
148
|
-
rejected: counts.rejected,
|
|
149
|
-
aborted: counts.aborted,
|
|
150
|
-
error: counts.error,
|
|
151
|
-
latencyMs: {
|
|
152
|
-
p50: quantile(latencies, 0.5),
|
|
153
|
-
p95: quantile(latencies, 0.95),
|
|
154
|
-
p99: quantile(latencies, 0.99),
|
|
155
|
-
},
|
|
156
|
-
validRate: entries.length > 0 ? valid / entries.length : 0,
|
|
157
|
-
badRate: entries.length > 0 ? bad / entries.length : 0,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
function checkThresholds(det, llm) {
|
|
161
|
-
const out = [];
|
|
162
|
-
for (const p of det.providers) {
|
|
163
|
-
out.push({
|
|
164
|
-
name: `deterministic[${p.provider}] p50 latency`,
|
|
165
|
-
target: `< ${THRESHOLDS.deterministicP50Ms}ms`,
|
|
166
|
-
observed: `${p.latencyMs.p50}ms`,
|
|
167
|
-
pass: p.latencyMs.p50 < THRESHOLDS.deterministicP50Ms,
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
for (const p of llm.providers) {
|
|
171
|
-
out.push({
|
|
172
|
-
name: `llm[${p.provider}] p50 latency`,
|
|
173
|
-
target: `< ${THRESHOLDS.llmP50Ms}ms`,
|
|
174
|
-
observed: `${p.latencyMs.p50}ms`,
|
|
175
|
-
pass: p.latencyMs.p50 < THRESHOLDS.llmP50Ms,
|
|
176
|
-
});
|
|
177
|
-
out.push({
|
|
178
|
-
name: `llm[${p.provider}] p95 latency`,
|
|
179
|
-
target: `< ${THRESHOLDS.llmP95Ms}ms`,
|
|
180
|
-
observed: `${p.latencyMs.p95}ms`,
|
|
181
|
-
pass: p.latencyMs.p95 < THRESHOLDS.llmP95Ms,
|
|
182
|
-
});
|
|
183
|
-
out.push({
|
|
184
|
-
name: `llm[${p.provider}] valid-output rate`,
|
|
185
|
-
target: `>= ${(THRESHOLDS.validOutputRate * 100).toFixed(0)}%`,
|
|
186
|
-
observed: `${(p.validRate * 100).toFixed(1)}%`,
|
|
187
|
-
pass: p.validRate >= THRESHOLDS.validOutputRate,
|
|
188
|
-
});
|
|
189
|
-
out.push({
|
|
190
|
-
name: `llm[${p.provider}] bad-output rate`,
|
|
191
|
-
target: `<= ${(THRESHOLDS.badOutputRate * 100).toFixed(0)}%`,
|
|
192
|
-
observed: `${(p.badRate * 100).toFixed(1)}%`,
|
|
193
|
-
pass: p.badRate <= THRESHOLDS.badOutputRate,
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
return out;
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Render a {@link BenchmarkReport} as a fixed-width plain-text table.
|
|
200
|
-
* Output is line-based and ASCII-safe so it pipes cleanly through `less`,
|
|
201
|
-
* email, or PR descriptions.
|
|
202
|
-
*/
|
|
203
|
-
export function formatReport(report) {
|
|
204
|
-
const lines = [];
|
|
205
|
-
lines.push("Pi Ghost Benchmark Report");
|
|
206
|
-
lines.push("=========================");
|
|
207
|
-
lines.push(`source: ${report.source}`);
|
|
208
|
-
lines.push(`records: ${report.records}`);
|
|
209
|
-
if (report.parseErrors > 0)
|
|
210
|
-
lines.push(`parse errors: ${report.parseErrors}`);
|
|
211
|
-
lines.push("");
|
|
212
|
-
lines.push(`Deterministic (n=${report.deterministic.count})`);
|
|
213
|
-
lines.push(` shown=${report.deterministic.shown} accepted=${report.deterministic.accepted} dismissed=${report.deterministic.dismissed} stale=${report.deterministic.stale} expired=${report.deterministic.expired} accept-rate=${(report.deterministic.acceptanceRate * 100).toFixed(1)}%`);
|
|
214
|
-
for (const p of report.deterministic.providers) {
|
|
215
|
-
lines.push(` - ${p.provider.padEnd(18)} ${formatProviderLatency(p)}`);
|
|
216
|
-
}
|
|
217
|
-
lines.push("");
|
|
218
|
-
lines.push(`LLM (n=${report.llm.count})`);
|
|
219
|
-
lines.push(` shown=${report.llm.shown} accepted=${report.llm.accepted} dismissed=${report.llm.dismissed} stale=${report.llm.stale} expired=${report.llm.expired} accept-rate=${(report.llm.acceptanceRate * 100).toFixed(1)}%`);
|
|
220
|
-
for (const p of report.llm.providers) {
|
|
221
|
-
lines.push(` - ${p.provider.padEnd(18)} ${formatProviderLatency(p)}`);
|
|
222
|
-
}
|
|
223
|
-
lines.push("");
|
|
224
|
-
lines.push("Thresholds:");
|
|
225
|
-
for (const t of report.thresholds) {
|
|
226
|
-
const mark = t.pass ? "[PASS]" : "[FAIL]";
|
|
227
|
-
lines.push(` ${mark} ${t.name.padEnd(40)} target ${t.target.padEnd(10)} got ${t.observed}`);
|
|
228
|
-
}
|
|
229
|
-
return lines.join("\n");
|
|
230
|
-
}
|
|
231
|
-
function formatProviderLatency(p) {
|
|
232
|
-
return `n=${p.count} p50=${p.latencyMs.p50}ms p95=${p.latencyMs.p95}ms p99=${p.latencyMs.p99}ms valid=${(p.validRate * 100).toFixed(1)}% bad=${(p.badRate * 100).toFixed(1)}%`;
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* One-shot helper: load a JSONL file and produce a report. Used by the CLI.
|
|
236
|
-
*/
|
|
237
|
-
export async function runBenchmark(path) {
|
|
238
|
-
const { records, parseErrors } = await loadMetrics(path);
|
|
239
|
-
return summarize(records, path, parseErrors);
|
|
240
|
-
}
|
|
241
|
-
//# sourceMappingURL=bench.js.map
|
|
1
|
+
(function(_0x2aa9e7,_0x1d1b26){function _0x1b09b6(_0x2e4de9,_0x537a7b){return _0x4594(_0x537a7b-0x235,_0x2e4de9);}function _0x371d3b(_0x2f61d9,_0x39e698){return _0x4594(_0x2f61d9- -0x230,_0x39e698);}const _0x22265c=_0x2aa9e7();while(!![]){try{const _0xab0ed=-parseInt(_0x371d3b(0x99,0xe3))/(0xfdb+0x2651*0x1+-0x362b)+-parseInt(_0x1b09b6(0x514,0x4a2))/(0x1e0e+-0x1470*0x1+-0x99c)*(-parseInt(_0x371d3b(0x1e,-0x43))/(0x5*0x765+0xffb*0x1+-0x34f1))+parseInt(_0x371d3b(-0x35,-0x36))/(-0x5*0x670+0x1*-0x61f+0x2653)*(-parseInt(_0x1b09b6(0x4f0,0x4c9))/(-0x1a10+-0xedb+0x28f0))+parseInt(_0x371d3b(0x6d,0xb3))/(0x13*0x5b+-0x2f*-0x6d+-0x1abe)+-parseInt(_0x371d3b(0xd,0x6d))/(-0x181+0x5d7+0x1*-0x44f)+-parseInt(_0x371d3b(-0x34,-0x7b))/(0x237f+0x1546+-0x53*0xaf)*(-parseInt(_0x371d3b(0x55,0x87))/(-0x1*-0x3b4+0x43*0x43+-0x1534))+-parseInt(_0x371d3b(-0x33,-0x62))/(-0x19bb*-0x1+-0x30+-0x1981*0x1)*(parseInt(_0x1b09b6(0x4d0,0x4a9))/(-0x87c+0x331*-0x1+0xbb8));if(_0xab0ed===_0x1d1b26)break;else _0x22265c['push'](_0x22265c['shift']());}catch(_0x5d00fe){_0x22265c['push'](_0x22265c['shift']());}}}(_0x325f,-0x1266f+0x8*-0x662c+0xdd9a8));import{readFile as _0x464b90}from'node:fs/promises';var G=(-0x27*-0x66+-0x19a6+0xa26)*(-0x8ca+0x85f*0x2+0xb*-0x5c)*(-0x23ab+0x4a+0x2761),E=[_0x27f7dd(0x393,0x383)+_0x27f7dd(0x309,0x380)+'tic',_0x27f7dd(0x3fd,0x47a),'cache',_0x27f7dd(0x3bf,0x3f6),'specu'+'lativ'+_0x33d284(0x40a,0x3e2)+'m',_0x27f7dd(0x47b,0x403)+_0x33d284(0x3d0,0x36c)+'l',_0x33d284(0x361,0x351)+_0x33d284(0x318,0x330)+_0x27f7dd(0x424,0x450)];const _0x2583ef={};function _0x325f(){const _0x2231d6=['ignVCNi','nuf3ww5wvG','BwvHBLm','B3n0iei','Bg93','CMvK','BgXTudu','zhm6ica','zxHWAxi','y2vK','mZi2otuXngvPzw1WBG','EwXeyKG','AxzLvgK','y2vPBa','qxqX','C2f2zwq','Dc1Izw4','zNjHBwu','DgfSpq','B3HztgS','Aw5NoIa','yMfKuMe','yxjL','zwrzzwW','DxrMoa','yxnO','ywr2yw4','ihrVigu','ChvZAa','Aw1Lu2e','BMvNyxq','zs13yxi','rxjYB3i','zwrqyxq','yNLtB3u','zcbUpq','CgfKrw4','yxjRifi','BfDHC0m','Ag9Szhm','ywnJzxa','jsbamZ0','Dg9gAxG','icbWCM8','icaGkem','sg92zxi','z25LzNy','BM93','CMvQzwm','icaGzNi','y2GGls0','ChrLzd0','t3v0Chu','me1Z','mJGWmJG1rfrpAxnJ','DgLJudu','ig49','zxjYB3i','Chq9','DgLVBJ0','DK5xqNm','ztOGica','jsbant0','C2HVCNq','CdK1','DhLWzwq','ig1Vzgu','BgXT','u3rYAw4','z2LWuxq','icbZAg8','y29YCMu','xsb2ywW','te9xxq','ChjVzhu','su9iBxa','DgLJ','zwramt0','C3qGica','DxqGCMe','t3rOzxi','DgvK','DMfSAwq','zgf0zvi','ihnOB3C','zwDYzxq','ugKGr2G','w1bbu1m','ugfZDeq','B3jYzwm','BwLUAxm','qxqZ','zxn0Aw0','zgv0zxi','igzYywm','C3bSAxq','BNvTyMu','zgvY','C3nLza','BwfW','CgvKpq','zMLSDgu','CMvJB3i','EgL0kq','D2LUBMu','EeLPswm','y291BNq','y3LnCW','yxzLze0','AxnZzwq','rgLZBwK','Bg9JywW','Dg90ywW','jsbTzwe','y2fUzgK','C3rYAw4','w0zbsuW','lw91Dha','ChqTCMe','EwvSBg8','igXHDgu','mtK0mdq1mMP0vxDeAG','mtm2otm2ExDODNLS','mJeWrNz4vfnI','C3DHCha','D249','BguTC2W','zw1WDhK','D2fYBG','yMfKt3u','CdK5','xsbWnta','Bfn3yxa','CNqTAg8','D21wsLq','DgLTzvm','y3rPB24','DgLJwW','xsbWotu','BgL2zsa','zMXPy2S','igvYCM8','vgHYzxm','zgvYCW','zwrszwq','BMu+','zwqGica','ttvHigy','Bgf0zw4','zNjHy3q','qxf0uxK','zwn0uMe','igzSAwm','CgfYC2u','C29YDa','Axr5','D2f0y2G','AxzLCMC','vLH5EeC','ChjVzMK','yxrLzfq','pJ0G','igrPC20','C3nsyxq','CMnL','zgLZBwK','yxj0Awe','AwqTB3u','lxrPBwu','zunVBxa','yxrL','DhjPBq','zw50','C1DPDgG','pd0G','DhjSk0m','CNm6ica','DMvYica','yw5R','ihn3yxa','BMfSica','A2vYpq','CduW','DMvKtxm','lxnHDMu','CMf0zq','C2LVBMe','nJyZnZK3nenKq2P5tq','nu1Z','pgLUBgK','C291CMm','z2v0','pt09pt0','swzou3K','u1Lcr08','DgvKlxa','CMvXDwu','igv4CgK','zxb0lxi','ls0GCgK','zxqG','DgfYz2u','A2v5CW','BgXTudK','ndiXoeTdv1fLyW','EKTKDLe','w1DbuK4','zxjsyxq','DhjPzq','Dg9ju08','C2v0','CgfZCW','ChfHshu','ihn0ywW','qwr2yw4','Bwvtyxy','DwXhzuS','DfjLz3i','EwfeC0G','iha1md0','C2HVD24','ChjVDMK','DgHYzxm','rgv0zxi','C2v2zxi','icb0Exa','icbuvey','yw1Licm','C3rjza','BgXTwW','zw5JAg0','CMvKpq','DhrMDe0','C3rHCNq','CMvWBge','mtC0ogTNEwrJwG','DgfUy2u','DxjJztO','ihjHDgu','uMf0zq','thLRtxa','BMn5','mtq0ndqXDuviuvrY','ic0T','DfjHDgu','Dgu9','CMvZDwW','AM9PBG','ywjVCNq','B2jQzwm','tNvTyMu','Dhb1Dfi','BgLKpq','zxrsyxq','C3rHBgu','zwLsvK8','zw50uMe','BgvUz3q','qxq1','ndqXExrUwhvI','igj5u28','Bw9Kzq','BxmGCdK','DMLZAw8','icaGica','DMHwDeu','Aw9U','igDVDca','DMvK','icbHy2m','icaTia','igfJy2u','rMXPy2S'];_0x325f=function(){return _0x2231d6;};return _0x325f();}_0x2583ef[_0x27f7dd(0x3be,0x43d)+'0Ms']=0x12c,_0x2583ef[_0x27f7dd(0x44e,0x3f1)+_0x27f7dd(0x3dc,0x3e2)]=0x2bc,_0x2583ef[_0x27f7dd(0x35c,0x383)+_0x33d284(0x38b,0x30c)+'ticP5'+_0x33d284(0x386,0x3f8)]=0x1e,_0x2583ef[_0x33d284(0x33d,0x304)+'Outpu'+_0x33d284(0x3ee,0x3a6)]=0.85,_0x2583ef[_0x27f7dd(0x40a,0x3a7)+'tputR'+_0x33d284(0x3d3,0x35c)]=0.15,_0x2583ef[_0x27f7dd(0x47c,0x455)+'iveTi'+'meSav'+_0x27f7dd(0x3f4,0x44e)+'low']=0.1,_0x2583ef[_0x33d284(0x368,0x3e1)+_0x33d284(0x3c0,0x3cf)+_0x33d284(0x315,0x389)+'edRed']=0.2;var u=_0x2583ef;async function O(_0x13f02f){function _0x188009(_0x806b60,_0x2a91e0){return _0x33d284(_0x2a91e0,_0x806b60- -0x2c4);}let _0x450203=await _0x464b90(_0x13f02f,_0x188009(0x117,0x123));return L(_0x450203);}function L(_0x524e1a){let _0x40c670=[],_0x1d3b06=0x25f8+-0x549+-0x20af;for(let _0x58d396 of _0x524e1a['split'](/\r?\n/))if(_0x58d396[_0x51383a(0x585,0x592)]())try{if(_0x590a78(-0x88,-0x6e)!=='IfNSy'){if(!_0x38bc49||typeof _0x55f5cd!=_0x51383a(0x559,0x5e0)+'t')return!(0x2c0+0x1304+-0x9*0x26b);let _0x58bb38=_0x510888;return typeof _0x58bb38['ts']==_0x51383a(0x4c9,0x547)+'r'&&typeof _0x58bb38[_0x51383a(0x60b,0x5ab)+'stId']==_0x590a78(-0xde,-0xbc)+'g'&&typeof _0x58bb38['mode']==_0x590a78(-0xa1,-0xbc)+'g'&&_0x19f93c['has'](_0x58bb38[_0x51383a(0x594,0x5ec)])&&typeof _0x58bb38[_0x51383a(0x58f,0x5dd)+'t']==_0x51383a(0x568,0x55a)+'g';}else{let _0x22fa30=JSON[_0x590a78(-0x8b,-0x96)](_0x58d396);I(_0x22fa30)?_0x40c670[_0x51383a(0x68f,0x614)](_0x22fa30):_0x1d3b06++;}}catch{if(_0x590a78(-0x51,-0x6d)===_0x51383a(0x5a4,0x56d)){let _0x1a0ce9=_0x34d2bb[_0x51383a(0x5c8,0x5ba)]?_0x291fa2[_0x51383a(0x5f3,0x5c7)+_0x51383a(0x519,0x582)]===_0x51383a(0x5b7,0x567)?_0x51383a(0x57c,0x5b5)+']':'[PASS'+']':_0x51383a(0x59c,0x55b)+']';_0x2897ee['push']('\x20\x20'+_0x1a0ce9+'\x20'+_0x2634d0['name']['padEn'+'d'](-0x16f3+-0x5c5*0x4+0x2e2f)+('\x20targ'+_0x590a78(-0xe0,-0x67))+_0x4f04a7[_0x51383a(0x5ba,0x5b0)+'t'][_0x590a78(0x89,0x6)+'d'](-0x1780+-0xd66+0x314*0xc)+'\x20got\x20'+_0x2ae229['obser'+_0x51383a(0x60a,0x5f3)]);}else _0x1d3b06++;}const _0x128836={};_0x128836['recor'+'ds']=_0x40c670;function _0x590a78(_0x17c175,_0x2ee8bc){return _0x33d284(_0x17c175,_0x2ee8bc- -0x3e1);}_0x128836[_0x590a78(-0xb6,-0x96)+_0x51383a(0x662,0x618)+'s']=_0x1d3b06;function _0x51383a(_0x3327bc,_0x1bfcbc){return _0x33d284(_0x3327bc,_0x1bfcbc-0x235);}return _0x128836;}function _0x27f7dd(_0x2030af,_0x1a2b55){return _0x4594(_0x1a2b55-0x1a4,_0x2030af);}var j=new Set(E);function I(_0x4ebff7){if(!_0x4ebff7||typeof _0x4ebff7!=_0xcb8fab(0x392,0x3b3)+'t')return!(0x1f*-0x9b+0xf9*0x1+0xd9*0x15);let _0x280667=_0x4ebff7;function _0x14962e(_0x206d00,_0x199a1d){return _0x33d284(_0x199a1d,_0x206d00- -0x1a2);}function _0xcb8fab(_0xe24e9d,_0x1eb01e){return _0x33d284(_0x1eb01e,_0xe24e9d- -0x19);}return typeof _0x280667['ts']=='numbe'+'r'&&typeof _0x280667[_0x14962e(0x1d4,0x181)+_0xcb8fab(0x37d,0x3df)]==_0x14962e(0x183,0x20c)+'g'&&typeof _0x280667[_0x14962e(0x215,0x1b8)]=='strin'+'g'&&j['has'](_0x280667[_0xcb8fab(0x39e,0x40a)])&&typeof _0x280667[_0xcb8fab(0x38f,0x3a2)+'t']==_0x14962e(0x183,0x1a3)+'g';}function g(_0x3e0ebf,_0xf2d90c){function _0x2014d6(_0x445d0a,_0x11fd45){return _0x33d284(_0x11fd45,_0x445d0a-0x18e);}if(_0x3e0ebf['lengt'+'h']===-0x1e1e+-0x4*-0x789+0x2*-0x3)return-0x21ab+-0x1*-0x160e+0x3*0x3df;if(_0xf2d90c<=0x1*-0xfa1+0x26*-0x13+0x1273)return _0x3e0ebf[0x3*0xaf+0x6d*-0x5+0x14]??-0xa5c+-0x943*-0x1+0x119;if(_0xf2d90c>=0x3*-0x72a+-0xec2*0x2+0x9*0x5ab)return _0x3e0ebf[_0x3e0ebf['lengt'+'h']-(0x1f6*-0xd+-0x18f5*-0x1+0x2*0x45)]??-0x262e+-0x17*0x27+0x29af;let _0x3c9dcd=Math['min'](_0x3e0ebf['lengt'+'h']-(-0x1d8*0x12+-0x26b2+-0x47e3*-0x1),Math[_0x2014d6(0x55e,0x4e0)](_0xf2d90c*_0x3e0ebf['lengt'+'h'])-(-0x1241+0x419*0x1+0x1d*0x7d));return _0x3e0ebf[_0x3c9dcd]??-0x13*-0x12d+-0x43*0x7d+-0x8*-0x14c;}function q(_0x3fba15,_0x7d95b=_0x33d284(0x35a,0x36f)+_0x33d284(0x357,0x343),_0x557ed3=-0x160e*0x1+-0x155a*-0x1+0x5*0x24){function _0x2bda0f(_0x3d0acc,_0x290b0a){return _0x27f7dd(_0x290b0a,_0x3d0acc-0x16e);}let _0x565fe8=_0x3fba15[_0x623749(0x49f,0x44b)+'r'](_0x3b20fb=>_0x3b20fb[_0x2bda0f(0x599,0x5c7)]===_0x623749(0x433,0x443)+'minis'+_0x2bda0f(0x5f1,0x594)),_0x35cc9b=_0x3fba15[_0x2bda0f(0x4f9,0x547)+'r'](_0x46cec9=>_0x46cec9['mode']===_0x2bda0f(0x5e8,0x666)),_0x5952da=$('deter'+'minis'+_0x2bda0f(0x5f1,0x623),_0x565fe8),_0x1be3e9=$(_0x2bda0f(0x5e8,0x60c),_0x35cc9b),_0x4ca8ef=B(_0x3fba15),_0x3c396c=H(_0x3fba15);function _0x623749(_0x475afe,_0x5af7d6){return _0x27f7dd(_0x475afe,_0x5af7d6-0xc0);}return{'source':_0x7d95b,'records':_0x3fba15[_0x623749(0x54f,0x4e7)+'h'],'parseErrors':_0x557ed3,'deterministic':_0x5952da,'llm':_0x1be3e9,'byMode':_0x4ca8ef,'advanced':_0x3c396c,'thresholds':N(_0x5952da,_0x1be3e9,_0x3c396c)};}function B(_0x4252ec){let _0x4b0e5a=new Map();for(let _0x33f179 of _0x4252ec){if('LnpNu'!==_0x174642(0xc4,0xc5)){let _0x11f1b4=_0x33f179[_0x174642(0x7e,0xfd)],_0x3a9ee7=_0x4b0e5a['get'](_0x11f1b4);_0x3a9ee7||(_0x3a9ee7=[],_0x4b0e5a[_0x174642(0x50,0xca)](_0x11f1b4,_0x3a9ee7)),_0x3a9ee7['push'](_0x33f179);}else{let _0x7574c8=_0x4ea5a4['candi'+_0x174642(0x7b,0x4b)+_0x6f0908(0x4bd,0x52b)]??0x1e92+0xe7a+-0x2d0c;_0x7574c8<-0x140a+0xa3*-0x22+0x335*0xd&&_0x417d86++,_0x7574c8<-0x8c2*0x4+0x1805+0xb06&&_0x5f31bc++,_0x7574c8<0x1357+-0x1*0x1333+0x1*-0x1f&&_0x171fe9++;}}let _0x42cc60=[];function _0x6f0908(_0x154cb3,_0x3146e0){return _0x33d284(_0x3146e0,_0x154cb3-0x159);}for(let [_0x280020,_0x1ef08e]of _0x4b0e5a)_0x42cc60[_0x174642(0x161,0x125)]($(_0x280020,_0x1ef08e));function _0x174642(_0x43d36f,_0x1bbbc0){return _0x33d284(_0x43d36f,_0x1bbbc0- -0x2ba);}return _0x42cc60[_0x6f0908(0x4a5,0x51d)]((_0x49fc8d,_0x17659d)=>_0x49fc8d[_0x6f0908(0x510,0x56f)][_0x6f0908(0x47a,0x3f5)+_0x174642(0xa6,0xa1)+_0x174642(0x11a,0x11f)](_0x17659d[_0x174642(0x10b,0xfd)])),_0x42cc60;}function H(_0x5a7e83){let _0x155079=[],_0x17a163=[],_0x5ae734=-0x1976+-0x13a4+0x2d1a,_0x1f32de=-0x222+-0x766*0x2+0x16*0xc5,_0x459110=0x1867*-0x1+-0x1250+0x87*0x51,_0x453f37=-0x13f*-0x1+0x7*0x501+-0x2446,_0x5324e2=-0xb34+-0x1*-0x234f+-0x181b,_0x4ba60d=-0xf3*0x2+0x19e5+-0x17ff*0x1,_0x1fe015=-0x2576+0x1*-0x179f+0x3d15,_0x435519=0x68*0xe+0x1ba*0x15+-0x29f2,_0x358ae3=0x27*-0x5+0x1cd7+0x257*-0xc,_0x2eb88f=0x245e+-0x1ce4+-0xb*0xae,_0x597a83=0x216e+0x56e+0x2*-0x136e,_0x146fdd=0x3*-0x331+0x1a5*0x11+-0x1262,_0x1f0752=-0x7a6+-0x6*-0x526+-0x173e,_0x37d05c=0x1d5e+0xb*-0x279+0x1*-0x22b,_0x20b076={},_0x58efdb=-0x3*0x7b1+0x1d0b+-0x2fc*0x2,_0x37a04a=0x5e9+0x144d*0x1+-0x1a36,_0x3806ca=0x6f0+0x2509*-0x1+0x73*0x43,_0x41760d=-0x65e+-0x1*-0x10fd+-0xa9f*0x1;for(let _0x590090 of _0x5a7e83){if('yaDsH'===_0x1a6581(0x256,0x1d9)){typeof _0x590090[_0x3670b2(0xc9,0x60)+'s']==_0x3670b2(0x41,0x59)+'r'&&_0x155079['push'](_0x590090[_0x3670b2(0xc9,0x7f)+'s']),typeof _0x590090[_0x3670b2(0x3d,0x7b)+_0x1a6581(0x21c,0x1b6)+_0x1a6581(0x2aa,0x311)+_0x1a6581(0x233,0x246)]=='numbe'+'r'&&(_0x17a163[_0x1a6581(0x2a9,0x291)](_0x590090[_0x1a6581(0x1d8,0x22a)+'atedT'+_0x1a6581(0x2aa,0x28d)+'vedMs']),_0x5ae734+=_0x590090['estim'+_0x1a6581(0x21c,0x194)+_0x3670b2(0x10f,0xa3)+_0x3670b2(0x98,0xe6)],_0x590090[_0x3670b2(0x3d,0xab)+'atedT'+_0x1a6581(0x2aa,0x2b6)+'vedMs']<0x47*0x6b+0x1b4f+-0x38fc&&_0x1f32de++);let _0x131055=_0x590090[_0x3670b2(0x11a,0x1a1)+_0x1a6581(0x268,0x2ea)]==='accep'+_0x3670b2(0x32,-0x19)||_0x590090['accep'+'tance']===_0x1a6581(0x2b5,0x242)+_0x1a6581(0x23f,0x1cb)+_0x1a6581(0x222,0x20c)+'l';if(_0x131055&&(_0x1fe015++,_0x590090['accep'+'tRegr'+'et']===!(0x2315+0x642+-0x22d*0x13)&&_0x435519++),_0x590090[_0x3670b2(0x11a,0xdd)+_0x1a6581(0x268,0x2df)]===_0x1a6581(0x221,0x24e)+'ssed'&&(_0x58efdb++,_0x590090[_0x3670b2(0x131,0x182)+_0x1a6581(0x2ba,0x30f)+_0x1a6581(0x1ea,0x1a6)+'ss']===!(0x1a85+0xdbd+-0x2842)&&_0x37a04a++),_0x590090['accep'+_0x1a6581(0x268,0x2b8)]===_0x1a6581(0x27a,0x20d)&&(_0x3806ca++,_0x590090[_0x3670b2(0x133,0xe0)+_0x3670b2(0x39,0x1a)+_0x1a6581(0x219,0x27a)+_0x1a6581(0x228,0x291)]===!(0x216d+0x4e5*0x3+-0x301c)&&_0x41760d++),_0x590090[_0x1a6581(0x281,0x296)]===_0x1a6581(0x259,0x1fc)+_0x1a6581(0x236,0x25f)+'l'&&_0x590090[_0x3670b2(0xbd,0x97)]){if(_0x1a6581(0x2c9,0x2fe)!==_0x1a6581(0x254,0x278)){_0x358ae3++,_0x131055&&_0x2eb88f++;let _0x43fe64=_0x590090[_0x1a6581(0x1e4,0x201)+'r']??'';if(_0x43fe64[_0x3670b2(0xca,0xff)+_0x3670b2(0x8e,0xfa)]('provi'+_0x3670b2(0x9b,0xe0)+'l-')){if('ylDbH'!==_0x1a6581(0x298,0x24a)){_0x4737e5[_0x1a6581(0x216,0x1fc)]((_0x5d3e49,_0x2fd78e)=>_0x5d3e49-_0x2fd78e),_0x435984['timeS'+_0x3670b2(0x4d,0x3b)+'s']={'p50':_0x3ba621(_0x11ee0f,0x1e29*-0x1+-0x1800+0xeb*0x3b+0.5),'p95':_0x3215e4(_0x1ffc6a,0x44*-0x7a+0x20f+0x1e59+0.95),'total':_0x422b69,'n':_0x1d0c23[_0x1a6581(0x27d,0x278)+'h']};let _0x539675=_0x47750a/_0x3ac77e['lengt'+'h'];const _0x41b4f8={};_0x41b4f8[_0x1a6581(0x1e6,0x1e4)]=_0xe719d6,_0x41b4f8[_0x3670b2(0x76,0xd3)+_0x1a6581(0x286,0x231)]=_0x539675,_0x41b4f8['n']=_0xefed9f[_0x3670b2(0xe2,0x147)+'h'],_0x41b4f8[_0x3670b2(0xc1,0xe4)+_0x3670b2(0x7c,0xfa)]=_0x539675>=_0xc218ec['negat'+'iveTi'+_0x1a6581(0x253,0x204)+'edRed']?'red':_0x539675>=_0x5e2b7d['negat'+'iveTi'+_0x1a6581(0x253,0x23c)+_0x1a6581(0x2a4,0x2ed)+'low']?'yello'+'w':'ok',_0x3a2041['negat'+_0x1a6581(0x299,0x230)+_0x3670b2(0xb8,0x11b)+'ed']=_0x41b4f8;}else{let _0x4288e2=_0x43fe64['slice'](-0x27e*-0x1+-0x16da+-0xa34*-0x2);_0x20b076[_0x4288e2]=(_0x20b076[_0x4288e2]??-0x2e3*0x5+-0x6c6+-0x1535*-0x1)+(0x791*0x5+-0x1c1c+-0x4*0x26e);}}}else{let _0x17c974=_0x4c4c8c['get'](_0x393b9a[_0x3670b2(0xbe,0x7a)+'der']);_0x17c974||(_0x17c974=[],_0x2e51d3['set'](_0x4331bc[_0x1a6581(0x259,0x1ff)+'der'],_0x17c974)),_0x17c974['push'](_0x22aa89);}}if(typeof _0x590090[_0x3670b2(0xbe,0x6e)+_0x1a6581(0x236,0x28b)+_0x3670b2(0x65,0xda)+'Ms']==_0x1a6581(0x1dc,0x1c6)+'r'&&(_0x597a83++,_0x1f0752+=_0x590090['provi'+_0x3670b2(0x9b,0xb1)+'lSwap'+'Ms'],_0x590090[_0x3670b2(0xbe,0x118)+_0x3670b2(0x9b,0xbe)+_0x1a6581(0x2b3,0x2f7)+_0x1a6581(0x1d5,0x22d)+'t']===!(0x5*-0x1c6+-0x756+0x1034)&&_0x146fdd++,_0x590090[_0x1a6581(0x259,0x2a0)+_0x1a6581(0x236,0x1e7)+_0x3670b2(0x65,0xb2)+_0x3670b2(0xf1,0x14b)+'er']===!(0x1bc1+0x1000+-0x2bc1)&&_0x37d05c++),_0x590090[_0x3670b2(0xbd,0xf9)]&&(_0x459110++,_0x131055)){if(_0x3670b2(0xea,0x63)!==_0x1a6581(0x285,0x2a0)){let _0x281ff7=[];for(let _0x547c67 of _0x3f837c['provi'+_0x3670b2(0x70,0x7f)])_0x281ff7[_0x1a6581(0x2a9,0x280)]({'name':'deter'+'minis'+_0x3670b2(0x6a,-0x7)+_0x547c67['provi'+_0x3670b2(0x42,0x5e)]+(_0x3670b2(0x64,0xa5)+_0x1a6581(0x1f4,0x215)+_0x3670b2(0xd2,0x12e)),'target':'<\x20'+_0x4bd436[_0x3670b2(0x3e,0x3b)+_0x3670b2(0x3b,0x44)+'ticP5'+_0x3670b2(0x127,0xad)]+'ms','observed':_0x547c67['laten'+_0x3670b2(0x4c,0x29)][_0x3670b2(0x97,0xf7)]+'ms','pass':_0x547c67[_0x3670b2(0x75,-0x6)+_0x1a6581(0x1e7,0x240)][_0x3670b2(0x97,0xff)]<_0x2386d8['deter'+'minis'+_0x1a6581(0x2c4,0x24f)+_0x1a6581(0x2c2,0x32c)]});for(let _0x469e67 of _0x429cb7[_0x3670b2(0xbe,0xb3)+_0x1a6581(0x20b,0x1f2)])_0x281ff7[_0x3670b2(0x10e,0xd2)]({'name':_0x3670b2(0xc6,0x8c)+_0x469e67['provi'+_0x1a6581(0x1dd,0x1bb)]+(']\x20p50'+_0x1a6581(0x1f4,0x276)+_0x3670b2(0xd2,0xbd)),'target':'<\x20'+_0x59d4ff[_0x1a6581(0x293,0x280)+_0x1a6581(0x2c2,0x288)]+'ms','observed':_0x469e67[_0x3670b2(0x75,0xde)+_0x3670b2(0x4c,0xc1)][_0x3670b2(0x97,0xe9)]+'ms','pass':_0x469e67[_0x1a6581(0x210,0x1b2)+'cyMs']['p50']<_0x56d79a[_0x3670b2(0xf8,0x7e)+_0x3670b2(0x127,0x13b)]}),_0x281ff7['push']({'name':_0x3670b2(0xc6,0x14c)+_0x469e67['provi'+_0x1a6581(0x1dd,0x168)]+(_0x1a6581(0x206,0x266)+_0x3670b2(0x59,0x62)+_0x1a6581(0x26d,0x2a5)),'target':'<\x20'+_0x1a281c['llmP9'+_0x3670b2(0x9d,0xa9)]+'ms','observed':_0x469e67['laten'+_0x3670b2(0x4c,0x18)][_0x3670b2(0x132,0x112)]+'ms','pass':_0x469e67['laten'+_0x1a6581(0x1e7,0x1a8)]['p95']<_0x4f1c51['llmP9'+'5Ms']}),_0x281ff7['push']({'name':_0x3670b2(0xc6,0x13d)+_0x469e67['provi'+_0x1a6581(0x1dd,0x230)]+(_0x1a6581(0x2d5,0x310)+_0x3670b2(0x88,0x37)+'tput\x20'+'rate'),'target':_0x1a6581(0x21d,0x20c)+(_0xe50bbd[_0x3670b2(0x33,-0x36)+'Outpu'+_0x1a6581(0x270,0x2d8)]*(-0x82d*0x1+-0x1*-0x2306+0x209*-0xd))[_0x3670b2(0x11c,0xfd)+'ed'](-0x1cef+0x3f0+0x18ff)+'%','observed':(_0x469e67[_0x1a6581(0x1ce,0x1a9)+_0x3670b2(0xd0,0x59)]*(-0x1480+-0x700+0x1be4))[_0x3670b2(0x11c,0x14b)+'ed'](0x32c+-0xc8e+0x963)+'%','pass':_0x469e67[_0x3670b2(0x33,0x64)+_0x1a6581(0x26b,0x24a)]>=_0x2992cb[_0x1a6581(0x1ce,0x245)+_0x3670b2(0x126,0xb7)+'tRate']}),_0x281ff7[_0x1a6581(0x2a9,0x2d9)]({'name':'llm['+_0x469e67[_0x3670b2(0xbe,0x78)+_0x3670b2(0x42,0x40)]+(']\x20bad'+_0x3670b2(0x56,0xd7)+'ut\x20ra'+'te'),'target':_0x3670b2(0x8f,0x84)+(_0xb8f04f['badOu'+_0x3670b2(0xdc,0x153)+_0x3670b2(0x8b,0x39)]*(-0xeda+0xb*0x38b+-0x5*0x4bf))[_0x3670b2(0x11c,0x184)+'ed'](0x415+0x1*-0x4cd+0x8*0x17)+'%','observed':(_0x469e67['badRa'+'te']*(-0x17f2+-0x1e59+-0x36af*-0x1))['toFix'+'ed'](-0x871*-0x3+-0x1eb7+0x1*0x565)+'%','pass':_0x469e67[_0x1a6581(0x2a2,0x231)+'te']<=_0x1f9a87[_0x1a6581(0x1fd,0x1b6)+_0x3670b2(0xdc,0x10b)+'ate']});if(_0x1bdac0[_0x1a6581(0x2ab,0x281)+_0x3670b2(0xfe,0x144)+_0x3670b2(0xb8,0xe7)+'ed']){let _0x5e44d1=_0xe325de['negat'+_0x1a6581(0x299,0x31e)+_0x1a6581(0x253,0x2b0)+'ed'],_0x9f6e61=(_0x5e44d1[_0x3670b2(0x76,0xd0)+_0x3670b2(0xeb,0xf7)]*(0x1861*-0x1+-0xe0a+0x26cf))[_0x3670b2(0x11c,0xff)+'ed'](0x1740+0x9dc+-0x211b)+'%',_0x3a7262={'name':_0x1a6581(0x2ab,0x27a)+_0x3670b2(0xfe,0x109)+_0x1a6581(0x253,0x20f)+'edFra'+_0x3670b2(0x69,0xd9),'target':'<\x20'+(_0x4ec7f5[_0x1a6581(0x2ab,0x222)+_0x3670b2(0xfe,0xdf)+'meSav'+_0x1a6581(0x20c,0x275)]*(0x19d5+0x1*0x175+-0x1ae6))['toFix'+'ed'](-0x2001+0x1b7a+0x487)+'%','observed':_0x9f6e61,'pass':_0x5e44d1[_0x3670b2(0xc1,0x96)+_0x3670b2(0x7c,0x53)]!==_0x3670b2(0xf7,0xdd)};_0x5e44d1[_0x1a6581(0x25c,0x2d2)+'ity']==='yello'+'w'&&(_0x3a7262[_0x3670b2(0xc1,0x84)+_0x1a6581(0x217,0x243)]='warn'),_0x281ff7[_0x1a6581(0x2a9,0x324)](_0x3a7262);}return _0x281ff7;}else{let _0x3d90ae=_0x590090[_0x3670b2(0x53,0x9)+_0x3670b2(0x34,-0x7)+_0x3670b2(0x93,0xf4)]??0x6*0x1+0x1880+0x2*-0xc43;_0x3d90ae<0x1d54+-0x1970+0x1*-0x3e3&&_0x453f37++,_0x3d90ae<-0x22*-0x17+0xd87*-0x1+0xb*0xf4&&_0x5324e2++,_0x3d90ae<0x1243+0x1d8*0x13+0x8e1*-0x6&&_0x4ba60d++;}}}else{let _0x575f35=_0x4e4928[_0x1a6581(0x1e1,0x19f)+'r'](_0x302ae8=>_0x302ae8[_0x3670b2(0xe6,0x67)]===_0x1a6581(0x1d9,0x17e)+_0x1a6581(0x1d6,0x247)+'tic'),_0x234947=_0x2754c9['filte'+'r'](_0x4a4ae5=>_0x4a4ae5[_0x1a6581(0x281,0x2c9)]==='llm'),_0x48b2c6=_0x37f85d(_0x3670b2(0x3e,0x1f)+_0x3670b2(0x3b,0x7f)+'tic',_0x575f35),_0x2c25fe=_0x4bf7e0(_0x3670b2(0x135,0xce),_0x234947),_0x1a1966=_0x7be906(_0x51948b),_0x2024c4=_0x3bccc3(_0x2b420f);return{'source':_0x71897,'records':_0x4db4cb[_0x3670b2(0xe2,0x15e)+'h'],'parseErrors':_0x4f71b6,'deterministic':_0x48b2c6,'llm':_0x2c25fe,'byMode':_0x1a1966,'advanced':_0x2024c4,'thresholds':_0x4d9e9c(_0x48b2c6,_0x2c25fe,_0x2024c4)};}}function _0x3670b2(_0x59ba4f,_0x4eae12){return _0x33d284(_0x4eae12,_0x59ba4f- -0x2d1);}let _0x165543={};if(_0x155079[_0x1a6581(0x27d,0x27e)+'h']>-0x3*0x3a6+0xc5c+-0x16a&&(_0x155079[_0x1a6581(0x216,0x218)]((_0xaf1c62,_0x4ab97f)=>_0xaf1c62-_0x4ab97f),_0x165543['ttftM'+'s']={'p50':g(_0x155079,-0x789*-0x5+-0x9d*-0x2f+0x1c0*-0x26+0.5),'p95':g(_0x155079,-0x48c+0x88*0x38+-0x1934+0.95),'n':_0x155079[_0x1a6581(0x27d,0x2e3)+'h']}),_0x17a163[_0x1a6581(0x27d,0x2b9)+'h']>-0x3e8*0x5+-0xd40+0x419*0x8){if(_0x3670b2(0x77,0x6c)==='AqtQy'){_0x17a163[_0x1a6581(0x216,0x263)]((_0x34801a,_0x113b00)=>_0x34801a-_0x113b00),_0x165543[_0x1a6581(0x203,0x233)+_0x3670b2(0x4d,0xb)+'s']={'p50':g(_0x17a163,-0xf1+0x1afe+-0x1a0d+0.5),'p95':g(_0x17a163,0x1426+0x1cb+0x1*-0x15f1+0.95),'total':_0x5ae734,'n':_0x17a163[_0x3670b2(0xe2,0x84)+'h']};let _0x1b17c9=_0x1f32de/_0x17a163[_0x1a6581(0x27d,0x20f)+'h'];const _0xd4f8ac={};_0xd4f8ac[_0x1a6581(0x1e6,0x182)]=_0x1f32de,_0xd4f8ac[_0x3670b2(0x76,0x71)+_0x3670b2(0xeb,0xad)]=_0x1b17c9,_0xd4f8ac['n']=_0x17a163[_0x3670b2(0xe2,0xbc)+'h'],_0xd4f8ac[_0x3670b2(0xc1,0x92)+'ity']=_0x1b17c9>=u[_0x3670b2(0x110,0x12d)+_0x3670b2(0xfe,0x7b)+'meSav'+_0x3670b2(0x71,0x6)]?_0x3670b2(0xf7,0x126):_0x1b17c9>=u[_0x3670b2(0x110,0xe3)+_0x3670b2(0xfe,0xe2)+_0x1a6581(0x253,0x23d)+_0x3670b2(0x109,0x87)+_0x3670b2(0xf6,0x7f)]?'yello'+'w':'ok',_0x165543['negat'+'iveTi'+'meSav'+'ed']=_0xd4f8ac;}else{let _0x36337f=_0x58b0a9['entri'+'es'](_0x58b1cf[_0x3670b2(0xbe,0xe2)+_0x1a6581(0x236,0x1e9)+'l'][_0x1a6581(0x2af,0x2d1)+_0x3670b2(0x85,0x10c)])[_0x1a6581(0x216,0x1ea)]((_0x1294c7,_0x405d47)=>_0x405d47[-0x1*0x158f+-0x24c8+-0x1*-0x3a58]-_0x1294c7[-0x10cf+-0x25ec+0x2*0x1b5e])['map'](([_0x1c95c0,_0x41065b])=>_0x1c95c0+'='+_0x41065b)[_0x1a6581(0x273,0x2ca)]('\x20');_0x249bdb['push'](_0x3670b2(0xe9,0xb5)+_0x1a6581(0x284,0x2c8)+'\x20\x20\x20\x20\x20'+_0x3670b2(0xe5,0x63)+_0x1a6581(0x269,0x28e)+'\x20'+_0x36337f);}}function _0x1a6581(_0x5d748c,_0xefcd40){return _0x33d284(_0xefcd40,_0x5d748c- -0x136);}return _0x1fe015>0x155+0xc84+-0x2c5*0x5&&(_0x165543['accep'+_0x1a6581(0x255,0x2cf)+'etRat'+'e']={'rate':_0x435519/_0x1fe015,'n':_0x1fe015}),_0x58efdb>-0x1d3e*0x1+0x2*-0x64d+0x67*0x68&&(_0x165543[_0x1a6581(0x2cc,0x2bc)+'Hover'+'Dismi'+_0x1a6581(0x21f,0x1d9)+'e']={'rate':_0x37a04a/_0x58efdb,'n':_0x58efdb}),_0x3806ca>0x1af*-0xb+-0x165*-0x11+-0x530&&(_0x165543[_0x3670b2(0x133,0xf8)+_0x1a6581(0x1d4,0x166)+_0x3670b2(0x7e,0x15)+'entRa'+'te']={'rate':_0x41760d/_0x3806ca,'n':_0x3806ca}),(_0x358ae3>-0x1d15+0xf46+0xdcf||_0x597a83>0x17*-0x12f+-0x58f*0x6+-0x6bb*-0x9)&&(_0x165543[_0x1a6581(0x259,0x24c)+_0x1a6581(0x236,0x1b2)+'l']={'shown':_0x358ae3,'swapped':_0x597a83,'correctRate':_0x597a83>-0x2*-0xde+-0x253d+0x2381?_0x146fdd/_0x597a83:-0x12f6+0x85e+-0x1*-0xa98,'meanSwapMs':_0x597a83>-0x1ae7+0x2*-0x7d8+0x2a97?_0x1f0752/_0x597a83:-0xef8+0x1*0x25b+0xc9d,..._0x597a83>0x1b*-0xf2+0x1*-0x1195+0x2b1b?{'flickerRate':_0x37d05c/_0x597a83}:{},...Object[_0x3670b2(0xab,0xb7)](_0x20b076)['lengt'+'h']>0x1a7b*-0x1+-0x48*0x4+-0xbf*-0x25?{'bySource':_0x20b076}:{},..._0x358ae3>0x2083+0x59*0x4c+-0x3aef?{'acceptRate':_0x2eb88f/_0x358ae3}:{}}),_0x459110>0x1120*0x2+0x32*0xc1+-0x2*0x23f9&&(_0x165543['saved'+_0x1a6581(0x29b,0x282)]=_0x453f37/_0x459110,_0x165543['saved'+_0x1a6581(0x1d7,0x16c)]=_0x5324e2/_0x459110,_0x165543['saved'+_0x1a6581(0x27e,0x29f)]=_0x4ba60d/_0x459110),_0x165543;}function $(_0x915d1b,_0xf354d4){let _0x57d39d=new Map();function _0x40dc01(_0xc364a5,_0x28e556){return _0x33d284(_0xc364a5,_0x28e556- -0x1b7);}for(let _0x236e2b of _0xf354d4)if(_0x236e2b[_0x44d9d9(0x570,0x4f7)+'ders'])for(let _0x4f7929 of _0x236e2b[_0x44d9d9(0x526,0x4f7)+'ders']){if(_0x40dc01(0x225,0x251)==='fcgZD'){let _0xd06b95=_0x4fa250['slice'](-0x5c1*0x1+0x1621+-0x1054);_0x58170b[_0xd06b95]=(_0x3001bf[_0xd06b95]??0x7f3+-0xa6c+0x279)+(0x37e*-0x4+0x1*-0x171b+0x2514);}else{let _0x5cbfc0=_0x57d39d[_0x40dc01(0x196,0x1ba)](_0x4f7929['provi'+'der']);_0x5cbfc0||(_0x5cbfc0=[],_0x57d39d[_0x44d9d9(0x4f8,0x4ec)](_0x4f7929[_0x44d9d9(0x498,0x4f7)+_0x40dc01(0x117,0x15c)],_0x5cbfc0)),_0x5cbfc0[_0x40dc01(0x260,0x228)](_0x4f7929);}}let _0x4bcfc3=[];for(let [_0x452cde,_0x19b38f]of _0x57d39d)_0x4bcfc3['push'](_(_0x452cde,_0x19b38f));_0x4bcfc3[_0x40dc01(0x145,0x195)]((_0x5e03db,_0x50fc7c)=>_0x5e03db[_0x44d9d9(0x509,0x4f7)+_0x44d9d9(0x46c,0x47b)][_0x40dc01(0x1bb,0x16a)+_0x44d9d9(0x44c,0x4c3)+_0x44d9d9(0x571,0x541)](_0x50fc7c[_0x44d9d9(0x558,0x4f7)+'der']));let _0xf371ef=_0xf354d4[_0x44d9d9(0x4cf,0x47f)+'r'](_0x262b75=>_0x262b75[_0x44d9d9(0x53f,0x4f6)])[_0x44d9d9(0x4d7,0x51b)+'h'],_0x182418=S(_0xf354d4,'accep'+_0x44d9d9(0x486,0x46b)),_0x323f74=S(_0xf354d4,_0x40dc01(0x11d,0x1a0)+_0x44d9d9(0x48f,0x47c)),_0x5cf1ad=S(_0xf354d4,_0x44d9d9(0x564,0x518)),_0x522181=S(_0xf354d4,'expir'+'ed');const _0x4b570f={};_0x4b570f[_0x40dc01(0x210,0x200)]=_0x915d1b,_0x4b570f[_0x44d9d9(0x4f5,0x484)]=_0xf354d4[_0x40dc01(0x275,0x1fc)+'h'],_0x4b570f[_0x40dc01(0x216,0x1d7)]=_0xf371ef,_0x4b570f['accep'+_0x44d9d9(0x471,0x46b)]=_0x182418;function _0x44d9d9(_0x436edd,_0x576a23){return _0x33d284(_0x436edd,_0x576a23-0x168);}return _0x4b570f['dismi'+'ssed']=_0x323f74,_0x4b570f[_0x40dc01(0x1c7,0x1f9)]=_0x5cf1ad,_0x4b570f[_0x40dc01(0x1e4,0x214)+'ed']=_0x522181,_0x4b570f[_0x40dc01(0x222,0x234)+_0x44d9d9(0x4e0,0x506)+_0x44d9d9(0x4f9,0x509)]=_0xf371ef>0x1*-0xa75+-0x18a8+-0x65*-0x59?_0x182418/_0xf371ef:0x1*-0x1261+0x1c3e+0x19*-0x65,_0x4b570f['provi'+_0x40dc01(0x183,0x18a)]=_0x4bcfc3,_0x4b570f;}function S(_0x1dd957,_0xf67aa){let _0x57d6bd=0xb*0x332+-0x2*0x599+0x1c*-0xdb;function _0xc97ac1(_0xe2d9ab,_0x300d63){return _0x27f7dd(_0x300d63,_0xe2d9ab- -0x1f1);}function _0x125ba5(_0x75a063,_0x458e4e){return _0x27f7dd(_0x75a063,_0x458e4e- -0x2fe);}for(let _0x3fc208 of _0x1dd957)_0x3fc208[_0xc97ac1(0x26e,0x2a1)+_0xc97ac1(0x221,0x1b1)]===_0xf67aa&&_0x57d6bd++;return _0x57d6bd;}function _0x33d284(_0x16ab7e,_0x38a1af){return _0x4594(_0x38a1af-0x130,_0x16ab7e);}function _(_0x8aa58d,_0x8e2a72){const _0x1d93f8={};_0x1d93f8[_0x2f4347(0x5b,0x18)+_0xa943a(0xc8,0x93)]=0x0,_0x1d93f8[_0xa943a(0x2d,0x51)]=0x0,_0x1d93f8[_0x2f4347(0x41,-0x47)+_0x2f4347(-0xaf,-0x130)]=0x0;function _0x2f4347(_0x3be0b2,_0x52bde1){return _0x33d284(_0x52bde1,_0x3be0b2- -0x3b2);}_0x1d93f8[_0xa943a(0xa6,0x12e)+'ed']=0x0,_0x1d93f8['error']=0x0;function _0xa943a(_0x1940f2,_0x111537){return _0x33d284(_0x111537,_0x1940f2- -0x304);}let _0x36f300=_0x8e2a72[_0x2f4347(-0x9d,-0x29)](_0x19d0be=>_0x19d0be['laten'+_0x2f4347(-0x95,-0x5f)])[_0xa943a(0x48,0x51)]((_0x11df2c,_0x3598c6)=>_0x11df2c-_0x3598c6),_0x3bb19e=_0x1d93f8;for(let _0x2e1b11 of _0x8e2a72)_0x3bb19e[_0x2e1b11[_0xa943a(0xa4,0x8a)+'t']]++;let _0x310460=_0x3bb19e[_0xa943a(0x109,0xbb)+'ced'],_0x2935f0=_0x3bb19e[_0xa943a(0x2d,0x32)]+_0x3bb19e[_0x2f4347(0x41,0x25)+_0x2f4347(-0xaf,-0x26)]+_0x3bb19e[_0x2f4347(0x4a,0x80)],_0x26b5c5=_0x310460+_0x2935f0;return{'provider':_0x8aa58d,'count':_0x8e2a72[_0xa943a(0xaf,0x69)+'h'],'produced':_0x3bb19e[_0x2f4347(0x5b,0xc3)+_0x2f4347(0x1a,-0x5f)],'empty':_0x3bb19e[_0xa943a(0x2d,-0x1d)],'rejected':_0x3bb19e[_0xa943a(0xef,0x89)+'ted'],'aborted':_0x3bb19e[_0x2f4347(-0x8,0x22)+'ed'],'error':_0x3bb19e['error'],'latencyMs':{'p50':g(_0x36f300,0x71*-0x1f+0x5c*-0x61+0x308b+0.5),'p95':g(_0x36f300,-0x23ac+0x19be+0x9ee+0.95),'p99':g(_0x36f300,-0x1*-0x18d1+-0x1095*0x1+-0x83c+0.99)},'validRate':_0x26b5c5>0x2*-0x1163+0x20e8+-0x1*-0x1de?_0x310460/_0x26b5c5:0x17c4+-0x173+0x1651*-0x1,'badRate':_0x26b5c5>0x110c+0x1*0xb8c+-0x1c98?_0x2935f0/_0x26b5c5:-0x582+-0xf*-0x119+0x55*-0x21};}function N(_0x26a9e9,_0x1f50d8,_0x3c094a){let _0x1cc12f=[];for(let _0x132525 of _0x26a9e9['provi'+'ders'])_0x1cc12f[_0x2a1265(0x664,0x5fe)]({'name':'deter'+_0x2a1265(0x5a1,0x52b)+_0x2a1265(0x532,0x55a)+_0x132525[_0x2a1265(0x536,0x5ae)+'der']+(_0x558b10(0x3d9,0x455)+_0x2a1265(0x570,0x549)+'ncy'),'target':'<\x20'+u[_0x558b10(0x3b3,0x32b)+_0x558b10(0x3b0,0x3fe)+_0x558b10(0x49e,0x49c)+'0Ms']+'ms','observed':_0x132525[_0x558b10(0x3ea,0x423)+_0x2a1265(0x517,0x53c)][_0x2a1265(0x545,0x587)]+'ms','pass':_0x132525[_0x558b10(0x3ea,0x3cf)+_0x558b10(0x3c1,0x359)]['p50']<u[_0x2a1265(0x4c2,0x52e)+_0x558b10(0x3b0,0x404)+_0x558b10(0x49e,0x493)+_0x2a1265(0x5ad,0x617)]});for(let _0x1c4e31 of _0x1f50d8[_0x558b10(0x433,0x408)+'ders'])_0x1cc12f[_0x558b10(0x483,0x424)]({'name':_0x558b10(0x43b,0x45c)+_0x1c4e31[_0x2a1265(0x561,0x5ae)+_0x2a1265(0x55d,0x532)]+(_0x558b10(0x3d9,0x3d2)+'\x20late'+_0x558b10(0x447,0x4ad)),'target':'<\x20'+u[_0x2a1265(0x589,0x5e8)+_0x558b10(0x49c,0x4e4)]+'ms','observed':_0x1c4e31[_0x2a1265(0x5c6,0x565)+'cyMs'][_0x2a1265(0x5bc,0x587)]+'ms','pass':_0x1c4e31['laten'+_0x558b10(0x3c1,0x3c5)]['p50']<u[_0x558b10(0x46d,0x4b1)+_0x558b10(0x49c,0x470)]}),_0x1cc12f[_0x2a1265(0x57a,0x5fe)]({'name':_0x2a1265(0x555,0x5b6)+_0x1c4e31[_0x558b10(0x433,0x3f0)+_0x2a1265(0x57e,0x532)]+(_0x558b10(0x3e0,0x41e)+_0x2a1265(0x55a,0x549)+_0x2a1265(0x5ae,0x5c2)),'target':'<\x20'+u[_0x558b10(0x421,0x399)+_0x558b10(0x412,0x3db)]+'ms','observed':_0x1c4e31[_0x2a1265(0x58a,0x565)+_0x2a1265(0x5af,0x53c)]['p95']+'ms','pass':_0x1c4e31[_0x558b10(0x3ea,0x384)+_0x558b10(0x3c1,0x3d3)][_0x558b10(0x4a7,0x4ce)]<u[_0x558b10(0x421,0x3fc)+_0x2a1265(0x506,0x58d)]}),_0x1cc12f['push']({'name':'llm['+_0x1c4e31['provi'+_0x558b10(0x3b7,0x3e4)]+(']\x20val'+_0x2a1265(0x567,0x578)+'tput\x20'+_0x558b10(0x40f,0x423)),'target':_0x558b10(0x3f7,0x3a1)+(u['valid'+_0x2a1265(0x634,0x616)+'tRate']*(0x116c*0x1+-0x1*-0x62f+-0x7*0x351))[_0x558b10(0x491,0x4f1)+'ed'](0x1334+-0x961+-0x9d3)+'%','observed':(_0x1c4e31[_0x558b10(0x3a8,0x32f)+_0x2a1265(0x632,0x5c0)]*(-0x211c+-0x1836+-0x53*-0xb2))[_0x2a1265(0x5f9,0x60c)+'ed'](0x16*0x39+-0x1260*0x1+0xd7b)+'%','pass':_0x1c4e31[_0x558b10(0x3a8,0x363)+_0x558b10(0x445,0x414)]>=u[_0x2a1265(0x4da,0x523)+_0x558b10(0x49b,0x509)+'tRate']}),_0x1cc12f[_0x2a1265(0x5d1,0x5fe)]({'name':_0x558b10(0x43b,0x3e2)+_0x1c4e31[_0x558b10(0x433,0x495)+'der']+(']\x20bad'+_0x2a1265(0x56f,0x546)+_0x558b10(0x4b6,0x4e7)+'te'),'target':'<=\x20'+(u['badOu'+_0x2a1265(0x602,0x5cc)+_0x558b10(0x400,0x3ca)]*(-0x25db+-0xe09*-0x1+0x1836))['toFix'+'ed'](-0x150f+-0xd55*-0x1+-0x2e*-0x2b)+'%','observed':(_0x1c4e31[_0x2a1265(0x5d2,0x5f7)+'te']*(-0xb63+-0x8db*0x3+0x2658))[_0x558b10(0x491,0x43a)+'ed'](0x481*-0x4+-0x1d*0x5e+-0xb3*-0x29)+'%','pass':_0x1c4e31[_0x2a1265(0x675,0x5f7)+'te']<=u['badOu'+'tputR'+_0x558b10(0x400,0x3ff)]});function _0x558b10(_0x7afd62,_0x2280d5){return _0x33d284(_0x2280d5,_0x7afd62-0xa4);}if(_0x3c094a[_0x2a1265(0x66c,0x600)+'iveTi'+_0x558b10(0x42d,0x41e)+'ed']){if(_0x2a1265(0x588,0x5a5)!==_0x558b10(0x42a,0x40d)){let _0x550e32=new _0x211420();for(let _0xf64c14 of _0x492765)if(_0xf64c14[_0x558b10(0x433,0x43a)+_0x558b10(0x3e5,0x426)])for(let _0x24a2d0 of _0xf64c14[_0x2a1265(0x606,0x5ae)+_0x558b10(0x3e5,0x425)]){let _0x46fac0=_0x550e32[_0x2a1265(0x511,0x590)](_0x24a2d0['provi'+'der']);_0x46fac0||(_0x46fac0=[],_0x550e32['set'](_0x24a2d0[_0x2a1265(0x542,0x5ae)+_0x558b10(0x3b7,0x39a)],_0x46fac0)),_0x46fac0[_0x558b10(0x483,0x4e0)](_0x24a2d0);}let _0x15f456=[];for(let [_0x4a133f,_0x5b2b7f]of _0x550e32)_0x15f456[_0x2a1265(0x5ce,0x5fe)](_0x2d42a0(_0x4a133f,_0x5b2b7f));_0x15f456['sort']((_0x24926b,_0x23209c)=>_0x24926b['provi'+_0x558b10(0x3b7,0x3a7)][_0x2a1265(0x5a9,0x540)+_0x2a1265(0x55f,0x57a)+_0x2a1265(0x627,0x5f8)](_0x23209c[_0x558b10(0x433,0x430)+_0x558b10(0x3b7,0x401)]));let _0x10c2bd=_0x538cfe[_0x558b10(0x3bb,0x371)+'r'](_0xd1cb4a=>_0xd1cb4a[_0x2a1265(0x5c3,0x5ad)])[_0x558b10(0x457,0x3d0)+'h'],_0x29de19=_0x7fef2e(_0x40e0ae,'accep'+_0x558b10(0x3a7,0x352)),_0x2b811b=_0x2a3d1c(_0x5d81e6,_0x558b10(0x3fb,0x3a4)+_0x558b10(0x3b8,0x3fa)),_0x3969e9=_0x286a8b(_0x168627,'stale'),_0x18dbf9=_0x87bd4(_0x491243,_0x2a1265(0x573,0x5ea)+'ed');const _0x4fb888={};return _0x4fb888[_0x558b10(0x45b,0x4e3)]=_0x488df6,_0x4fb888[_0x558b10(0x3c0,0x3eb)]=_0x135e1b['lengt'+'h'],_0x4fb888[_0x558b10(0x432,0x3e7)]=_0x10c2bd,_0x4fb888[_0x2a1265(0x649,0x60a)+_0x2a1265(0x5aa,0x522)]=_0x29de19,_0x4fb888[_0x2a1265(0x4fa,0x576)+'ssed']=_0x2b811b,_0x4fb888[_0x2a1265(0x55d,0x5cf)]=_0x3969e9,_0x4fb888[_0x558b10(0x46f,0x4f1)+'ed']=_0x18dbf9,_0x4fb888['accep'+'tance'+_0x558b10(0x445,0x3d6)]=_0x10c2bd>0x1269+-0x601+0x634*-0x2?_0x29de19/_0x10c2bd:-0x1*0x1f35+-0x12e+0x2063,_0x4fb888[_0x558b10(0x433,0x43b)+_0x558b10(0x3e5,0x422)]=_0x15f456,_0x4fb888;}else{let _0x4da30e=_0x3c094a[_0x2a1265(0x5c5,0x600)+_0x2a1265(0x63e,0x5ee)+'meSav'+'ed'],_0x4aef0e=(_0x4da30e[_0x2a1265(0x5d1,0x566)+_0x558b10(0x460,0x44e)]*(-0x1505+-0x1a22+-0x2f8b*-0x1))[_0x2a1265(0x5c8,0x60c)+'ed'](-0x47e+-0x2507*-0x1+-0x1044*0x2)+'%',_0x116b14={'name':_0x558b10(0x485,0x407)+_0x2a1265(0x670,0x5ee)+_0x558b10(0x42d,0x3b4)+'edFra'+_0x558b10(0x3de,0x438),'target':'<\x20'+(u[_0x558b10(0x485,0x45f)+_0x2a1265(0x5cb,0x5ee)+_0x2a1265(0x5c8,0x5a8)+_0x2a1265(0x50e,0x561)]*(0x1e52+-0xe4+0x76*-0x3f))[_0x558b10(0x491,0x470)+'ed'](0x10c6+0x1*-0x17e7+0x721*0x1)+'%','observed':_0x4aef0e,'pass':_0x4da30e[_0x2a1265(0x5cf,0x5b1)+_0x2a1265(0x586,0x56c)]!==_0x2a1265(0x588,0x5e7)};_0x4da30e[_0x2a1265(0x5ec,0x5b1)+_0x558b10(0x3f1,0x44b)]===_0x558b10(0x3cd,0x37e)+'w'&&(_0x116b14['sever'+'ity']='warn'),_0x1cc12f[_0x2a1265(0x5c1,0x5fe)](_0x116b14);}}function _0x2a1265(_0x14c608,_0x2ff2d7){return _0x33d284(_0x14c608,_0x2ff2d7-0x21f);}return _0x1cc12f;}function _0x4594(_0x71897,_0x4db4cb){_0x71897=_0x71897-(0x11*0x21d+0x6e3*-0x5+0x6*0xe);const _0x4f71b6=_0x325f();let _0x4d9e9c=_0x4f71b6[_0x71897];if(_0x4594['OFXuuV']===undefined){var _0x3bdfcd=function(_0x11652b){const _0x47e085='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x243836='',_0x4d78c7='';for(let _0x465a08=0x2*-0x1210+-0x1fd6+0x21fb*0x2,_0x143a5c,_0x5dbe86,_0x2e6de3=0x15df+0x4*-0x25f+-0xc63;_0x5dbe86=_0x11652b['charAt'](_0x2e6de3++);~_0x5dbe86&&(_0x143a5c=_0x465a08%(0x188d+-0x7ff*-0x1+-0x2088)?_0x143a5c*(-0x25f6+0x268e+-0x58)+_0x5dbe86:_0x5dbe86,_0x465a08++%(-0x1fb4+0x2669*0x1+-0x6b1))?_0x243836+=String['fromCharCode'](-0x44f*0x5+0xbd3*0x3+-0x2b*0x4d&_0x143a5c>>(-(-0xac6+0x1*-0x1d7f+0x3*0xd6d)*_0x465a08&-0x21e1*0x1+-0x1019+0x3200)):0x1c5*0x9+0x1146+0xb11*-0x3){_0x5dbe86=_0x47e085['indexOf'](_0x5dbe86);}for(let _0x1effcb=-0x138e+0x1721+-0x131*0x3,_0x26c537=_0x243836['length'];_0x1effcb<_0x26c537;_0x1effcb++){_0x4d78c7+='%'+('00'+_0x243836['charCodeAt'](_0x1effcb)['toString'](0x1*0x13ff+0x332*-0x5+0x3f5*-0x1))['slice'](-(0x22fa+0xa1*0x19+-0x32b1));}return decodeURIComponent(_0x4d78c7);};_0x4594['MuQRWf']=_0x3bdfcd,_0x4594['cDumJV']={},_0x4594['OFXuuV']=!![];}const _0xe5b810=_0x4f71b6[0x6c9+0x2*0xb96+-0x1df5],_0x486daa=_0x71897+_0xe5b810,_0x5bd02b=_0x4594['cDumJV'][_0x486daa];return!_0x5bd02b?(_0x4d9e9c=_0x4594['MuQRWf'](_0x4d9e9c),_0x4594['cDumJV'][_0x486daa]=_0x4d9e9c):_0x4d9e9c=_0x5bd02b,_0x4d9e9c;}function W(_0x57041c){let _0x4b9a65=[];_0x4b9a65['push'](_0x4d678f(0x446,0x493)+_0x5376a3(0x220,0x1c7)+_0x4d678f(0x4d6,0x467)+_0x5376a3(0x242,0x2b5)+'eport'),_0x4b9a65['push'](_0x5376a3(0x1cc,0x16d)+'====='+_0x5376a3(0x1cc,0x1a6)+_0x5376a3(0x1cc,0x1a8)+_0x4d678f(0x4b0,0x4bd)),_0x4b9a65[_0x5376a3(0x239,0x275)](_0x5376a3(0x1ca,0x157)+_0x4d678f(0x53e,0x535)+'\x20\x20\x20\x20\x20'+_0x57041c[_0x4d678f(0x4ae,0x500)+'e']),_0x4b9a65[_0x5376a3(0x239,0x1d7)]('recor'+_0x5376a3(0x224,0x224)+'\x20\x20\x20\x20\x20'+_0x57041c['recor'+'ds']),_0x57041c['parse'+'Error'+'s']>0x191*0x5+0x21d7+-0x17d*0x1c&&_0x4b9a65[_0x5376a3(0x239,0x25c)]('parse'+_0x5376a3(0x199,0x221)+_0x4d678f(0x4a0,0x4f2)+_0x57041c[_0x4d678f(0x489,0x4d3)+'Error'+'s']),_0x4b9a65[_0x4d678f(0x51d,0x4cf)](''),_0x4b9a65[_0x4d678f(0x51d,0x542)](_0x4d678f(0x4cf,0x52e)+_0x4d678f(0x44a,0x3ed)+'tic\x20('+'n='+_0x57041c[_0x4d678f(0x44d,0x46b)+_0x5376a3(0x166,0x162)+_0x4d678f(0x54d,0x5ca)]['count']+')'),_0x4b9a65['push'](_0x4d678f(0x547,0x51b)+_0x5376a3(0x189,0x1b7)+_0x57041c['deter'+_0x4d678f(0x44a,0x441)+_0x4d678f(0x54d,0x58c)][_0x4d678f(0x4cc,0x47e)]+('\x20acce'+_0x5376a3(0x250,0x1cc))+_0x57041c[_0x5376a3(0x169,0x1a5)+'minis'+'tic']['accep'+'ted']+(_0x4d678f(0x492,0x496)+_0x5376a3(0x179,0x139)+'=')+_0x57041c['deter'+_0x4d678f(0x44a,0x4c1)+'tic'][_0x5376a3(0x1b1,0x225)+_0x5376a3(0x16e,0x16d)]+('\x20stal'+'e=')+_0x57041c[_0x4d678f(0x44d,0x486)+_0x5376a3(0x166,0x159)+'tic'][_0x5376a3(0x20a,0x282)]+(_0x4d678f(0x4b5,0x4e6)+_0x4d678f(0x4d7,0x537))+_0x57041c[_0x4d678f(0x44d,0x42c)+_0x5376a3(0x166,0x16c)+_0x5376a3(0x269,0x2cc)][_0x4d678f(0x509,0x589)+'ed']+(_0x4d678f(0x4ff,0x49f)+'pt-ra'+_0x5376a3(0x201,0x17a))+(_0x57041c[_0x5376a3(0x169,0x12d)+_0x5376a3(0x166,0x1a4)+_0x4d678f(0x54d,0x597)]['accep'+_0x4d678f(0x4dc,0x4b4)+_0x5376a3(0x1fb,0x26c)]*(-0xa*-0xa5+0x4f*0x74+-0x29da))[_0x4d678f(0x52b,0x4b4)+'ed'](0x1*0x8b9+0x1527+-0x1ddf)+'%');for(let _0x417f9f of _0x57041c[_0x5376a3(0x169,0xf1)+_0x5376a3(0x166,0x121)+'tic'][_0x5376a3(0x1e9,0x17c)+_0x4d678f(0x47f,0x4c0)])_0x4b9a65[_0x4d678f(0x51d,0x4c4)](_0x4d678f(0x4fe,0x511)+_0x417f9f[_0x5376a3(0x1e9,0x232)+_0x5376a3(0x16d,0x14a)][_0x4d678f(0x525,0x4e7)+'d'](0x22*0xad+0x968+-0x2050)+'\x20'+T(_0x417f9f));function _0x5376a3(_0x4407cb,_0x37e2ce){return _0x27f7dd(_0x37e2ce,_0x4407cb- -0x21a);}_0x4b9a65[_0x5376a3(0x239,0x2b8)](''),_0x4b9a65[_0x4d678f(0x51d,0x535)]('LLM\x20('+'n='+_0x57041c[_0x5376a3(0x260,0x2c1)]['count']+')'),_0x4b9a65[_0x5376a3(0x239,0x1bf)](_0x5376a3(0x263,0x22f)+_0x5376a3(0x189,0x1a8)+_0x57041c[_0x5376a3(0x260,0x273)][_0x5376a3(0x1e8,0x186)]+(_0x5376a3(0x21b,0x22e)+_0x5376a3(0x250,0x282))+_0x57041c[_0x4d678f(0x544,0x4e1)]['accep'+'ted']+('\x20dism'+'issed'+'=')+_0x57041c[_0x5376a3(0x260,0x2a3)][_0x4d678f(0x495,0x4c2)+_0x5376a3(0x16e,0x1e7)]+(_0x5376a3(0x1e1,0x264)+'e=')+_0x57041c['llm']['stale']+('\x20expi'+_0x5376a3(0x1f3,0x203))+_0x57041c[_0x5376a3(0x260,0x28b)]['expir'+'ed']+(_0x5376a3(0x21b,0x1d3)+_0x4d678f(0x466,0x443)+_0x4d678f(0x4e5,0x55f))+(_0x57041c[_0x5376a3(0x260,0x219)][_0x5376a3(0x245,0x2bb)+'tance'+_0x5376a3(0x1fb,0x1d2)]*(0x1*0x4fa+0x4*0x4b5+-0x176a))[_0x5376a3(0x247,0x1f7)+'ed'](-0x15b7+-0x1*-0x17d2+-0x2*0x10d)+'%');for(let _0x2f32d7 of _0x57041c[_0x5376a3(0x260,0x2d1)][_0x5376a3(0x1e9,0x270)+'ders'])_0x4b9a65[_0x4d678f(0x51d,0x58a)](_0x5376a3(0x21a,0x1d7)+_0x2f32d7[_0x5376a3(0x1e9,0x1f9)+'der'][_0x4d678f(0x525,0x538)+'d'](0xea7*0x1+-0x2*0x132b+0x7eb*0x3)+'\x20'+T(_0x2f32d7));function _0x4d678f(_0x19c39d,_0x581df6){return _0x27f7dd(_0x581df6,_0x19c39d-0xca);}let _0x4e3475=_0x57041c['byMod'+'e'][_0x5376a3(0x171,0x1a2)+'r'](_0xc578f5=>_0xc578f5[_0x4d678f(0x4f5,0x47c)]!=='deter'+'minis'+_0x4d678f(0x54d,0x532)&&_0xc578f5['mode']!==_0x5376a3(0x260,0x22b)&&_0xc578f5[_0x5376a3(0x176,0x1e6)]>-0x6*0x409+-0x427*-0x5+-0x373*-0x1);if(_0x4e3475[_0x5376a3(0x20d,0x1a5)+'h']>0x1dd4*-0x1+-0x2223+0x3ff7){if(_0x5376a3(0x1aa,0x157)===_0x4d678f(0x4e0,0x507)){let _0x2c9295=_0x2207ab[_0x4d678f(0x4f5,0x4ce)],_0x1e11ff=_0x4d01ee['get'](_0x2c9295);_0x1e11ff||(_0x1e11ff=[],_0x46888d[_0x5376a3(0x1de,0x247)](_0x2c9295,_0x1e11ff)),_0x1e11ff[_0x5376a3(0x239,0x221)](_0x461f46);}else{_0x4b9a65[_0x5376a3(0x239,0x26f)](''),_0x4b9a65[_0x5376a3(0x239,0x22c)](_0x4d678f(0x440,0x42c)+_0x5376a3(0x25f,0x2c7)+'s:');for(let _0x2db460 of _0x4e3475)_0x4b9a65[_0x5376a3(0x239,0x2a6)]('\x20\x20'+_0x2db460['mode']['padEn'+'d'](-0x220a+-0x7*-0x25c+0x466*0x4)+_0x4d678f(0x539,0x591)+_0x2db460[_0x5376a3(0x176,0x19f)]+(_0x4d678f(0x444,0x483)+'n=')+_0x2db460[_0x4d678f(0x4cc,0x469)]+('\x20acce'+_0x5376a3(0x250,0x265))+_0x2db460['accep'+_0x4d678f(0x441,0x40c)]+('\x20acce'+_0x4d678f(0x466,0x481)+'te=')+(_0x2db460[_0x5376a3(0x245,0x2c4)+'tance'+_0x4d678f(0x4df,0x4d3)]*(-0x7fd+-0x160d+0x1e6e))[_0x4d678f(0x52b,0x58d)+'ed'](-0x1c9d+-0x20c6+0x3d64)+'%');}}let _0x120712=_0x57041c[_0x4d678f(0x51b,0x55f)+_0x5376a3(0x226,0x28f)];if(_0x120712[_0x5376a3(0x1f4,0x22d)+'s']||_0x120712[_0x4d678f(0x477,0x44d)+_0x5376a3(0x178,0x176)+'s']||_0x120712[_0x4d678f(0x51f,0x4d4)+_0x4d678f(0x50d,0x541)+_0x4d678f(0x4c7,0x52d)+'ed']||_0x120712[_0x4d678f(0x529,0x4e0)+_0x5376a3(0x1e5,0x20c)+'etRat'+'e']||_0x120712[_0x4d678f(0x540,0x5c2)+_0x4d678f(0x52e,0x5a0)+'Dismi'+_0x5376a3(0x1af,0x1f8)+'e']||_0x120712[_0x4d678f(0x542,0x537)+_0x4d678f(0x448,0x497)+'iverg'+_0x5376a3(0x20c,0x227)+'te']||_0x120712['provi'+_0x4d678f(0x4aa,0x43c)+'l']||_0x120712[_0x5376a3(0x22c,0x221)+_0x4d678f(0x50f,0x514)]!==void(-0x15*0x6d+-0x1*0x1c95+-0x2586*-0x1)){if('hfFbB'===_0x4d678f(0x459,0x3df)){let _0x2bec95=0x2055+0xff5+-0x373*0xe;for(let _0x5ba48d of _0x4c9df6)_0x5ba48d['accep'+'tance']===_0x17cfe4&&_0x2bec95++;return _0x2bec95;}else{if(_0x4b9a65[_0x4d678f(0x51d,0x536)](''),_0x4b9a65[_0x4d678f(0x51d,0x4ef)](_0x4d678f(0x4c6,0x441)+'ced\x20('+_0x5376a3(0x19f,0x1e5)+'ields'+'):'),_0x120712['ttftM'+'s']&&_0x4b9a65['push'](_0x5376a3(0x1ee,0x1e6)+'T\x20\x20\x20\x20'+_0x4d678f(0x4f8,0x516)+'\x20n='+_0x120712[_0x4d678f(0x4d8,0x464)+'s']['n']+'\x20p50='+_0x120712['ttftM'+'s']['p50']+(_0x5376a3(0x212,0x1e5)+'5=')+_0x120712[_0x4d678f(0x4d8,0x47a)+'s'][_0x4d678f(0x541,0x4fa)]+'ms'),_0x120712[_0x4d678f(0x477,0x43c)+_0x4d678f(0x45c,0x411)+'s']&&_0x4b9a65[_0x4d678f(0x51d,0x542)]('\x20\x20tim'+'e-sav'+_0x4d678f(0x482,0x405)+_0x4d678f(0x539,0x4ca)+_0x120712[_0x4d678f(0x477,0x476)+_0x5376a3(0x178,0x1d7)+'s']['n']+_0x5376a3(0x1e7,0x17a)+_0x120712['timeS'+_0x5376a3(0x178,0x10a)+'s'][_0x4d678f(0x4a6,0x49f)]+('ms\x20p9'+'5=')+_0x120712[_0x5376a3(0x193,0x1b2)+_0x5376a3(0x178,0x151)+'s'][_0x4d678f(0x541,0x502)]+('ms\x20to'+_0x4d678f(0x513,0x518))+(_0x120712[_0x5376a3(0x193,0x1b4)+_0x5376a3(0x178,0x1e7)+'s'][_0x4d678f(0x460,0x421)]/(0x169+0x5*0x56+0xd1))['toFix'+'ed'](-0x1*-0xd32+-0x1303+0x5d2)+'s'),_0x120712[_0x4d678f(0x51f,0x5a6)+_0x4d678f(0x50d,0x49b)+_0x4d678f(0x4c7,0x546)+'ed']){if(_0x5376a3(0x20b,0x1d5)!=='eiRVO'){let _0x15be97=_0x190ec4[_0x5376a3(0x1a5,0x19c)](_0x499bb4);_0x8fe561(_0x15be97)?_0x5e915e['push'](_0x15be97):_0x3f1c04++;}else{let _0x3c9607=_0x120712['negat'+'iveTi'+_0x5376a3(0x1e3,0x25b)+'ed'],_0x382b8c=_0x3c9607[_0x4d678f(0x4d0,0x4af)+'ity']===_0x5376a3(0x222,0x247)?'\x20[RED'+']':_0x3c9607[_0x5376a3(0x1ec,0x1cc)+_0x4d678f(0x48b,0x4c9)]===_0x5376a3(0x183,0x13e)+'w'?'\x20[YEL'+_0x4d678f(0x54a,0x5a6):'';_0x4b9a65['push']('\x20\x20neg'+_0x4d678f(0x498,0x43f)+_0x5376a3(0x1c4,0x1bc)+_0x5376a3(0x240,0x25b)+_0x3c9607['n']+('\x20coun'+'t=')+_0x3c9607[_0x4d678f(0x45a,0x3da)]+(_0x5376a3(0x16a,0x16b)+_0x5376a3(0x258,0x1d1))+(_0x3c9607[_0x4d678f(0x485,0x47a)+_0x4d678f(0x4fa,0x542)]*(-0x2034+-0x1124*0x2+0x28*0x1ac))[_0x4d678f(0x52b,0x563)+'ed'](0x2ea*-0xa+-0x1*-0x1aa5+0x40*0xa)+'%'+_0x382b8c);}}if(_0x120712[_0x5376a3(0x245,0x21d)+_0x4d678f(0x4c9,0x4ad)+_0x4d678f(0x4ed,0x47c)+'e']&&_0x4b9a65['push'](_0x4d678f(0x4fd,0x53a)+_0x5376a3(0x1d2,0x1d1)+_0x5376a3(0x161,0x120)+_0x4d678f(0x539,0x4cb)+_0x120712[_0x5376a3(0x245,0x22b)+_0x5376a3(0x1e5,0x254)+'etRat'+'e']['n']+('\x20rate'+'=')+(_0x120712[_0x4d678f(0x529,0x515)+_0x4d678f(0x4c9,0x474)+_0x4d678f(0x4ed,0x52f)+'e'][_0x4d678f(0x4a9,0x528)]*(0x20c7+-0x2589*0x1+0x526))[_0x4d678f(0x52b,0x592)+'ed'](-0x11d+0xe17*0x2+-0x8*0x362)+'%'),_0x120712[_0x4d678f(0x540,0x51d)+_0x4d678f(0x52e,0x510)+_0x5376a3(0x17a,0x165)+_0x5376a3(0x1af,0x20a)+'e']&&_0x4b9a65[_0x5376a3(0x239,0x25f)](_0x5376a3(0x263,0x2ba)+_0x5376a3(0x191,0x19d)+_0x4d678f(0x4a1,0x489)+_0x5376a3(0x255,0x24d)+_0x120712[_0x4d678f(0x540,0x55b)+_0x4d678f(0x52e,0x4ac)+_0x4d678f(0x45e,0x4d3)+_0x4d678f(0x493,0x4b2)+'e']['n']+(_0x4d678f(0x4de,0x53b)+'=')+(_0x120712[_0x5376a3(0x25c,0x1ff)+_0x4d678f(0x52e,0x4f9)+_0x5376a3(0x17a,0x176)+'ssRat'+'e']['rate']*(-0x5e3+-0x146e+0x1ab5))[_0x5376a3(0x247,0x235)+'ed'](-0x1*0xc1+-0xd18+0x6*0x24f)+'%'),_0x120712['typed'+_0x4d678f(0x448,0x402)+'iverg'+'entRa'+'te']&&_0x4b9a65[_0x5376a3(0x239,0x25f)](_0x4d678f(0x4d1,0x458)+'ed-pa'+_0x5376a3(0x26b,0x2e2)+'\x20n='+_0x120712[_0x4d678f(0x542,0x508)+_0x4d678f(0x448,0x3dc)+_0x5376a3(0x1a9,0x168)+_0x4d678f(0x4f0,0x46b)+'te']['n']+('\x20rate'+'=')+(_0x120712[_0x5376a3(0x25e,0x2b9)+_0x4d678f(0x448,0x4b5)+_0x4d678f(0x48d,0x512)+'entRa'+'te'][_0x4d678f(0x4a9,0x474)]*(0x4*-0x4a9+-0x24*-0x72+0x300))['toFix'+'ed'](-0x24c7+-0x141*-0x7+0x1c01)+'%'),_0x120712[_0x5376a3(0x1e9,0x1be)+_0x4d678f(0x4aa,0x4c6)+'l']){if(_0x4d678f(0x514,0x550)===_0x5376a3(0x230,0x2a3)){let _0x54f374=_0x120712[_0x4d678f(0x4cd,0x48e)+_0x4d678f(0x4aa,0x46b)+'l'][_0x4d678f(0x47c,0x49c)+_0x4d678f(0x4bf,0x4ab)+'e']!==void(0x709*0x5+-0x956+-0x19d7)?_0x4d678f(0x488,0x40d)+_0x4d678f(0x4a5,0x45c)+(_0x120712['provi'+'siona'+'l'][_0x5376a3(0x198,0x111)+'erRat'+'e']*(-0x20b*-0x8+-0x6fb*-0x5+-0x32db))[_0x4d678f(0x52b,0x4af)+'ed'](-0x257a+-0x15a6+0x3b21*0x1)+'%':'',_0x558813=_0x120712[_0x5376a3(0x1e9,0x1d1)+_0x4d678f(0x4aa,0x4c5)+'l'][_0x4d678f(0x529,0x5a4)+'tRate']!==void(0x2303*0x1+0x463*0x7+-0x41b8)?_0x4d678f(0x4ff,0x56f)+_0x5376a3(0x257,0x26b)+(_0x120712['provi'+_0x4d678f(0x4aa,0x4c0)+'l'][_0x5376a3(0x245,0x286)+'tRate']*(0x1*0xe03+-0x2378+0x31f*0x7))['toFix'+'ed'](-0x2671+0x180f+0xe63)+'%':'';if(_0x4b9a65[_0x4d678f(0x51d,0x519)](_0x4d678f(0x52c,0x4ac)+_0x5376a3(0x213,0x20f)+_0x5376a3(0x1c0,0x213)+'\x20show'+'n='+_0x120712['provi'+_0x5376a3(0x1c6,0x22e)+'l'][_0x5376a3(0x1e8,0x1b2)]+(_0x5376a3(0x1bf,0x137)+_0x5376a3(0x170,0x1b0))+_0x120712[_0x5376a3(0x1e9,0x1e8)+'siona'+'l'][_0x5376a3(0x188,0x12d)+'ed']+(_0x5376a3(0x21d,0x19c)+_0x4d678f(0x487,0x4cc)+_0x5376a3(0x201,0x256))+(_0x120712['provi'+'siona'+'l'][_0x4d678f(0x548,0x4e7)+'ctRat'+'e']*(-0x771*-0x2+0x46c+-0x21a*0x9))[_0x4d678f(0x52b,0x4c4)+'ed'](-0x603*-0x3+0xdaa+-0x2*0xfd9)+(_0x5376a3(0x17d,0x19a)+'nSwap'+'=')+_0x120712[_0x5376a3(0x1e9,0x22f)+_0x5376a3(0x1c6,0x1fd)+'l'][_0x5376a3(0x21f,0x285)+'wapMs'][_0x5376a3(0x247,0x1ec)+'ed'](0x2*0x698+-0x1ade+0xdae)+'ms'+_0x54f374+_0x558813),_0x120712['provi'+'siona'+'l']['bySou'+_0x5376a3(0x1b0,0x1cd)]){if(_0x4d678f(0x54c,0x5a6)!=='IOHmp'){if(_0x432074['lengt'+'h']===-0x1f4+-0x6be*-0x2+-0xb88)return-0x1a1c+0xaf4+0xf28;if(_0x44c591<=-0x2556+-0x75e+0x2cb4)return _0x4a91e6[0x7*-0x2+-0x1706+0x1714]??-0x4b7*-0x2+0x189*-0x2+-0x65c;if(_0x52c892>=-0x4*0x8e2+0x1c21+-0x8*-0xed)return _0x232e69[_0x49ca4b[_0x4d678f(0x4f1,0x47f)+'h']-(0x1b72+0xe*-0x50+-0x1711)]??-0xdbe*0x1+-0x466+0x1224;let _0xa335e2=_0x4f9213['min'](_0x17d23a[_0x5376a3(0x20d,0x278)+'h']-(-0x1e60+0x24d0+-0x3d*0x1b),_0x4beb52['ceil'](_0x28628c*_0x291939[_0x4d678f(0x4f1,0x50e)+'h'])-(-0x2476+-0x1d*-0x12d+0x25e));return _0x338b30[_0xa335e2]??0x40*-0x38+0x1ada+-0xcda*0x1;}else{let _0x493338=Object['entri'+'es'](_0x120712['provi'+'siona'+'l']['bySou'+_0x5376a3(0x1b0,0x1e1)])['sort']((_0x305578,_0x43678d)=>_0x43678d[-0x61*0x43+0x2525+0xb1*-0x11]-_0x305578[-0x1205*0x2+0x7f4+-0x95d*-0x3])[_0x5376a3(0x16f,0x1c2)](([_0x201187,_0x267726])=>_0x201187+'='+_0x267726)[_0x5376a3(0x203,0x254)]('\x20');_0x4b9a65[_0x4d678f(0x51d,0x511)]('\x20\x20\x20\x20\x20'+'\x20\x20\x20\x20\x20'+_0x5376a3(0x214,0x1ba)+'\x20bySo'+_0x5376a3(0x1f9,0x1bf)+'\x20'+_0x493338);}}}else{let _0x183934=_0x39f108['now'][_0x5376a3(0x1dd,0x162)+_0x4d678f(0x545,0x595)+'g']()[_0x4d678f(0x4da,0x468)+'ce']('T','\x20')['repla'+'ce'](/\..*$/,''),_0x1daeef=[];return _0x1daeef[_0x5376a3(0x239,0x282)](_0x4d678f(0x4b7,0x459)+'-ghos'+_0x5376a3(0x22d,0x21d)+_0x4d678f(0x533,0x4c8)+_0x5376a3(0x197,0x1f9)+'\x20\x20'+_0x183934+(_0x4d678f(0x532,0x4d0)+_0x5376a3(0x1ef,0x197))+_0x4e27fa[_0x4d678f(0x512,0x4af)+_0x4d678f(0x4ea,0x560)+'r']+'\x20--'),_0x1daeef['push'](''),_0x1daeef[_0x4d678f(0x51d,0x50d)](_0x5d656e(_0x1bc6df)),_0x1daeef['push'](''),_0x1daeef[_0x4d678f(0x51d,0x523)]('watch'+_0x5376a3(0x231,0x1f7)+_0x4c0ef3[_0x4d678f(0x48c,0x49d)+'edPat'+'h']+(_0x5376a3(0x249,0x23f)+_0x5376a3(0x1bb,0x1cb)+_0x4d678f(0x51c,0x4e6)+_0x4d678f(0x457,0x42d))),_0x1daeef[_0x4d678f(0x4e7,0x4f4)]('\x0a');}}_0x120712[_0x5376a3(0x22c,0x1bf)+'At1']!==void(0x11f4*0x1+0x2405*-0x1+0x1211*0x1)&&_0x4b9a65[_0x4d678f(0x51d,0x51e)]('\x20\x20sav'+_0x5376a3(0x26a,0x2d3)+(_0x120712[_0x5376a3(0x22c,0x281)+_0x4d678f(0x50f,0x567)]*(0x1f94+0x110*0xb+-0x310*0xe))[_0x5376a3(0x247,0x246)+'ed'](-0x1483+0x1a*0x125+-0x93e)+_0x4d678f(0x52a,0x5a2)+((_0x120712[_0x5376a3(0x22c,0x23a)+'At3']??0x1*-0x1972+0x16ce+0x2a4)*(-0x1*-0x21ae+0x1a25+0xb3*-0x55))[_0x4d678f(0x52b,0x597)+'ed'](0x112*0x15+0x1c2a+-0x32a3)+_0x4d678f(0x53f,0x4bb)+((_0x120712[_0x5376a3(0x22c,0x1df)+_0x5376a3(0x20e,0x218)]??-0x18a5+-0x1*0x23d3+0x285*0x18)*(0x26ce+-0x3e5*-0x3+-0x3219))['toFix'+'ed'](-0x242c+-0x1*0xed1+0x32fe)+'%');}}_0x4b9a65[_0x4d678f(0x51d,0x52a)](''),_0x4b9a65[_0x4d678f(0x51d,0x49d)](_0x5376a3(0x19a,0x130)+_0x5376a3(0x244,0x286)+':');for(let _0x58732a of _0x57041c[_0x5376a3(0x1ea,0x233)+_0x4d678f(0x528,0x584)]){if('MvPeg'!==_0x4d678f(0x52f,0x4fd)){let _0x5609f4=_0x58732a['pass']?_0x58732a[_0x4d678f(0x4d0,0x489)+_0x5376a3(0x1a7,0x138)]===_0x5376a3(0x18c,0x208)?_0x4d678f(0x4be,0x487)+']':_0x4d678f(0x447,0x419)+']':_0x5376a3(0x180,0x16f)+']';_0x4b9a65[_0x5376a3(0x239,0x297)]('\x20\x20'+_0x5609f4+'\x20'+_0x58732a['name'][_0x5376a3(0x241,0x2ab)+'d'](-0xc18+0x1a0e+0x24d*-0x6)+('\x20targ'+_0x4d678f(0x4b8,0x515))+_0x58732a[_0x5376a3(0x1d5,0x1df)+'t'][_0x4d678f(0x525,0x585)+'d'](-0x74e+0x218e+-0x1a36)+_0x4d678f(0x4fb,0x53c)+_0x58732a['obser'+'ved']);}else{let _0x338d52=[],_0x5bb3dd=-0x2334+-0x212*0xd+-0x2*-0x1f0f;for(let _0x3bd3af of _0x241cc6[_0x4d678f(0x44f,0x43c)](/\r?\n/))if(_0x3bd3af['trim']())try{let _0x4de4c3=_0x419f99['parse'](_0x3bd3af);_0x1f4cb3(_0x4de4c3)?_0x338d52[_0x4d678f(0x51d,0x4c8)](_0x4de4c3):_0x5bb3dd++;}catch{_0x5bb3dd++;}const _0x7e3c1e={};return _0x7e3c1e[_0x5376a3(0x172,0x15b)+'ds']=_0x338d52,_0x7e3c1e[_0x4d678f(0x489,0x496)+_0x5376a3(0x23d,0x1cb)+'s']=_0x5bb3dd,_0x7e3c1e;}}return _0x4b9a65['join']('\x0a');}function T(_0x406274){function _0x4b42fe(_0x1f2424,_0x1f79f4){return _0x33d284(_0x1f2424,_0x1f79f4-0xac);}function _0x56abf3(_0x3d6c85,_0x5e245a){return _0x33d284(_0x3d6c85,_0x5e245a- -0x1dd);}return'n='+_0x406274[_0x4b42fe(0x440,0x3c8)]+_0x4b42fe(0x3c7,0x439)+_0x406274[_0x56abf3(0x1ac,0x169)+_0x56abf3(0x12b,0x140)]['p50']+('ms\x20p9'+'5=')+_0x406274[_0x56abf3(0x1bb,0x169)+_0x4b42fe(0x35c,0x3c9)][_0x4b42fe(0x445,0x4af)]+('ms\x20p9'+'9=')+_0x406274[_0x4b42fe(0x45f,0x3f2)+_0x56abf3(0xdb,0x140)][_0x4b42fe(0x3fe,0x3e0)]+('ms\x20va'+_0x4b42fe(0x418,0x45a))+(_0x406274[_0x56abf3(0xe5,0x127)+_0x56abf3(0x246,0x1c4)]*(-0x9ff+-0x1c67+-0x1365*-0x2))[_0x4b42fe(0x447,0x499)+'ed'](0x73*0x7+-0xaa6*-0x1+-0xdca)+('%\x20bad'+'=')+(_0x406274[_0x56abf3(0x1f9,0x1fb)+'te']*(0x1d5e+0xc1b*-0x2+0x3d*-0x14))['toFix'+'ed'](-0x119b+0x2193+0x3d*-0x43)+'%';}async function U(_0x353fce){let {records:_0xaff8b6,parseErrors:_0x293eb6}=await O(_0x353fce);return q(_0xaff8b6,_0x353fce,_0x293eb6);}function J(_0x12b433,_0x3b78d6){let _0x1a25f7=_0x3b78d6[_0x2d8daf(0x415,0x47c)]['toISO'+_0x4f6827(0x1b4,0x1b2)+'g']()[_0x4f6827(0x149,0x146)+'ce']('T','\x20')[_0x4f6827(0x149,0x140)+'ce'](/\..*$/,''),_0x14b774=[];function _0x2d8daf(_0x297812,_0x1b5dd7){return _0x33d284(_0x297812,_0x1b5dd7-0x8a);}function _0x4f6827(_0x375f9f,_0x500069){return _0x33d284(_0x500069,_0x375f9f- -0x253);}return _0x14b774['push']('--\x20pi'+'-ghos'+'t-ben'+_0x4f6827(0x1a2,0x16e)+_0x4f6827(0xea,0x14a)+'\x20\x20'+_0x1a25f7+(_0x2d8daf(0x4a5,0x47e)+'ame\x20#')+_0x3b78d6[_0x4f6827(0x181,0x141)+_0x4f6827(0x159,0x169)+'r']+_0x2d8daf(0x41c,0x42f)),_0x14b774[_0x2d8daf(0x46e,0x469)](''),_0x14b774[_0x2d8daf(0x45f,0x469)](W(_0x12b433)),_0x14b774['push'](''),_0x14b774[_0x2d8daf(0x3f4,0x469)]('watch'+'ing:\x20'+_0x3b78d6['watch'+_0x2d8daf(0x4e0,0x46e)+'h']+('\x20\x20\x20(C'+_0x2d8daf(0x36e,0x3eb)+_0x2d8daf(0x4e1,0x468)+_0x4f6827(0xc6,0xf4))),_0x14b774[_0x4f6827(0x156,0x1c0)]('\x0a');}export{u as THRESHOLDS,W as formatReport,O as loadMetrics,L as parseMetricsText,g as quantile,J as renderLiveFrame,U as runBenchmark,q as summarize};
|
package/dist/config.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SPDX-License-Identifier: SSPL-1.0
|
|
3
|
+
* SPDX-FileCopyrightText: 2025 Alessandro Pungitore <alessandro@pungitore.ch>
|
|
4
|
+
*/
|
|
1
5
|
import { type KnownProvider } from "@earendil-works/pi-ai";
|
|
2
6
|
export type ProviderKind = "cloud" | "local" | "openai-compat" | "race";
|
|
3
7
|
export interface OpenAICompatProviderConfig {
|
|
@@ -10,8 +14,17 @@ export interface OpenAICompatProviderConfig {
|
|
|
10
14
|
debounceMs: number;
|
|
11
15
|
maxTokens: number;
|
|
12
16
|
maxRecentMessages: number;
|
|
17
|
+
/** Sampling temperature. 0 for deterministic-ish output (best-effort). */
|
|
18
|
+
temperature: number;
|
|
13
19
|
/** Optional context-window hint passed to pi-ai. Defaults to 8192. */
|
|
14
20
|
contextWindow?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Number of parallel candidate completions to fire when `predictMulti`
|
|
23
|
+
* is called. 1 means no parallelism. Useful only at temperature > 0
|
|
24
|
+
* (otherwise all parallel calls return the same greedy result).
|
|
25
|
+
* Default 1. Override via `PI_GHOST_MERCURY_PARALLEL_N`.
|
|
26
|
+
*/
|
|
27
|
+
parallelN: number;
|
|
15
28
|
}
|
|
16
29
|
export interface CloudProviderConfig {
|
|
17
30
|
kind: "cloud";
|
|
@@ -21,6 +34,7 @@ export interface CloudProviderConfig {
|
|
|
21
34
|
debounceMs: number;
|
|
22
35
|
maxTokens: number;
|
|
23
36
|
maxRecentMessages: number;
|
|
37
|
+
temperature: number;
|
|
24
38
|
}
|
|
25
39
|
export interface LocalProviderConfig {
|
|
26
40
|
kind: "local";
|
|
@@ -29,6 +43,7 @@ export interface LocalProviderConfig {
|
|
|
29
43
|
debounceMs: number;
|
|
30
44
|
maxTokens: number;
|
|
31
45
|
maxRecentMessages: number;
|
|
46
|
+
temperature: number;
|
|
32
47
|
/** Optional context-window hint passed to pi-ai. Defaults to 8192. */
|
|
33
48
|
contextWindow?: number;
|
|
34
49
|
}
|
|
@@ -52,4 +67,35 @@ export declare const DEFAULT_LOCAL_CONFIG: LocalProviderConfig;
|
|
|
52
67
|
export declare const DEFAULT_MERCURY_CONFIG: OpenAICompatProviderConfig;
|
|
53
68
|
export declare const DEFAULT_CONFIG: GhostConfig;
|
|
54
69
|
export declare function readConfigFromEnv(): GhostConfig;
|
|
55
|
-
|
|
70
|
+
/**
|
|
71
|
+
* Strip CR/LF and surrounding whitespace from an API key (SEC-7). Prevents
|
|
72
|
+
* HTTP header injection via `Authorization: Bearer ${apiKey}` when a
|
|
73
|
+
* malformed `.env` file or environment manipulation injects newlines.
|
|
74
|
+
* Returns undefined for empty results so callers fall back to env lookup.
|
|
75
|
+
*/
|
|
76
|
+
export declare function sanitizeApiKey(raw: string | undefined): string | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* Produce a deep copy of a config with all `apiKey` fields removed (SEC-8).
|
|
79
|
+
* Use before any logging, diagnostics dump, telemetry, or serialization.
|
|
80
|
+
* The original config remains live with its keys for actual provider use.
|
|
81
|
+
*
|
|
82
|
+
* Defensive: even fields not currently typed as containing keys are scrubbed
|
|
83
|
+
* via a recursive walk that drops any property named `apiKey` (case-sensitive).
|
|
84
|
+
*
|
|
85
|
+
* Caveats: class instances become plain objects (methods lost). Cyclic
|
|
86
|
+
* structures would recurse infinitely — caller must ensure acyclic input.
|
|
87
|
+
* Both caveats are fine for `GhostConfig` which is plain JSON-shaped.
|
|
88
|
+
*/
|
|
89
|
+
export declare function redactConfig<T>(cfg: T): T;
|
|
90
|
+
/**
|
|
91
|
+
* Validate a provider baseUrl (SEC-1). Returns the URL on success, null
|
|
92
|
+
* on failure with a stderr warning. Rules:
|
|
93
|
+
* - Must be a parseable absolute URL.
|
|
94
|
+
* - `https:` always allowed.
|
|
95
|
+
* - `http:` only allowed for `localhost` / `127.0.0.1` / `::1` — sending
|
|
96
|
+
* API keys + prompt context in cleartext to anything else is almost
|
|
97
|
+
* certainly a misconfiguration. Setting `PI_GHOST_ALLOW_INSECURE=1`
|
|
98
|
+
* bypasses this check.
|
|
99
|
+
* - Other schemes (`file:`, `data:`, etc.) rejected unconditionally.
|
|
100
|
+
*/
|
|
101
|
+
export declare function validateBaseUrl(raw: string, fieldName?: string): string | null;
|
|
@@ -1,14 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SPDX-License-Identifier: SSPL-1.0
|
|
3
|
+
* SPDX-FileCopyrightText: 2025 Alessandro Pungitore <alessandro@pungitore.ch>
|
|
4
|
+
*/
|
|
1
5
|
import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
2
6
|
import type { AgentMessage } from "@earendil-works/pi-agent-core";
|
|
7
|
+
/**
|
|
8
|
+
* Conversation entry surfaced to ghost providers. `role: "tool"` carries an
|
|
9
|
+
* optional `toolName` for prompt-formatting cues. PRD §M6a.
|
|
10
|
+
*/
|
|
3
11
|
export interface RecentMessage {
|
|
4
|
-
role: "user" | "assistant";
|
|
12
|
+
role: "user" | "assistant" | "tool";
|
|
5
13
|
text: string;
|
|
14
|
+
/** Set when role === "tool". */
|
|
15
|
+
toolName?: string;
|
|
6
16
|
}
|
|
7
17
|
/**
|
|
8
|
-
* Read up to `max` recent
|
|
9
|
-
*
|
|
10
|
-
*
|
|
18
|
+
* Read up to `max` recent messages from the current branch. By default
|
|
19
|
+
* returns user + assistant entries; pass `includeTools: true` to also
|
|
20
|
+
* surface tool calls/results as `role: "tool"` entries with `toolName`
|
|
21
|
+
* populated where available. Returns oldest-first.
|
|
11
22
|
*/
|
|
12
|
-
export declare function getRecentMessages(ctx: ExtensionContext, max: number
|
|
23
|
+
export declare function getRecentMessages(ctx: ExtensionContext, max: number, opts?: {
|
|
24
|
+
includeTools?: boolean;
|
|
25
|
+
}): RecentMessage[];
|
|
13
26
|
export declare function extractText(msg: AgentMessage): string;
|
|
14
|
-
//# sourceMappingURL=context-aggregator.d.ts.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SPDX-License-Identifier: SSPL-1.0
|
|
3
|
+
* SPDX-FileCopyrightText: 2025 Alessandro Pungitore <alessandro@pungitore.ch>
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Pure helper: compute the next index for Alt+]/Alt[+ cycle.
|
|
7
|
+
* Returns null when the move would go past an edge (no wrap, per PRD).
|
|
8
|
+
*/
|
|
9
|
+
export declare function cycleCandidateIdx(currentIdx: number, len: number, dir: 1 | -1): number | null;
|
|
10
|
+
/**
|
|
11
|
+
* Extract the next lexical "word" chunk from the start of a ghost string.
|
|
12
|
+
* Skips leading whitespace, then either consumes an identifier run (`\w+`)
|
|
13
|
+
* OR a single non-word non-space char so code like `foo("bar")` accepts as
|
|
14
|
+
* `foo`, `(`, `"`, `bar`, `"`, `)` rather than gulping the whole
|
|
15
|
+
* expression. Used by Ctrl+Right partial accept.
|
|
16
|
+
*
|
|
17
|
+
* Returns the empty string when the ghost is empty or contains only
|
|
18
|
+
* whitespace — caller treats that as a no-op.
|
|
19
|
+
*/
|
|
20
|
+
export declare function nextWordChunk(ghost: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* CycleManager — small mutable facade over CycleState.
|
|
23
|
+
* All mutation goes through the manager so editor code stays declarative.
|
|
24
|
+
*/
|
|
25
|
+
export declare class CycleManager {
|
|
26
|
+
private state;
|
|
27
|
+
reset(): void;
|
|
28
|
+
/**
|
|
29
|
+
* Install a fresh ranked candidate list for a newly shown ghost.
|
|
30
|
+
* Always resets indices, cycledCount, partialAccepts, and consumed
|
|
31
|
+
* offsets. The stored list is frozen — partial-accepts shrink the
|
|
32
|
+
* per-candidate `consumed` offset, never the underlying text.
|
|
33
|
+
*/
|
|
34
|
+
setCandidates(texts: string[]): void;
|
|
35
|
+
/**
|
|
36
|
+
* Read-only view of the ranked candidate list as installed. Stable across
|
|
37
|
+
* partial accepts (consumption is tracked separately via `current`).
|
|
38
|
+
*/
|
|
39
|
+
get candidates(): readonly string[];
|
|
40
|
+
/**
|
|
41
|
+
* Currently displayed ghost text — the un-consumed remainder of the
|
|
42
|
+
* candidate at `candidateIdx`. Returns `null` when no candidates are
|
|
43
|
+
* installed; returns `""` when the current candidate has been fully
|
|
44
|
+
* consumed by partial accepts (caller must then `reset()`).
|
|
45
|
+
*/
|
|
46
|
+
get current(): string | null;
|
|
47
|
+
get cycledCount(): number;
|
|
48
|
+
get partialAccepts(): number;
|
|
49
|
+
get candidateIdx(): number;
|
|
50
|
+
/**
|
|
51
|
+
* Attempt a cycle in the given direction. Returns true if the ghost text
|
|
52
|
+
* actually changed (i.e., a legal non-edge move occurred). Each
|
|
53
|
+
* candidate retains its own `consumed` offset across cycles so the user
|
|
54
|
+
* can partial-accept on A, cycle to B, cycle back to A and resume.
|
|
55
|
+
*/
|
|
56
|
+
cycle(dir: 1 | -1): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Perform a word-level partial accept on the currently displayed
|
|
59
|
+
* candidate. APPEND MODE ONLY — callers must check
|
|
60
|
+
* `!ghostReplaceFrom && cursorAtEnd()` before invoking. Naming
|
|
61
|
+
* deliberately includes `Append` so the invariant is impossible to
|
|
62
|
+
* forget at the call site.
|
|
63
|
+
*
|
|
64
|
+
* Returns the chunk that should be inserted now, plus the remaining
|
|
65
|
+
* ghost suffix (or `null` if this was the final chunk). When `remaining`
|
|
66
|
+
* is `null` the caller is responsible for finalizing and calling
|
|
67
|
+
* `reset()` — the manager does NOT auto-reset so lifecycle stays
|
|
68
|
+
* explicit.
|
|
69
|
+
*/
|
|
70
|
+
acceptPartialWordAppend(): {
|
|
71
|
+
chunk: string;
|
|
72
|
+
remaining: string | null;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Snapshot for diagnostics / metrics (no raw candidate text leaked).
|
|
76
|
+
*/
|
|
77
|
+
snapshot(): {
|
|
78
|
+
count: number;
|
|
79
|
+
idx: number;
|
|
80
|
+
cycled: number;
|
|
81
|
+
partials: number;
|
|
82
|
+
};
|
|
83
|
+
}
|