@dexto/core 1.6.16 → 1.6.17

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.
Files changed (50) hide show
  1. package/dist/agent/DextoAgent.cjs +21 -2
  2. package/dist/agent/DextoAgent.d.ts +1 -0
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +21 -2
  5. package/dist/agent/types.d.ts +7 -0
  6. package/dist/agent/types.d.ts.map +1 -1
  7. package/dist/context/manager.cjs +6 -1
  8. package/dist/context/manager.d.ts +3 -0
  9. package/dist/context/manager.d.ts.map +1 -1
  10. package/dist/context/manager.js +6 -1
  11. package/dist/context/types.d.ts +7 -1
  12. package/dist/context/types.d.ts.map +1 -1
  13. package/dist/events/index.d.ts +19 -17
  14. package/dist/events/index.d.ts.map +1 -1
  15. package/dist/llm/executor/stream-processor.cjs +63 -17
  16. package/dist/llm/executor/stream-processor.d.ts +2 -0
  17. package/dist/llm/executor/stream-processor.d.ts.map +1 -1
  18. package/dist/llm/executor/stream-processor.js +63 -17
  19. package/dist/llm/index.cjs +6 -0
  20. package/dist/llm/index.d.ts +3 -0
  21. package/dist/llm/index.d.ts.map +1 -1
  22. package/dist/llm/index.js +3 -0
  23. package/dist/llm/registry/index.cjs +18 -6
  24. package/dist/llm/registry/index.d.ts +9 -0
  25. package/dist/llm/registry/index.d.ts.map +1 -1
  26. package/dist/llm/registry/index.js +17 -6
  27. package/dist/llm/services/types.d.ts +2 -0
  28. package/dist/llm/services/types.d.ts.map +1 -1
  29. package/dist/llm/types.cjs +3 -0
  30. package/dist/llm/types.d.ts +2 -0
  31. package/dist/llm/types.d.ts.map +1 -1
  32. package/dist/llm/types.js +2 -0
  33. package/dist/llm/usage-metadata.cjs +50 -0
  34. package/dist/llm/usage-metadata.d.ts +12 -0
  35. package/dist/llm/usage-metadata.d.ts.map +1 -0
  36. package/dist/llm/usage-metadata.js +26 -0
  37. package/dist/llm/usage-scope.cjs +38 -0
  38. package/dist/llm/usage-scope.d.ts +3 -0
  39. package/dist/llm/usage-scope.d.ts.map +1 -0
  40. package/dist/llm/usage-scope.js +14 -0
  41. package/dist/llm/usage-summary.cjs +112 -0
  42. package/dist/llm/usage-summary.d.ts +28 -0
  43. package/dist/llm/usage-summary.d.ts.map +1 -0
  44. package/dist/llm/usage-summary.js +86 -0
  45. package/dist/session/chat-session.cjs +21 -15
  46. package/dist/session/chat-session.d.ts +0 -1
  47. package/dist/session/chat-session.d.ts.map +1 -1
  48. package/dist/session/chat-session.js +21 -15
  49. package/dist/session/session-manager.d.ts.map +1 -1
  50. package/package.json +1 -1
@@ -2,6 +2,8 @@ import "../../chunk-PTJYTZNU.js";
2
2
  import { truncateToolResult } from "./tool-output-truncator.js";
3
3
  import { sanitizeToolResult } from "../../context/utils.js";
4
4
  import { DextoLogComponent } from "../../logger/v2/types.js";
5
+ import { getConfiguredUsageScopeId } from "../usage-scope.js";
6
+ import { getUsagePricingMetadata } from "../usage-metadata.js";
5
7
  class StreamProcessor {
6
8
  /**
7
9
  * @param contextManager Context manager for message persistence
@@ -31,6 +33,7 @@ class StreamProcessor {
31
33
  accumulatedText = "";
32
34
  logger;
33
35
  hasStepUsage = false;
36
+ usageScopeId = getConfiguredUsageScopeId();
34
37
  /**
35
38
  * Track pending tool calls (added to context but no result yet).
36
39
  * On cancel/abort, we add synthetic "cancelled" results to maintain tool_use/tool_result pairing.
@@ -206,6 +209,7 @@ class StreamProcessor {
206
209
  this.actualTokens = {
207
210
  inputTokens: (this.actualTokens.inputTokens ?? 0) + (stepUsage.inputTokens ?? 0),
208
211
  outputTokens: (this.actualTokens.outputTokens ?? 0) + (stepUsage.outputTokens ?? 0),
212
+ // TODO(token-usage): Use a shared totalTokens resolver instead of raw `?? 0`.
209
213
  totalTokens: (this.actualTokens.totalTokens ?? 0) + (stepUsage.totalTokens ?? 0),
210
214
  ...stepUsage.reasoningTokens !== void 0 && {
211
215
  reasoningTokens: (this.actualTokens.reasoningTokens ?? 0) + stepUsage.reasoningTokens
@@ -259,6 +263,11 @@ class StreamProcessor {
259
263
  }
260
264
  }
261
265
  this.actualTokens = usage;
266
+ const pricingMetadata = getUsagePricingMetadata({
267
+ provider: this.config.provider,
268
+ model: this.config.model,
269
+ tokenUsage: usage
270
+ });
262
271
  this.logger.info("LLM response complete", {
263
272
  finishReason: event.finishReason,
264
273
  contentLength: this.accumulatedText.length,
@@ -269,24 +278,13 @@ class StreamProcessor {
269
278
  provider: this.config.provider,
270
279
  model: this.config.model
271
280
  });
272
- if (this.assistantMessageId) {
273
- await this.contextManager.updateAssistantMessage(
274
- this.assistantMessageId,
275
- {
276
- tokenUsage: usage,
277
- // Persist reasoning text and metadata for round-tripping
278
- ...this.reasoningText && { reasoning: this.reasoningText },
279
- ...this.reasoningMetadata && {
280
- reasoningMetadata: this.reasoningMetadata
281
- }
282
- }
283
- );
284
- }
281
+ await this.persistAssistantResponseMetadata(usage, pricingMetadata);
285
282
  const hasContent = this.accumulatedText || this.reasoningText;
286
283
  if (this.finishReason !== "tool-calls" || hasContent) {
287
284
  this.emitLLMResponse({
288
285
  tokenUsage: usage,
289
- finishReason: this.finishReason
286
+ finishReason: this.finishReason,
287
+ ...pricingMetadata
290
288
  });
291
289
  }
292
290
  break;
@@ -338,19 +336,30 @@ class StreamProcessor {
338
336
  });
339
337
  break;
340
338
  }
341
- case "abort":
339
+ case "abort": {
342
340
  this.logger.debug("Stream aborted, emitting partial response");
343
341
  this.finishReason = "cancelled";
344
342
  await this.persistCancelledToolResults();
343
+ const abortPricingMetadata = getUsagePricingMetadata({
344
+ provider: this.config.provider,
345
+ model: this.config.model,
346
+ tokenUsage: this.actualTokens
347
+ });
348
+ await this.persistAssistantResponseMetadata(
349
+ this.actualTokens,
350
+ abortPricingMetadata
351
+ );
345
352
  this.emitLLMResponse({
346
353
  tokenUsage: this.actualTokens,
347
- finishReason: "cancelled"
354
+ finishReason: "cancelled",
355
+ ...abortPricingMetadata
348
356
  });
349
357
  return {
350
358
  text: this.accumulatedText,
351
359
  finishReason: "cancelled",
352
360
  usage: this.actualTokens
353
361
  };
362
+ }
354
363
  }
355
364
  }
356
365
  } catch (error) {
@@ -359,9 +368,19 @@ class StreamProcessor {
359
368
  this.logger.debug("Stream cancelled, emitting partial response");
360
369
  this.finishReason = "cancelled";
361
370
  await this.persistCancelledToolResults();
371
+ const abortPricingMetadata = getUsagePricingMetadata({
372
+ provider: this.config.provider,
373
+ model: this.config.model,
374
+ tokenUsage: this.actualTokens
375
+ });
376
+ await this.persistAssistantResponseMetadata(
377
+ this.actualTokens,
378
+ abortPricingMetadata
379
+ );
362
380
  this.emitLLMResponse({
363
381
  tokenUsage: this.actualTokens,
364
- finishReason: "cancelled"
382
+ finishReason: "cancelled",
383
+ ...abortPricingMetadata
365
384
  });
366
385
  return {
367
386
  text: this.accumulatedText,
@@ -436,12 +455,39 @@ class StreamProcessor {
436
455
  model: this.config.model,
437
456
  ...this.getReasoningResponseFields(),
438
457
  tokenUsage: config.tokenUsage,
458
+ ...this.assistantMessageId && { messageId: this.assistantMessageId },
459
+ ...this.usageScopeId && { usageScopeId: this.usageScopeId },
460
+ ...config.estimatedCost !== void 0 && {
461
+ estimatedCost: config.estimatedCost
462
+ },
463
+ ...config.pricingStatus && { pricingStatus: config.pricingStatus },
439
464
  ...this.config.estimatedInputTokens !== void 0 && {
440
465
  estimatedInputTokens: this.config.estimatedInputTokens
441
466
  },
442
467
  finishReason: config.finishReason
443
468
  });
444
469
  }
470
+ async persistAssistantResponseMetadata(tokenUsage, pricingMetadata) {
471
+ if (!this.assistantMessageId) {
472
+ return;
473
+ }
474
+ await this.contextManager.updateAssistantMessage(this.assistantMessageId, {
475
+ tokenUsage,
476
+ ...pricingMetadata.estimatedCost !== void 0 && {
477
+ estimatedCost: pricingMetadata.estimatedCost
478
+ },
479
+ ...pricingMetadata.pricingStatus && {
480
+ pricingStatus: pricingMetadata.pricingStatus
481
+ },
482
+ ...this.usageScopeId && {
483
+ usageScopeId: this.usageScopeId
484
+ },
485
+ ...this.reasoningText && { reasoning: this.reasoningText },
486
+ ...this.reasoningMetadata && {
487
+ reasoningMetadata: this.reasoningMetadata
488
+ }
489
+ });
490
+ }
445
491
  mergeReasoningMetadata(providerMetadata) {
446
492
  if (!this.reasoningMetadata) {
447
493
  this.reasoningMetadata = providerMetadata;
@@ -45,6 +45,9 @@ __reExport(llm_exports, require("./registry/index.js"), module.exports);
45
45
  __reExport(llm_exports, require("./curation.js"), module.exports);
46
46
  __reExport(llm_exports, require("./validation.js"), module.exports);
47
47
  __reExport(llm_exports, require("./types.js"), module.exports);
48
+ __reExport(llm_exports, require("./usage-metadata.js"), module.exports);
49
+ __reExport(llm_exports, require("./usage-scope.js"), module.exports);
50
+ __reExport(llm_exports, require("./usage-summary.js"), module.exports);
48
51
  __reExport(llm_exports, require("./reasoning/profile.js"), module.exports);
49
52
  __reExport(llm_exports, require("./services/index.js"), module.exports);
50
53
  __reExport(llm_exports, require("./schemas.js"), module.exports);
@@ -79,6 +82,9 @@ __reExport(llm_exports, require("./providers/local/index.js"), module.exports);
79
82
  ...require("./curation.js"),
80
83
  ...require("./validation.js"),
81
84
  ...require("./types.js"),
85
+ ...require("./usage-metadata.js"),
86
+ ...require("./usage-scope.js"),
87
+ ...require("./usage-summary.js"),
82
88
  ...require("./reasoning/profile.js"),
83
89
  ...require("./services/index.js"),
84
90
  ...require("./schemas.js"),
@@ -4,6 +4,9 @@ export * from './registry/index.js';
4
4
  export * from './curation.js';
5
5
  export * from './validation.js';
6
6
  export * from './types.js';
7
+ export * from './usage-metadata.js';
8
+ export * from './usage-scope.js';
9
+ export * from './usage-summary.js';
7
10
  export * from './reasoning/profile.js';
8
11
  export * from './services/index.js';
9
12
  export * from './schemas.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,OAAO,EACH,iCAAiC,EACjC,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,EAC/B,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,mBAAmB,GAC3B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACH,kBAAkB,EAClB,qBAAqB,EACrB,2BAA2B,EAC3B,cAAc,EACd,iBAAiB,EACjB,KAAK,aAAa,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACH,oBAAoB,EACpB,wBAAwB,EACxB,KAAK,2BAA2B,EAChC,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC9B,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACH,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,2BAA2B,GACnC,MAAM,2BAA2B,CAAC;AAGnC,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,OAAO,EACH,iCAAiC,EACjC,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,EAC/B,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,mBAAmB,GAC3B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACH,kBAAkB,EAClB,qBAAqB,EACrB,2BAA2B,EAC3B,cAAc,EACd,iBAAiB,EACjB,KAAK,aAAa,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACH,oBAAoB,EACpB,wBAAwB,EACxB,KAAK,2BAA2B,EAChC,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC9B,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACH,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,2BAA2B,GACnC,MAAM,2BAA2B,CAAC;AAGnC,cAAc,4BAA4B,CAAC"}
package/dist/llm/index.js CHANGED
@@ -5,6 +5,9 @@ export * from "./registry/index.js";
5
5
  export * from "./curation.js";
6
6
  export * from "./validation.js";
7
7
  export * from "./types.js";
8
+ export * from "./usage-metadata.js";
9
+ export * from "./usage-scope.js";
10
+ export * from "./usage-summary.js";
8
11
  export * from "./reasoning/profile.js";
9
12
  export * from "./services/index.js";
10
13
  export * from "./schemas.js";
@@ -23,6 +23,7 @@ __export(registry_exports, {
23
23
  MIME_TYPE_TO_FILE_TYPE: () => MIME_TYPE_TO_FILE_TYPE,
24
24
  acceptsAnyModel: () => acceptsAnyModel,
25
25
  calculateCost: () => calculateCost,
26
+ calculateCostBreakdown: () => calculateCostBreakdown,
26
27
  getAllModelsForProvider: () => getAllModelsForProvider,
27
28
  getAllSupportedModels: () => getAllSupportedModels,
28
29
  getAllowedMimeTypes: () => getAllowedMimeTypes,
@@ -864,12 +865,22 @@ function isReasoningCapableModel(model, provider) {
864
865
  return false;
865
866
  }
866
867
  function calculateCost(usage, pricing) {
867
- const inputCost = (usage.inputTokens ?? 0) * pricing.inputPerM / 1e6;
868
- const outputCost = (usage.outputTokens ?? 0) * pricing.outputPerM / 1e6;
869
- const cacheReadCost = (usage.cacheReadTokens ?? 0) * (pricing.cacheReadPerM ?? 0) / 1e6;
870
- const cacheWriteCost = (usage.cacheWriteTokens ?? 0) * (pricing.cacheWritePerM ?? 0) / 1e6;
871
- const reasoningCost = (usage.reasoningTokens ?? 0) * pricing.outputPerM / 1e6;
872
- return inputCost + outputCost + cacheReadCost + cacheWriteCost + reasoningCost;
868
+ return calculateCostBreakdown(usage, pricing).totalUsd;
869
+ }
870
+ function calculateCostBreakdown(usage, pricing) {
871
+ const inputUsd = (usage.inputTokens ?? 0) * pricing.inputPerM / 1e6;
872
+ const outputUsd = (usage.outputTokens ?? 0) * pricing.outputPerM / 1e6;
873
+ const cacheReadUsd = (usage.cacheReadTokens ?? 0) * (pricing.cacheReadPerM ?? 0) / 1e6;
874
+ const cacheWriteUsd = (usage.cacheWriteTokens ?? 0) * (pricing.cacheWritePerM ?? 0) / 1e6;
875
+ const reasoningUsd = (usage.reasoningTokens ?? 0) * (pricing.reasoningPerM ?? pricing.outputPerM) / 1e6;
876
+ return {
877
+ inputUsd,
878
+ outputUsd,
879
+ reasoningUsd,
880
+ cacheReadUsd,
881
+ cacheWriteUsd,
882
+ totalUsd: inputUsd + outputUsd + cacheReadUsd + cacheWriteUsd + reasoningUsd
883
+ };
873
884
  }
874
885
  // Annotate the CommonJS export names for ESM import in node:
875
886
  0 && (module.exports = {
@@ -878,6 +889,7 @@ function calculateCost(usage, pricing) {
878
889
  MIME_TYPE_TO_FILE_TYPE,
879
890
  acceptsAnyModel,
880
891
  calculateCost,
892
+ calculateCostBreakdown,
881
893
  getAllModelsForProvider,
882
894
  getAllSupportedModels,
883
895
  getAllowedMimeTypes,
@@ -34,6 +34,14 @@ export interface ModelPricing {
34
34
  currency?: 'USD';
35
35
  unit?: 'per_million_tokens';
36
36
  }
37
+ export interface TokenUsageCostBreakdown {
38
+ inputUsd: number;
39
+ outputUsd: number;
40
+ reasoningUsd: number;
41
+ cacheReadUsd: number;
42
+ cacheWriteUsd: number;
43
+ totalUsd: number;
44
+ }
37
45
  export type ModelModality = 'text' | 'audio' | 'image' | 'video' | 'pdf';
38
46
  export interface ModelModalities {
39
47
  input: ModelModality[];
@@ -320,4 +328,5 @@ export declare function isReasoningCapableModel(model: string, provider?: LLMPro
320
328
  * @returns Cost in USD.
321
329
  */
322
330
  export declare function calculateCost(usage: TokenUsage, pricing: ModelPricing): number;
331
+ export declare function calculateCostBreakdown(usage: TokenUsage, pricing: ModelPricing): TokenUsageCostBreakdown;
323
332
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/llm/registry/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/llm/registry/index.ts"],"names":[],"mappings":"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"}
@@ -823,12 +823,22 @@ function isReasoningCapableModel(model, provider) {
823
823
  return false;
824
824
  }
825
825
  function calculateCost(usage, pricing) {
826
- const inputCost = (usage.inputTokens ?? 0) * pricing.inputPerM / 1e6;
827
- const outputCost = (usage.outputTokens ?? 0) * pricing.outputPerM / 1e6;
828
- const cacheReadCost = (usage.cacheReadTokens ?? 0) * (pricing.cacheReadPerM ?? 0) / 1e6;
829
- const cacheWriteCost = (usage.cacheWriteTokens ?? 0) * (pricing.cacheWritePerM ?? 0) / 1e6;
830
- const reasoningCost = (usage.reasoningTokens ?? 0) * pricing.outputPerM / 1e6;
831
- return inputCost + outputCost + cacheReadCost + cacheWriteCost + reasoningCost;
826
+ return calculateCostBreakdown(usage, pricing).totalUsd;
827
+ }
828
+ function calculateCostBreakdown(usage, pricing) {
829
+ const inputUsd = (usage.inputTokens ?? 0) * pricing.inputPerM / 1e6;
830
+ const outputUsd = (usage.outputTokens ?? 0) * pricing.outputPerM / 1e6;
831
+ const cacheReadUsd = (usage.cacheReadTokens ?? 0) * (pricing.cacheReadPerM ?? 0) / 1e6;
832
+ const cacheWriteUsd = (usage.cacheWriteTokens ?? 0) * (pricing.cacheWritePerM ?? 0) / 1e6;
833
+ const reasoningUsd = (usage.reasoningTokens ?? 0) * (pricing.reasoningPerM ?? pricing.outputPerM) / 1e6;
834
+ return {
835
+ inputUsd,
836
+ outputUsd,
837
+ reasoningUsd,
838
+ cacheReadUsd,
839
+ cacheWriteUsd,
840
+ totalUsd: inputUsd + outputUsd + cacheReadUsd + cacheWriteUsd + reasoningUsd
841
+ };
832
842
  }
833
843
  export {
834
844
  DEFAULT_MAX_INPUT_TOKENS,
@@ -836,6 +846,7 @@ export {
836
846
  MIME_TYPE_TO_FILE_TYPE,
837
847
  acceptsAnyModel,
838
848
  calculateCost,
849
+ calculateCostBreakdown,
839
850
  getAllModelsForProvider,
840
851
  getAllSupportedModels,
841
852
  getAllowedMimeTypes,
@@ -17,5 +17,7 @@ export interface LLMTokenUsage {
17
17
  outputTokens: number;
18
18
  reasoningTokens?: number;
19
19
  totalTokens: number;
20
+ cacheReadTokens?: number;
21
+ cacheWriteTokens?: number;
20
22
  }
21
23
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/llm/services/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/llm/services/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
@@ -18,6 +18,7 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var types_exports = {};
20
20
  __export(types_exports, {
21
+ LLM_PRICING_STATUSES: () => LLM_PRICING_STATUSES,
21
22
  LLM_PROVIDERS: () => LLM_PROVIDERS,
22
23
  SUPPORTED_FILE_TYPES: () => SUPPORTED_FILE_TYPES
23
24
  });
@@ -44,9 +45,11 @@ const LLM_PROVIDERS = [
44
45
  "dexto-nova"
45
46
  // Dexto gateway - routes through api.dexto.ai/v1 with billing
46
47
  ];
48
+ const LLM_PRICING_STATUSES = ["estimated", "unpriced"];
47
49
  const SUPPORTED_FILE_TYPES = ["pdf", "image", "audio"];
48
50
  // Annotate the CommonJS export names for ESM import in node:
49
51
  0 && (module.exports = {
52
+ LLM_PRICING_STATUSES,
50
53
  LLM_PROVIDERS,
51
54
  SUPPORTED_FILE_TYPES
52
55
  });
@@ -1,5 +1,7 @@
1
1
  export declare const LLM_PROVIDERS: readonly ["openai", "openai-compatible", "anthropic", "google", "groq", "xai", "cohere", "minimax", "glm", "openrouter", "litellm", "glama", "vertex", "bedrock", "local", "ollama", "dexto-nova"];
2
2
  export type LLMProvider = (typeof LLM_PROVIDERS)[number];
3
+ export declare const LLM_PRICING_STATUSES: readonly ["estimated", "unpriced"];
4
+ export type LLMPricingStatus = (typeof LLM_PRICING_STATUSES)[number];
3
5
  export declare const SUPPORTED_FILE_TYPES: readonly ["pdf", "image", "audio"];
4
6
  export type SupportedFileType = (typeof SUPPORTED_FILE_TYPES)[number];
5
7
  export type ReasoningVariant = string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,oMAkBhB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,oBAAoB,oCAAqC,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAItE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACvB,mDAAmD;IACnD,QAAQ,EAAE,WAAW,CAAC;IAEtB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,oMAkBhB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,oBAAoB,oCAAqC,CAAC;AACvE,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErE,eAAO,MAAM,oBAAoB,oCAAqC,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAItE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACvB,mDAAmD;IACnD,QAAQ,EAAE,WAAW,CAAC;IAEtB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
package/dist/llm/types.js CHANGED
@@ -21,8 +21,10 @@ const LLM_PROVIDERS = [
21
21
  "dexto-nova"
22
22
  // Dexto gateway - routes through api.dexto.ai/v1 with billing
23
23
  ];
24
+ const LLM_PRICING_STATUSES = ["estimated", "unpriced"];
24
25
  const SUPPORTED_FILE_TYPES = ["pdf", "image", "audio"];
25
26
  export {
27
+ LLM_PRICING_STATUSES,
26
28
  LLM_PROVIDERS,
27
29
  SUPPORTED_FILE_TYPES
28
30
  };
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var usage_metadata_exports = {};
20
+ __export(usage_metadata_exports, {
21
+ getUsagePricingMetadata: () => getUsagePricingMetadata,
22
+ hasMeaningfulTokenUsage: () => hasMeaningfulTokenUsage
23
+ });
24
+ module.exports = __toCommonJS(usage_metadata_exports);
25
+ var import_registry = require("./registry/index.js");
26
+ function hasMeaningfulTokenUsage(tokenUsage) {
27
+ if (!tokenUsage) {
28
+ return false;
29
+ }
30
+ return (tokenUsage.inputTokens ?? 0) > 0 || (tokenUsage.outputTokens ?? 0) > 0 || (tokenUsage.reasoningTokens ?? 0) > 0 || (tokenUsage.cacheReadTokens ?? 0) > 0 || (tokenUsage.cacheWriteTokens ?? 0) > 0 || (tokenUsage.totalTokens ?? 0) > 0;
31
+ }
32
+ function getUsagePricingMetadata(config) {
33
+ const { provider, model, tokenUsage } = config;
34
+ if (!provider || !model || !tokenUsage || !hasMeaningfulTokenUsage(tokenUsage)) {
35
+ return {};
36
+ }
37
+ const pricing = (0, import_registry.getModelPricing)(provider, model);
38
+ if (!pricing) {
39
+ return { pricingStatus: "unpriced" };
40
+ }
41
+ return {
42
+ estimatedCost: (0, import_registry.calculateCost)(tokenUsage, pricing),
43
+ pricingStatus: "estimated"
44
+ };
45
+ }
46
+ // Annotate the CommonJS export names for ESM import in node:
47
+ 0 && (module.exports = {
48
+ getUsagePricingMetadata,
49
+ hasMeaningfulTokenUsage
50
+ });
@@ -0,0 +1,12 @@
1
+ import type { LLMProvider, LLMPricingStatus, TokenUsage } from './types.js';
2
+ export interface LLMUsagePricingMetadata {
3
+ estimatedCost?: number;
4
+ pricingStatus?: LLMPricingStatus;
5
+ }
6
+ export declare function hasMeaningfulTokenUsage(tokenUsage: TokenUsage | undefined): boolean;
7
+ export declare function getUsagePricingMetadata(config: {
8
+ provider?: LLMProvider;
9
+ model?: string;
10
+ tokenUsage?: TokenUsage;
11
+ }): LLMUsagePricingMetadata;
12
+ //# sourceMappingURL=usage-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-metadata.d.ts","sourceRoot":"","sources":["../../src/llm/usage-metadata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5E,MAAM,WAAW,uBAAuB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAanF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC5C,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC;CAC3B,GAAG,uBAAuB,CAmB1B"}
@@ -0,0 +1,26 @@
1
+ import "../chunk-PTJYTZNU.js";
2
+ import { calculateCost, getModelPricing } from "./registry/index.js";
3
+ function hasMeaningfulTokenUsage(tokenUsage) {
4
+ if (!tokenUsage) {
5
+ return false;
6
+ }
7
+ return (tokenUsage.inputTokens ?? 0) > 0 || (tokenUsage.outputTokens ?? 0) > 0 || (tokenUsage.reasoningTokens ?? 0) > 0 || (tokenUsage.cacheReadTokens ?? 0) > 0 || (tokenUsage.cacheWriteTokens ?? 0) > 0 || (tokenUsage.totalTokens ?? 0) > 0;
8
+ }
9
+ function getUsagePricingMetadata(config) {
10
+ const { provider, model, tokenUsage } = config;
11
+ if (!provider || !model || !tokenUsage || !hasMeaningfulTokenUsage(tokenUsage)) {
12
+ return {};
13
+ }
14
+ const pricing = getModelPricing(provider, model);
15
+ if (!pricing) {
16
+ return { pricingStatus: "unpriced" };
17
+ }
18
+ return {
19
+ estimatedCost: calculateCost(tokenUsage, pricing),
20
+ pricingStatus: "estimated"
21
+ };
22
+ }
23
+ export {
24
+ getUsagePricingMetadata,
25
+ hasMeaningfulTokenUsage
26
+ };
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var usage_scope_exports = {};
20
+ __export(usage_scope_exports, {
21
+ DEXTO_USAGE_SCOPE_ID_ENV: () => DEXTO_USAGE_SCOPE_ID_ENV,
22
+ getConfiguredUsageScopeId: () => getConfiguredUsageScopeId
23
+ });
24
+ module.exports = __toCommonJS(usage_scope_exports);
25
+ const DEXTO_USAGE_SCOPE_ID_ENV = "DEXTO_USAGE_SCOPE_ID";
26
+ function getConfiguredUsageScopeId() {
27
+ const value = process.env[DEXTO_USAGE_SCOPE_ID_ENV];
28
+ if (!value) {
29
+ return void 0;
30
+ }
31
+ const trimmedValue = value.trim();
32
+ return trimmedValue.length > 0 ? trimmedValue : void 0;
33
+ }
34
+ // Annotate the CommonJS export names for ESM import in node:
35
+ 0 && (module.exports = {
36
+ DEXTO_USAGE_SCOPE_ID_ENV,
37
+ getConfiguredUsageScopeId
38
+ });
@@ -0,0 +1,3 @@
1
+ export declare const DEXTO_USAGE_SCOPE_ID_ENV = "DEXTO_USAGE_SCOPE_ID";
2
+ export declare function getConfiguredUsageScopeId(): string | undefined;
3
+ //# sourceMappingURL=usage-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-scope.d.ts","sourceRoot":"","sources":["../../src/llm/usage-scope.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAE/D,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,SAAS,CAQ9D"}
@@ -0,0 +1,14 @@
1
+ import "../chunk-PTJYTZNU.js";
2
+ const DEXTO_USAGE_SCOPE_ID_ENV = "DEXTO_USAGE_SCOPE_ID";
3
+ function getConfiguredUsageScopeId() {
4
+ const value = process.env[DEXTO_USAGE_SCOPE_ID_ENV];
5
+ if (!value) {
6
+ return void 0;
7
+ }
8
+ const trimmedValue = value.trim();
9
+ return trimmedValue.length > 0 ? trimmedValue : void 0;
10
+ }
11
+ export {
12
+ DEXTO_USAGE_SCOPE_ID_ENV,
13
+ getConfiguredUsageScopeId
14
+ };