@browserbasehq/orca 3.2.0-preview.5 → 3.2.1-preview.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/cjs/lib/inference.js +29 -22
- package/dist/cjs/lib/inference.js.map +1 -1
- package/dist/cjs/lib/prompt.js +18 -21
- package/dist/cjs/lib/prompt.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AgentProvider.js +1 -0
- package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.d.ts +3 -1
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +60 -9
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js +15 -0
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +8 -2
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.js +103 -49
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/index.js +1 -1
- package/dist/cjs/lib/v3/agent/tools/index.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/keys.d.ts +2 -1
- package/dist/cjs/lib/v3/agent/tools/keys.js +57 -49
- package/dist/cjs/lib/v3/agent/tools/keys.js.map +1 -1
- package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.js +3 -5
- package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.js.map +1 -1
- package/dist/cjs/lib/v3/api.d.ts +5 -3
- package/dist/cjs/lib/v3/api.js +3 -6
- package/dist/cjs/lib/v3/api.js.map +1 -1
- package/dist/cjs/lib/v3/cache/AgentCache.js +5 -3
- package/dist/cjs/lib/v3/cache/AgentCache.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +6 -15
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
- package/dist/cjs/lib/v3/index.d.ts +1 -1
- package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +5 -2
- package/dist/cjs/lib/v3/llm/LLMProvider.js +14 -6
- package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
- package/dist/cjs/lib/v3/llm/OpenAIClient.js +1 -0
- package/dist/cjs/lib/v3/llm/OpenAIClient.js.map +1 -1
- package/dist/cjs/lib/v3/llm/aisdk.d.ts +3 -1
- package/dist/cjs/lib/v3/llm/aisdk.js +67 -17
- package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/agent.d.ts +8 -3
- package/dist/cjs/lib/v3/types/public/agent.js +1 -0
- package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/api.d.ts +30 -0
- package/dist/cjs/lib/v3/types/public/api.js +6 -2
- package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/model.d.ts +32 -2
- package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/context.js +11 -3
- package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/page.js +1 -1
- package/dist/cjs/lib/v3/understudy/page.js.map +1 -1
- package/dist/cjs/lib/v3/v3.d.ts +18 -2
- package/dist/cjs/lib/v3/v3.js +92 -9
- package/dist/cjs/lib/v3/v3.js.map +1 -1
- package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js +56 -0
- package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js.map +1 -0
- package/dist/cjs/tests/integration/flowLogger.spec.js +12 -8
- package/dist/cjs/tests/integration/flowLogger.spec.js.map +1 -1
- package/dist/cjs/tests/integration/testUtils.js +1 -1
- package/dist/cjs/tests/integration/testUtils.js.map +1 -1
- package/dist/cjs/tests/integration/timeouts.spec.js +6 -4
- package/dist/cjs/tests/integration/timeouts.spec.js.map +1 -1
- package/dist/cjs/tests/unit/agent-captcha-hooks.test.js +56 -0
- package/dist/cjs/tests/unit/agent-captcha-hooks.test.js.map +1 -1
- package/dist/cjs/tests/unit/agent-metrics.test.d.ts +1 -0
- package/dist/cjs/tests/unit/agent-metrics.test.js +112 -0
- package/dist/cjs/tests/unit/agent-metrics.test.js.map +1 -0
- package/dist/cjs/tests/unit/aisdk-clients.test.d.ts +1 -0
- package/dist/cjs/tests/unit/aisdk-clients.test.js +90 -0
- package/dist/cjs/tests/unit/aisdk-clients.test.js.map +1 -0
- package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +1 -0
- package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js +250 -0
- package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +1 -0
- package/dist/cjs/tests/unit/api-optional-model-api-key.test.d.ts +1 -0
- package/dist/cjs/tests/unit/api-optional-model-api-key.test.js +95 -0
- package/dist/cjs/tests/unit/api-optional-model-api-key.test.js.map +1 -0
- package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +20 -0
- package/dist/cjs/tests/unit/browserbase-session-accessors.test.js.map +1 -1
- package/dist/cjs/tests/unit/llm-middleware.test.d.ts +1 -0
- package/dist/cjs/tests/unit/llm-middleware.test.js +495 -0
- package/dist/cjs/tests/unit/llm-middleware.test.js.map +1 -0
- package/dist/cjs/tests/unit/microsoft-cua-client.test.d.ts +1 -0
- package/dist/cjs/tests/unit/microsoft-cua-client.test.js +86 -0
- package/dist/cjs/tests/unit/microsoft-cua-client.test.js.map +1 -0
- package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +1 -0
- package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
- package/dist/esm/lib/inference.js +29 -22
- package/dist/esm/lib/inference.js.map +1 -1
- package/dist/esm/lib/prompt.js +18 -21
- package/dist/esm/lib/prompt.js.map +1 -1
- package/dist/esm/lib/v3/agent/AgentProvider.js +1 -0
- package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.d.ts +3 -1
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +60 -9
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +15 -0
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +8 -2
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js +103 -49
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/index.js +1 -1
- package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/keys.d.ts +2 -1
- package/dist/esm/lib/v3/agent/tools/keys.js +57 -49
- package/dist/esm/lib/v3/agent/tools/keys.js.map +1 -1
- package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js +3 -5
- package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js.map +1 -1
- package/dist/esm/lib/v3/api.d.ts +5 -3
- package/dist/esm/lib/v3/api.js +3 -6
- package/dist/esm/lib/v3/api.js.map +1 -1
- package/dist/esm/lib/v3/cache/AgentCache.js +5 -3
- package/dist/esm/lib/v3/cache/AgentCache.js.map +1 -1
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +6 -15
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/index.d.ts +1 -1
- package/dist/esm/lib/v3/llm/LLMProvider.d.ts +5 -2
- package/dist/esm/lib/v3/llm/LLMProvider.js +15 -7
- package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
- package/dist/esm/lib/v3/llm/OpenAIClient.js +1 -0
- package/dist/esm/lib/v3/llm/OpenAIClient.js.map +1 -1
- package/dist/esm/lib/v3/llm/aisdk.d.ts +3 -1
- package/dist/esm/lib/v3/llm/aisdk.js +67 -17
- package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/esm/lib/v3/types/public/agent.d.ts +8 -3
- package/dist/esm/lib/v3/types/public/agent.js +1 -0
- package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
- package/dist/esm/lib/v3/types/public/api.d.ts +30 -0
- package/dist/esm/lib/v3/types/public/api.js +6 -2
- package/dist/esm/lib/v3/types/public/api.js.map +1 -1
- package/dist/esm/lib/v3/types/public/model.d.ts +32 -2
- package/dist/esm/lib/v3/types/public/model.js.map +1 -1
- package/dist/esm/lib/v3/understudy/context.js +11 -3
- package/dist/esm/lib/v3/understudy/context.js.map +1 -1
- package/dist/esm/lib/v3/understudy/page.js +1 -1
- package/dist/esm/lib/v3/understudy/page.js.map +1 -1
- package/dist/esm/lib/v3/v3.d.ts +18 -2
- package/dist/esm/lib/v3/v3.js +92 -10
- package/dist/esm/lib/v3/v3.js.map +1 -1
- package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.d.ts +1 -0
- package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js +54 -0
- package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js.map +1 -0
- package/dist/esm/tests/integration/flowLogger.spec.js +12 -8
- package/dist/esm/tests/integration/flowLogger.spec.js.map +1 -1
- package/dist/esm/tests/integration/testUtils.js +1 -1
- package/dist/esm/tests/integration/testUtils.js.map +1 -1
- package/dist/esm/tests/integration/timeouts.spec.js +6 -4
- package/dist/esm/tests/integration/timeouts.spec.js.map +1 -1
- package/dist/esm/tests/unit/agent-captcha-hooks.test.js +56 -0
- package/dist/esm/tests/unit/agent-captcha-hooks.test.js.map +1 -1
- package/dist/esm/tests/unit/agent-metrics.test.d.ts +1 -0
- package/dist/esm/tests/unit/agent-metrics.test.js +110 -0
- package/dist/esm/tests/unit/agent-metrics.test.js.map +1 -0
- package/dist/esm/tests/unit/aisdk-clients.test.d.ts +1 -0
- package/dist/esm/tests/unit/aisdk-clients.test.js +88 -0
- package/dist/esm/tests/unit/aisdk-clients.test.js.map +1 -0
- package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +1 -0
- package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js +245 -0
- package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +1 -0
- package/dist/esm/tests/unit/api-optional-model-api-key.test.d.ts +1 -0
- package/dist/esm/tests/unit/api-optional-model-api-key.test.js +93 -0
- package/dist/esm/tests/unit/api-optional-model-api-key.test.js.map +1 -0
- package/dist/esm/tests/unit/browserbase-session-accessors.test.js +20 -0
- package/dist/esm/tests/unit/browserbase-session-accessors.test.js.map +1 -1
- package/dist/esm/tests/unit/llm-middleware.test.d.ts +1 -0
- package/dist/esm/tests/unit/llm-middleware.test.js +460 -0
- package/dist/esm/tests/unit/llm-middleware.test.js.map +1 -0
- package/dist/esm/tests/unit/microsoft-cua-client.test.d.ts +1 -0
- package/dist/esm/tests/unit/microsoft-cua-client.test.js +84 -0
- package/dist/esm/tests/unit/microsoft-cua-client.test.js.map +1 -0
- package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +1 -0
- package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
- package/package.json +4 -8
- package/dist/cjs/lib/v3/dom/build/rerender-index.js +0 -1
- package/dist/cjs/lib/v3/dom/build/v3-index.js +0 -1
- package/dist/esm/lib/v3/dom/build/rerender-index.js +0 -1
- package/dist/esm/lib/v3/dom/build/v3-index.js +0 -1
package/dist/esm/lib/v3/v3.d.ts
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
|
+
import type { LanguageModelV2Middleware } from "@ai-sdk/provider";
|
|
1
2
|
import { z } from "zod";
|
|
2
3
|
import { InferStagehandSchema, StagehandZodSchema } from "./zodCompat.js";
|
|
3
4
|
import { LLMClient } from "./llm/LLMClient.js";
|
|
4
5
|
import { AgentReplayStep } from "./types/private/index.js";
|
|
5
|
-
import { AgentConfig, AgentExecuteOptions, AgentStreamExecuteOptions, AgentResult, LogLine, StagehandMetrics, Action, ActOptions, ActResult, defaultExtractSchema, ExtractOptions, HistoryEntry, ObserveOptions, pageTextSchema, V3FunctionName, V3Options, AgentStreamResult } from "./types/public/index.js";
|
|
6
|
+
import { AgentConfig, AgentExecuteOptions, AgentStreamExecuteOptions, AgentResult, LogLine, StagehandMetrics, Action, ActOptions, ActResult, defaultExtractSchema, ExtractOptions, HistoryEntry, ObserveOptions, pageTextSchema, V3FunctionName, AvailableModel, ClientOptions, V3Options, AgentStreamResult } from "./types/public/index.js";
|
|
6
7
|
import { V3Context } from "./understudy/context.js";
|
|
7
8
|
import { type FlowLoggerContext } from "./flowlogger/FlowLogger.js";
|
|
8
9
|
import { EventEmitterWithWildcardSupport } from "./flowlogger/EventEmitter.js";
|
|
9
10
|
import { EventStore } from "./flowlogger/EventStore.js";
|
|
11
|
+
type ResolvedModelConfiguration = {
|
|
12
|
+
modelName: AvailableModel;
|
|
13
|
+
clientOptions?: ClientOptions;
|
|
14
|
+
middleware?: LanguageModelV2Middleware;
|
|
15
|
+
};
|
|
16
|
+
export declare function resolveModelConfiguration(model?: V3Options["model"]): ResolvedModelConfiguration;
|
|
10
17
|
/**
|
|
11
18
|
* V3
|
|
12
19
|
*
|
|
@@ -57,7 +64,13 @@ export declare class V3 {
|
|
|
57
64
|
*/
|
|
58
65
|
get isCaptchaAutoSolveEnabled(): boolean;
|
|
59
66
|
/**
|
|
60
|
-
* Returns true if
|
|
67
|
+
* Returns true if Browserbase Verified mode is enabled in settings.
|
|
68
|
+
* Legacy `advancedStealth` is treated as equivalent for backwards compatibility.
|
|
69
|
+
*/
|
|
70
|
+
get isVerified(): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Backwards-compatible alias for Browserbase managed fingerprinting mode.
|
|
73
|
+
* @deprecated Use `isVerified` instead. This alias will be removed in a future version.
|
|
61
74
|
*/
|
|
62
75
|
get isAdvancedStealth(): boolean;
|
|
63
76
|
/**
|
|
@@ -95,6 +108,8 @@ export declare class V3 {
|
|
|
95
108
|
* When using API mode, fetches metrics from the API. Otherwise returns local metrics.
|
|
96
109
|
*/
|
|
97
110
|
get metrics(): Promise<StagehandMetrics>;
|
|
111
|
+
private mergeAgentMetricsWithLocalFallback;
|
|
112
|
+
private updateAgentMetricsFromUsage;
|
|
98
113
|
private resolveLlmClient;
|
|
99
114
|
private beginAgentReplayRecording;
|
|
100
115
|
private endAgentReplayRecording;
|
|
@@ -204,3 +219,4 @@ export declare class V3 {
|
|
|
204
219
|
execute: (instructionOrOptions: string | AgentExecuteOptions) => Promise<AgentResult>;
|
|
205
220
|
};
|
|
206
221
|
}
|
|
222
|
+
export {};
|
package/dist/esm/lib/v3/v3.js
CHANGED
|
@@ -71,7 +71,7 @@ import { ActTimeoutError } from "./types/public/sdkErrors.js";
|
|
|
71
71
|
const DEFAULT_MODEL_NAME = "openai/gpt-4.1-mini";
|
|
72
72
|
const DEFAULT_VIEWPORT = { width: 1288, height: 711 };
|
|
73
73
|
const DEFAULT_AGENT_TOOL_TIMEOUT_MS = 45000;
|
|
74
|
-
function resolveModelConfiguration(model) {
|
|
74
|
+
export function resolveModelConfiguration(model) {
|
|
75
75
|
if (!model) {
|
|
76
76
|
return { modelName: DEFAULT_MODEL_NAME };
|
|
77
77
|
}
|
|
@@ -79,13 +79,14 @@ function resolveModelConfiguration(model) {
|
|
|
79
79
|
return { modelName: model };
|
|
80
80
|
}
|
|
81
81
|
if (model && typeof model === "object") {
|
|
82
|
-
const { modelName, ...clientOptions } = model;
|
|
82
|
+
const { modelName, middleware, ...clientOptions } = model;
|
|
83
83
|
if (!modelName) {
|
|
84
84
|
throw new StagehandInvalidArgumentError("model.modelName is required when providing client options.");
|
|
85
85
|
}
|
|
86
86
|
return {
|
|
87
87
|
modelName,
|
|
88
88
|
clientOptions: clientOptions,
|
|
89
|
+
middleware,
|
|
89
90
|
};
|
|
90
91
|
}
|
|
91
92
|
return { modelName: DEFAULT_MODEL_NAME };
|
|
@@ -173,11 +174,20 @@ let V3 = (() => {
|
|
|
173
174
|
?.solveCaptchas !== false);
|
|
174
175
|
}
|
|
175
176
|
/**
|
|
176
|
-
* Returns true if
|
|
177
|
+
* Returns true if Browserbase Verified mode is enabled in settings.
|
|
178
|
+
* Legacy `advancedStealth` is treated as equivalent for backwards compatibility.
|
|
179
|
+
*/
|
|
180
|
+
get isVerified() {
|
|
181
|
+
const browserSettings = this.opts.browserbaseSessionCreateParams?.browserSettings;
|
|
182
|
+
return (browserSettings?.verified === true ||
|
|
183
|
+
browserSettings?.advancedStealth === true);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Backwards-compatible alias for Browserbase managed fingerprinting mode.
|
|
187
|
+
* @deprecated Use `isVerified` instead. This alias will be removed in a future version.
|
|
177
188
|
*/
|
|
178
189
|
get isAdvancedStealth() {
|
|
179
|
-
return
|
|
180
|
-
?.advancedStealth === true);
|
|
190
|
+
return this.isVerified;
|
|
181
191
|
}
|
|
182
192
|
/**
|
|
183
193
|
* Returns the configured viewport dimensions from launch options.
|
|
@@ -289,11 +299,11 @@ let V3 = (() => {
|
|
|
289
299
|
catch {
|
|
290
300
|
// ignore
|
|
291
301
|
}
|
|
292
|
-
const { modelName, clientOptions } = resolveModelConfiguration(opts.model);
|
|
302
|
+
const { modelName, clientOptions, middleware } = resolveModelConfiguration(opts.model);
|
|
293
303
|
this.modelName = modelName;
|
|
294
304
|
this.experimental = opts.experimental ?? false;
|
|
295
305
|
this.logInferenceToFile = opts.logInferenceToFile ?? false;
|
|
296
|
-
this.llmProvider = new LLMProvider(this.logger);
|
|
306
|
+
this.llmProvider = new LLMProvider(this.logger, middleware);
|
|
297
307
|
this.domSettleTimeoutMs = opts.domSettleTimeout;
|
|
298
308
|
this.disableAPI = opts.disableAPI ?? false;
|
|
299
309
|
const baseClientOptions = clientOptions
|
|
@@ -375,7 +385,10 @@ let V3 = (() => {
|
|
|
375
385
|
get metrics() {
|
|
376
386
|
if (this.apiClient) {
|
|
377
387
|
// Fetch metrics from the API
|
|
378
|
-
return this.apiClient
|
|
388
|
+
return this.apiClient
|
|
389
|
+
.getReplayMetrics()
|
|
390
|
+
.then((metrics) => this.mergeAgentMetricsWithLocalFallback(metrics))
|
|
391
|
+
.catch((error) => {
|
|
379
392
|
this.logger({
|
|
380
393
|
category: "metrics",
|
|
381
394
|
message: `Failed to fetch metrics from API: ${error}`,
|
|
@@ -388,21 +401,78 @@ let V3 = (() => {
|
|
|
388
401
|
// Return local metrics wrapped in a Promise for consistency
|
|
389
402
|
return Promise.resolve(this.stagehandMetrics);
|
|
390
403
|
}
|
|
404
|
+
mergeAgentMetricsWithLocalFallback(remoteMetrics) {
|
|
405
|
+
// In API mode, agent.execute() is the only path that returns trusted inline
|
|
406
|
+
// usage today, so only repair the agent bucket from local state.
|
|
407
|
+
const agentPromptTokens = Math.max(remoteMetrics.agentPromptTokens, this.stagehandMetrics.agentPromptTokens);
|
|
408
|
+
const agentCompletionTokens = Math.max(remoteMetrics.agentCompletionTokens, this.stagehandMetrics.agentCompletionTokens);
|
|
409
|
+
const agentReasoningTokens = Math.max(remoteMetrics.agentReasoningTokens, this.stagehandMetrics.agentReasoningTokens);
|
|
410
|
+
const agentCachedInputTokens = Math.max(remoteMetrics.agentCachedInputTokens, this.stagehandMetrics.agentCachedInputTokens);
|
|
411
|
+
const agentInferenceTimeMs = Math.max(remoteMetrics.agentInferenceTimeMs, this.stagehandMetrics.agentInferenceTimeMs);
|
|
412
|
+
const metrics = {
|
|
413
|
+
...remoteMetrics,
|
|
414
|
+
agentPromptTokens,
|
|
415
|
+
agentCompletionTokens,
|
|
416
|
+
agentReasoningTokens,
|
|
417
|
+
agentCachedInputTokens,
|
|
418
|
+
agentInferenceTimeMs,
|
|
419
|
+
totalPromptTokens: 0,
|
|
420
|
+
totalCompletionTokens: 0,
|
|
421
|
+
totalReasoningTokens: 0,
|
|
422
|
+
totalCachedInputTokens: 0,
|
|
423
|
+
totalInferenceTimeMs: 0,
|
|
424
|
+
};
|
|
425
|
+
metrics.totalPromptTokens =
|
|
426
|
+
metrics.actPromptTokens +
|
|
427
|
+
metrics.extractPromptTokens +
|
|
428
|
+
metrics.observePromptTokens +
|
|
429
|
+
metrics.agentPromptTokens;
|
|
430
|
+
metrics.totalCompletionTokens =
|
|
431
|
+
metrics.actCompletionTokens +
|
|
432
|
+
metrics.extractCompletionTokens +
|
|
433
|
+
metrics.observeCompletionTokens +
|
|
434
|
+
metrics.agentCompletionTokens;
|
|
435
|
+
metrics.totalReasoningTokens =
|
|
436
|
+
metrics.actReasoningTokens +
|
|
437
|
+
metrics.extractReasoningTokens +
|
|
438
|
+
metrics.observeReasoningTokens +
|
|
439
|
+
metrics.agentReasoningTokens;
|
|
440
|
+
metrics.totalCachedInputTokens =
|
|
441
|
+
metrics.actCachedInputTokens +
|
|
442
|
+
metrics.extractCachedInputTokens +
|
|
443
|
+
metrics.observeCachedInputTokens +
|
|
444
|
+
metrics.agentCachedInputTokens;
|
|
445
|
+
metrics.totalInferenceTimeMs =
|
|
446
|
+
metrics.actInferenceTimeMs +
|
|
447
|
+
metrics.extractInferenceTimeMs +
|
|
448
|
+
metrics.observeInferenceTimeMs +
|
|
449
|
+
metrics.agentInferenceTimeMs;
|
|
450
|
+
return metrics;
|
|
451
|
+
}
|
|
452
|
+
updateAgentMetricsFromUsage(usage) {
|
|
453
|
+
if (!usage) {
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
this.updateMetrics(V3FunctionName.AGENT, usage.input_tokens, usage.output_tokens, usage.reasoning_tokens ?? 0, usage.cached_input_tokens ?? 0, usage.inference_time_ms);
|
|
457
|
+
}
|
|
391
458
|
resolveLlmClient(model) {
|
|
392
459
|
if (!model) {
|
|
393
460
|
return this.llmClient;
|
|
394
461
|
}
|
|
395
462
|
let modelName;
|
|
396
463
|
let clientOptions;
|
|
464
|
+
let perCallMiddleware;
|
|
397
465
|
if (typeof model === "string") {
|
|
398
466
|
modelName = model;
|
|
399
467
|
}
|
|
400
468
|
else {
|
|
401
|
-
const { modelName: overrideModelName, ...rest } = model;
|
|
469
|
+
const { modelName: overrideModelName, middleware, ...rest } = model;
|
|
402
470
|
modelName = overrideModelName;
|
|
403
471
|
clientOptions = rest;
|
|
472
|
+
perCallMiddleware = middleware;
|
|
404
473
|
}
|
|
405
474
|
if (modelName === this.modelName &&
|
|
475
|
+
!perCallMiddleware &&
|
|
406
476
|
(!clientOptions || Object.keys(clientOptions).length === 0)) {
|
|
407
477
|
return this.llmClient;
|
|
408
478
|
}
|
|
@@ -419,6 +489,13 @@ let V3 = (() => {
|
|
|
419
489
|
mergedOptions.apiKey = apiKey;
|
|
420
490
|
}
|
|
421
491
|
}
|
|
492
|
+
if (perCallMiddleware) {
|
|
493
|
+
return this.llmProvider.getClient(modelName, mergedOptions, {
|
|
494
|
+
experimental: this.experimental,
|
|
495
|
+
disableAPI: this.disableAPI,
|
|
496
|
+
middleware: perCallMiddleware,
|
|
497
|
+
});
|
|
498
|
+
}
|
|
422
499
|
const cacheKey = JSON.stringify({
|
|
423
500
|
modelName,
|
|
424
501
|
clientOptions: mergedOptions,
|
|
@@ -427,7 +504,10 @@ let V3 = (() => {
|
|
|
427
504
|
if (cached) {
|
|
428
505
|
return cached;
|
|
429
506
|
}
|
|
430
|
-
const client = this.llmProvider.getClient(modelName, mergedOptions, {
|
|
507
|
+
const client = this.llmProvider.getClient(modelName, mergedOptions, {
|
|
508
|
+
experimental: this.experimental,
|
|
509
|
+
disableAPI: this.disableAPI,
|
|
510
|
+
});
|
|
431
511
|
this.overrideLlmClients.set(cacheKey, client);
|
|
432
512
|
return client;
|
|
433
513
|
}
|
|
@@ -1504,6 +1584,7 @@ let V3 = (() => {
|
|
|
1504
1584
|
if (this.apiClient && !this.experimental) {
|
|
1505
1585
|
const page = await this.ctx.awaitActivePage();
|
|
1506
1586
|
result = await this.apiClient.agentExecute(options, resolvedOptions, page.mainFrameId(), !!cacheContext);
|
|
1587
|
+
this.updateAgentMetricsFromUsage(result.usage);
|
|
1507
1588
|
if (cacheContext) {
|
|
1508
1589
|
const transferredEntry = this.apiClient.consumeLatestAgentCacheEntry();
|
|
1509
1590
|
await this.agentCache.storeTransferredEntry(transferredEntry);
|
|
@@ -1587,6 +1668,7 @@ let V3 = (() => {
|
|
|
1587
1668
|
if (this.apiClient && !this.experimental) {
|
|
1588
1669
|
const page = await this.ctx.awaitActivePage();
|
|
1589
1670
|
result = await this.apiClient.agentExecute(options ?? {}, resolvedOptions, page.mainFrameId(), !!cacheContext);
|
|
1671
|
+
this.updateAgentMetricsFromUsage(result.usage);
|
|
1590
1672
|
if (cacheContext) {
|
|
1591
1673
|
const transferredEntry = this.apiClient.consumeLatestAgentCacheEntry();
|
|
1592
1674
|
await this.agentCache.storeTransferredEntry(transferredEntry);
|