pi-ghost-autocomplete 0.3.2 → 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 -331
- package/dist/bench-cli.js +1 -123
- package/dist/bench.d.ts +7 -3
- package/dist/bench.js +1 -522
- package/dist/config.d.ts +4 -1
- package/dist/context-aggregator.d.ts +4 -1
- package/dist/cycle-manager.d.ts +2 -21
- package/dist/entropy-stop.d.ts +4 -1
- package/dist/eval-dataset.d.ts +2 -13
- package/dist/fuzzy-matcher.d.ts +4 -1
- package/dist/ghost-editor.d.ts +11 -2
- package/dist/index.d.ts +4 -1
- package/dist/index.js +1 -289
- package/dist/intent.d.ts +179 -0
- package/dist/metrics.d.ts +4 -1
- package/dist/path-index.d.ts +4 -1
- package/dist/path-matcher.d.ts +4 -1
- package/dist/profile-store.d.ts +4 -1
- package/dist/profile.d.ts +2 -20
- package/dist/providers/cloud-provider.d.ts +4 -1
- package/dist/providers/local-provider.d.ts +4 -1
- package/dist/providers/openai-compat-provider.d.ts +24 -1
- package/dist/providers/race.d.ts +4 -1
- package/dist/providers/types.d.ts +13 -1
- package/dist/recent-paths.d.ts +4 -1
- package/dist/replay-cli.js +1 -166
- package/dist/replay.d.ts +2 -7
- package/package.json +90 -80
- 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/cache.d.ts +0 -124
- package/dist/cache.d.ts.map +0 -1
- package/dist/cache.js +0 -173
- package/dist/cache.js.map +0 -1
- package/dist/candidate-rerank.d.ts +0 -57
- package/dist/candidate-rerank.d.ts.map +0 -1
- package/dist/candidate-rerank.js +0 -78
- package/dist/candidate-rerank.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -317
- package/dist/config.js.map +0 -1
- package/dist/context-aggregator.d.ts.map +0 -1
- package/dist/context-aggregator.js +0 -87
- package/dist/context-aggregator.js.map +0 -1
- package/dist/context-selector.d.ts +0 -128
- package/dist/context-selector.d.ts.map +0 -1
- package/dist/context-selector.js +0 -300
- package/dist/context-selector.js.map +0 -1
- package/dist/cycle-manager.d.ts.map +0 -1
- package/dist/cycle-manager.js +0 -168
- package/dist/cycle-manager.js.map +0 -1
- package/dist/edit-history-ring.d.ts +0 -148
- package/dist/edit-history-ring.d.ts.map +0 -1
- package/dist/edit-history-ring.js +0 -262
- package/dist/edit-history-ring.js.map +0 -1
- package/dist/entropy-stop.d.ts.map +0 -1
- package/dist/entropy-stop.js +0 -141
- package/dist/entropy-stop.js.map +0 -1
- package/dist/eval-dataset.d.ts.map +0 -1
- package/dist/eval-dataset.js +0 -127
- package/dist/eval-dataset.js.map +0 -1
- package/dist/fast-path-engine.d.ts +0 -286
- package/dist/fast-path-engine.d.ts.map +0 -1
- package/dist/fast-path-engine.js +0 -341
- package/dist/fast-path-engine.js.map +0 -1
- package/dist/fuzzy-matcher.d.ts.map +0 -1
- package/dist/fuzzy-matcher.js +0 -162
- package/dist/fuzzy-matcher.js.map +0 -1
- package/dist/ghost-editor.d.ts.map +0 -1
- package/dist/ghost-editor.js +0 -1491
- 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/keystroke-timer.d.ts +0 -59
- package/dist/keystroke-timer.d.ts.map +0 -1
- package/dist/keystroke-timer.js +0 -94
- package/dist/keystroke-timer.js.map +0 -1
- package/dist/metrics-builder.d.ts +0 -71
- package/dist/metrics-builder.d.ts.map +0 -1
- package/dist/metrics-builder.js +0 -71
- package/dist/metrics-builder.js.map +0 -1
- package/dist/metrics.d.ts.map +0 -1
- package/dist/metrics.js +0 -212
- 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 -88
- package/dist/path-matcher.js.map +0 -1
- package/dist/profile-store.d.ts.map +0 -1
- package/dist/profile-store.js +0 -199
- package/dist/profile-store.js.map +0 -1
- package/dist/profile.d.ts.map +0 -1
- package/dist/profile.js +0 -434
- package/dist/profile.js.map +0 -1
- package/dist/providers/cloud-provider.d.ts.map +0 -1
- package/dist/providers/cloud-provider.js +0 -109
- 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 -48
- 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 -215
- package/dist/providers/openai-compat-provider.js.map +0 -1
- package/dist/providers/openai-completions-runner.d.ts +0 -52
- package/dist/providers/openai-completions-runner.d.ts.map +0 -1
- package/dist/providers/openai-completions-runner.js +0 -141
- 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 -441
- 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 -57
- package/dist/providers/truncate.js.map +0 -1
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -60
- package/dist/providers/types.js.map +0 -1
- package/dist/provisional-manager.d.ts +0 -93
- package/dist/provisional-manager.d.ts.map +0 -1
- package/dist/provisional-manager.js +0 -98
- package/dist/provisional-manager.js.map +0 -1
- package/dist/provisional.d.ts +0 -150
- package/dist/provisional.d.ts.map +0 -1
- package/dist/provisional.js +0 -238
- package/dist/provisional.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/regret-tracker.d.ts +0 -84
- package/dist/regret-tracker.d.ts.map +0 -1
- package/dist/regret-tracker.js +0 -145
- package/dist/regret-tracker.js.map +0 -1
- package/dist/replay-cli.d.ts +0 -13
- package/dist/replay-cli.d.ts.map +0 -1
- package/dist/replay-cli.js.map +0 -1
- package/dist/replay.d.ts.map +0 -1
- package/dist/replay.js +0 -225
- package/dist/replay.js.map +0 -1
- package/dist/reranker.d.ts +0 -181
- package/dist/reranker.d.ts.map +0 -1
- package/dist/reranker.js +0 -324
- package/dist/reranker.js.map +0 -1
- package/dist/session-trie.d.ts +0 -103
- package/dist/session-trie.d.ts.map +0 -1
- package/dist/session-trie.js +0 -280
- package/dist/session-trie.js.map +0 -1
- package/dist/speculative.d.ts +0 -74
- package/dist/speculative.d.ts.map +0 -1
- package/dist/speculative.js +0 -107
- package/dist/speculative.js.map +0 -1
- package/dist/tool-summarize.d.ts +0 -40
- package/dist/tool-summarize.d.ts.map +0 -1
- package/dist/tool-summarize.js +0 -245
- package/dist/tool-summarize.js.map +0 -1
- package/dist/trie-sanitize.d.ts +0 -22
- package/dist/trie-sanitize.d.ts.map +0 -1
- package/dist/trie-sanitize.js +0 -142
- package/dist/trie-sanitize.js.map +0 -1
- package/dist/versions.d.ts +0 -23
- package/dist/versions.d.ts.map +0 -1
- package/dist/versions.js +0 -31
- package/dist/versions.js.map +0 -1
package/dist/bench.js
CHANGED
|
@@ -1,522 +1 @@
|
|
|
1
|
-
import { readFile } from "node:fs/promises";
|
|
2
|
-
import { COMPLETION_MODES } from "./metrics.js";
|
|
3
|
-
/**
|
|
4
|
-
* PRD §Success Metrics initial candidate thresholds. These are red/green
|
|
5
|
-
* targets, not gates — the harness reports compliance but never errors out.
|
|
6
|
-
*/
|
|
7
|
-
export const THRESHOLDS = {
|
|
8
|
-
llmP50Ms: 300,
|
|
9
|
-
llmP95Ms: 700,
|
|
10
|
-
deterministicP50Ms: 30,
|
|
11
|
-
validOutputRate: 0.85,
|
|
12
|
-
badOutputRate: 0.15,
|
|
13
|
-
/**
|
|
14
|
-
* Enhancement #6 hard gate: fraction of accepted-or-shown ghosts whose
|
|
15
|
-
* `estimatedTimeSavedMs` came out negative — i.e. the user spent more
|
|
16
|
-
* time waiting for the ghost than the keystrokes the accept could ever
|
|
17
|
-
* save. <10% is healthy, 10–20% warns, ≥20% fails. Calibrated against
|
|
18
|
-
* Yeh/Laban "saved-time" surveys and our own M5 data.
|
|
19
|
-
*/
|
|
20
|
-
negativeTimeSavedYellow: 0.10,
|
|
21
|
-
negativeTimeSavedRed: 0.20,
|
|
22
|
-
};
|
|
23
|
-
/**
|
|
24
|
-
* Read JSONL metrics records from `path`. Skips malformed lines and counts
|
|
25
|
-
* them in `parseErrors`. Never throws on malformed input — a benchmark harness
|
|
26
|
-
* should degrade gracefully so partial logs still produce a report.
|
|
27
|
-
*/
|
|
28
|
-
export async function loadMetrics(path) {
|
|
29
|
-
const text = await readFile(path, "utf8");
|
|
30
|
-
return parseMetricsText(text);
|
|
31
|
-
}
|
|
32
|
-
export function parseMetricsText(text) {
|
|
33
|
-
const records = [];
|
|
34
|
-
let parseErrors = 0;
|
|
35
|
-
for (const line of text.split(/\r?\n/)) {
|
|
36
|
-
if (!line.trim())
|
|
37
|
-
continue;
|
|
38
|
-
try {
|
|
39
|
-
const rec = JSON.parse(line);
|
|
40
|
-
if (isMetricsRecord(rec))
|
|
41
|
-
records.push(rec);
|
|
42
|
-
else
|
|
43
|
-
parseErrors++;
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
parseErrors++;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return { records, parseErrors };
|
|
50
|
-
}
|
|
51
|
-
const KNOWN_MODES = new Set(COMPLETION_MODES);
|
|
52
|
-
function isMetricsRecord(v) {
|
|
53
|
-
if (!v || typeof v !== "object")
|
|
54
|
-
return false;
|
|
55
|
-
const r = v;
|
|
56
|
-
return (typeof r.ts === "number" &&
|
|
57
|
-
typeof r.requestId === "string" &&
|
|
58
|
-
typeof r.mode === "string" &&
|
|
59
|
-
KNOWN_MODES.has(r.mode) &&
|
|
60
|
-
typeof r.result === "string");
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Quantile via nearest-rank on a sorted ascending array. Returns 0 on empty.
|
|
64
|
-
* `q` in [0, 1]. We don't interpolate — sample sizes here are tens-to-low-
|
|
65
|
-
* thousands and integer ms values, interpolation buys nothing.
|
|
66
|
-
*/
|
|
67
|
-
export function quantile(sorted, q) {
|
|
68
|
-
if (sorted.length === 0)
|
|
69
|
-
return 0;
|
|
70
|
-
if (q <= 0)
|
|
71
|
-
return sorted[0] ?? 0;
|
|
72
|
-
if (q >= 1)
|
|
73
|
-
return sorted[sorted.length - 1] ?? 0;
|
|
74
|
-
const idx = Math.min(sorted.length - 1, Math.ceil(q * sorted.length) - 1);
|
|
75
|
-
return sorted[idx] ?? 0;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Build a {@link BenchmarkReport} from parsed records. Pure: no I/O.
|
|
79
|
-
*
|
|
80
|
-
* For LLM mode, providers are aggregated from each record's `providers[]`
|
|
81
|
-
* trace so race members are tracked individually. For deterministic mode the
|
|
82
|
-
* single-element providers[] is used; provider name corresponds to the band
|
|
83
|
-
* (path-prefix / basename-prefix / fuzzy-basename / fuzzy-path).
|
|
84
|
-
*/
|
|
85
|
-
export function summarize(records, source = "<inline>", parseErrors = 0) {
|
|
86
|
-
const det = records.filter((r) => r.mode === "deterministic");
|
|
87
|
-
const llm = records.filter((r) => r.mode === "llm");
|
|
88
|
-
const deterministic = summarizeMode("deterministic", det);
|
|
89
|
-
const llmStats = summarizeMode("llm", llm);
|
|
90
|
-
const byMode = summarizeAllModes(records);
|
|
91
|
-
const advanced = summarizeAdvanced(records);
|
|
92
|
-
return {
|
|
93
|
-
source,
|
|
94
|
-
records: records.length,
|
|
95
|
-
parseErrors,
|
|
96
|
-
deterministic,
|
|
97
|
-
llm: llmStats,
|
|
98
|
-
byMode,
|
|
99
|
-
advanced,
|
|
100
|
-
thresholds: checkThresholds(deterministic, llmStats, advanced),
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
function summarizeAllModes(records) {
|
|
104
|
-
const groups = new Map();
|
|
105
|
-
for (const r of records) {
|
|
106
|
-
const mode = r.mode;
|
|
107
|
-
let arr = groups.get(mode);
|
|
108
|
-
if (!arr) {
|
|
109
|
-
arr = [];
|
|
110
|
-
groups.set(mode, arr);
|
|
111
|
-
}
|
|
112
|
-
arr.push(r);
|
|
113
|
-
}
|
|
114
|
-
const out = [];
|
|
115
|
-
for (const [mode, recs] of groups) {
|
|
116
|
-
out.push(summarizeMode(mode, recs));
|
|
117
|
-
}
|
|
118
|
-
out.sort((a, b) => a.mode.localeCompare(b.mode));
|
|
119
|
-
return out;
|
|
120
|
-
}
|
|
121
|
-
function summarizeAdvanced(records) {
|
|
122
|
-
const ttfts = [];
|
|
123
|
-
const timeSaveds = [];
|
|
124
|
-
let timeSavedTotal = 0;
|
|
125
|
-
let negativeTimeSavedCount = 0;
|
|
126
|
-
let shownCount = 0;
|
|
127
|
-
let savedAt1 = 0;
|
|
128
|
-
let savedAt3 = 0;
|
|
129
|
-
let savedAt5 = 0;
|
|
130
|
-
let acceptedCount = 0;
|
|
131
|
-
let regretCount = 0;
|
|
132
|
-
let provisionalShown = 0;
|
|
133
|
-
let provisionalAccepted = 0;
|
|
134
|
-
let provisionalSwapped = 0;
|
|
135
|
-
let provisionalCorrect = 0;
|
|
136
|
-
let provisionalSwapMsTotal = 0;
|
|
137
|
-
let provisionalFlicker = 0;
|
|
138
|
-
const provisionalBySource = {};
|
|
139
|
-
let dismissedCount = 0;
|
|
140
|
-
let shortHoverDismissCount = 0;
|
|
141
|
-
let staleCount = 0;
|
|
142
|
-
let typedPastDivergentCount = 0;
|
|
143
|
-
for (const r of records) {
|
|
144
|
-
if (typeof r.ttftMs === "number")
|
|
145
|
-
ttfts.push(r.ttftMs);
|
|
146
|
-
if (typeof r.estimatedTimeSavedMs === "number") {
|
|
147
|
-
timeSaveds.push(r.estimatedTimeSavedMs);
|
|
148
|
-
timeSavedTotal += r.estimatedTimeSavedMs;
|
|
149
|
-
if (r.estimatedTimeSavedMs < 0)
|
|
150
|
-
negativeTimeSavedCount++;
|
|
151
|
-
}
|
|
152
|
-
const accepted = r.acceptance === "accepted" || r.acceptance === "accepted-partial";
|
|
153
|
-
if (accepted) {
|
|
154
|
-
acceptedCount++;
|
|
155
|
-
if (r.acceptRegret === true)
|
|
156
|
-
regretCount++;
|
|
157
|
-
}
|
|
158
|
-
if (r.acceptance === "dismissed") {
|
|
159
|
-
dismissedCount++;
|
|
160
|
-
if (r.shortHoverDismiss === true)
|
|
161
|
-
shortHoverDismissCount++;
|
|
162
|
-
}
|
|
163
|
-
if (r.acceptance === "stale") {
|
|
164
|
-
staleCount++;
|
|
165
|
-
if (r.typedPastDivergent === true)
|
|
166
|
-
typedPastDivergentCount++;
|
|
167
|
-
}
|
|
168
|
-
if (r.mode === "provisional" && r.shown) {
|
|
169
|
-
provisionalShown++;
|
|
170
|
-
if (accepted)
|
|
171
|
-
provisionalAccepted++;
|
|
172
|
-
// Provider name format: `provisional-${source}` where source ∈
|
|
173
|
-
// {trie, profile-accept, session-cache}.
|
|
174
|
-
const winner = r.winner ?? "";
|
|
175
|
-
if (winner.startsWith("provisional-")) {
|
|
176
|
-
const src = winner.slice("provisional-".length);
|
|
177
|
-
provisionalBySource[src] = (provisionalBySource[src] ?? 0) + 1;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
if (typeof r.provisionalSwapMs === "number") {
|
|
181
|
-
provisionalSwapped++;
|
|
182
|
-
provisionalSwapMsTotal += r.provisionalSwapMs;
|
|
183
|
-
if (r.provisionalWasCorrect === true)
|
|
184
|
-
provisionalCorrect++;
|
|
185
|
-
if (r.provisionalSwapFlicker === true)
|
|
186
|
-
provisionalFlicker++;
|
|
187
|
-
}
|
|
188
|
-
if (r.shown) {
|
|
189
|
-
shownCount++;
|
|
190
|
-
if (accepted) {
|
|
191
|
-
const rank = r.candidateRank ?? 0;
|
|
192
|
-
if (rank < 1)
|
|
193
|
-
savedAt1++;
|
|
194
|
-
if (rank < 3)
|
|
195
|
-
savedAt3++;
|
|
196
|
-
if (rank < 5)
|
|
197
|
-
savedAt5++;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
const adv = {};
|
|
202
|
-
if (ttfts.length > 0) {
|
|
203
|
-
ttfts.sort((a, b) => a - b);
|
|
204
|
-
adv.ttftMs = { p50: quantile(ttfts, 0.5), p95: quantile(ttfts, 0.95), n: ttfts.length };
|
|
205
|
-
}
|
|
206
|
-
if (timeSaveds.length > 0) {
|
|
207
|
-
timeSaveds.sort((a, b) => a - b);
|
|
208
|
-
adv.timeSavedMs = {
|
|
209
|
-
p50: quantile(timeSaveds, 0.5),
|
|
210
|
-
p95: quantile(timeSaveds, 0.95),
|
|
211
|
-
total: timeSavedTotal,
|
|
212
|
-
n: timeSaveds.length,
|
|
213
|
-
};
|
|
214
|
-
const fraction = negativeTimeSavedCount / timeSaveds.length;
|
|
215
|
-
adv.negativeTimeSaved = {
|
|
216
|
-
count: negativeTimeSavedCount,
|
|
217
|
-
fraction,
|
|
218
|
-
n: timeSaveds.length,
|
|
219
|
-
severity: fraction >= THRESHOLDS.negativeTimeSavedRed
|
|
220
|
-
? "red"
|
|
221
|
-
: fraction >= THRESHOLDS.negativeTimeSavedYellow
|
|
222
|
-
? "yellow"
|
|
223
|
-
: "ok",
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
if (acceptedCount > 0) {
|
|
227
|
-
adv.acceptRegretRate = {
|
|
228
|
-
rate: regretCount / acceptedCount,
|
|
229
|
-
n: acceptedCount,
|
|
230
|
-
};
|
|
231
|
-
}
|
|
232
|
-
if (dismissedCount > 0) {
|
|
233
|
-
adv.shortHoverDismissRate = {
|
|
234
|
-
rate: shortHoverDismissCount / dismissedCount,
|
|
235
|
-
n: dismissedCount,
|
|
236
|
-
};
|
|
237
|
-
}
|
|
238
|
-
if (staleCount > 0) {
|
|
239
|
-
adv.typedPastDivergentRate = {
|
|
240
|
-
rate: typedPastDivergentCount / staleCount,
|
|
241
|
-
n: staleCount,
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
if (provisionalShown > 0 || provisionalSwapped > 0) {
|
|
245
|
-
adv.provisional = {
|
|
246
|
-
shown: provisionalShown,
|
|
247
|
-
swapped: provisionalSwapped,
|
|
248
|
-
correctRate: provisionalSwapped > 0 ? provisionalCorrect / provisionalSwapped : 0,
|
|
249
|
-
meanSwapMs: provisionalSwapped > 0 ? provisionalSwapMsTotal / provisionalSwapped : 0,
|
|
250
|
-
...(provisionalSwapped > 0
|
|
251
|
-
? { flickerRate: provisionalFlicker / provisionalSwapped }
|
|
252
|
-
: {}),
|
|
253
|
-
...(Object.keys(provisionalBySource).length > 0
|
|
254
|
-
? { bySource: provisionalBySource }
|
|
255
|
-
: {}),
|
|
256
|
-
...(provisionalShown > 0
|
|
257
|
-
? { acceptRate: provisionalAccepted / provisionalShown }
|
|
258
|
-
: {}),
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
if (shownCount > 0) {
|
|
262
|
-
// Denominator is total SHOWN ghosts (not just accepts). This measures
|
|
263
|
-
// "of opportunities, how many landed a useful suggestion at rank ≤k" —
|
|
264
|
-
// product-level usefulness. A different metric — "of accepts, what
|
|
265
|
-
// rank did the user pick" — would use `accepted` as the denominator;
|
|
266
|
-
// when M3 word-accept lands, we can publish both.
|
|
267
|
-
adv.savedAt1 = savedAt1 / shownCount;
|
|
268
|
-
adv.savedAt3 = savedAt3 / shownCount;
|
|
269
|
-
adv.savedAt5 = savedAt5 / shownCount;
|
|
270
|
-
}
|
|
271
|
-
return adv;
|
|
272
|
-
}
|
|
273
|
-
function summarizeMode(mode, records) {
|
|
274
|
-
const byProvider = new Map();
|
|
275
|
-
for (const r of records) {
|
|
276
|
-
if (!r.providers)
|
|
277
|
-
continue;
|
|
278
|
-
for (const p of r.providers) {
|
|
279
|
-
let arr = byProvider.get(p.provider);
|
|
280
|
-
if (!arr) {
|
|
281
|
-
arr = [];
|
|
282
|
-
byProvider.set(p.provider, arr);
|
|
283
|
-
}
|
|
284
|
-
arr.push(p);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
const providers = [];
|
|
288
|
-
for (const [provider, entries] of byProvider) {
|
|
289
|
-
providers.push(buildProviderStats(provider, entries));
|
|
290
|
-
}
|
|
291
|
-
providers.sort((a, b) => a.provider.localeCompare(b.provider));
|
|
292
|
-
const shown = records.filter((r) => r.shown).length;
|
|
293
|
-
const accepted = countAcceptance(records, "accepted");
|
|
294
|
-
const dismissed = countAcceptance(records, "dismissed");
|
|
295
|
-
const stale = countAcceptance(records, "stale");
|
|
296
|
-
const expired = countAcceptance(records, "expired");
|
|
297
|
-
return {
|
|
298
|
-
mode,
|
|
299
|
-
count: records.length,
|
|
300
|
-
shown,
|
|
301
|
-
accepted,
|
|
302
|
-
dismissed,
|
|
303
|
-
stale,
|
|
304
|
-
expired,
|
|
305
|
-
acceptanceRate: shown > 0 ? accepted / shown : 0,
|
|
306
|
-
providers,
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
function countAcceptance(records, outcome) {
|
|
310
|
-
let n = 0;
|
|
311
|
-
for (const r of records)
|
|
312
|
-
if (r.acceptance === outcome)
|
|
313
|
-
n++;
|
|
314
|
-
return n;
|
|
315
|
-
}
|
|
316
|
-
function buildProviderStats(provider, entries) {
|
|
317
|
-
const latencies = entries.map((e) => e.latencyMs).sort((a, b) => a - b);
|
|
318
|
-
const counts = {
|
|
319
|
-
produced: 0,
|
|
320
|
-
empty: 0,
|
|
321
|
-
rejected: 0,
|
|
322
|
-
aborted: 0,
|
|
323
|
-
error: 0,
|
|
324
|
-
};
|
|
325
|
-
for (const e of entries)
|
|
326
|
-
counts[e.result]++;
|
|
327
|
-
const valid = counts.produced;
|
|
328
|
-
const bad = counts.empty + counts.rejected + counts.error;
|
|
329
|
-
return {
|
|
330
|
-
provider,
|
|
331
|
-
count: entries.length,
|
|
332
|
-
produced: counts.produced,
|
|
333
|
-
empty: counts.empty,
|
|
334
|
-
rejected: counts.rejected,
|
|
335
|
-
aborted: counts.aborted,
|
|
336
|
-
error: counts.error,
|
|
337
|
-
latencyMs: {
|
|
338
|
-
p50: quantile(latencies, 0.5),
|
|
339
|
-
p95: quantile(latencies, 0.95),
|
|
340
|
-
p99: quantile(latencies, 0.99),
|
|
341
|
-
},
|
|
342
|
-
validRate: entries.length > 0 ? valid / entries.length : 0,
|
|
343
|
-
badRate: entries.length > 0 ? bad / entries.length : 0,
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
function checkThresholds(det, llm, adv) {
|
|
347
|
-
const out = [];
|
|
348
|
-
for (const p of det.providers) {
|
|
349
|
-
out.push({
|
|
350
|
-
name: `deterministic[${p.provider}] p50 latency`,
|
|
351
|
-
target: `< ${THRESHOLDS.deterministicP50Ms}ms`,
|
|
352
|
-
observed: `${p.latencyMs.p50}ms`,
|
|
353
|
-
pass: p.latencyMs.p50 < THRESHOLDS.deterministicP50Ms,
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
for (const p of llm.providers) {
|
|
357
|
-
out.push({
|
|
358
|
-
name: `llm[${p.provider}] p50 latency`,
|
|
359
|
-
target: `< ${THRESHOLDS.llmP50Ms}ms`,
|
|
360
|
-
observed: `${p.latencyMs.p50}ms`,
|
|
361
|
-
pass: p.latencyMs.p50 < THRESHOLDS.llmP50Ms,
|
|
362
|
-
});
|
|
363
|
-
out.push({
|
|
364
|
-
name: `llm[${p.provider}] p95 latency`,
|
|
365
|
-
target: `< ${THRESHOLDS.llmP95Ms}ms`,
|
|
366
|
-
observed: `${p.latencyMs.p95}ms`,
|
|
367
|
-
pass: p.latencyMs.p95 < THRESHOLDS.llmP95Ms,
|
|
368
|
-
});
|
|
369
|
-
out.push({
|
|
370
|
-
name: `llm[${p.provider}] valid-output rate`,
|
|
371
|
-
target: `>= ${(THRESHOLDS.validOutputRate * 100).toFixed(0)}%`,
|
|
372
|
-
observed: `${(p.validRate * 100).toFixed(1)}%`,
|
|
373
|
-
pass: p.validRate >= THRESHOLDS.validOutputRate,
|
|
374
|
-
});
|
|
375
|
-
out.push({
|
|
376
|
-
name: `llm[${p.provider}] bad-output rate`,
|
|
377
|
-
target: `<= ${(THRESHOLDS.badOutputRate * 100).toFixed(0)}%`,
|
|
378
|
-
observed: `${(p.badRate * 100).toFixed(1)}%`,
|
|
379
|
-
pass: p.badRate <= THRESHOLDS.badOutputRate,
|
|
380
|
-
});
|
|
381
|
-
}
|
|
382
|
-
if (adv.negativeTimeSaved) {
|
|
383
|
-
const nt = adv.negativeTimeSaved;
|
|
384
|
-
const obs = `${(nt.fraction * 100).toFixed(1)}%`;
|
|
385
|
-
const target = `< ${(THRESHOLDS.negativeTimeSavedRed * 100).toFixed(0)}%`;
|
|
386
|
-
// PASS when below the yellow line; WARN between yellow and red (still
|
|
387
|
-
// `pass: true` so CI doesn't fail on borderline runs); FAIL at/above red.
|
|
388
|
-
const entry = {
|
|
389
|
-
name: "negativeTimeSavedFraction",
|
|
390
|
-
target,
|
|
391
|
-
observed: obs,
|
|
392
|
-
pass: nt.severity !== "red",
|
|
393
|
-
};
|
|
394
|
-
if (nt.severity === "yellow")
|
|
395
|
-
entry.severity = "warn";
|
|
396
|
-
out.push(entry);
|
|
397
|
-
}
|
|
398
|
-
return out;
|
|
399
|
-
}
|
|
400
|
-
/**
|
|
401
|
-
* Render a {@link BenchmarkReport} as a fixed-width plain-text table.
|
|
402
|
-
* Output is line-based and ASCII-safe so it pipes cleanly through `less`,
|
|
403
|
-
* email, or PR descriptions.
|
|
404
|
-
*/
|
|
405
|
-
export function formatReport(report) {
|
|
406
|
-
const lines = [];
|
|
407
|
-
lines.push("Pi Ghost Benchmark Report");
|
|
408
|
-
lines.push("=========================");
|
|
409
|
-
lines.push(`source: ${report.source}`);
|
|
410
|
-
lines.push(`records: ${report.records}`);
|
|
411
|
-
if (report.parseErrors > 0)
|
|
412
|
-
lines.push(`parse errors: ${report.parseErrors}`);
|
|
413
|
-
lines.push("");
|
|
414
|
-
lines.push(`Deterministic (n=${report.deterministic.count})`);
|
|
415
|
-
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)}%`);
|
|
416
|
-
for (const p of report.deterministic.providers) {
|
|
417
|
-
lines.push(` - ${p.provider.padEnd(18)} ${formatProviderLatency(p)}`);
|
|
418
|
-
}
|
|
419
|
-
lines.push("");
|
|
420
|
-
lines.push(`LLM (n=${report.llm.count})`);
|
|
421
|
-
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)}%`);
|
|
422
|
-
for (const p of report.llm.providers) {
|
|
423
|
-
lines.push(` - ${p.provider.padEnd(18)} ${formatProviderLatency(p)}`);
|
|
424
|
-
}
|
|
425
|
-
const extraModes = report.byMode.filter((m) => m.mode !== "deterministic" && m.mode !== "llm" && m.count > 0);
|
|
426
|
-
if (extraModes.length > 0) {
|
|
427
|
-
lines.push("");
|
|
428
|
-
lines.push("Other modes:");
|
|
429
|
-
for (const m of extraModes) {
|
|
430
|
-
lines.push(` ${m.mode.padEnd(18)} n=${m.count} shown=${m.shown} accepted=${m.accepted} accept-rate=${(m.acceptanceRate * 100).toFixed(1)}%`);
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
const adv = report.advanced;
|
|
434
|
-
const hasAdvanced = adv.ttftMs ||
|
|
435
|
-
adv.timeSavedMs ||
|
|
436
|
-
adv.negativeTimeSaved ||
|
|
437
|
-
adv.acceptRegretRate ||
|
|
438
|
-
adv.shortHoverDismissRate ||
|
|
439
|
-
adv.typedPastDivergentRate ||
|
|
440
|
-
adv.provisional ||
|
|
441
|
-
adv.savedAt1 !== undefined;
|
|
442
|
-
if (hasAdvanced) {
|
|
443
|
-
lines.push("");
|
|
444
|
-
lines.push("Advanced (M5a fields):");
|
|
445
|
-
if (adv.ttftMs) {
|
|
446
|
-
lines.push(` TTFT n=${adv.ttftMs.n} p50=${adv.ttftMs.p50}ms p95=${adv.ttftMs.p95}ms`);
|
|
447
|
-
}
|
|
448
|
-
if (adv.timeSavedMs) {
|
|
449
|
-
lines.push(` time-saved n=${adv.timeSavedMs.n} p50=${adv.timeSavedMs.p50}ms p95=${adv.timeSavedMs.p95}ms total=${(adv.timeSavedMs.total / 1000).toFixed(1)}s`);
|
|
450
|
-
}
|
|
451
|
-
if (adv.negativeTimeSaved) {
|
|
452
|
-
const nt = adv.negativeTimeSaved;
|
|
453
|
-
const sevTag = nt.severity === "red" ? " [RED]" : nt.severity === "yellow" ? " [YELLOW]" : "";
|
|
454
|
-
lines.push(` neg-time-saved n=${nt.n} count=${nt.count} fraction=${(nt.fraction * 100).toFixed(1)}%${sevTag}`);
|
|
455
|
-
}
|
|
456
|
-
if (adv.acceptRegretRate) {
|
|
457
|
-
lines.push(` accept-regret n=${adv.acceptRegretRate.n} rate=${(adv.acceptRegretRate.rate * 100).toFixed(1)}%`);
|
|
458
|
-
}
|
|
459
|
-
if (adv.shortHoverDismissRate) {
|
|
460
|
-
lines.push(` short-hover n=${adv.shortHoverDismissRate.n} rate=${(adv.shortHoverDismissRate.rate * 100).toFixed(1)}%`);
|
|
461
|
-
}
|
|
462
|
-
if (adv.typedPastDivergentRate) {
|
|
463
|
-
lines.push(` typed-past n=${adv.typedPastDivergentRate.n} rate=${(adv.typedPastDivergentRate.rate * 100).toFixed(1)}%`);
|
|
464
|
-
}
|
|
465
|
-
if (adv.provisional) {
|
|
466
|
-
const flicker = adv.provisional.flickerRate !== undefined
|
|
467
|
-
? ` flicker=${(adv.provisional.flickerRate * 100).toFixed(1)}%`
|
|
468
|
-
: "";
|
|
469
|
-
const accept = adv.provisional.acceptRate !== undefined
|
|
470
|
-
? ` accept=${(adv.provisional.acceptRate * 100).toFixed(1)}%`
|
|
471
|
-
: "";
|
|
472
|
-
lines.push(` provisional shown=${adv.provisional.shown} swapped=${adv.provisional.swapped} correctRate=${(adv.provisional.correctRate * 100).toFixed(1)}% meanSwap=${adv.provisional.meanSwapMs.toFixed(0)}ms${flicker}${accept}`);
|
|
473
|
-
if (adv.provisional.bySource) {
|
|
474
|
-
const parts = Object.entries(adv.provisional.bySource)
|
|
475
|
-
.sort((a, b) => b[1] - a[1])
|
|
476
|
-
.map(([src, n]) => `${src}=${n}`)
|
|
477
|
-
.join(" ");
|
|
478
|
-
lines.push(` bySource: ${parts}`);
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
if (adv.savedAt1 !== undefined) {
|
|
482
|
-
lines.push(` saved@1=${(adv.savedAt1 * 100).toFixed(1)}% @3=${((adv.savedAt3 ?? 0) * 100).toFixed(1)}% @5=${((adv.savedAt5 ?? 0) * 100).toFixed(1)}%`);
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
lines.push("");
|
|
486
|
-
lines.push("Thresholds:");
|
|
487
|
-
for (const t of report.thresholds) {
|
|
488
|
-
const mark = !t.pass ? "[FAIL]" : t.severity === "warn" ? "[WARN]" : "[PASS]";
|
|
489
|
-
lines.push(` ${mark} ${t.name.padEnd(40)} target ${t.target.padEnd(10)} got ${t.observed}`);
|
|
490
|
-
}
|
|
491
|
-
return lines.join("\n");
|
|
492
|
-
}
|
|
493
|
-
function formatProviderLatency(p) {
|
|
494
|
-
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)}%`;
|
|
495
|
-
}
|
|
496
|
-
/**
|
|
497
|
-
* One-shot helper: load a JSONL file and produce a report. Used by the CLI.
|
|
498
|
-
*/
|
|
499
|
-
export async function runBenchmark(path) {
|
|
500
|
-
const { records, parseErrors } = await loadMetrics(path);
|
|
501
|
-
return summarize(records, path, parseErrors);
|
|
502
|
-
}
|
|
503
|
-
/**
|
|
504
|
-
* Enhancement #6: a single rendered "frame" for `pi-ghost-bench --live`.
|
|
505
|
-
* The frame is a self-contained block of text — caller clears the screen
|
|
506
|
-
* and prints it on every metrics-file change. ANSI escapes are emitted by
|
|
507
|
-
* the CLI, not this helper, so the function stays pure and unit-testable.
|
|
508
|
-
*
|
|
509
|
-
* Format: banner with timestamp + frame counter, then the standard
|
|
510
|
-
* formatted report, then a footer with the watched path.
|
|
511
|
-
*/
|
|
512
|
-
export function renderLiveFrame(report, opts) {
|
|
513
|
-
const ts = opts.now.toISOString().replace("T", " ").replace(/\..*$/, "");
|
|
514
|
-
const lines = [];
|
|
515
|
-
lines.push(`-- pi-ghost-bench --live ${ts} frame #${opts.frameNumber} --`);
|
|
516
|
-
lines.push("");
|
|
517
|
-
lines.push(formatReport(report));
|
|
518
|
-
lines.push("");
|
|
519
|
-
lines.push(`watching: ${opts.watchedPath} (Ctrl+C to exit)`);
|
|
520
|
-
return lines.join("\n");
|
|
521
|
-
}
|
|
522
|
-
//# 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 {
|
|
@@ -95,4 +99,3 @@ export declare function redactConfig<T>(cfg: T): T;
|
|
|
95
99
|
* - Other schemes (`file:`, `data:`, etc.) rejected unconditionally.
|
|
96
100
|
*/
|
|
97
101
|
export declare function validateBaseUrl(raw: string, fieldName?: string): string | null;
|
|
98
|
-
//# sourceMappingURL=config.d.ts.map
|