@intuned/browser-use-dev 0.1.2-dev.0 → 0.1.3-dev.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.
|
@@ -17,6 +17,7 @@ var _errors = require("./errors");
|
|
|
17
17
|
(0, _dotenv.config)();
|
|
18
18
|
const DEFAULT_MODEL = "gpt-5.6-luna";
|
|
19
19
|
const DEFAULT_MAX_TURNS = 100;
|
|
20
|
+
const SUMMARIZED_THINKING_MODEL = /^claude-(opus|sonnet|haiku|fable|mythos)-5/;
|
|
20
21
|
const MAX_IMAGES_IN_CONTEXT = 10;
|
|
21
22
|
const RESULT_NUDGE_TEXT = `You finished without calling the \`${_tools.RESULT_TOOL_NAME}\` tool. ` + `Call \`${_tools.RESULT_TOOL_NAME}\` now with the final result of the task.`;
|
|
22
23
|
function logErrorCauseChain(error) {
|
|
@@ -70,7 +71,8 @@ const executeTask = async options => {
|
|
|
70
71
|
maxTurns = DEFAULT_MAX_TURNS,
|
|
71
72
|
timeoutInMs,
|
|
72
73
|
signal,
|
|
73
|
-
showImages = false
|
|
74
|
+
showImages = false,
|
|
75
|
+
fast = false
|
|
74
76
|
} = options;
|
|
75
77
|
if (!task || task.trim().length === 0) {
|
|
76
78
|
throw new Error("browser-use: executeTask requires a non-empty task");
|
|
@@ -101,6 +103,7 @@ const executeTask = async options => {
|
|
|
101
103
|
apiKey,
|
|
102
104
|
model
|
|
103
105
|
});
|
|
106
|
+
const provider = (0, _aiGateway.detectProvider)(model);
|
|
104
107
|
const responses = providerInstance.responses;
|
|
105
108
|
const usesResponsesApi = typeof responses === "function";
|
|
106
109
|
const languageModel = typeof responses === "function" ? responses(model) : providerInstance.chat(model);
|
|
@@ -136,14 +139,27 @@ const executeTask = async options => {
|
|
|
136
139
|
providerOptions: {
|
|
137
140
|
...(usesResponsesApi ? {
|
|
138
141
|
openai: {
|
|
139
|
-
reasoningSummary: "auto"
|
|
142
|
+
reasoningSummary: "auto",
|
|
143
|
+
reasoningEffort: "medium",
|
|
144
|
+
...(fast ? {
|
|
145
|
+
serviceTier: "priority"
|
|
146
|
+
} : {})
|
|
140
147
|
}
|
|
141
148
|
} : {}),
|
|
142
|
-
...(
|
|
149
|
+
...(provider === "anthropic" ? {
|
|
143
150
|
anthropic: {
|
|
144
151
|
cacheControl: {
|
|
145
152
|
type: "ephemeral"
|
|
146
|
-
}
|
|
153
|
+
},
|
|
154
|
+
...(SUMMARIZED_THINKING_MODEL.test(model) ? {
|
|
155
|
+
thinking: {
|
|
156
|
+
type: "adaptive",
|
|
157
|
+
display: "summarized"
|
|
158
|
+
}
|
|
159
|
+
} : {}),
|
|
160
|
+
...(fast ? {
|
|
161
|
+
speed: "fast"
|
|
162
|
+
} : {})
|
|
147
163
|
}
|
|
148
164
|
} : {})
|
|
149
165
|
},
|
|
@@ -160,6 +176,8 @@ const executeTask = async options => {
|
|
|
160
176
|
onStepFinish: step => {
|
|
161
177
|
var _step$usage, _step$usage2, _step$usage3, _step$response;
|
|
162
178
|
turnsSoFar += 1;
|
|
179
|
+
const servedTier = (0, _aiGateway.getServedTier)(provider, step.providerMetadata);
|
|
180
|
+
if (logSteps && fast && turnsSoFar === 1 && servedTier !== undefined) _Logger.logger.info(`[browser-use] fast mode: the request was served at "${servedTier}"`);
|
|
163
181
|
usage.inputTokens += ((_step$usage = step.usage) === null || _step$usage === void 0 ? void 0 : _step$usage.inputTokens) ?? 0;
|
|
164
182
|
usage.outputTokens += ((_step$usage2 = step.usage) === null || _step$usage2 === void 0 ? void 0 : _step$usage2.outputTokens) ?? 0;
|
|
165
183
|
usage.totalTokens += ((_step$usage3 = step.usage) === null || _step$usage3 === void 0 ? void 0 : _step$usage3.totalTokens) ?? 0;
|
|
@@ -220,7 +238,7 @@ const executeTask = async options => {
|
|
|
220
238
|
};
|
|
221
239
|
}
|
|
222
240
|
if (logSteps) {
|
|
223
|
-
_Logger.logger.info(`[browser-use] run finished after ${turnsSoFar} turns. Total AI Cost In Cents: ${costSoFarCents.toFixed(2)}`);
|
|
241
|
+
_Logger.logger.info(`[browser-use] run finished after ${turnsSoFar} turns (${usage.inputTokens} in / ${usage.outputTokens} out tokens). Total AI Cost In Cents: ${costSoFarCents.toFixed(2)}`);
|
|
224
242
|
}
|
|
225
243
|
const allMessages = [...initialMessages, ...result.response.messages];
|
|
226
244
|
return {
|
|
@@ -99,6 +99,12 @@ export interface ExecuteTaskOptions {
|
|
|
99
99
|
/** Keep raw screenshots in the returned `messages` instead of replacing
|
|
100
100
|
* them with "[omitted]". Defaults to false. */
|
|
101
101
|
showImages?: boolean;
|
|
102
|
+
/** Request the provider's fast serving tier for every model call: OpenAI
|
|
103
|
+
* fast mode (`service_tier: "priority"`) or Anthropic fast mode
|
|
104
|
+
* (`speed: "fast"`). Fast mode costs more per token (2× on OpenAI) and only
|
|
105
|
+
* some models support it; unsupported models run at standard speed.
|
|
106
|
+
* Google models ignore it. Defaults to false. */
|
|
107
|
+
fast?: boolean;
|
|
102
108
|
}
|
|
103
109
|
|
|
104
110
|
/**
|
|
@@ -99,6 +99,12 @@ export interface ExecuteTaskOptions {
|
|
|
99
99
|
/** Keep raw screenshots in the returned `messages` instead of replacing
|
|
100
100
|
* them with "[omitted]". Defaults to false. */
|
|
101
101
|
showImages?: boolean;
|
|
102
|
+
/** Request the provider's fast serving tier for every model call: OpenAI
|
|
103
|
+
* fast mode (`service_tier: "priority"`) or Anthropic fast mode
|
|
104
|
+
* (`speed: "fast"`). Fast mode costs more per token (2× on OpenAI) and only
|
|
105
|
+
* some models support it; unsupported models run at standard speed.
|
|
106
|
+
* Google models ignore it. Defaults to false. */
|
|
107
|
+
fast?: boolean;
|
|
102
108
|
}
|
|
103
109
|
|
|
104
110
|
/**
|
package/dist/common/aiGateway.js
CHANGED
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.createProviderInstance = createProviderInstance;
|
|
7
7
|
exports.detectProvider = detectProvider;
|
|
8
|
+
exports.getServedTier = getServedTier;
|
|
8
9
|
var _anthropic = require("@ai-sdk/anthropic");
|
|
9
10
|
var _openai = require("@ai-sdk/openai");
|
|
10
11
|
var _google = require("@ai-sdk/google");
|
|
@@ -16,6 +17,19 @@ function detectProvider(model) {
|
|
|
16
17
|
if (["gpt", "o1", "o3", "o4"].some(p => m.startsWith(p))) return "openai";
|
|
17
18
|
throw new Error(`browser-use: unsupported model provider for "${model}"`);
|
|
18
19
|
}
|
|
20
|
+
function getServedTier(provider, providerMetadata) {
|
|
21
|
+
if (provider === "openai") {
|
|
22
|
+
var _providerMetadata$ope;
|
|
23
|
+
const tier = providerMetadata === null || providerMetadata === void 0 || (_providerMetadata$ope = providerMetadata.openai) === null || _providerMetadata$ope === void 0 ? void 0 : _providerMetadata$ope.serviceTier;
|
|
24
|
+
return typeof tier === "string" ? tier : undefined;
|
|
25
|
+
}
|
|
26
|
+
if (provider === "anthropic") {
|
|
27
|
+
var _providerMetadata$ant;
|
|
28
|
+
const usage = providerMetadata === null || providerMetadata === void 0 || (_providerMetadata$ant = providerMetadata.anthropic) === null || _providerMetadata$ant === void 0 ? void 0 : _providerMetadata$ant.usage;
|
|
29
|
+
return typeof (usage === null || usage === void 0 ? void 0 : usage.speed) === "string" ? usage.speed : undefined;
|
|
30
|
+
}
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
19
33
|
const ENV_KEYS = {
|
|
20
34
|
openai: "OPENAI_API_KEY",
|
|
21
35
|
anthropic: "ANTHROPIC_API_KEY",
|
|
@@ -28,7 +42,9 @@ async function resolveGatewayConfig() {
|
|
|
28
42
|
if (typeof getAiGatewayConfig !== "function") {
|
|
29
43
|
throw new Error("@intuned/runtime does not export getAiGatewayConfig. Please upgrade to a newer version.");
|
|
30
44
|
}
|
|
31
|
-
|
|
45
|
+
const config = getAiGatewayConfig();
|
|
46
|
+
if (!(config !== null && config !== void 0 && config.baseUrl) || !(config !== null && config !== void 0 && config.apiKey)) throw new Error("gateway config is empty");
|
|
47
|
+
return config;
|
|
32
48
|
} catch (error) {
|
|
33
49
|
throw new Error("No API key provided and not running in Intuned context. " + "Please provide an API key or ensure @intuned/runtime is installed and you're running within an Intuned workflow. " + `Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
34
50
|
}
|
package/package.json
CHANGED