elasticdash-test 0.1.16 → 0.1.17-alpha-2
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/dist/cloud-client.d.ts +34 -0
- package/dist/cloud-client.d.ts.map +1 -0
- package/dist/cloud-client.js +103 -0
- package/dist/cloud-client.js.map +1 -0
- package/dist/dashboard-server.d.ts.map +1 -1
- package/dist/dashboard-server.js +425 -90
- package/dist/dashboard-server.js.map +1 -1
- package/dist/evaluators/determinism.d.ts +3 -0
- package/dist/evaluators/determinism.d.ts.map +1 -0
- package/dist/evaluators/determinism.js +116 -0
- package/dist/evaluators/determinism.js.map +1 -0
- package/dist/evaluators/index.d.ts +4 -0
- package/dist/evaluators/index.d.ts.map +1 -0
- package/dist/evaluators/index.js +61 -0
- package/dist/evaluators/index.js.map +1 -0
- package/dist/evaluators/latency-budget.d.ts +3 -0
- package/dist/evaluators/latency-budget.d.ts.map +1 -0
- package/dist/evaluators/latency-budget.js +45 -0
- package/dist/evaluators/latency-budget.js.map +1 -0
- package/dist/evaluators/llm-judge.d.ts +3 -0
- package/dist/evaluators/llm-judge.d.ts.map +1 -0
- package/dist/evaluators/llm-judge.js +122 -0
- package/dist/evaluators/llm-judge.js.map +1 -0
- package/dist/evaluators/output-contains.d.ts +3 -0
- package/dist/evaluators/output-contains.d.ts.map +1 -0
- package/dist/evaluators/output-contains.js +52 -0
- package/dist/evaluators/output-contains.js.map +1 -0
- package/dist/evaluators/output-schema.d.ts +3 -0
- package/dist/evaluators/output-schema.d.ts.map +1 -0
- package/dist/evaluators/output-schema.js +58 -0
- package/dist/evaluators/output-schema.js.map +1 -0
- package/dist/evaluators/token-budget.d.ts +3 -0
- package/dist/evaluators/token-budget.d.ts.map +1 -0
- package/dist/evaluators/token-budget.js +45 -0
- package/dist/evaluators/token-budget.js.map +1 -0
- package/dist/evaluators/types.d.ts +103 -0
- package/dist/evaluators/types.d.ts.map +1 -0
- package/dist/evaluators/types.js +6 -0
- package/dist/evaluators/types.js.map +1 -0
- package/dist/html/dashboard.html +359 -73
- package/dist/index.cjs +253 -14
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interceptors/telemetry-push.d.ts +40 -0
- package/dist/interceptors/telemetry-push.d.ts.map +1 -1
- package/dist/interceptors/telemetry-push.js +129 -6
- package/dist/interceptors/telemetry-push.js.map +1 -1
- package/dist/interceptors/tool.d.ts.map +1 -1
- package/dist/interceptors/tool.js +8 -1
- package/dist/interceptors/tool.js.map +1 -1
- package/dist/interceptors/workflow-ai.d.ts.map +1 -1
- package/dist/interceptors/workflow-ai.js +21 -6
- package/dist/interceptors/workflow-ai.js.map +1 -1
- package/dist/internals/mock-resolver.d.ts +70 -2
- package/dist/internals/mock-resolver.d.ts.map +1 -1
- package/dist/internals/mock-resolver.js +157 -6
- package/dist/internals/mock-resolver.js.map +1 -1
- package/dist/test-group/cli.d.ts +8 -0
- package/dist/test-group/cli.d.ts.map +1 -0
- package/dist/test-group/cli.js +162 -0
- package/dist/test-group/cli.js.map +1 -0
- package/dist/test-group/git-context.d.ts +3 -0
- package/dist/test-group/git-context.d.ts.map +1 -0
- package/dist/test-group/git-context.js +59 -0
- package/dist/test-group/git-context.js.map +1 -0
- package/dist/test-group/reporter.d.ts +4 -0
- package/dist/test-group/reporter.d.ts.map +1 -0
- package/dist/test-group/reporter.js +54 -0
- package/dist/test-group/reporter.js.map +1 -0
- package/dist/test-group/runner.d.ts +18 -0
- package/dist/test-group/runner.d.ts.map +1 -0
- package/dist/test-group/runner.js +234 -0
- package/dist/test-group/runner.js.map +1 -0
- package/dist/workflow-runner-worker.js +7 -1
- package/dist/workflow-runner-worker.js.map +1 -1
- package/package.json +1 -1
- package/src/dashboard-server.ts +101 -28
- package/src/html/dashboard.html +359 -73
- package/src/index.ts +2 -2
- package/src/interceptors/telemetry-push.ts +159 -7
- package/src/interceptors/tool.ts +9 -1
- package/src/interceptors/workflow-ai.ts +22 -6
- package/src/internals/mock-resolver.ts +190 -7
- package/src/workflow-runner-worker.ts +11 -3
package/dist/index.cjs
CHANGED
|
@@ -313,6 +313,7 @@ __export(index_exports, {
|
|
|
313
313
|
interceptFetch: () => interceptFetch,
|
|
314
314
|
interceptRandom: () => interceptRandom,
|
|
315
315
|
isWorker: () => isWorker,
|
|
316
|
+
lookupMockEntry: () => lookupMockEntry,
|
|
316
317
|
pushTelemetryEvent: () => pushTelemetryEvent,
|
|
317
318
|
readVercelAIStream: () => readVercelAIStream,
|
|
318
319
|
recordToolCall: () => recordToolCall,
|
|
@@ -322,6 +323,7 @@ __export(index_exports, {
|
|
|
322
323
|
resolveMock: () => resolveMock,
|
|
323
324
|
resolvePromptMock: () => resolvePromptMock,
|
|
324
325
|
resolveTaskInput: () => resolveTaskInput,
|
|
326
|
+
resolveUserPromptMock: () => resolveUserPromptMock,
|
|
325
327
|
restoreDateNow: () => restoreDateNow,
|
|
326
328
|
restoreFetch: () => restoreFetch,
|
|
327
329
|
restoreRandom: () => restoreRandom,
|
|
@@ -2047,9 +2049,109 @@ function resolvePromptMock(input) {
|
|
|
2047
2049
|
if (!mocks || Object.keys(mocks).length === 0) return void 0;
|
|
2048
2050
|
const systemPrompt = extractSystemPrompt(input);
|
|
2049
2051
|
if (systemPrompt === void 0) return void 0;
|
|
2050
|
-
const
|
|
2051
|
-
if (
|
|
2052
|
-
|
|
2052
|
+
const match = lookupMockEntry(mocks, systemPrompt);
|
|
2053
|
+
if (!match) return void 0;
|
|
2054
|
+
const entry = match.entry;
|
|
2055
|
+
if (typeof entry === "string") {
|
|
2056
|
+
return replaceSystemPrompt(input, entry);
|
|
2057
|
+
}
|
|
2058
|
+
if (entry.mode === "live") return void 0;
|
|
2059
|
+
if (!g4["__ELASTICDASH_PROMPT_CALL_COUNTERS__"]) {
|
|
2060
|
+
g4["__ELASTICDASH_PROMPT_CALL_COUNTERS__"] = {};
|
|
2061
|
+
}
|
|
2062
|
+
const counters = g4["__ELASTICDASH_PROMPT_CALL_COUNTERS__"];
|
|
2063
|
+
counters[match.key] = (counters[match.key] ?? 0) + 1;
|
|
2064
|
+
const callNumber = counters[match.key];
|
|
2065
|
+
if (entry.mode === "replace-all") {
|
|
2066
|
+
return replaceSystemPrompt(input, entry.replacement);
|
|
2067
|
+
}
|
|
2068
|
+
if (entry.mode === "replace-specific") {
|
|
2069
|
+
const indices = entry.callIndices ?? [];
|
|
2070
|
+
if (indices.includes(callNumber)) {
|
|
2071
|
+
return replaceSystemPrompt(input, entry.replacement);
|
|
2072
|
+
}
|
|
2073
|
+
}
|
|
2074
|
+
return void 0;
|
|
2075
|
+
}
|
|
2076
|
+
function stripJsonQuotes(s) {
|
|
2077
|
+
if (s.length >= 2 && s.startsWith('"') && s.endsWith('"')) {
|
|
2078
|
+
try {
|
|
2079
|
+
const parsed = JSON.parse(s);
|
|
2080
|
+
if (typeof parsed === "string") return parsed;
|
|
2081
|
+
} catch {
|
|
2082
|
+
}
|
|
2083
|
+
}
|
|
2084
|
+
return s;
|
|
2085
|
+
}
|
|
2086
|
+
function lookupMockEntry(mocks, text) {
|
|
2087
|
+
if (mocks[text]) return { key: text, entry: mocks[text] };
|
|
2088
|
+
const stripped = stripJsonQuotes(text);
|
|
2089
|
+
if (stripped !== text && mocks[stripped]) return { key: stripped, entry: mocks[stripped] };
|
|
2090
|
+
const quoted = JSON.stringify(text);
|
|
2091
|
+
if (quoted !== text && mocks[quoted]) return { key: quoted, entry: mocks[quoted] };
|
|
2092
|
+
return void 0;
|
|
2093
|
+
}
|
|
2094
|
+
function extractUserPrompts(input) {
|
|
2095
|
+
if (!input || typeof input !== "object") return [];
|
|
2096
|
+
const o = input;
|
|
2097
|
+
const msgs = Array.isArray(o.messages) ? o.messages : Array.isArray(input) ? input : null;
|
|
2098
|
+
if (!msgs) return [];
|
|
2099
|
+
const results = [];
|
|
2100
|
+
for (const m of msgs) {
|
|
2101
|
+
if (m && typeof m === "object") {
|
|
2102
|
+
const msg = m;
|
|
2103
|
+
if (msg.role === "user" && typeof msg.content === "string") results.push(msg.content);
|
|
2104
|
+
}
|
|
2105
|
+
}
|
|
2106
|
+
return results;
|
|
2107
|
+
}
|
|
2108
|
+
function replaceUserPrompt(input, originalText, newText) {
|
|
2109
|
+
if (!input || typeof input !== "object") return input;
|
|
2110
|
+
const o = input;
|
|
2111
|
+
const replaceInMsgs = (msgs) => msgs.map((m) => {
|
|
2112
|
+
if (m && typeof m === "object") {
|
|
2113
|
+
const msg = m;
|
|
2114
|
+
if (msg.role === "user" && typeof msg.content === "string" && msg.content === originalText) {
|
|
2115
|
+
return { ...msg, content: newText };
|
|
2116
|
+
}
|
|
2117
|
+
}
|
|
2118
|
+
return m;
|
|
2119
|
+
});
|
|
2120
|
+
if (Array.isArray(input)) return replaceInMsgs(input);
|
|
2121
|
+
if (Array.isArray(o.messages)) return { ...o, messages: replaceInMsgs(o.messages) };
|
|
2122
|
+
return input;
|
|
2123
|
+
}
|
|
2124
|
+
function resolveUserPromptMock(input) {
|
|
2125
|
+
const g4 = globalThis;
|
|
2126
|
+
const mocks = g4["__ELASTICDASH_USER_PROMPT_MOCKS__"];
|
|
2127
|
+
if (!mocks || Object.keys(mocks).length === 0) return void 0;
|
|
2128
|
+
const userPrompts = extractUserPrompts(input);
|
|
2129
|
+
if (userPrompts.length === 0) return void 0;
|
|
2130
|
+
if (!g4["__ELASTICDASH_USER_PROMPT_CALL_COUNTERS__"]) {
|
|
2131
|
+
g4["__ELASTICDASH_USER_PROMPT_CALL_COUNTERS__"] = {};
|
|
2132
|
+
}
|
|
2133
|
+
const counters = g4["__ELASTICDASH_USER_PROMPT_CALL_COUNTERS__"];
|
|
2134
|
+
const uniqueTexts = Array.from(new Set(userPrompts));
|
|
2135
|
+
let modified = false;
|
|
2136
|
+
let result = input;
|
|
2137
|
+
for (const text of uniqueTexts) {
|
|
2138
|
+
const match = lookupMockEntry(mocks, text);
|
|
2139
|
+
if (!match || match.entry.mode === "live") continue;
|
|
2140
|
+
const entry = match.entry;
|
|
2141
|
+
counters[match.key] = (counters[match.key] ?? 0) + 1;
|
|
2142
|
+
const callNumber = counters[match.key];
|
|
2143
|
+
if (entry.mode === "replace-all") {
|
|
2144
|
+
result = replaceUserPrompt(result, text, entry.replacement);
|
|
2145
|
+
modified = true;
|
|
2146
|
+
} else if (entry.mode === "replace-specific") {
|
|
2147
|
+
const indices = entry.callIndices ?? [];
|
|
2148
|
+
if (indices.includes(callNumber)) {
|
|
2149
|
+
result = replaceUserPrompt(result, text, entry.replacement);
|
|
2150
|
+
modified = true;
|
|
2151
|
+
}
|
|
2152
|
+
}
|
|
2153
|
+
}
|
|
2154
|
+
return modified ? result : void 0;
|
|
2053
2155
|
}
|
|
2054
2156
|
function resolveAIMock(modelName) {
|
|
2055
2157
|
const g4 = globalThis;
|
|
@@ -2139,12 +2241,24 @@ var g3 = globalThis;
|
|
|
2139
2241
|
var HTTP_RUN_ALS_KEY = "__elasticdash_http_run_als__";
|
|
2140
2242
|
var httpRunAls = g3[HTTP_RUN_ALS_KEY] ?? new import_node_async_hooks3.AsyncLocalStorage();
|
|
2141
2243
|
if (!g3[HTTP_RUN_ALS_KEY]) g3[HTTP_RUN_ALS_KEY] = httpRunAls;
|
|
2142
|
-
function buildContext(runId, dashboardUrl, frozenEvents, promptMocksRecord = {}) {
|
|
2244
|
+
function buildContext(runId, dashboardUrl, frozenEvents, promptMocksRecord = {}, toolMockConfig, aiMockConfig, userPromptMocks) {
|
|
2143
2245
|
let counter = 0;
|
|
2144
2246
|
const frozenMap = /* @__PURE__ */ new Map();
|
|
2145
2247
|
for (const e of frozenEvents) frozenMap.set(e.id, e);
|
|
2146
2248
|
const promptMocksMap = new Map(Object.entries(promptMocksRecord));
|
|
2147
|
-
return {
|
|
2249
|
+
return {
|
|
2250
|
+
runId,
|
|
2251
|
+
dashboardUrl,
|
|
2252
|
+
nextId: () => ++counter,
|
|
2253
|
+
frozenEvents: frozenMap,
|
|
2254
|
+
promptMocks: promptMocksMap,
|
|
2255
|
+
userPromptMocks,
|
|
2256
|
+
toolMockConfig,
|
|
2257
|
+
aiMockConfig,
|
|
2258
|
+
toolCallCounters: {},
|
|
2259
|
+
aiCallCounters: {},
|
|
2260
|
+
userPromptCallCounters: {}
|
|
2261
|
+
};
|
|
2148
2262
|
}
|
|
2149
2263
|
function setHttpRunContext(runId, dashboardUrl) {
|
|
2150
2264
|
httpRunAls.enterWith(buildContext(runId, dashboardUrl, [], {}));
|
|
@@ -2152,16 +2266,28 @@ function setHttpRunContext(runId, dashboardUrl) {
|
|
|
2152
2266
|
async function initHttpRunContext(runId, dashboardUrl) {
|
|
2153
2267
|
let frozenEvents = [];
|
|
2154
2268
|
let promptMocks = {};
|
|
2269
|
+
let toolMockConfig;
|
|
2270
|
+
let aiMockConfig;
|
|
2271
|
+
let userPromptMocks;
|
|
2155
2272
|
try {
|
|
2156
2273
|
const res = await fetch(`${dashboardUrl}/api/run-configs/${runId}`);
|
|
2157
2274
|
if (res.ok) {
|
|
2158
2275
|
const data = await res.json();
|
|
2159
2276
|
frozenEvents = Array.isArray(data.frozenEvents) ? data.frozenEvents : [];
|
|
2160
2277
|
promptMocks = data.promptMocks && typeof data.promptMocks === "object" && !Array.isArray(data.promptMocks) ? data.promptMocks : {};
|
|
2278
|
+
if (data.toolMockConfig && typeof data.toolMockConfig === "object" && !Array.isArray(data.toolMockConfig)) {
|
|
2279
|
+
toolMockConfig = data.toolMockConfig;
|
|
2280
|
+
}
|
|
2281
|
+
if (data.aiMockConfig && typeof data.aiMockConfig === "object" && !Array.isArray(data.aiMockConfig)) {
|
|
2282
|
+
aiMockConfig = data.aiMockConfig;
|
|
2283
|
+
}
|
|
2284
|
+
if (data.userPromptMocks && typeof data.userPromptMocks === "object" && !Array.isArray(data.userPromptMocks)) {
|
|
2285
|
+
userPromptMocks = data.userPromptMocks;
|
|
2286
|
+
}
|
|
2161
2287
|
}
|
|
2162
2288
|
} catch {
|
|
2163
2289
|
}
|
|
2164
|
-
httpRunAls.enterWith(buildContext(runId, dashboardUrl, frozenEvents, promptMocks));
|
|
2290
|
+
httpRunAls.enterWith(buildContext(runId, dashboardUrl, frozenEvents, promptMocks, toolMockConfig, aiMockConfig, userPromptMocks));
|
|
2165
2291
|
}
|
|
2166
2292
|
function getHttpRunContext() {
|
|
2167
2293
|
return httpRunAls.getStore();
|
|
@@ -2192,6 +2318,79 @@ function getHttpPromptMock(input) {
|
|
|
2192
2318
|
}
|
|
2193
2319
|
return replaceSystemPrompt(input, newSystemPrompt);
|
|
2194
2320
|
}
|
|
2321
|
+
function getHttpUserPromptMock(input) {
|
|
2322
|
+
const ctx = httpRunAls.getStore();
|
|
2323
|
+
if (!ctx?.userPromptMocks || Object.keys(ctx.userPromptMocks).length === 0) return void 0;
|
|
2324
|
+
const userPrompts = extractUserPrompts(input);
|
|
2325
|
+
if (userPrompts.length === 0) return void 0;
|
|
2326
|
+
const mocks = ctx.userPromptMocks;
|
|
2327
|
+
const counters = ctx.userPromptCallCounters;
|
|
2328
|
+
const uniqueTexts = Array.from(new Set(userPrompts));
|
|
2329
|
+
let modified = false;
|
|
2330
|
+
let result = input;
|
|
2331
|
+
for (const text of uniqueTexts) {
|
|
2332
|
+
const match = lookupMockEntry(mocks, text);
|
|
2333
|
+
if (!match || match.entry.mode === "live") continue;
|
|
2334
|
+
const entry = match.entry;
|
|
2335
|
+
counters[match.key] = (counters[match.key] ?? 0) + 1;
|
|
2336
|
+
const callNumber = counters[match.key];
|
|
2337
|
+
if (entry.mode === "replace-all") {
|
|
2338
|
+
result = replaceUserPrompt(result, text, entry.replacement);
|
|
2339
|
+
modified = true;
|
|
2340
|
+
} else if (entry.mode === "replace-specific") {
|
|
2341
|
+
const indices = entry.callIndices ?? [];
|
|
2342
|
+
if (indices.includes(callNumber)) {
|
|
2343
|
+
result = replaceUserPrompt(result, text, entry.replacement);
|
|
2344
|
+
modified = true;
|
|
2345
|
+
}
|
|
2346
|
+
}
|
|
2347
|
+
}
|
|
2348
|
+
return modified ? result : void 0;
|
|
2349
|
+
}
|
|
2350
|
+
function getHttpToolMock(toolName) {
|
|
2351
|
+
const ctx = httpRunAls.getStore();
|
|
2352
|
+
if (!ctx?.toolMockConfig) return { mocked: false };
|
|
2353
|
+
const entry = ctx.toolMockConfig[toolName];
|
|
2354
|
+
if (!entry || entry.mode === "live") return { mocked: false };
|
|
2355
|
+
ctx.toolCallCounters[toolName] = (ctx.toolCallCounters[toolName] ?? 0) + 1;
|
|
2356
|
+
const callNumber = ctx.toolCallCounters[toolName];
|
|
2357
|
+
if (entry.mode === "mock-all") {
|
|
2358
|
+
const data = entry.mockData ?? {};
|
|
2359
|
+
const raw = data[callNumber] !== void 0 ? data[callNumber] : data[0];
|
|
2360
|
+
return { mocked: true, result: normaliseMockResult(raw) };
|
|
2361
|
+
}
|
|
2362
|
+
if (entry.mode === "mock-specific") {
|
|
2363
|
+
const indices = entry.callIndices ?? [];
|
|
2364
|
+
if (indices.includes(callNumber)) {
|
|
2365
|
+
const data = entry.mockData ?? {};
|
|
2366
|
+
return { mocked: true, result: normaliseMockResult(data[callNumber]) };
|
|
2367
|
+
}
|
|
2368
|
+
return { mocked: false };
|
|
2369
|
+
}
|
|
2370
|
+
return { mocked: false };
|
|
2371
|
+
}
|
|
2372
|
+
function getHttpAIMock(modelName) {
|
|
2373
|
+
const ctx = httpRunAls.getStore();
|
|
2374
|
+
if (!ctx?.aiMockConfig) return { mocked: false };
|
|
2375
|
+
const entry = ctx.aiMockConfig[modelName];
|
|
2376
|
+
if (!entry || entry.mode === "live") return { mocked: false };
|
|
2377
|
+
ctx.aiCallCounters[modelName] = (ctx.aiCallCounters[modelName] ?? 0) + 1;
|
|
2378
|
+
const callNumber = ctx.aiCallCounters[modelName];
|
|
2379
|
+
if (entry.mode === "mock-all") {
|
|
2380
|
+
const data = entry.mockData ?? {};
|
|
2381
|
+
const raw = data[callNumber] !== void 0 ? data[callNumber] : data[0];
|
|
2382
|
+
return { mocked: true, result: normaliseMockResult(raw) };
|
|
2383
|
+
}
|
|
2384
|
+
if (entry.mode === "mock-specific") {
|
|
2385
|
+
const indices = entry.callIndices ?? [];
|
|
2386
|
+
if (indices.includes(callNumber)) {
|
|
2387
|
+
const data = entry.mockData ?? {};
|
|
2388
|
+
return { mocked: true, result: normaliseMockResult(data[callNumber]) };
|
|
2389
|
+
}
|
|
2390
|
+
return { mocked: false };
|
|
2391
|
+
}
|
|
2392
|
+
return { mocked: false };
|
|
2393
|
+
}
|
|
2195
2394
|
function pushTelemetryEvent(event) {
|
|
2196
2395
|
const ctx = httpRunAls.getStore();
|
|
2197
2396
|
if (!ctx) {
|
|
@@ -2217,14 +2416,27 @@ function runInHttpContext(runId, dashboardUrl, callback) {
|
|
|
2217
2416
|
async function runWithInitializedHttpContext(runId, dashboardUrl, callback) {
|
|
2218
2417
|
let frozenEvents = [];
|
|
2219
2418
|
let promptMocks = {};
|
|
2419
|
+
let toolMockConfig;
|
|
2420
|
+
let aiMockConfig;
|
|
2421
|
+
let userPromptMocks;
|
|
2220
2422
|
try {
|
|
2221
2423
|
const res = await fetch(`${dashboardUrl}/api/run-configs/${runId}`);
|
|
2222
2424
|
if (res.ok) {
|
|
2223
2425
|
const data = await res.json();
|
|
2224
2426
|
frozenEvents = Array.isArray(data.frozenEvents) ? data.frozenEvents : [];
|
|
2225
2427
|
promptMocks = data.promptMocks && typeof data.promptMocks === "object" && !Array.isArray(data.promptMocks) ? data.promptMocks : {};
|
|
2428
|
+
if (data.toolMockConfig && typeof data.toolMockConfig === "object" && !Array.isArray(data.toolMockConfig)) {
|
|
2429
|
+
toolMockConfig = data.toolMockConfig;
|
|
2430
|
+
}
|
|
2431
|
+
if (data.aiMockConfig && typeof data.aiMockConfig === "object" && !Array.isArray(data.aiMockConfig)) {
|
|
2432
|
+
aiMockConfig = data.aiMockConfig;
|
|
2433
|
+
}
|
|
2434
|
+
if (data.userPromptMocks && typeof data.userPromptMocks === "object" && !Array.isArray(data.userPromptMocks)) {
|
|
2435
|
+
userPromptMocks = data.userPromptMocks;
|
|
2436
|
+
}
|
|
2226
2437
|
const mockKeys = Object.keys(promptMocks);
|
|
2227
|
-
|
|
2438
|
+
const userMockKeys = Object.keys(userPromptMocks ?? {});
|
|
2439
|
+
console.log(`[elasticdash] runWithInitializedHttpContext: fetched ${mockKeys.length} prompt mocks, ${userMockKeys.length} user prompt mocks, ${frozenEvents.length} frozen events`);
|
|
2228
2440
|
if (mockKeys.length > 0) {
|
|
2229
2441
|
console.log(`[elasticdash] runWithInitializedHttpContext: mock keys (first 80 chars each): ${JSON.stringify(mockKeys.map((k) => k.slice(0, 80)))}`);
|
|
2230
2442
|
}
|
|
@@ -2233,7 +2445,7 @@ async function runWithInitializedHttpContext(runId, dashboardUrl, callback) {
|
|
|
2233
2445
|
}
|
|
2234
2446
|
} catch {
|
|
2235
2447
|
}
|
|
2236
|
-
return httpRunAls.run(buildContext(runId, dashboardUrl, frozenEvents, promptMocks), callback);
|
|
2448
|
+
return httpRunAls.run(buildContext(runId, dashboardUrl, frozenEvents, promptMocks, toolMockConfig, aiMockConfig, userPromptMocks), callback);
|
|
2237
2449
|
}
|
|
2238
2450
|
async function tryAutoInitHttpContext() {
|
|
2239
2451
|
if (getHttpRunContext()) return;
|
|
@@ -2339,6 +2551,12 @@ function wrapTool(name, fn) {
|
|
|
2339
2551
|
}
|
|
2340
2552
|
return frozen.output;
|
|
2341
2553
|
}
|
|
2554
|
+
const toolMock = getHttpToolMock(name);
|
|
2555
|
+
if (toolMock.mocked) {
|
|
2556
|
+
const event = { id: id2, type: "tool", name, input: input2, output: toolMock.result, timestamp: rawDateNow(), durationMs: 0 };
|
|
2557
|
+
pushTelemetryEvent(event);
|
|
2558
|
+
return toolMock.result;
|
|
2559
|
+
}
|
|
2342
2560
|
const start2 = rawDateNow();
|
|
2343
2561
|
try {
|
|
2344
2562
|
const output = await fn(...args);
|
|
@@ -2498,24 +2716,26 @@ function wrapAI(modelName, callFn) {
|
|
|
2498
2716
|
if (replay.shouldReplay(id2)) {
|
|
2499
2717
|
return replay.getRecordedResult(id2);
|
|
2500
2718
|
}
|
|
2501
|
-
const
|
|
2502
|
-
if (
|
|
2719
|
+
const aiMock2 = resolveAIMock(modelName);
|
|
2720
|
+
if (aiMock2.mocked) {
|
|
2503
2721
|
const input3 = args.length === 1 ? args[0] : args;
|
|
2504
2722
|
const event = {
|
|
2505
2723
|
id: id2,
|
|
2506
2724
|
type: "ai",
|
|
2507
2725
|
name: modelName,
|
|
2508
2726
|
input: input3,
|
|
2509
|
-
output:
|
|
2727
|
+
output: aiMock2.result,
|
|
2510
2728
|
timestamp: start,
|
|
2511
2729
|
durationMs: 0
|
|
2512
2730
|
};
|
|
2513
2731
|
recorder.record(event);
|
|
2514
2732
|
if (httpCtx) pushTelemetryEvent(event);
|
|
2515
|
-
return
|
|
2733
|
+
return aiMock2.result;
|
|
2516
2734
|
}
|
|
2517
2735
|
const rawInput = args.length === 1 ? args[0] : args;
|
|
2518
|
-
const
|
|
2736
|
+
const promptModifiedInput = resolvePromptMock(rawInput);
|
|
2737
|
+
const userPromptModifiedInput = resolveUserPromptMock(promptModifiedInput !== void 0 ? promptModifiedInput : rawInput);
|
|
2738
|
+
const modifiedInput = userPromptModifiedInput !== void 0 ? userPromptModifiedInput : promptModifiedInput;
|
|
2519
2739
|
const effectiveArgs = modifiedInput !== void 0 ? [modifiedInput] : args;
|
|
2520
2740
|
const input2 = modifiedInput !== void 0 ? modifiedInput : rawInput;
|
|
2521
2741
|
try {
|
|
@@ -2557,8 +2777,25 @@ function wrapAI(modelName, callFn) {
|
|
|
2557
2777
|
pushTelemetryEvent(frozen);
|
|
2558
2778
|
return frozen.output;
|
|
2559
2779
|
}
|
|
2780
|
+
const aiMock = getHttpAIMock(modelName);
|
|
2781
|
+
if (aiMock.mocked) {
|
|
2782
|
+
const input2 = args.length === 1 ? args[0] : args;
|
|
2783
|
+
const event = {
|
|
2784
|
+
id,
|
|
2785
|
+
type: "ai",
|
|
2786
|
+
name: modelName,
|
|
2787
|
+
input: input2,
|
|
2788
|
+
output: aiMock.result,
|
|
2789
|
+
timestamp: start,
|
|
2790
|
+
durationMs: 0
|
|
2791
|
+
};
|
|
2792
|
+
pushTelemetryEvent(event);
|
|
2793
|
+
return aiMock.result;
|
|
2794
|
+
}
|
|
2560
2795
|
const rawHttpInput = args.length === 1 ? args[0] : args;
|
|
2561
|
-
const
|
|
2796
|
+
const httpSystemModified = getHttpPromptMock(rawHttpInput);
|
|
2797
|
+
const httpUserModified = getHttpUserPromptMock(httpSystemModified !== void 0 ? httpSystemModified : rawHttpInput);
|
|
2798
|
+
const httpModifiedInput = httpUserModified !== void 0 ? httpUserModified : httpSystemModified;
|
|
2562
2799
|
const httpEffectiveArgs = httpModifiedInput !== void 0 ? [httpModifiedInput] : args;
|
|
2563
2800
|
const input = httpModifiedInput !== void 0 ? httpModifiedInput : rawHttpInput;
|
|
2564
2801
|
try {
|
|
@@ -3210,6 +3447,7 @@ function resolveRef(ref, previousOutputs) {
|
|
|
3210
3447
|
interceptFetch,
|
|
3211
3448
|
interceptRandom,
|
|
3212
3449
|
isWorker,
|
|
3450
|
+
lookupMockEntry,
|
|
3213
3451
|
pushTelemetryEvent,
|
|
3214
3452
|
readVercelAIStream,
|
|
3215
3453
|
recordToolCall,
|
|
@@ -3219,6 +3457,7 @@ function resolveRef(ref, previousOutputs) {
|
|
|
3219
3457
|
resolveMock,
|
|
3220
3458
|
resolvePromptMock,
|
|
3221
3459
|
resolveTaskInput,
|
|
3460
|
+
resolveUserPromptMock,
|
|
3222
3461
|
restoreDateNow,
|
|
3223
3462
|
restoreFetch,
|
|
3224
3463
|
restoreRandom,
|
package/dist/index.d.ts
CHANGED
|
@@ -8,8 +8,8 @@ export { installAIInterceptor, uninstallAIInterceptor } from './interceptors/ai-
|
|
|
8
8
|
export { startLLMProxy, fetchCapturedTrace } from './proxy/llm-capture.js';
|
|
9
9
|
export { recordToolCall } from './tracing.js';
|
|
10
10
|
export { safeRecordToolCall, isWorker } from './internals/conditional-recorder.js';
|
|
11
|
-
export { resolveMock, resolveAIMock, resolvePromptMock } from './internals/mock-resolver.js';
|
|
12
|
-
export type { AIMockEntry, AIMockConfig } from './internals/mock-resolver.js';
|
|
11
|
+
export { resolveMock, resolveAIMock, resolvePromptMock, resolveUserPromptMock, lookupMockEntry } from './internals/mock-resolver.js';
|
|
12
|
+
export type { AIMockEntry, AIMockConfig, UserPromptMockEntry, UserPromptMockConfig, SystemPromptMockEntry, SystemPromptMockConfig } from './internals/mock-resolver.js';
|
|
13
13
|
export type { TestResult, FileResult, RunnerOptions } from './runner.js';
|
|
14
14
|
export type { AITestContext, TraceHandle, LLMStep, ToolCall, CustomStep, TraceStep, RunnerHooks } from './trace-adapter/context.js';
|
|
15
15
|
export type { WorkflowEvent, WorkflowEventType, WorkflowTrace } from './capture/event.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACnH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACnH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAC/F,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACnH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACnH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAC/F,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AACpI,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACvK,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACxE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAEnI,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACzF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC3F,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAA;AAC/O,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3G,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AACzF,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACjH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAEjF,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC1G,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ export { installAIInterceptor, uninstallAIInterceptor } from './interceptors/ai-
|
|
|
9
9
|
export { startLLMProxy, fetchCapturedTrace } from './proxy/llm-capture.js';
|
|
10
10
|
export { recordToolCall } from './tracing.js';
|
|
11
11
|
export { safeRecordToolCall, isWorker } from './internals/conditional-recorder.js';
|
|
12
|
-
export { resolveMock, resolveAIMock, resolvePromptMock } from './internals/mock-resolver.js';
|
|
12
|
+
export { resolveMock, resolveAIMock, resolvePromptMock, resolveUserPromptMock, lookupMockEntry } from './internals/mock-resolver.js';
|
|
13
13
|
export { TraceRecorder, setCaptureContext, getCaptureContext } from './capture/recorder.js';
|
|
14
14
|
export { ReplayController } from './capture/replay.js';
|
|
15
15
|
export { wrapTool } from './interceptors/tool.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACnH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACnH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAC/F,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACnH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACnH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAC/F,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAMpI,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAE3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAA;AAC/O,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3G,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAEzF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACjH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAIlD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
import type { WorkflowEvent } from '../capture/event.js';
|
|
2
|
+
import type { AIMockEntry, UserPromptMockEntry } from '../internals/mock-resolver.js';
|
|
3
|
+
interface ToolMockEntry {
|
|
4
|
+
mode: 'live' | 'mock-all' | 'mock-specific';
|
|
5
|
+
callIndices?: number[];
|
|
6
|
+
mockData?: Record<number, unknown>;
|
|
7
|
+
}
|
|
8
|
+
type MockResult = {
|
|
9
|
+
mocked: true;
|
|
10
|
+
result: unknown;
|
|
11
|
+
} | {
|
|
12
|
+
mocked: false;
|
|
13
|
+
};
|
|
2
14
|
interface HttpRunContext {
|
|
3
15
|
runId: string;
|
|
4
16
|
dashboardUrl: string;
|
|
@@ -6,6 +18,18 @@ interface HttpRunContext {
|
|
|
6
18
|
frozenEvents: Map<number, WorkflowEvent>;
|
|
7
19
|
/** System-prompt-keyed overrides: original system prompt → replacement system prompt */
|
|
8
20
|
promptMocks: Map<string, string>;
|
|
21
|
+
/** User prompt mock configuration (keyed by original user message text) */
|
|
22
|
+
userPromptMocks?: Record<string, UserPromptMockEntry>;
|
|
23
|
+
/** Tool output mock configuration (keyed by tool name) */
|
|
24
|
+
toolMockConfig?: Record<string, ToolMockEntry>;
|
|
25
|
+
/** AI output mock configuration (keyed by model name) */
|
|
26
|
+
aiMockConfig?: Record<string, AIMockEntry>;
|
|
27
|
+
/** Per-tool call counters for mock resolution (scoped to this request) */
|
|
28
|
+
toolCallCounters: Record<string, number>;
|
|
29
|
+
/** Per-model call counters for AI mock resolution (scoped to this request) */
|
|
30
|
+
aiCallCounters: Record<string, number>;
|
|
31
|
+
/** Per-user-prompt-text call counters for user prompt mock resolution */
|
|
32
|
+
userPromptCallCounters: Record<string, number>;
|
|
9
33
|
}
|
|
10
34
|
/** Synchronous setup — use when there are no frozen events (live run with no replay). */
|
|
11
35
|
export declare function setHttpRunContext(runId: string, dashboardUrl: string): void;
|
|
@@ -23,6 +47,22 @@ export declare function getHttpFrozenEvent(id: number): WorkflowEvent | undefine
|
|
|
23
47
|
* a copy of `input` with the system prompt replaced. Otherwise returns `undefined`.
|
|
24
48
|
*/
|
|
25
49
|
export declare function getHttpPromptMock(input: unknown): unknown | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* If user prompt mocks are configured, applies all matching replacements to `input`.
|
|
52
|
+
* Returns modified input or `undefined` if no replacements applied.
|
|
53
|
+
* Uses fuzzy matching (strip/add JSON quotes) to handle serialization mismatches.
|
|
54
|
+
*/
|
|
55
|
+
export declare function getHttpUserPromptMock(input: unknown): unknown | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Resolves whether the current HTTP-mode call to `toolName` should be mocked.
|
|
58
|
+
* Mirrors `resolveMock()` but reads from the per-request HttpRunContext.
|
|
59
|
+
*/
|
|
60
|
+
export declare function getHttpToolMock(toolName: string): MockResult;
|
|
61
|
+
/**
|
|
62
|
+
* Resolves whether the current HTTP-mode call to `modelName` should be mocked.
|
|
63
|
+
* Mirrors `resolveAIMock()` but reads from the per-request HttpRunContext.
|
|
64
|
+
*/
|
|
65
|
+
export declare function getHttpAIMock(modelName: string): MockResult;
|
|
26
66
|
export declare function pushTelemetryEvent(event: WorkflowEvent): void;
|
|
27
67
|
/**
|
|
28
68
|
* Lazily initialises an HTTP run context from environment variables when none
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry-push.d.ts","sourceRoot":"","sources":["../../src/interceptors/telemetry-push.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"telemetry-push.d.ts","sourceRoot":"","sources":["../../src/interceptors/telemetry-push.ts"],"names":[],"mappings":"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"}
|