@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
- ...((0, _aiGateway.detectProvider)(model) === "anthropic" ? {
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
  /**
@@ -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
- return getAiGatewayConfig();
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intuned/browser-use-dev",
3
- "version": "0.1.2-dev.0",
3
+ "version": "0.1.3-dev.0",
4
4
  "description": "Intuned SDK browser-use agent: drive a Playwright page with a vision-capable model",
5
5
  "types": "./dist/index.d.ts",
6
6
  "publishConfig": {