@browserbasehq/stagehand 3.0.2 → 3.0.3-alpha-c76ade009ef81208accae6475ec4707d3906e566

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/index.d.ts CHANGED
@@ -1132,6 +1132,8 @@ interface AgentResult {
1132
1132
  usage?: {
1133
1133
  input_tokens: number;
1134
1134
  output_tokens: number;
1135
+ reasoning_tokens?: number;
1136
+ cached_input_tokens?: number;
1135
1137
  inference_time_ms: number;
1136
1138
  };
1137
1139
  }
@@ -1346,18 +1348,28 @@ declare enum V3FunctionName {
1346
1348
  interface StagehandMetrics {
1347
1349
  actPromptTokens: number;
1348
1350
  actCompletionTokens: number;
1351
+ actReasoningTokens: number;
1352
+ actCachedInputTokens: number;
1349
1353
  actInferenceTimeMs: number;
1350
1354
  extractPromptTokens: number;
1351
1355
  extractCompletionTokens: number;
1356
+ extractReasoningTokens: number;
1357
+ extractCachedInputTokens: number;
1352
1358
  extractInferenceTimeMs: number;
1353
1359
  observePromptTokens: number;
1354
1360
  observeCompletionTokens: number;
1361
+ observeReasoningTokens: number;
1362
+ observeCachedInputTokens: number;
1355
1363
  observeInferenceTimeMs: number;
1356
1364
  agentPromptTokens: number;
1357
1365
  agentCompletionTokens: number;
1366
+ agentReasoningTokens: number;
1367
+ agentCachedInputTokens: number;
1358
1368
  agentInferenceTimeMs: number;
1359
1369
  totalPromptTokens: number;
1360
1370
  totalCompletionTokens: number;
1371
+ totalReasoningTokens: number;
1372
+ totalCachedInputTokens: number;
1361
1373
  totalInferenceTimeMs: number;
1362
1374
  }
1363
1375
 
@@ -1898,7 +1910,7 @@ declare class V3 {
1898
1910
  */
1899
1911
  get history(): Promise<ReadonlyArray<HistoryEntry>>;
1900
1912
  addToHistory(method: HistoryEntry["method"], parameters: unknown, result?: unknown): void;
1901
- updateMetrics(functionName: V3FunctionName, promptTokens: number, completionTokens: number, inferenceTimeMs: number): void;
1913
+ updateMetrics(functionName: V3FunctionName, promptTokens: number, completionTokens: number, reasoningTokens: number, cachedInputTokens: number, inferenceTimeMs: number): void;
1902
1914
  private updateTotalMetrics;
1903
1915
  private _immediateShutdown;
1904
1916
  private static _installProcessGuards;
package/dist/index.js CHANGED
@@ -85,7 +85,7 @@ var __async = (__this, __arguments, generator) => {
85
85
  var STAGEHAND_VERSION;
86
86
  var init_version = __esm({
87
87
  "lib/version.ts"() {
88
- STAGEHAND_VERSION = "3.0.2";
88
+ STAGEHAND_VERSION = "3.0.3-alpha-c76ade009ef81208accae6475ec4707d3906e566";
89
89
  }
90
90
  });
91
91
 
@@ -8983,6 +8983,8 @@ var AgentCache = class {
8983
8983
  result.usage = {
8984
8984
  input_tokens: 0,
8985
8985
  output_tokens: 0,
8986
+ reasoning_tokens: 0,
8987
+ cached_input_tokens: 0,
8986
8988
  inference_time_ms: 0
8987
8989
  };
8988
8990
  result.metadata = __spreadProps(__spreadValues({}, (_b = result.metadata) != null ? _b : {}), {
@@ -9457,7 +9459,7 @@ function extract(_0) {
9457
9459
  userProvidedInstructions,
9458
9460
  logInferenceToFile = false
9459
9461
  }) {
9460
- var _a, _b, _c, _d, _e, _f, _g, _h;
9462
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;
9461
9463
  const metadataSchema = import_v32.z.object({
9462
9464
  progress: import_v32.z.string().describe(
9463
9465
  "progress of what has been extracted so far, as concise as possible"
@@ -9521,6 +9523,8 @@ function extract(_0) {
9521
9523
  LLM_output_file: extractResponseFile,
9522
9524
  prompt_tokens: (_a = extractUsage == null ? void 0 : extractUsage.prompt_tokens) != null ? _a : 0,
9523
9525
  completion_tokens: (_b = extractUsage == null ? void 0 : extractUsage.completion_tokens) != null ? _b : 0,
9526
+ reasoning_tokens: (_c = extractUsage == null ? void 0 : extractUsage.reasoning_tokens) != null ? _c : 0,
9527
+ cached_input_tokens: (_d = extractUsage == null ? void 0 : extractUsage.cached_input_tokens) != null ? _d : 0,
9524
9528
  inference_time_ms: extractEndTime - extractStartTime
9525
9529
  });
9526
9530
  }
@@ -9582,14 +9586,18 @@ function extract(_0) {
9582
9586
  timestamp: metadataCallTimestamp,
9583
9587
  LLM_input_file: metadataCallFile,
9584
9588
  LLM_output_file: metadataResponseFile,
9585
- prompt_tokens: (_c = metadataResponseUsage == null ? void 0 : metadataResponseUsage.prompt_tokens) != null ? _c : 0,
9586
- completion_tokens: (_d = metadataResponseUsage == null ? void 0 : metadataResponseUsage.completion_tokens) != null ? _d : 0,
9589
+ prompt_tokens: (_e = metadataResponseUsage == null ? void 0 : metadataResponseUsage.prompt_tokens) != null ? _e : 0,
9590
+ completion_tokens: (_f = metadataResponseUsage == null ? void 0 : metadataResponseUsage.completion_tokens) != null ? _f : 0,
9591
+ reasoning_tokens: (_g = metadataResponseUsage == null ? void 0 : metadataResponseUsage.reasoning_tokens) != null ? _g : 0,
9592
+ cached_input_tokens: (_h = metadataResponseUsage == null ? void 0 : metadataResponseUsage.cached_input_tokens) != null ? _h : 0,
9587
9593
  inference_time_ms: metadataEndTime - metadataStartTime
9588
9594
  });
9589
9595
  }
9590
- const totalPromptTokens = ((_e = extractUsage == null ? void 0 : extractUsage.prompt_tokens) != null ? _e : 0) + ((_f = metadataResponseUsage == null ? void 0 : metadataResponseUsage.prompt_tokens) != null ? _f : 0);
9591
- const totalCompletionTokens = ((_g = extractUsage == null ? void 0 : extractUsage.completion_tokens) != null ? _g : 0) + ((_h = metadataResponseUsage == null ? void 0 : metadataResponseUsage.completion_tokens) != null ? _h : 0);
9596
+ const totalPromptTokens = ((_i = extractUsage == null ? void 0 : extractUsage.prompt_tokens) != null ? _i : 0) + ((_j = metadataResponseUsage == null ? void 0 : metadataResponseUsage.prompt_tokens) != null ? _j : 0);
9597
+ const totalCompletionTokens = ((_k = extractUsage == null ? void 0 : extractUsage.completion_tokens) != null ? _k : 0) + ((_l = metadataResponseUsage == null ? void 0 : metadataResponseUsage.completion_tokens) != null ? _l : 0);
9592
9598
  const totalInferenceTimeMs = extractEndTime - extractStartTime + (metadataEndTime - metadataStartTime);
9599
+ const totalReasoningTokens = ((_m = extractUsage == null ? void 0 : extractUsage.reasoning_tokens) != null ? _m : 0) + ((_n = metadataResponseUsage == null ? void 0 : metadataResponseUsage.reasoning_tokens) != null ? _n : 0);
9600
+ const totalCachedInputTokens = ((_o = extractUsage == null ? void 0 : extractUsage.cached_input_tokens) != null ? _o : 0) + ((_p = metadataResponseUsage == null ? void 0 : metadataResponseUsage.cached_input_tokens) != null ? _p : 0);
9593
9601
  return __spreadProps(__spreadValues({}, extractedData), {
9594
9602
  metadata: {
9595
9603
  completed: metadataResponseCompleted,
@@ -9597,6 +9605,8 @@ function extract(_0) {
9597
9605
  },
9598
9606
  prompt_tokens: totalPromptTokens,
9599
9607
  completion_tokens: totalCompletionTokens,
9608
+ reasoning_tokens: totalReasoningTokens,
9609
+ cached_input_tokens: totalCachedInputTokens,
9600
9610
  inference_time_ms: totalInferenceTimeMs
9601
9611
  });
9602
9612
  });
@@ -9610,7 +9620,7 @@ function observe(_0) {
9610
9620
  logger,
9611
9621
  logInferenceToFile = false
9612
9622
  }) {
9613
- var _a, _b, _c, _d;
9623
+ var _a, _b, _c, _d, _e, _f;
9614
9624
  const isGPT5 = llmClient.modelName.includes("gpt-5");
9615
9625
  const observeSchema = import_v32.z.object({
9616
9626
  elements: import_v32.z.array(
@@ -9670,6 +9680,8 @@ function observe(_0) {
9670
9680
  const { data: observeData, usage: observeUsage } = rawResponse;
9671
9681
  const promptTokens = (_a = observeUsage == null ? void 0 : observeUsage.prompt_tokens) != null ? _a : 0;
9672
9682
  const completionTokens = (_b = observeUsage == null ? void 0 : observeUsage.completion_tokens) != null ? _b : 0;
9683
+ const reasoningTokens = (_c = observeUsage == null ? void 0 : observeUsage.reasoning_tokens) != null ? _c : 0;
9684
+ const cachedInputTokens = (_d = observeUsage == null ? void 0 : observeUsage.cached_input_tokens) != null ? _d : 0;
9673
9685
  let responseFile = "";
9674
9686
  if (logInferenceToFile) {
9675
9687
  const { fileName: responseFileName } = writeTimestampedTxtFile(
@@ -9688,10 +9700,12 @@ function observe(_0) {
9688
9700
  LLM_output_file: responseFile,
9689
9701
  prompt_tokens: promptTokens,
9690
9702
  completion_tokens: completionTokens,
9703
+ reasoning_tokens: reasoningTokens,
9704
+ cached_input_tokens: cachedInputTokens,
9691
9705
  inference_time_ms: usageTimeMs
9692
9706
  });
9693
9707
  }
9694
- const parsedElements = (_d = (_c = observeData.elements) == null ? void 0 : _c.map((el) => {
9708
+ const parsedElements = (_f = (_e = observeData.elements) == null ? void 0 : _e.map((el) => {
9695
9709
  const base = {
9696
9710
  elementId: el.elementId,
9697
9711
  description: String(el.description),
@@ -9699,11 +9713,13 @@ function observe(_0) {
9699
9713
  arguments: el.arguments
9700
9714
  };
9701
9715
  return base;
9702
- })) != null ? _d : [];
9716
+ })) != null ? _f : [];
9703
9717
  return {
9704
9718
  elements: parsedElements,
9705
9719
  prompt_tokens: promptTokens,
9706
9720
  completion_tokens: completionTokens,
9721
+ reasoning_tokens: reasoningTokens,
9722
+ cached_input_tokens: cachedInputTokens,
9707
9723
  inference_time_ms: usageTimeMs
9708
9724
  };
9709
9725
  });
@@ -9717,7 +9733,7 @@ function act(_0) {
9717
9733
  logger,
9718
9734
  logInferenceToFile = false
9719
9735
  }) {
9720
- var _a, _b;
9736
+ var _a, _b, _c, _d;
9721
9737
  const isGPT5 = llmClient.modelName.includes("gpt-5");
9722
9738
  const actSchema = import_v32.z.object({
9723
9739
  elementId: import_v32.z.string().describe(
@@ -9772,6 +9788,8 @@ function act(_0) {
9772
9788
  const { data: actData, usage: actUsage } = rawResponse;
9773
9789
  const promptTokens = (_a = actUsage == null ? void 0 : actUsage.prompt_tokens) != null ? _a : 0;
9774
9790
  const completionTokens = (_b = actUsage == null ? void 0 : actUsage.completion_tokens) != null ? _b : 0;
9791
+ const reasoningTokens = (_c = actUsage == null ? void 0 : actUsage.reasoning_tokens) != null ? _c : 0;
9792
+ const cachedInputTokens = (_d = actUsage == null ? void 0 : actUsage.cached_input_tokens) != null ? _d : 0;
9775
9793
  let responseFile = "";
9776
9794
  if (logInferenceToFile) {
9777
9795
  const { fileName: responseFileName } = writeTimestampedTxtFile(
@@ -9790,6 +9808,8 @@ function act(_0) {
9790
9808
  LLM_output_file: responseFile,
9791
9809
  prompt_tokens: promptTokens,
9792
9810
  completion_tokens: completionTokens,
9811
+ reasoning_tokens: reasoningTokens,
9812
+ cached_input_tokens: cachedInputTokens,
9793
9813
  inference_time_ms: usageTimeMs
9794
9814
  });
9795
9815
  }
@@ -9803,6 +9823,8 @@ function act(_0) {
9803
9823
  element: parsedElement,
9804
9824
  prompt_tokens: promptTokens,
9805
9825
  completion_tokens: completionTokens,
9826
+ reasoning_tokens: reasoningTokens,
9827
+ cached_input_tokens: cachedInputTokens,
9806
9828
  inference_time_ms: usageTimeMs,
9807
9829
  twoStep: actData.twoStep
9808
9830
  };
@@ -10493,7 +10515,7 @@ var ActHandler = class {
10493
10515
  const { instruction, page, variables, timeout, model } = params;
10494
10516
  const llmClient = this.resolveLlmClient(model);
10495
10517
  const doObserveAndAct = () => __async(this, null, function* () {
10496
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
10518
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
10497
10519
  yield waitForDomNetworkQuiet(
10498
10520
  page.mainFrame(),
10499
10521
  this.defaultDomSettleTimeoutMs
@@ -10518,12 +10540,16 @@ var ActHandler = class {
10518
10540
  });
10519
10541
  const actPromptTokens = (_b = actInferenceResponse.prompt_tokens) != null ? _b : 0;
10520
10542
  const actCompletionTokens = (_c = actInferenceResponse.completion_tokens) != null ? _c : 0;
10521
- const actInferenceTimeMs = (_d = actInferenceResponse.inference_time_ms) != null ? _d : 0;
10522
- (_e = this.onMetrics) == null ? void 0 : _e.call(
10543
+ const actReasoningTokens = (_d = actInferenceResponse.reasoning_tokens) != null ? _d : 0;
10544
+ const actCachedInputTokens = (_e = actInferenceResponse.cached_input_tokens) != null ? _e : 0;
10545
+ const actInferenceTimeMs = (_f = actInferenceResponse.inference_time_ms) != null ? _f : 0;
10546
+ (_g = this.onMetrics) == null ? void 0 : _g.call(
10523
10547
  this,
10524
10548
  "ACT" /* ACT */,
10525
10549
  actPromptTokens,
10526
10550
  actCompletionTokens,
10551
+ actReasoningTokens,
10552
+ actCachedInputTokens,
10527
10553
  actInferenceTimeMs
10528
10554
  );
10529
10555
  const raw = actInferenceResponse.element;
@@ -10588,7 +10614,7 @@ var ActHandler = class {
10588
10614
  if (!diffedTree.trim()) {
10589
10615
  diffedTree = combinedTree2;
10590
10616
  }
10591
- const combinedXpathMap2 = (_f = secondSnapshot.combinedXpathMap) != null ? _f : {};
10617
+ const combinedXpathMap2 = (_h = secondSnapshot.combinedXpathMap) != null ? _h : {};
10592
10618
  const previousAction = `method: ${chosen.method}, description: ${chosen.description}, arguments: ${chosen.arguments}`;
10593
10619
  const stepTwoInstructions = buildStepTwoPrompt(
10594
10620
  instruction,
@@ -10606,12 +10632,14 @@ var ActHandler = class {
10606
10632
  logger: v3Logger,
10607
10633
  logInferenceToFile: this.logInferenceToFile
10608
10634
  });
10609
- (_j = this.onMetrics) == null ? void 0 : _j.call(
10635
+ (_n = this.onMetrics) == null ? void 0 : _n.call(
10610
10636
  this,
10611
10637
  "ACT" /* ACT */,
10612
- (_g = action2.prompt_tokens) != null ? _g : 0,
10613
- (_h = action2.completion_tokens) != null ? _h : 0,
10614
- (_i = action2.inference_time_ms) != null ? _i : 0
10638
+ (_i = action2.prompt_tokens) != null ? _i : 0,
10639
+ (_j = action2.completion_tokens) != null ? _j : 0,
10640
+ (_k = action2.reasoning_tokens) != null ? _k : 0,
10641
+ (_l = action2.cached_input_tokens) != null ? _l : 0,
10642
+ (_m = action2.inference_time_ms) != null ? _m : 0
10615
10643
  );
10616
10644
  const raw2 = action2.element;
10617
10645
  const result2 = (() => {
@@ -10679,7 +10707,7 @@ var ActHandler = class {
10679
10707
  }
10680
10708
  actFromObserveResult(action, page, domSettleTimeoutMs, llmClientOverride) {
10681
10709
  return __async(this, null, function* () {
10682
- var _a, _b, _c, _d, _e, _f;
10710
+ var _a, _b, _c, _d, _e, _f, _g, _h;
10683
10711
  const settleTimeout = domSettleTimeoutMs != null ? domSettleTimeoutMs : this.defaultDomSettleTimeoutMs;
10684
10712
  const effectiveClient = llmClientOverride != null ? llmClientOverride : this.llmClient;
10685
10713
  const method = (_a = action.method) == null ? void 0 : _a.trim();
@@ -10756,12 +10784,14 @@ var ActHandler = class {
10756
10784
  logger: v3Logger,
10757
10785
  logInferenceToFile: this.logInferenceToFile
10758
10786
  });
10759
- (_e = this.onMetrics) == null ? void 0 : _e.call(
10787
+ (_g = this.onMetrics) == null ? void 0 : _g.call(
10760
10788
  this,
10761
10789
  "ACT" /* ACT */,
10762
10790
  (_b = actInferenceResponse.prompt_tokens) != null ? _b : 0,
10763
10791
  (_c = actInferenceResponse.completion_tokens) != null ? _c : 0,
10764
- (_d = actInferenceResponse.inference_time_ms) != null ? _d : 0
10792
+ (_d = actInferenceResponse.reasoning_tokens) != null ? _d : 0,
10793
+ (_e = actInferenceResponse.cached_input_tokens) != null ? _e : 0,
10794
+ (_f = actInferenceResponse.inference_time_ms) != null ? _f : 0
10765
10795
  );
10766
10796
  const fallback = actInferenceResponse.element;
10767
10797
  if (!fallback) {
@@ -10775,7 +10805,7 @@ var ActHandler = class {
10775
10805
  let newSelector = action.selector;
10776
10806
  if (typeof fallback.elementId === "string") {
10777
10807
  const enc = fallback.elementId;
10778
- const rawXp = ((_f = snapshot.combinedXpathMap) != null ? _f : {})[enc];
10808
+ const rawXp = ((_h = snapshot.combinedXpathMap) != null ? _h : {})[enc];
10779
10809
  const trimmed = trimTrailingTextNode(rawXp);
10780
10810
  if (trimmed) newSelector = `xpath=${trimmed}`;
10781
10811
  }
@@ -10894,11 +10924,15 @@ var ExtractHandler = class {
10894
10924
  metadata: { completed },
10895
10925
  prompt_tokens,
10896
10926
  completion_tokens,
10927
+ reasoning_tokens = 0,
10928
+ cached_input_tokens = 0,
10897
10929
  inference_time_ms
10898
10930
  } = _d, rest = __objRest(_d, [
10899
10931
  "metadata",
10900
10932
  "prompt_tokens",
10901
10933
  "completion_tokens",
10934
+ "reasoning_tokens",
10935
+ "cached_input_tokens",
10902
10936
  "inference_time_ms"
10903
10937
  ]);
10904
10938
  let output = rest;
@@ -10923,6 +10957,8 @@ var ExtractHandler = class {
10923
10957
  "EXTRACT" /* EXTRACT */,
10924
10958
  prompt_tokens,
10925
10959
  completion_tokens,
10960
+ reasoning_tokens,
10961
+ cached_input_tokens,
10926
10962
  inference_time_ms
10927
10963
  );
10928
10964
  const idToUrl = combinedUrlMap != null ? combinedUrlMap : {};
@@ -11007,6 +11043,8 @@ var ObserveHandler = class {
11007
11043
  const {
11008
11044
  prompt_tokens = 0,
11009
11045
  completion_tokens = 0,
11046
+ reasoning_tokens = 0,
11047
+ cached_input_tokens = 0,
11010
11048
  inference_time_ms = 0
11011
11049
  } = observationResponse;
11012
11050
  (_c = this.onMetrics) == null ? void 0 : _c.call(
@@ -11014,6 +11052,8 @@ var ObserveHandler = class {
11014
11052
  "OBSERVE" /* OBSERVE */,
11015
11053
  prompt_tokens,
11016
11054
  completion_tokens,
11055
+ reasoning_tokens,
11056
+ cached_input_tokens,
11017
11057
  inference_time_ms
11018
11058
  );
11019
11059
  const elementsWithSelectors = (yield Promise.all(
@@ -11724,6 +11764,8 @@ var V3AgentHandler = class {
11724
11764
  "AGENT" /* AGENT */,
11725
11765
  result.usage.inputTokens || 0,
11726
11766
  result.usage.outputTokens || 0,
11767
+ result.usage.reasoningTokens || 0,
11768
+ result.usage.cachedInputTokens || 0,
11727
11769
  inferenceTimeMs
11728
11770
  );
11729
11771
  }
@@ -11735,6 +11777,8 @@ var V3AgentHandler = class {
11735
11777
  usage: result.usage ? {
11736
11778
  input_tokens: result.usage.inputTokens || 0,
11737
11779
  output_tokens: result.usage.outputTokens || 0,
11780
+ reasoning_tokens: result.usage.reasoningTokens || 0,
11781
+ cached_input_tokens: result.usage.cachedInputTokens || 0,
11738
11782
  inference_time_ms: inferenceTimeMs
11739
11783
  } : void 0
11740
11784
  };
@@ -14091,6 +14135,7 @@ var V3CuaAgentHandler = class {
14091
14135
  }
14092
14136
  execute(optionsOrInstruction) {
14093
14137
  return __async(this, null, function* () {
14138
+ var _a, _b;
14094
14139
  const options = typeof optionsOrInstruction === "string" ? { instruction: optionsOrInstruction } : optionsOrInstruction;
14095
14140
  this.highlightCursor = options.highlightCursor !== false;
14096
14141
  const page = yield this.v3.context.awaitActivePage();
@@ -14123,6 +14168,8 @@ var V3CuaAgentHandler = class {
14123
14168
  "AGENT" /* AGENT */,
14124
14169
  result.usage.input_tokens,
14125
14170
  result.usage.output_tokens,
14171
+ (_a = result.usage.reasoning_tokens) != null ? _a : 0,
14172
+ (_b = result.usage.cached_input_tokens) != null ? _b : 0,
14126
14173
  inferenceTimeMs
14127
14174
  );
14128
14175
  }
@@ -15672,7 +15719,7 @@ var AISdkClient = class extends LLMClient {
15672
15719
  return __async(this, arguments, function* ({
15673
15720
  options
15674
15721
  }) {
15675
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
15722
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
15676
15723
  (_a = this.logger) == null ? void 0 : _a.call(this, {
15677
15724
  category: "aisdk",
15678
15725
  message: "creating chat completion",
@@ -15803,10 +15850,12 @@ var AISdkClient = class extends LLMClient {
15803
15850
  usage: {
15804
15851
  prompt_tokens: (_h = objectResponse.usage.inputTokens) != null ? _h : 0,
15805
15852
  completion_tokens: (_i = objectResponse.usage.outputTokens) != null ? _i : 0,
15806
- total_tokens: (_j = objectResponse.usage.totalTokens) != null ? _j : 0
15853
+ reasoning_tokens: (_j = objectResponse.usage.reasoningTokens) != null ? _j : 0,
15854
+ cached_input_tokens: (_k = objectResponse.usage.cachedInputTokens) != null ? _k : 0,
15855
+ total_tokens: (_l = objectResponse.usage.totalTokens) != null ? _l : 0
15807
15856
  }
15808
15857
  };
15809
- (_k = this.logger) == null ? void 0 : _k.call(this, {
15858
+ (_m = this.logger) == null ? void 0 : _m.call(this, {
15810
15859
  category: "aisdk",
15811
15860
  message: "response",
15812
15861
  level: 1,
@@ -15871,12 +15920,14 @@ var AISdkClient = class extends LLMClient {
15871
15920
  }
15872
15921
  ],
15873
15922
  usage: {
15874
- prompt_tokens: (_l = textResponse.usage.inputTokens) != null ? _l : 0,
15875
- completion_tokens: (_m = textResponse.usage.outputTokens) != null ? _m : 0,
15876
- total_tokens: (_n = textResponse.usage.totalTokens) != null ? _n : 0
15923
+ prompt_tokens: (_n = textResponse.usage.inputTokens) != null ? _n : 0,
15924
+ completion_tokens: (_o = textResponse.usage.outputTokens) != null ? _o : 0,
15925
+ reasoning_tokens: (_p = textResponse.usage.reasoningTokens) != null ? _p : 0,
15926
+ cached_input_tokens: (_q = textResponse.usage.cachedInputTokens) != null ? _q : 0,
15927
+ total_tokens: (_r = textResponse.usage.totalTokens) != null ? _r : 0
15877
15928
  }
15878
15929
  };
15879
- (_o = this.logger) == null ? void 0 : _o.call(this, {
15930
+ (_s = this.logger) == null ? void 0 : _s.call(this, {
15880
15931
  category: "aisdk",
15881
15932
  message: "response",
15882
15933
  level: 2,
@@ -38723,7 +38774,7 @@ var AISdkClient2 = class extends LLMClient {
38723
38774
  return __async(this, arguments, function* ({
38724
38775
  options
38725
38776
  }) {
38726
- var _a, _b, _c, _d, _e, _f;
38777
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
38727
38778
  const formattedMessages = options.messages.map(
38728
38779
  (message) => {
38729
38780
  if (Array.isArray(message.content)) {
@@ -38784,7 +38835,9 @@ var AISdkClient2 = class extends LLMClient {
38784
38835
  usage: {
38785
38836
  prompt_tokens: (_a = response2.usage.inputTokens) != null ? _a : 0,
38786
38837
  completion_tokens: (_b = response2.usage.outputTokens) != null ? _b : 0,
38787
- total_tokens: (_c = response2.usage.totalTokens) != null ? _c : 0
38838
+ reasoning_tokens: (_c = response2.usage.reasoningTokens) != null ? _c : 0,
38839
+ cached_input_tokens: (_d = response2.usage.cachedInputTokens) != null ? _d : 0,
38840
+ total_tokens: (_e = response2.usage.totalTokens) != null ? _e : 0
38788
38841
  }
38789
38842
  };
38790
38843
  }
@@ -38803,9 +38856,11 @@ var AISdkClient2 = class extends LLMClient {
38803
38856
  return {
38804
38857
  data: response.text,
38805
38858
  usage: {
38806
- prompt_tokens: (_d = response.usage.inputTokens) != null ? _d : 0,
38807
- completion_tokens: (_e = response.usage.outputTokens) != null ? _e : 0,
38808
- total_tokens: (_f = response.usage.totalTokens) != null ? _f : 0
38859
+ prompt_tokens: (_f = response.usage.inputTokens) != null ? _f : 0,
38860
+ completion_tokens: (_g = response.usage.outputTokens) != null ? _g : 0,
38861
+ reasoning_tokens: (_h = response.usage.reasoningTokens) != null ? _h : 0,
38862
+ cached_input_tokens: (_i = response.usage.cachedInputTokens) != null ? _i : 0,
38863
+ total_tokens: (_j = response.usage.totalTokens) != null ? _j : 0
38809
38864
  }
38810
38865
  };
38811
38866
  });
@@ -39879,18 +39934,28 @@ var StagehandAPIClient = class {
39879
39934
  const metrics = {
39880
39935
  actPromptTokens: 0,
39881
39936
  actCompletionTokens: 0,
39937
+ actReasoningTokens: 0,
39938
+ actCachedInputTokens: 0,
39882
39939
  actInferenceTimeMs: 0,
39883
39940
  extractPromptTokens: 0,
39884
39941
  extractCompletionTokens: 0,
39942
+ extractReasoningTokens: 0,
39943
+ extractCachedInputTokens: 0,
39885
39944
  extractInferenceTimeMs: 0,
39886
39945
  observePromptTokens: 0,
39887
39946
  observeCompletionTokens: 0,
39947
+ observeReasoningTokens: 0,
39948
+ observeCachedInputTokens: 0,
39888
39949
  observeInferenceTimeMs: 0,
39889
39950
  agentPromptTokens: 0,
39890
39951
  agentCompletionTokens: 0,
39952
+ agentReasoningTokens: 0,
39953
+ agentCachedInputTokens: 0,
39891
39954
  agentInferenceTimeMs: 0,
39892
39955
  totalPromptTokens: 0,
39893
39956
  totalCompletionTokens: 0,
39957
+ totalReasoningTokens: 0,
39958
+ totalCachedInputTokens: 0,
39894
39959
  totalInferenceTimeMs: 0
39895
39960
  };
39896
39961
  const pages = apiData.pages || [];
@@ -39902,26 +39967,38 @@ var StagehandAPIClient = class {
39902
39967
  if (tokenUsage) {
39903
39968
  const inputTokens = tokenUsage.inputTokens || 0;
39904
39969
  const outputTokens = tokenUsage.outputTokens || 0;
39970
+ const reasoningTokens = tokenUsage.reasoningTokens || 0;
39971
+ const cachedInputTokens = tokenUsage.cachedInputTokens || 0;
39905
39972
  const timeMs = tokenUsage.timeMs || 0;
39906
39973
  if (method === "act") {
39907
39974
  metrics.actPromptTokens += inputTokens;
39908
39975
  metrics.actCompletionTokens += outputTokens;
39976
+ metrics.actReasoningTokens += reasoningTokens;
39977
+ metrics.actCachedInputTokens += cachedInputTokens;
39909
39978
  metrics.actInferenceTimeMs += timeMs;
39910
39979
  } else if (method === "extract") {
39911
39980
  metrics.extractPromptTokens += inputTokens;
39912
39981
  metrics.extractCompletionTokens += outputTokens;
39982
+ metrics.extractReasoningTokens += reasoningTokens;
39983
+ metrics.extractCachedInputTokens += cachedInputTokens;
39913
39984
  metrics.extractInferenceTimeMs += timeMs;
39914
39985
  } else if (method === "observe") {
39915
39986
  metrics.observePromptTokens += inputTokens;
39916
39987
  metrics.observeCompletionTokens += outputTokens;
39988
+ metrics.observeReasoningTokens += reasoningTokens;
39989
+ metrics.observeCachedInputTokens += cachedInputTokens;
39917
39990
  metrics.observeInferenceTimeMs += timeMs;
39918
39991
  } else if (method === "agent") {
39919
39992
  metrics.agentPromptTokens += inputTokens;
39920
39993
  metrics.agentCompletionTokens += outputTokens;
39994
+ metrics.agentReasoningTokens += reasoningTokens;
39995
+ metrics.agentCachedInputTokens += cachedInputTokens;
39921
39996
  metrics.agentInferenceTimeMs += timeMs;
39922
39997
  }
39923
39998
  metrics.totalPromptTokens += inputTokens;
39924
39999
  metrics.totalCompletionTokens += outputTokens;
40000
+ metrics.totalReasoningTokens += reasoningTokens;
40001
+ metrics.totalCachedInputTokens += cachedInputTokens;
39925
40002
  metrics.totalInferenceTimeMs += timeMs;
39926
40003
  }
39927
40004
  }
@@ -40090,18 +40167,28 @@ var _V3 = class _V3 {
40090
40167
  this.stagehandMetrics = {
40091
40168
  actPromptTokens: 0,
40092
40169
  actCompletionTokens: 0,
40170
+ actReasoningTokens: 0,
40171
+ actCachedInputTokens: 0,
40093
40172
  actInferenceTimeMs: 0,
40094
40173
  extractPromptTokens: 0,
40095
40174
  extractCompletionTokens: 0,
40175
+ extractReasoningTokens: 0,
40176
+ extractCachedInputTokens: 0,
40096
40177
  extractInferenceTimeMs: 0,
40097
40178
  observePromptTokens: 0,
40098
40179
  observeCompletionTokens: 0,
40180
+ observeReasoningTokens: 0,
40181
+ observeCachedInputTokens: 0,
40099
40182
  observeInferenceTimeMs: 0,
40100
40183
  agentPromptTokens: 0,
40101
40184
  agentCompletionTokens: 0,
40185
+ agentReasoningTokens: 0,
40186
+ agentCachedInputTokens: 0,
40102
40187
  agentInferenceTimeMs: 0,
40103
40188
  totalPromptTokens: 0,
40104
40189
  totalCompletionTokens: 0,
40190
+ totalReasoningTokens: 0,
40191
+ totalCachedInputTokens: 0,
40105
40192
  totalInferenceTimeMs: 0
40106
40193
  };
40107
40194
  var _a, _b, _c, _d, _e, _f, _g;
@@ -40285,34 +40372,50 @@ var _V3 = class _V3 {
40285
40372
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
40286
40373
  });
40287
40374
  }
40288
- updateMetrics(functionName, promptTokens, completionTokens, inferenceTimeMs) {
40375
+ updateMetrics(functionName, promptTokens, completionTokens, reasoningTokens, cachedInputTokens, inferenceTimeMs) {
40289
40376
  switch (functionName) {
40290
40377
  case "ACT" /* ACT */:
40291
40378
  this.stagehandMetrics.actPromptTokens += promptTokens;
40292
40379
  this.stagehandMetrics.actCompletionTokens += completionTokens;
40380
+ this.stagehandMetrics.actReasoningTokens += reasoningTokens;
40381
+ this.stagehandMetrics.actCachedInputTokens += cachedInputTokens;
40293
40382
  this.stagehandMetrics.actInferenceTimeMs += inferenceTimeMs;
40294
40383
  break;
40295
40384
  case "EXTRACT" /* EXTRACT */:
40296
40385
  this.stagehandMetrics.extractPromptTokens += promptTokens;
40297
40386
  this.stagehandMetrics.extractCompletionTokens += completionTokens;
40387
+ this.stagehandMetrics.extractReasoningTokens += reasoningTokens;
40388
+ this.stagehandMetrics.extractCachedInputTokens += cachedInputTokens;
40298
40389
  this.stagehandMetrics.extractInferenceTimeMs += inferenceTimeMs;
40299
40390
  break;
40300
40391
  case "OBSERVE" /* OBSERVE */:
40301
40392
  this.stagehandMetrics.observePromptTokens += promptTokens;
40302
40393
  this.stagehandMetrics.observeCompletionTokens += completionTokens;
40394
+ this.stagehandMetrics.observeReasoningTokens += reasoningTokens;
40395
+ this.stagehandMetrics.observeCachedInputTokens += cachedInputTokens;
40303
40396
  this.stagehandMetrics.observeInferenceTimeMs += inferenceTimeMs;
40304
40397
  break;
40305
40398
  case "AGENT" /* AGENT */:
40306
40399
  this.stagehandMetrics.agentPromptTokens += promptTokens;
40307
40400
  this.stagehandMetrics.agentCompletionTokens += completionTokens;
40401
+ this.stagehandMetrics.agentReasoningTokens += reasoningTokens;
40402
+ this.stagehandMetrics.agentCachedInputTokens += cachedInputTokens;
40308
40403
  this.stagehandMetrics.agentInferenceTimeMs += inferenceTimeMs;
40309
40404
  break;
40310
40405
  }
40311
- this.updateTotalMetrics(promptTokens, completionTokens, inferenceTimeMs);
40406
+ this.updateTotalMetrics(
40407
+ promptTokens,
40408
+ completionTokens,
40409
+ reasoningTokens,
40410
+ cachedInputTokens,
40411
+ inferenceTimeMs
40412
+ );
40312
40413
  }
40313
- updateTotalMetrics(promptTokens, completionTokens, inferenceTimeMs) {
40414
+ updateTotalMetrics(promptTokens, completionTokens, reasoningTokens, cachedInputTokens, inferenceTimeMs) {
40314
40415
  this.stagehandMetrics.totalPromptTokens += promptTokens;
40315
40416
  this.stagehandMetrics.totalCompletionTokens += completionTokens;
40417
+ this.stagehandMetrics.totalReasoningTokens += reasoningTokens;
40418
+ this.stagehandMetrics.totalCachedInputTokens += cachedInputTokens;
40316
40419
  this.stagehandMetrics.totalInferenceTimeMs += inferenceTimeMs;
40317
40420
  }
40318
40421
  _immediateShutdown(reason) {
@@ -40405,10 +40508,12 @@ var _V3 = class _V3 {
40405
40508
  (_a = this.opts.systemPrompt) != null ? _a : "",
40406
40509
  this.logInferenceToFile,
40407
40510
  (_b = this.opts.selfHeal) != null ? _b : true,
40408
- (functionName, promptTokens, completionTokens, inferenceTimeMs) => this.updateMetrics(
40511
+ (functionName, promptTokens, completionTokens, reasoningTokens, cachedInputTokens, inferenceTimeMs) => this.updateMetrics(
40409
40512
  functionName,
40410
40513
  promptTokens,
40411
40514
  completionTokens,
40515
+ reasoningTokens,
40516
+ cachedInputTokens,
40412
40517
  inferenceTimeMs
40413
40518
  ),
40414
40519
  this.domSettleTimeoutMs
@@ -40421,10 +40526,12 @@ var _V3 = class _V3 {
40421
40526
  (_c = this.opts.systemPrompt) != null ? _c : "",
40422
40527
  this.logInferenceToFile,
40423
40528
  this.experimental,
40424
- (functionName, promptTokens, completionTokens, inferenceTimeMs) => this.updateMetrics(
40529
+ (functionName, promptTokens, completionTokens, reasoningTokens, cachedInputTokens, inferenceTimeMs) => this.updateMetrics(
40425
40530
  functionName,
40426
40531
  promptTokens,
40427
40532
  completionTokens,
40533
+ reasoningTokens,
40534
+ cachedInputTokens,
40428
40535
  inferenceTimeMs
40429
40536
  )
40430
40537
  );
@@ -40436,10 +40543,12 @@ var _V3 = class _V3 {
40436
40543
  (_d = this.opts.systemPrompt) != null ? _d : "",
40437
40544
  this.logInferenceToFile,
40438
40545
  this.experimental,
40439
- (functionName, promptTokens, completionTokens, inferenceTimeMs) => this.updateMetrics(
40546
+ (functionName, promptTokens, completionTokens, reasoningTokens, cachedInputTokens, inferenceTimeMs) => this.updateMetrics(
40440
40547
  functionName,
40441
40548
  promptTokens,
40442
40549
  completionTokens,
40550
+ reasoningTokens,
40551
+ cachedInputTokens,
40443
40552
  inferenceTimeMs
40444
40553
  )
40445
40554
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@browserbasehq/stagehand",
3
- "version": "3.0.2",
3
+ "version": "3.0.3-alpha-c76ade009ef81208accae6475ec4707d3906e566",
4
4
  "description": "An AI web browsing framework focused on simplicity and extensibility.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",