@intuned/browser-dev 2.2.3-unify-sdks.21 → 2.2.3-unify-sdks.22

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.
@@ -278,62 +278,85 @@ export declare function extractStructuredData(options: {
278
278
  maxRetries?: number;
279
279
  }): Promise<any>;
280
280
 
281
- /**
282
- * This type defines the supported AI models for data extraction.
283
- * It includes models from OpenAI, Anthropic, and Google Gemini.
284
- * The models are used in the extraction strategies to process and analyze the content of web pages or elements.
285
- * @type SUPPORTED_MODELS
286
- */
287
- type SUPPORTED_MODELS =
281
+ type SUPPORTED_CLAUDE_MODELS =
282
+ | "claude-3-5-haiku-20241022"
283
+ | "claude-3-5-haiku-latest"
284
+ | "claude-3-5-sonnet-20240620"
285
+ | "claude-3-5-sonnet-20241022"
286
+ | "claude-3-5-sonnet-latest"
287
+ | "claude-3-7-sonnet-20250219"
288
+ | "claude-3-7-sonnet-latest"
289
+ | "claude-3-haiku-20240307"
290
+ | "claude-4-opus-20250514"
291
+ | "claude-4-sonnet-20250514"
292
+ | "claude-opus-4-1"
288
293
  | "claude-opus-4-1-20250805"
289
294
  | "claude-opus-4-20250514"
290
- | "claude-sonnet-4-20250514"
291
- | "claude-3-7-sonnet-20250219"
292
- | "claude-3-5-sonnet-20240620"
293
- | "claude-3-5-haiku-latest"
294
- | "gpt-5"
295
- | "gpt-5-mini"
296
- | "gpt-5-nano"
297
- | "gpt-5-chat"
298
- | "gpt-5-chat-latest"
299
- | "gpt-5-2025-08-07"
300
- | "gpt-5-mini-2025-08-07"
301
- | "gpt-5-nano-2025-08-07"
302
- | "gpt-4.1"
303
- | "gpt-4.1-mini"
304
- | "gpt-4.1-nano"
305
- | "o4-mini"
306
- | "o3-mini"
307
- | "o3"
308
- | "o1-mini"
309
- | "o1-preview"
310
- | "gpt-4o-mini"
311
- | "gpt-4o-mini-2024-07-18"
312
- | "gpt-4o"
313
- | "gpt-4o-2024-08-06"
314
- | "gpt-4o-2024-05-13"
315
- | "gpt-4o-2024-05-13"
316
- | "gpt-4-turbo"
317
- | "gpt-4-turbo-preview"
318
- | "gpt-4-0125-preview"
319
- | "gpt-4-1106-preview"
320
- | "gpt-3.5-turbo-1106"
295
+ | "claude-sonnet-4-20250514";
296
+
297
+ type SUPPORTED_OPENAI_MODELS =
321
298
  | "gpt-3.5-turbo"
299
+ | "gpt-3.5-turbo-0125"
322
300
  | "gpt-3.5-turbo-0301"
323
301
  | "gpt-3.5-turbo-0613"
302
+ | "gpt-3.5-turbo-1106"
324
303
  | "gpt-3.5-turbo-16k"
325
304
  | "gpt-3.5-turbo-16k-0613"
305
+ | "gpt-3.5-turbo-instruct"
306
+ | "gpt-3.5-turbo-instruct-0914"
326
307
  | "gpt-4"
327
308
  | "gpt-4-0314"
328
309
  | "gpt-4-0613"
329
310
  | "gpt-4-32k"
330
311
  | "gpt-4-32k-0314"
331
312
  | "gpt-4-32k-0613"
332
- | "gemini-pro"
333
- | "gemini-1.5-pro-latest"
334
- | "gemini-2.0-flash"
335
- | "gemini-2.0-flash-exp"
336
- | "gemini-2.0-flash-lite-preview-02-05";
313
+ | "gpt-4-turbo"
314
+ | "gpt-4-turbo-2024-04-09"
315
+ | "gpt-4.1"
316
+ | "gpt-4.1-2025-04-14"
317
+ | "gpt-4.1-mini"
318
+ | "gpt-4.1-mini-2025-04-14"
319
+ | "gpt-4.1-nano"
320
+ | "gpt-4.1-nano-2025-04-14"
321
+ | "gpt-4o"
322
+ | "gpt-4o-2024-05-13"
323
+ | "gpt-4o-2024-08-06"
324
+ | "gpt-4o-2024-11-20"
325
+ | "gpt-4o-mini"
326
+ | "gpt-4o-mini-2024-07-18"
327
+ | "gpt-5"
328
+ | "gpt-5-2025-08-07"
329
+ | "gpt-5-chat"
330
+ | "gpt-5-chat-latest"
331
+ | "gpt-5-mini"
332
+ | "gpt-5-mini-2025-08-07"
333
+ | "gpt-5-nano"
334
+ | "gpt-5-nano-2025-08-07"
335
+ | "o1"
336
+ | "o1-2024-12-17"
337
+ | "o1-mini"
338
+ | "o1-mini-2024-09-12"
339
+ | "o1-pro"
340
+ | "o1-pro-2025-03-19"
341
+ | "o3"
342
+ | "o3-2025-04-16"
343
+ | "o3-deep-research"
344
+ | "o3-deep-research-2025-06-26"
345
+ | "o3-mini"
346
+ | "o3-mini-2025-01-31"
347
+ | "o3-pro"
348
+ | "o3-pro-2025-06-10"
349
+ | "o4-mini"
350
+ | "o4-mini-2025-04-16"
351
+ | "o4-mini-deep-research"
352
+ | "o4-mini-deep-research-2025-06-26";
353
+ /**
354
+ * This type defines the supported AI models for data extraction.
355
+ * It includes models from OpenAI, Anthropic, and Google Gemini.
356
+ * The models are used in the extraction strategies to process and analyze the content of web pages or elements.
357
+ * @type SUPPORTED_MODELS
358
+ */
359
+ type SUPPORTED_MODELS = SUPPORTED_CLAUDE_MODELS | SUPPORTED_OPENAI_MODELS;
337
360
 
338
361
  /**
339
362
  * Represents a JSON Schema definition for validating data structures.
@@ -592,7 +615,7 @@ export interface HtmlStrategy {
592
615
  *
593
616
  * @param {Page} page - The Playwright page to check
594
617
  * @param {Object} [options] - Optional configuration object
595
- * @param {ModelType} [options.model="gpt-4o-2024-08-06"] - [ModelType](../type-aliases/modelType) to use for the AI Check. default gpt-4o-2024-08-06
618
+ * @param {SUPPORTED_MODELS} [options.model="gpt-4o-2024-08-06"] - [SUPPORTED_MODELS](../type-aliases/SUPPORTED_MODELS) to use for the AI Check. default gpt-4o-2024-08-06
596
619
  * @param {number} [options.timeoutInMs=10000] - Screenshot timeout in milliseconds
597
620
  * @param {string} [options.apiKey] - Optional API key for the AI service
598
621
  * @returns {Promise.<{status: LoadingStatus, reason: (string|null|undefined), cost: (number|undefined)}>}
@@ -636,7 +659,7 @@ export declare function isPageLoaded(
636
659
  page: Page,
637
660
  options?: {
638
661
  timeoutInMs?: number;
639
- model?: ModelType;
662
+ model?: SUPPORTED_MODELS;
640
663
  apiKey?: string;
641
664
  }
642
665
  ): Promise<{
@@ -19,7 +19,7 @@ var _ai = require("ai");
19
19
  var _loadRuntime = require("../common/loadRuntime");
20
20
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
21
21
  async function extractStructuredDataUsingAi(page, input) {
22
- var _getExecutionContext, _getExecutionContext2, _getExecutionContext3;
22
+ var _getExecutionContext, _getExecutionContext2, _getExecutionContext3, _result$usage6;
23
23
  const {
24
24
  apiKey,
25
25
  enableDomMatching,
@@ -30,7 +30,7 @@ async function extractStructuredDataUsingAi(page, input) {
30
30
  images,
31
31
  maxRetries = 3
32
32
  } = input;
33
- let accumulatedCost = 0;
33
+ let accumulatedTokens = 0;
34
34
  const getExecutionContext = await (0, _loadRuntime.loadRuntime)();
35
35
  const toolName = `extract_data`;
36
36
  const headers = (0, _getAiTrackingHeaders.getAiTrackingHeaders)({
@@ -54,7 +54,7 @@ async function extractStructuredDataUsingAi(page, input) {
54
54
  let result;
55
55
  while (currentRetry < maxRetries) {
56
56
  try {
57
- var _result$usage;
57
+ var _result$usage, _result$usage4;
58
58
  result = await (0, _ai.generateText)({
59
59
  model: gatewayModel,
60
60
  messages: messagesHistory,
@@ -63,8 +63,7 @@ async function extractStructuredDataUsingAi(page, input) {
63
63
  maxRetries,
64
64
  headers
65
65
  });
66
- accumulatedCost += ((_result$usage = result.usage) === null || _result$usage === void 0 ? void 0 : _result$usage.totalTokens) ?? 0;
67
- _Logger.logger.info(`AI extraction cost: ${accumulatedCost}`);
66
+ accumulatedTokens += ((_result$usage = result.usage) === null || _result$usage === void 0 ? void 0 : _result$usage.totalTokens) ?? 0;
68
67
  const toolCall = result.toolCalls[0] ?? null;
69
68
  let extractedData = toolCall.input;
70
69
  const isArray = jsonSchema.type === "array";
@@ -95,9 +94,10 @@ async function extractStructuredDataUsingAi(page, input) {
95
94
  continue;
96
95
  }
97
96
  if (!enableDomMatching) {
97
+ var _result$usage2;
98
+ _Logger.logger.info(`Total LLM Tokens: ${(_result$usage2 = result.usage) === null || _result$usage2 === void 0 ? void 0 : _result$usage2.totalTokens}`);
98
99
  return (0, _neverthrow.ok)({
99
100
  result: extractedData,
100
- usage: accumulatedCost,
101
101
  xpathMapping: {}
102
102
  });
103
103
  }
@@ -105,9 +105,10 @@ async function extractStructuredDataUsingAi(page, input) {
105
105
  dataStructure: extractedData
106
106
  });
107
107
  if (!stringsToMatch || stringsToMatch.length === 0) {
108
+ var _result$usage3;
109
+ _Logger.logger.info(`Total LLM Tokens: ${(_result$usage3 = result.usage) === null || _result$usage3 === void 0 ? void 0 : _result$usage3.totalTokens}`);
108
110
  return (0, _neverthrow.ok)({
109
111
  result: [],
110
- usage: accumulatedCost,
111
112
  xpathMapping: {}
112
113
  });
113
114
  }
@@ -123,18 +124,21 @@ async function extractStructuredDataUsingAi(page, input) {
123
124
  stringReplacements[key] = (value === null || value === void 0 ? void 0 : value.matchText) || null;
124
125
  });
125
126
  const matchesData = await (0, _validateSchema.recursivelyReplaceStrings)(extractedData, stringReplacements);
127
+ _Logger.logger.info(`Total LLM Tokens: ${(_result$usage4 = result.usage) === null || _result$usage4 === void 0 ? void 0 : _result$usage4.totalTokens}`);
126
128
  return (0, _neverthrow.ok)({
127
129
  result: matchesData,
128
- usage: accumulatedCost,
129
130
  xpathMapping
130
131
  });
131
132
  } catch (error) {
133
+ var _result$usage5;
132
134
  _Logger.logger.error("Error during AI extraction", {
133
135
  error,
134
136
  model
135
137
  });
138
+ _Logger.logger.info(`Total LLM Tokens: ${(_result$usage5 = result.usage) === null || _result$usage5 === void 0 ? void 0 : _result$usage5.totalTokens}`);
136
139
  return (0, _neverthrow.err)(Errors.invalidExtractionResult(error instanceof Error ? error.message : "Unknown error during extraction"));
137
140
  }
138
141
  }
142
+ _Logger.logger.info(`Total LLM Tokens: ${(_result$usage6 = result.usage) === null || _result$usage6 === void 0 ? void 0 : _result$usage6.totalTokens}`);
139
143
  return (0, _neverthrow.err)(Errors.maxRetriesExceeded(`Max retries of ${maxRetries} exceeded for extraction`));
140
144
  }
@@ -278,62 +278,85 @@ export declare function extractStructuredData(options: {
278
278
  maxRetries?: number;
279
279
  }): Promise<any>;
280
280
 
281
- /**
282
- * This type defines the supported AI models for data extraction.
283
- * It includes models from OpenAI, Anthropic, and Google Gemini.
284
- * The models are used in the extraction strategies to process and analyze the content of web pages or elements.
285
- * @type SUPPORTED_MODELS
286
- */
287
- type SUPPORTED_MODELS =
281
+ type SUPPORTED_CLAUDE_MODELS =
282
+ | "claude-3-5-haiku-20241022"
283
+ | "claude-3-5-haiku-latest"
284
+ | "claude-3-5-sonnet-20240620"
285
+ | "claude-3-5-sonnet-20241022"
286
+ | "claude-3-5-sonnet-latest"
287
+ | "claude-3-7-sonnet-20250219"
288
+ | "claude-3-7-sonnet-latest"
289
+ | "claude-3-haiku-20240307"
290
+ | "claude-4-opus-20250514"
291
+ | "claude-4-sonnet-20250514"
292
+ | "claude-opus-4-1"
288
293
  | "claude-opus-4-1-20250805"
289
294
  | "claude-opus-4-20250514"
290
- | "claude-sonnet-4-20250514"
291
- | "claude-3-7-sonnet-20250219"
292
- | "claude-3-5-sonnet-20240620"
293
- | "claude-3-5-haiku-latest"
294
- | "gpt-5"
295
- | "gpt-5-mini"
296
- | "gpt-5-nano"
297
- | "gpt-5-chat"
298
- | "gpt-5-chat-latest"
299
- | "gpt-5-2025-08-07"
300
- | "gpt-5-mini-2025-08-07"
301
- | "gpt-5-nano-2025-08-07"
302
- | "gpt-4.1"
303
- | "gpt-4.1-mini"
304
- | "gpt-4.1-nano"
305
- | "o4-mini"
306
- | "o3-mini"
307
- | "o3"
308
- | "o1-mini"
309
- | "o1-preview"
310
- | "gpt-4o-mini"
311
- | "gpt-4o-mini-2024-07-18"
312
- | "gpt-4o"
313
- | "gpt-4o-2024-08-06"
314
- | "gpt-4o-2024-05-13"
315
- | "gpt-4o-2024-05-13"
316
- | "gpt-4-turbo"
317
- | "gpt-4-turbo-preview"
318
- | "gpt-4-0125-preview"
319
- | "gpt-4-1106-preview"
320
- | "gpt-3.5-turbo-1106"
295
+ | "claude-sonnet-4-20250514";
296
+
297
+ type SUPPORTED_OPENAI_MODELS =
321
298
  | "gpt-3.5-turbo"
299
+ | "gpt-3.5-turbo-0125"
322
300
  | "gpt-3.5-turbo-0301"
323
301
  | "gpt-3.5-turbo-0613"
302
+ | "gpt-3.5-turbo-1106"
324
303
  | "gpt-3.5-turbo-16k"
325
304
  | "gpt-3.5-turbo-16k-0613"
305
+ | "gpt-3.5-turbo-instruct"
306
+ | "gpt-3.5-turbo-instruct-0914"
326
307
  | "gpt-4"
327
308
  | "gpt-4-0314"
328
309
  | "gpt-4-0613"
329
310
  | "gpt-4-32k"
330
311
  | "gpt-4-32k-0314"
331
312
  | "gpt-4-32k-0613"
332
- | "gemini-pro"
333
- | "gemini-1.5-pro-latest"
334
- | "gemini-2.0-flash"
335
- | "gemini-2.0-flash-exp"
336
- | "gemini-2.0-flash-lite-preview-02-05";
313
+ | "gpt-4-turbo"
314
+ | "gpt-4-turbo-2024-04-09"
315
+ | "gpt-4.1"
316
+ | "gpt-4.1-2025-04-14"
317
+ | "gpt-4.1-mini"
318
+ | "gpt-4.1-mini-2025-04-14"
319
+ | "gpt-4.1-nano"
320
+ | "gpt-4.1-nano-2025-04-14"
321
+ | "gpt-4o"
322
+ | "gpt-4o-2024-05-13"
323
+ | "gpt-4o-2024-08-06"
324
+ | "gpt-4o-2024-11-20"
325
+ | "gpt-4o-mini"
326
+ | "gpt-4o-mini-2024-07-18"
327
+ | "gpt-5"
328
+ | "gpt-5-2025-08-07"
329
+ | "gpt-5-chat"
330
+ | "gpt-5-chat-latest"
331
+ | "gpt-5-mini"
332
+ | "gpt-5-mini-2025-08-07"
333
+ | "gpt-5-nano"
334
+ | "gpt-5-nano-2025-08-07"
335
+ | "o1"
336
+ | "o1-2024-12-17"
337
+ | "o1-mini"
338
+ | "o1-mini-2024-09-12"
339
+ | "o1-pro"
340
+ | "o1-pro-2025-03-19"
341
+ | "o3"
342
+ | "o3-2025-04-16"
343
+ | "o3-deep-research"
344
+ | "o3-deep-research-2025-06-26"
345
+ | "o3-mini"
346
+ | "o3-mini-2025-01-31"
347
+ | "o3-pro"
348
+ | "o3-pro-2025-06-10"
349
+ | "o4-mini"
350
+ | "o4-mini-2025-04-16"
351
+ | "o4-mini-deep-research"
352
+ | "o4-mini-deep-research-2025-06-26";
353
+ /**
354
+ * This type defines the supported AI models for data extraction.
355
+ * It includes models from OpenAI, Anthropic, and Google Gemini.
356
+ * The models are used in the extraction strategies to process and analyze the content of web pages or elements.
357
+ * @type SUPPORTED_MODELS
358
+ */
359
+ type SUPPORTED_MODELS = SUPPORTED_CLAUDE_MODELS | SUPPORTED_OPENAI_MODELS;
337
360
 
338
361
  /**
339
362
  * Represents a JSON Schema definition for validating data structures.
@@ -592,7 +615,7 @@ export interface HtmlStrategy {
592
615
  *
593
616
  * @param {Page} page - The Playwright page to check
594
617
  * @param {Object} [options] - Optional configuration object
595
- * @param {ModelType} [options.model="gpt-4o-2024-08-06"] - [ModelType](../type-aliases/modelType) to use for the AI Check. default gpt-4o-2024-08-06
618
+ * @param {SUPPORTED_MODELS} [options.model="gpt-4o-2024-08-06"] - [SUPPORTED_MODELS](../type-aliases/SUPPORTED_MODELS) to use for the AI Check. default gpt-4o-2024-08-06
596
619
  * @param {number} [options.timeoutInMs=10000] - Screenshot timeout in milliseconds
597
620
  * @param {string} [options.apiKey] - Optional API key for the AI service
598
621
  * @returns {Promise.<{status: LoadingStatus, reason: (string|null|undefined), cost: (number|undefined)}>}
@@ -636,7 +659,7 @@ export declare function isPageLoaded(
636
659
  page: Page,
637
660
  options?: {
638
661
  timeoutInMs?: number;
639
- model?: ModelType;
662
+ model?: SUPPORTED_MODELS;
640
663
  apiKey?: string;
641
664
  }
642
665
  ): Promise<{
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.isPageLoaded = void 0;
7
+ var _Logger = require("../common/Logger");
7
8
  var _utils = require("../helpers/utils");
8
9
  var _ai = require("ai");
9
10
  const isPageLoaded = async (page, options) => {
@@ -39,6 +40,7 @@ Some good cues for determining if a page is loading:
39
40
  }]
40
41
  });
41
42
  let llmResult = response.text.trim();
43
+ _Logger.logger.info(`Total LLM Tokens: ${response.usage.totalTokens}`);
42
44
  if (!llmResult) {
43
45
  throw new Error("LLM response is empty");
44
46
  }
@@ -50,10 +52,13 @@ Some good cues for determining if a page is loading:
50
52
  const reason = lines.length > 1 ? lines[1] : null;
51
53
  let result;
52
54
  if (isTrue) {
55
+ _Logger.logger.info(`Page is loaded.`);
53
56
  result = true;
54
57
  } else if (isFalse) {
58
+ _Logger.logger.info(`Page is not loaded.`);
55
59
  result = false;
56
60
  } else if (isDontKnow) {
61
+ _Logger.logger.info(`Page loading status is unknown.`);
57
62
  result = "Dont know";
58
63
  } else {
59
64
  throw new Error("LLM result is not valid");
@@ -32,12 +32,12 @@ async function getAbsoluteUrl(page, url) {
32
32
  });
33
33
  return absUrl;
34
34
  }
35
- const downloadFile = async options => {
35
+ const downloadFile = async input => {
36
36
  const {
37
37
  page,
38
38
  trigger,
39
39
  timeoutInMs
40
- } = options;
40
+ } = input;
41
41
  let pageToDownloadFrom = page;
42
42
  let shouldClosePage = false;
43
43
  let downloadPromise;