@usagetap/sdk 1.1.0 → 1.3.1

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/README.md +200 -201
  2. package/dist/adapters/anthropic.cjs +1676 -6
  3. package/dist/adapters/anthropic.cjs.map +1 -1
  4. package/dist/adapters/anthropic.d.cts +39 -2
  5. package/dist/adapters/anthropic.d.ts +39 -2
  6. package/dist/adapters/anthropic.mjs +1675 -7
  7. package/dist/adapters/anthropic.mjs.map +1 -1
  8. package/dist/adapters/openai.cjs +1726 -6
  9. package/dist/adapters/openai.cjs.map +1 -1
  10. package/dist/adapters/openai.d.cts +46 -2
  11. package/dist/adapters/openai.d.ts +46 -2
  12. package/dist/adapters/openai.mjs +1725 -7
  13. package/dist/adapters/openai.mjs.map +1 -1
  14. package/dist/adapters/openrouter.cjs.map +1 -1
  15. package/dist/adapters/openrouter.d.cts +1 -1
  16. package/dist/adapters/openrouter.d.ts +1 -1
  17. package/dist/adapters/openrouter.mjs.map +1 -1
  18. package/dist/anthropic/index.cjs +1676 -6
  19. package/dist/anthropic/index.cjs.map +1 -1
  20. package/dist/anthropic/index.d.cts +2 -2
  21. package/dist/anthropic/index.d.ts +2 -2
  22. package/dist/anthropic/index.mjs +1675 -7
  23. package/dist/anthropic/index.mjs.map +1 -1
  24. package/dist/{client-BA-QlnRq.d.cts → client-BD8O2J8Z.d.cts} +106 -11
  25. package/dist/{client-BA-QlnRq.d.ts → client-BD8O2J8Z.d.ts} +106 -11
  26. package/dist/express/index.cjs +86 -1
  27. package/dist/express/index.cjs.map +1 -1
  28. package/dist/express/index.d.cts +1 -1
  29. package/dist/express/index.d.ts +1 -1
  30. package/dist/express/index.mjs +86 -1
  31. package/dist/express/index.mjs.map +1 -1
  32. package/dist/index.cjs +263 -39
  33. package/dist/index.cjs.map +1 -1
  34. package/dist/index.d.cts +3 -3
  35. package/dist/index.d.ts +3 -3
  36. package/dist/index.mjs +262 -40
  37. package/dist/index.mjs.map +1 -1
  38. package/dist/openai/index.cjs +1726 -6
  39. package/dist/openai/index.cjs.map +1 -1
  40. package/dist/openai/index.d.cts +2 -2
  41. package/dist/openai/index.d.ts +2 -2
  42. package/dist/openai/index.mjs +1725 -7
  43. package/dist/openai/index.mjs.map +1 -1
  44. package/dist/openrouter/index.cjs +3024 -0
  45. package/dist/openrouter/index.cjs.map +1 -0
  46. package/dist/openrouter/index.d.cts +4 -0
  47. package/dist/openrouter/index.d.ts +4 -0
  48. package/dist/openrouter/index.mjs +3019 -0
  49. package/dist/openrouter/index.mjs.map +1 -0
  50. package/package.json +102 -44
@@ -83,14 +83,22 @@ interface VendorHints {
83
83
  }
84
84
  interface PromptCompressionRequest {
85
85
  callId: string;
86
- input: unknown;
87
- provider?: "heuristic" | "toon" | "thetokencompany";
86
+ input?: unknown;
87
+ text?: string;
88
+ provider?: "heuristic" | "toon" | "thetokencompany" | "usagetap";
89
+ model?: string;
88
90
  tokenCompanyModel?: string;
91
+ /** Provider-neutral compression aggressiveness from 0.0 to 1.0. */
92
+ aggressiveness?: number;
93
+ /** @deprecated Use aggressiveness instead. */
89
94
  tokenCompanyAggressiveness?: number;
90
95
  tokenCompanyAppId?: string;
96
+ usageTapCompressionModel?: string;
97
+ /** @deprecated Use aggressiveness instead. */
98
+ usageTapCompressionAggressiveness?: number;
91
99
  }
92
100
  interface PromptCompressionTelemetry {
93
- provider: "heuristic" | "toon" | "thetokencompany";
101
+ provider: "heuristic" | "toon" | "thetokencompany" | "usagetap";
94
102
  originalCharacters: number;
95
103
  compressedCharacters: number;
96
104
  savedCharacters: number;
@@ -302,8 +310,14 @@ interface UsageTapLogEntry {
302
310
  error?: unknown;
303
311
  }
304
312
  interface UsageTapClientOptions {
305
- apiKey: string;
306
- baseUrl: string;
313
+ /**
314
+ * UsageTap API key. Defaults to the server-side USAGETAP_API_KEY environment variable.
315
+ */
316
+ apiKey?: string;
317
+ /**
318
+ * UsageTap API base URL. Defaults to USAGETAP_BASE_URL, then https://api.usagetap.com.
319
+ */
320
+ baseUrl?: string;
307
321
  defaultFeature?: string;
308
322
  defaultTags?: string[];
309
323
  fetchImpl?: typeof fetch;
@@ -334,11 +348,24 @@ interface UsageTapClientOptions {
334
348
  /** Override endpoint for The Token Company compatible compression APIs. */
335
349
  tokenCompanyEndpoint?: string;
336
350
  /** Default model for The Token Company compression. */
351
+ model?: string;
337
352
  tokenCompanyModel?: string;
338
- /** Default aggressiveness for The Token Company compression, from 0.0 to 1.0. */
353
+ /** Default compression aggressiveness, from 0.0 to 1.0. */
354
+ aggressiveness?: number;
355
+ /** @deprecated Use aggressiveness instead. */
339
356
  tokenCompanyAggressiveness?: number;
340
357
  /** Optional application identifier sent to The Token Company. */
341
358
  tokenCompanyAppId?: string;
359
+ /** API key for UsageTap prompt compression. Defaults to apiKey when omitted. */
360
+ usageTapCompressionApiKey?: string;
361
+ /** Override endpoint for UsageTap-compatible prompt compression APIs. */
362
+ usageTapCompressionEndpoint?: string;
363
+ /** Override endpoint for UsageTap-compatible message/request compression APIs. */
364
+ usageTapCompressionMessagesEndpoint?: string;
365
+ /** Default model for UsageTap prompt compression. */
366
+ usageTapCompressionModel?: string;
367
+ /** @deprecated Use aggressiveness instead. */
368
+ usageTapCompressionAggressiveness?: number;
342
369
  }
343
370
  interface RequestOptions {
344
371
  signal?: AbortSignal;
@@ -347,11 +374,29 @@ interface RequestOptions {
347
374
  }
348
375
  interface PromptCompressionStandaloneOptions {
349
376
  signal?: AbortSignal;
350
- provider?: "heuristic" | "toon" | "thetokencompany";
377
+ provider?: "heuristic" | "toon" | "thetokencompany" | "usagetap";
351
378
  failOpen?: boolean;
379
+ model?: string;
352
380
  tokenCompanyModel?: string;
381
+ /** Provider-neutral compression aggressiveness from 0.0 to 1.0. */
382
+ aggressiveness?: number;
383
+ /** @deprecated Use aggressiveness instead. */
353
384
  tokenCompanyAggressiveness?: number;
354
385
  tokenCompanyAppId?: string;
386
+ usageTapCompressionModel?: string;
387
+ /** @deprecated Use aggressiveness instead. */
388
+ usageTapCompressionAggressiveness?: number;
389
+ }
390
+ type PromptCompressionMessageRole$1 = "system" | "user" | "tool" | "assistant";
391
+ type PromptCompressionRoleAggressiveness$1 = Partial<Record<PromptCompressionMessageRole$1, number>>;
392
+ type PromptCompressionMessagesAggressiveness$1 = number | PromptCompressionRoleAggressiveness$1;
393
+ interface PromptCompressionMessagesOptions extends RequestOptions {
394
+ provider?: "usagetap";
395
+ failOpen?: boolean;
396
+ /** Provider-neutral scalar or per-role compression aggressiveness. */
397
+ aggressiveness?: PromptCompressionMessagesAggressiveness$1;
398
+ /** @deprecated Use aggressiveness instead. */
399
+ usageTapCompressionAggressiveness?: PromptCompressionMessagesAggressiveness$1;
355
400
  }
356
401
  interface RecordPromptCompressionRequest {
357
402
  callId: string;
@@ -492,15 +537,36 @@ interface UsageMetricEvent {
492
537
  correlationId?: string;
493
538
  }
494
539
 
495
- type PromptCompressionProvider = "heuristic" | "toon" | "thetokencompany";
540
+ type PromptCompressionProvider = "heuristic" | "toon" | "thetokencompany" | "usagetap";
541
+ type PromptCompressionMessageRole = "system" | "user" | "tool" | "assistant";
542
+ type PromptCompressionRoleAggressiveness = Partial<Record<PromptCompressionMessageRole, number>>;
543
+ type PromptCompressionMessagesAggressiveness = number | PromptCompressionRoleAggressiveness;
496
544
  interface PromptCompressionInput {
497
- input: unknown;
545
+ input?: unknown;
546
+ text?: string;
498
547
  provider?: PromptCompressionProvider;
499
548
  tokenCompanyApiKey?: string;
500
549
  tokenCompanyEndpoint?: string;
550
+ model?: string;
501
551
  tokenCompanyModel?: string;
552
+ aggressiveness?: number;
502
553
  tokenCompanyAggressiveness?: number;
503
554
  tokenCompanyAppId?: string;
555
+ usageTapCompressionApiKey?: string;
556
+ usageTapCompressionEndpoint?: string;
557
+ usageTapCompressionModel?: string;
558
+ usageTapCompressionAggressiveness?: number;
559
+ fetchImpl?: typeof fetch;
560
+ signal?: AbortSignal;
561
+ failOpen?: boolean;
562
+ }
563
+ interface PromptCompressionMessagesInput<TInput = unknown> {
564
+ input: TInput;
565
+ provider?: Extract<PromptCompressionProvider, "usagetap">;
566
+ usageTapCompressionApiKey?: string;
567
+ usageTapCompressionMessagesEndpoint?: string;
568
+ aggressiveness?: PromptCompressionMessagesAggressiveness;
569
+ usageTapCompressionAggressiveness?: PromptCompressionMessagesAggressiveness;
504
570
  fetchImpl?: typeof fetch;
505
571
  signal?: AbortSignal;
506
572
  failOpen?: boolean;
@@ -524,8 +590,17 @@ declare const protect: typeof protectPromptText;
524
590
  declare function compressPrompt<TInput = unknown>(options: PromptCompressionInput): Promise<PromptCompressionResult<TInput>>;
525
591
  declare function compressPromptHeuristic<TInput = unknown>(input: TInput): PromptCompressionResult<TInput>;
526
592
  declare function compressPromptToon<TInput = unknown>(input: TInput): PromptCompressionResult<TInput>;
593
+ declare function compressPromptMessages<TInput = unknown>(options: PromptCompressionMessagesInput<TInput>): Promise<PromptCompressionResult<TInput>>;
527
594
  declare function estimatePromptTokens(input: unknown): number;
528
595
 
596
+ type UsageTapCompressOptions = Omit<PromptCompressionStandaloneOptions, "provider">;
597
+ type UsageTapCompressResult = Omit<PromptCompressionResult<string>, "compressedInput"> & {
598
+ /** The compressed text, ready to pass to an LLM. */
599
+ output: string;
600
+ /** Alias retained for consistency with the lower-level compression APIs. */
601
+ compressedInput: string;
602
+ };
603
+ type MeterRequest = string | BeginCallRequest;
529
604
  declare class UsageTapClient {
530
605
  private readonly apiKey;
531
606
  private readonly baseUrl;
@@ -541,15 +616,30 @@ declare class UsageTapClient {
541
616
  private readonly autoIdempotency;
542
617
  private readonly tokenCompanyApiKey?;
543
618
  private readonly tokenCompanyEndpoint?;
619
+ private readonly model?;
544
620
  private readonly tokenCompanyModel?;
621
+ private readonly aggressiveness?;
545
622
  private readonly tokenCompanyAggressiveness?;
546
623
  private readonly tokenCompanyAppId?;
547
- constructor(options: UsageTapClientOptions);
624
+ private readonly usageTapCompressionApiKey?;
625
+ private readonly usageTapCompressionEndpoint?;
626
+ private readonly usageTapCompressionMessagesEndpoint?;
627
+ private readonly usageTapCompressionModel?;
628
+ private readonly usageTapCompressionAggressiveness?;
629
+ constructor(options?: UsageTapClientOptions);
548
630
  beginCall(request: BeginCallRequest, options?: BeginCallOptions): Promise<UsageTapSuccessResponse<BeginCallResponseBody>>;
549
631
  promptCompress(request: PromptCompressionRequest, options?: PromptCompressionOptions): Promise<PromptCompressionResult & {
550
632
  callId: string;
551
633
  }>;
552
634
  compressPromptInput<TInput = unknown>(input: TInput, options?: PromptCompressionStandaloneOptions): Promise<PromptCompressionResult<TInput>>;
635
+ /**
636
+ * Compress text with UsageTap's hosted compression service.
637
+ *
638
+ * This is the short, standalone path. It does not create a metered call and
639
+ * fails open to the original text unless failOpen is explicitly disabled.
640
+ */
641
+ compress(text: string, options?: UsageTapCompressOptions): Promise<UsageTapCompressResult>;
642
+ compressPromptMessages<TInput = unknown>(input: TInput, options?: PromptCompressionMessagesOptions): Promise<PromptCompressionResult<TInput>>;
553
643
  recordPromptCompression(request: RecordPromptCompressionRequest, options?: PromptCompressionOptions): Promise<UsageTapSuccessResponse<PromptCompressionResponseBody>>;
554
644
  endCall(request: EndCallRequest, options?: EndCallOptions): Promise<UsageTapSuccessResponse<EndCallResponseBody>>;
555
645
  checkUsage(request: CheckUsageRequest, options?: CheckUsageOptions): Promise<UsageTapSuccessResponse<CheckUsageResponseBody>>;
@@ -557,6 +647,11 @@ declare class UsageTapClient {
557
647
  changePlan(request: ChangePlanRequest, options?: ChangePlanOptions): Promise<UsageTapSuccessResponse<ChangePlanResponseBody>>;
558
648
  incrementCustomMeter(request: IncrementCustomMeterRequest, options?: IncrementCustomMeterOptions): Promise<UsageTapSuccessResponse<IncrementCustomMeterResponseBody>>;
559
649
  withUsage<T>(beginRequest: BeginCallRequest, handler: (context: WithUsageContext) => Promise<T>, options?: WithUsageOptions): Promise<T>;
650
+ /**
651
+ * Meter one operation. Pass only a customer ID for the common path, or the
652
+ * existing begin-call request object when feature, tags, or entitlements are needed.
653
+ */
654
+ meter<T>(request: MeterRequest, handler: (context: WithUsageContext) => Promise<T>, options?: WithUsageOptions): Promise<T>;
560
655
  private toPromptCompressionTelemetry;
561
656
  private request;
562
657
  private requestGet;
@@ -570,4 +665,4 @@ declare class UsageTapClient {
570
665
  private toApiError;
571
666
  }
572
667
 
573
- export { type RetryOptions as $, type IncrementCustomMeterResponseBody as A, type BeginCallRequest as B, type CreateCustomerOptions as C, type CustomMeterSlot as D, type EndCallRequest as E, type EndCallOptions as F, type EndCallResponseBody as G, type BalanceSummary as H, type IncrementCustomMeterOptions as I, type SpendVelocityWindow as J, type SpendVelocityWindowKey as K, type EntitlementHints as L, type PlanSummary as M, type MeterSummary as N, type MeterSnapshot as O, type PromptCompressionProvider as P, type MeteredUsage as Q, type RecordPromptCompressionRequest as R, type SpendVelocitySnapshot as S, type RateLimitsSnapshot as T, UsageTapClient as U, type VendorHints as V, type WithUsageOptions as W, type RemainingRatios as X, type RollingCallsRateLimitState as Y, type RequestedEntitlements as Z, type AllowedEntitlements as _, type PromptCompressionTelemetry as a, type UsageTapClientOptions as a0, type UsageTapErrorResponse as a1, type UsageTapResultEnvelope as a2, type UsageTapResultStatus as a3, type UsageTapLogEntry as a4, type WithUsageContext as a5, type LimitType as a6, type SubscriptionSnapshot as a7, type ModelHints as a8, type IdempotencyMetadata as a9, type UsageMetricEvent as aa, type UsageTapSuccessResponse as b, type BeginCallResponseBody as c, compressPrompt as d, compressPromptHeuristic as e, compressPromptToon as f, estimatePromptTokens as g, protectPromptText as h, type PromptCompressionInput as i, type PromptCompressionResult as j, type BeginCallOptions as k, type PromptCompressionRequest as l, type PromptCompressionOptions as m, type PromptCompressionResponseBody as n, type PromptCompressionStandaloneOptions as o, protect as p, type CreateCustomerRequest as q, type CreateCustomerResponseBody as r, type CheckUsageOptions as s, type CheckUsageRequest as t, type CheckUsageResponseBody as u, type ChangePlanOptions as v, type ChangePlanRequest as w, type ChangePlanResponseBody as x, type ChangePlanStrategy as y, type IncrementCustomMeterRequest as z };
668
+ export { type PlanSummary as $, type CheckUsageOptions as A, type BeginCallRequest as B, type CreateCustomerOptions as C, type CheckUsageRequest as D, type EndCallRequest as E, type CheckUsageResponseBody as F, type ChangePlanOptions as G, type ChangePlanRequest as H, type ChangePlanResponseBody as I, type ChangePlanStrategy as J, type IncrementCustomMeterOptions as K, type IncrementCustomMeterRequest as L, type MeterRequest as M, type IncrementCustomMeterResponseBody as N, type CustomMeterSlot as O, type PromptCompressionProvider as P, type EndCallOptions as Q, type RecordPromptCompressionRequest as R, type EndCallResponseBody as S, type BalanceSummary as T, UsageTapClient as U, type VendorHints as V, type WithUsageOptions as W, type SpendVelocitySnapshot as X, type SpendVelocityWindow as Y, type SpendVelocityWindowKey as Z, type EntitlementHints as _, type PromptCompressionTelemetry as a, type MeterSummary as a0, type MeterSnapshot as a1, type MeteredUsage as a2, type RateLimitsSnapshot as a3, type RemainingRatios as a4, type RollingCallsRateLimitState as a5, type RequestedEntitlements as a6, type AllowedEntitlements as a7, type RetryOptions as a8, type UsageTapClientOptions as a9, type UsageTapErrorResponse as aa, type UsageTapResultEnvelope as ab, type UsageTapResultStatus as ac, type UsageTapLogEntry as ad, type WithUsageContext as ae, type LimitType as af, type SubscriptionSnapshot as ag, type ModelHints as ah, type IdempotencyMetadata as ai, type UsageMetricEvent as aj, type UsageTapSuccessResponse as b, type BeginCallResponseBody as c, type UsageTapCompressOptions as d, type UsageTapCompressResult as e, compressPrompt as f, compressPromptMessages as g, compressPromptHeuristic as h, compressPromptToon as i, estimatePromptTokens as j, protectPromptText as k, type PromptCompressionInput as l, type PromptCompressionMessagesAggressiveness as m, type PromptCompressionMessagesInput as n, type PromptCompressionMessageRole as o, protect as p, type PromptCompressionResult as q, type PromptCompressionRoleAggressiveness as r, type BeginCallOptions as s, type PromptCompressionRequest as t, type PromptCompressionOptions as u, type PromptCompressionMessagesOptions as v, type PromptCompressionResponseBody as w, type PromptCompressionStandaloneOptions as x, type CreateCustomerRequest as y, type CreateCustomerResponseBody as z };
@@ -83,14 +83,22 @@ interface VendorHints {
83
83
  }
84
84
  interface PromptCompressionRequest {
85
85
  callId: string;
86
- input: unknown;
87
- provider?: "heuristic" | "toon" | "thetokencompany";
86
+ input?: unknown;
87
+ text?: string;
88
+ provider?: "heuristic" | "toon" | "thetokencompany" | "usagetap";
89
+ model?: string;
88
90
  tokenCompanyModel?: string;
91
+ /** Provider-neutral compression aggressiveness from 0.0 to 1.0. */
92
+ aggressiveness?: number;
93
+ /** @deprecated Use aggressiveness instead. */
89
94
  tokenCompanyAggressiveness?: number;
90
95
  tokenCompanyAppId?: string;
96
+ usageTapCompressionModel?: string;
97
+ /** @deprecated Use aggressiveness instead. */
98
+ usageTapCompressionAggressiveness?: number;
91
99
  }
92
100
  interface PromptCompressionTelemetry {
93
- provider: "heuristic" | "toon" | "thetokencompany";
101
+ provider: "heuristic" | "toon" | "thetokencompany" | "usagetap";
94
102
  originalCharacters: number;
95
103
  compressedCharacters: number;
96
104
  savedCharacters: number;
@@ -302,8 +310,14 @@ interface UsageTapLogEntry {
302
310
  error?: unknown;
303
311
  }
304
312
  interface UsageTapClientOptions {
305
- apiKey: string;
306
- baseUrl: string;
313
+ /**
314
+ * UsageTap API key. Defaults to the server-side USAGETAP_API_KEY environment variable.
315
+ */
316
+ apiKey?: string;
317
+ /**
318
+ * UsageTap API base URL. Defaults to USAGETAP_BASE_URL, then https://api.usagetap.com.
319
+ */
320
+ baseUrl?: string;
307
321
  defaultFeature?: string;
308
322
  defaultTags?: string[];
309
323
  fetchImpl?: typeof fetch;
@@ -334,11 +348,24 @@ interface UsageTapClientOptions {
334
348
  /** Override endpoint for The Token Company compatible compression APIs. */
335
349
  tokenCompanyEndpoint?: string;
336
350
  /** Default model for The Token Company compression. */
351
+ model?: string;
337
352
  tokenCompanyModel?: string;
338
- /** Default aggressiveness for The Token Company compression, from 0.0 to 1.0. */
353
+ /** Default compression aggressiveness, from 0.0 to 1.0. */
354
+ aggressiveness?: number;
355
+ /** @deprecated Use aggressiveness instead. */
339
356
  tokenCompanyAggressiveness?: number;
340
357
  /** Optional application identifier sent to The Token Company. */
341
358
  tokenCompanyAppId?: string;
359
+ /** API key for UsageTap prompt compression. Defaults to apiKey when omitted. */
360
+ usageTapCompressionApiKey?: string;
361
+ /** Override endpoint for UsageTap-compatible prompt compression APIs. */
362
+ usageTapCompressionEndpoint?: string;
363
+ /** Override endpoint for UsageTap-compatible message/request compression APIs. */
364
+ usageTapCompressionMessagesEndpoint?: string;
365
+ /** Default model for UsageTap prompt compression. */
366
+ usageTapCompressionModel?: string;
367
+ /** @deprecated Use aggressiveness instead. */
368
+ usageTapCompressionAggressiveness?: number;
342
369
  }
343
370
  interface RequestOptions {
344
371
  signal?: AbortSignal;
@@ -347,11 +374,29 @@ interface RequestOptions {
347
374
  }
348
375
  interface PromptCompressionStandaloneOptions {
349
376
  signal?: AbortSignal;
350
- provider?: "heuristic" | "toon" | "thetokencompany";
377
+ provider?: "heuristic" | "toon" | "thetokencompany" | "usagetap";
351
378
  failOpen?: boolean;
379
+ model?: string;
352
380
  tokenCompanyModel?: string;
381
+ /** Provider-neutral compression aggressiveness from 0.0 to 1.0. */
382
+ aggressiveness?: number;
383
+ /** @deprecated Use aggressiveness instead. */
353
384
  tokenCompanyAggressiveness?: number;
354
385
  tokenCompanyAppId?: string;
386
+ usageTapCompressionModel?: string;
387
+ /** @deprecated Use aggressiveness instead. */
388
+ usageTapCompressionAggressiveness?: number;
389
+ }
390
+ type PromptCompressionMessageRole$1 = "system" | "user" | "tool" | "assistant";
391
+ type PromptCompressionRoleAggressiveness$1 = Partial<Record<PromptCompressionMessageRole$1, number>>;
392
+ type PromptCompressionMessagesAggressiveness$1 = number | PromptCompressionRoleAggressiveness$1;
393
+ interface PromptCompressionMessagesOptions extends RequestOptions {
394
+ provider?: "usagetap";
395
+ failOpen?: boolean;
396
+ /** Provider-neutral scalar or per-role compression aggressiveness. */
397
+ aggressiveness?: PromptCompressionMessagesAggressiveness$1;
398
+ /** @deprecated Use aggressiveness instead. */
399
+ usageTapCompressionAggressiveness?: PromptCompressionMessagesAggressiveness$1;
355
400
  }
356
401
  interface RecordPromptCompressionRequest {
357
402
  callId: string;
@@ -492,15 +537,36 @@ interface UsageMetricEvent {
492
537
  correlationId?: string;
493
538
  }
494
539
 
495
- type PromptCompressionProvider = "heuristic" | "toon" | "thetokencompany";
540
+ type PromptCompressionProvider = "heuristic" | "toon" | "thetokencompany" | "usagetap";
541
+ type PromptCompressionMessageRole = "system" | "user" | "tool" | "assistant";
542
+ type PromptCompressionRoleAggressiveness = Partial<Record<PromptCompressionMessageRole, number>>;
543
+ type PromptCompressionMessagesAggressiveness = number | PromptCompressionRoleAggressiveness;
496
544
  interface PromptCompressionInput {
497
- input: unknown;
545
+ input?: unknown;
546
+ text?: string;
498
547
  provider?: PromptCompressionProvider;
499
548
  tokenCompanyApiKey?: string;
500
549
  tokenCompanyEndpoint?: string;
550
+ model?: string;
501
551
  tokenCompanyModel?: string;
552
+ aggressiveness?: number;
502
553
  tokenCompanyAggressiveness?: number;
503
554
  tokenCompanyAppId?: string;
555
+ usageTapCompressionApiKey?: string;
556
+ usageTapCompressionEndpoint?: string;
557
+ usageTapCompressionModel?: string;
558
+ usageTapCompressionAggressiveness?: number;
559
+ fetchImpl?: typeof fetch;
560
+ signal?: AbortSignal;
561
+ failOpen?: boolean;
562
+ }
563
+ interface PromptCompressionMessagesInput<TInput = unknown> {
564
+ input: TInput;
565
+ provider?: Extract<PromptCompressionProvider, "usagetap">;
566
+ usageTapCompressionApiKey?: string;
567
+ usageTapCompressionMessagesEndpoint?: string;
568
+ aggressiveness?: PromptCompressionMessagesAggressiveness;
569
+ usageTapCompressionAggressiveness?: PromptCompressionMessagesAggressiveness;
504
570
  fetchImpl?: typeof fetch;
505
571
  signal?: AbortSignal;
506
572
  failOpen?: boolean;
@@ -524,8 +590,17 @@ declare const protect: typeof protectPromptText;
524
590
  declare function compressPrompt<TInput = unknown>(options: PromptCompressionInput): Promise<PromptCompressionResult<TInput>>;
525
591
  declare function compressPromptHeuristic<TInput = unknown>(input: TInput): PromptCompressionResult<TInput>;
526
592
  declare function compressPromptToon<TInput = unknown>(input: TInput): PromptCompressionResult<TInput>;
593
+ declare function compressPromptMessages<TInput = unknown>(options: PromptCompressionMessagesInput<TInput>): Promise<PromptCompressionResult<TInput>>;
527
594
  declare function estimatePromptTokens(input: unknown): number;
528
595
 
596
+ type UsageTapCompressOptions = Omit<PromptCompressionStandaloneOptions, "provider">;
597
+ type UsageTapCompressResult = Omit<PromptCompressionResult<string>, "compressedInput"> & {
598
+ /** The compressed text, ready to pass to an LLM. */
599
+ output: string;
600
+ /** Alias retained for consistency with the lower-level compression APIs. */
601
+ compressedInput: string;
602
+ };
603
+ type MeterRequest = string | BeginCallRequest;
529
604
  declare class UsageTapClient {
530
605
  private readonly apiKey;
531
606
  private readonly baseUrl;
@@ -541,15 +616,30 @@ declare class UsageTapClient {
541
616
  private readonly autoIdempotency;
542
617
  private readonly tokenCompanyApiKey?;
543
618
  private readonly tokenCompanyEndpoint?;
619
+ private readonly model?;
544
620
  private readonly tokenCompanyModel?;
621
+ private readonly aggressiveness?;
545
622
  private readonly tokenCompanyAggressiveness?;
546
623
  private readonly tokenCompanyAppId?;
547
- constructor(options: UsageTapClientOptions);
624
+ private readonly usageTapCompressionApiKey?;
625
+ private readonly usageTapCompressionEndpoint?;
626
+ private readonly usageTapCompressionMessagesEndpoint?;
627
+ private readonly usageTapCompressionModel?;
628
+ private readonly usageTapCompressionAggressiveness?;
629
+ constructor(options?: UsageTapClientOptions);
548
630
  beginCall(request: BeginCallRequest, options?: BeginCallOptions): Promise<UsageTapSuccessResponse<BeginCallResponseBody>>;
549
631
  promptCompress(request: PromptCompressionRequest, options?: PromptCompressionOptions): Promise<PromptCompressionResult & {
550
632
  callId: string;
551
633
  }>;
552
634
  compressPromptInput<TInput = unknown>(input: TInput, options?: PromptCompressionStandaloneOptions): Promise<PromptCompressionResult<TInput>>;
635
+ /**
636
+ * Compress text with UsageTap's hosted compression service.
637
+ *
638
+ * This is the short, standalone path. It does not create a metered call and
639
+ * fails open to the original text unless failOpen is explicitly disabled.
640
+ */
641
+ compress(text: string, options?: UsageTapCompressOptions): Promise<UsageTapCompressResult>;
642
+ compressPromptMessages<TInput = unknown>(input: TInput, options?: PromptCompressionMessagesOptions): Promise<PromptCompressionResult<TInput>>;
553
643
  recordPromptCompression(request: RecordPromptCompressionRequest, options?: PromptCompressionOptions): Promise<UsageTapSuccessResponse<PromptCompressionResponseBody>>;
554
644
  endCall(request: EndCallRequest, options?: EndCallOptions): Promise<UsageTapSuccessResponse<EndCallResponseBody>>;
555
645
  checkUsage(request: CheckUsageRequest, options?: CheckUsageOptions): Promise<UsageTapSuccessResponse<CheckUsageResponseBody>>;
@@ -557,6 +647,11 @@ declare class UsageTapClient {
557
647
  changePlan(request: ChangePlanRequest, options?: ChangePlanOptions): Promise<UsageTapSuccessResponse<ChangePlanResponseBody>>;
558
648
  incrementCustomMeter(request: IncrementCustomMeterRequest, options?: IncrementCustomMeterOptions): Promise<UsageTapSuccessResponse<IncrementCustomMeterResponseBody>>;
559
649
  withUsage<T>(beginRequest: BeginCallRequest, handler: (context: WithUsageContext) => Promise<T>, options?: WithUsageOptions): Promise<T>;
650
+ /**
651
+ * Meter one operation. Pass only a customer ID for the common path, or the
652
+ * existing begin-call request object when feature, tags, or entitlements are needed.
653
+ */
654
+ meter<T>(request: MeterRequest, handler: (context: WithUsageContext) => Promise<T>, options?: WithUsageOptions): Promise<T>;
560
655
  private toPromptCompressionTelemetry;
561
656
  private request;
562
657
  private requestGet;
@@ -570,4 +665,4 @@ declare class UsageTapClient {
570
665
  private toApiError;
571
666
  }
572
667
 
573
- export { type RetryOptions as $, type IncrementCustomMeterResponseBody as A, type BeginCallRequest as B, type CreateCustomerOptions as C, type CustomMeterSlot as D, type EndCallRequest as E, type EndCallOptions as F, type EndCallResponseBody as G, type BalanceSummary as H, type IncrementCustomMeterOptions as I, type SpendVelocityWindow as J, type SpendVelocityWindowKey as K, type EntitlementHints as L, type PlanSummary as M, type MeterSummary as N, type MeterSnapshot as O, type PromptCompressionProvider as P, type MeteredUsage as Q, type RecordPromptCompressionRequest as R, type SpendVelocitySnapshot as S, type RateLimitsSnapshot as T, UsageTapClient as U, type VendorHints as V, type WithUsageOptions as W, type RemainingRatios as X, type RollingCallsRateLimitState as Y, type RequestedEntitlements as Z, type AllowedEntitlements as _, type PromptCompressionTelemetry as a, type UsageTapClientOptions as a0, type UsageTapErrorResponse as a1, type UsageTapResultEnvelope as a2, type UsageTapResultStatus as a3, type UsageTapLogEntry as a4, type WithUsageContext as a5, type LimitType as a6, type SubscriptionSnapshot as a7, type ModelHints as a8, type IdempotencyMetadata as a9, type UsageMetricEvent as aa, type UsageTapSuccessResponse as b, type BeginCallResponseBody as c, compressPrompt as d, compressPromptHeuristic as e, compressPromptToon as f, estimatePromptTokens as g, protectPromptText as h, type PromptCompressionInput as i, type PromptCompressionResult as j, type BeginCallOptions as k, type PromptCompressionRequest as l, type PromptCompressionOptions as m, type PromptCompressionResponseBody as n, type PromptCompressionStandaloneOptions as o, protect as p, type CreateCustomerRequest as q, type CreateCustomerResponseBody as r, type CheckUsageOptions as s, type CheckUsageRequest as t, type CheckUsageResponseBody as u, type ChangePlanOptions as v, type ChangePlanRequest as w, type ChangePlanResponseBody as x, type ChangePlanStrategy as y, type IncrementCustomMeterRequest as z };
668
+ export { type PlanSummary as $, type CheckUsageOptions as A, type BeginCallRequest as B, type CreateCustomerOptions as C, type CheckUsageRequest as D, type EndCallRequest as E, type CheckUsageResponseBody as F, type ChangePlanOptions as G, type ChangePlanRequest as H, type ChangePlanResponseBody as I, type ChangePlanStrategy as J, type IncrementCustomMeterOptions as K, type IncrementCustomMeterRequest as L, type MeterRequest as M, type IncrementCustomMeterResponseBody as N, type CustomMeterSlot as O, type PromptCompressionProvider as P, type EndCallOptions as Q, type RecordPromptCompressionRequest as R, type EndCallResponseBody as S, type BalanceSummary as T, UsageTapClient as U, type VendorHints as V, type WithUsageOptions as W, type SpendVelocitySnapshot as X, type SpendVelocityWindow as Y, type SpendVelocityWindowKey as Z, type EntitlementHints as _, type PromptCompressionTelemetry as a, type MeterSummary as a0, type MeterSnapshot as a1, type MeteredUsage as a2, type RateLimitsSnapshot as a3, type RemainingRatios as a4, type RollingCallsRateLimitState as a5, type RequestedEntitlements as a6, type AllowedEntitlements as a7, type RetryOptions as a8, type UsageTapClientOptions as a9, type UsageTapErrorResponse as aa, type UsageTapResultEnvelope as ab, type UsageTapResultStatus as ac, type UsageTapLogEntry as ad, type WithUsageContext as ae, type LimitType as af, type SubscriptionSnapshot as ag, type ModelHints as ah, type IdempotencyMetadata as ai, type UsageMetricEvent as aj, type UsageTapSuccessResponse as b, type BeginCallResponseBody as c, type UsageTapCompressOptions as d, type UsageTapCompressResult as e, compressPrompt as f, compressPromptMessages as g, compressPromptHeuristic as h, compressPromptToon as i, estimatePromptTokens as j, protectPromptText as k, type PromptCompressionInput as l, type PromptCompressionMessagesAggressiveness as m, type PromptCompressionMessagesInput as n, type PromptCompressionMessageRole as o, protect as p, type PromptCompressionResult as q, type PromptCompressionRoleAggressiveness as r, type BeginCallOptions as s, type PromptCompressionRequest as t, type PromptCompressionOptions as u, type PromptCompressionMessagesOptions as v, type PromptCompressionResponseBody as w, type PromptCompressionStandaloneOptions as x, type CreateCustomerRequest as y, type CreateCustomerResponseBody as z };
@@ -495,6 +495,24 @@ async function compressChatParams(params, usageTap, compression, signal) {
495
495
  if (!messages) {
496
496
  return { params, segments: [] };
497
497
  }
498
+ if (isBelowMinContextTokens(
499
+ { messages, tools: source.tools },
500
+ compression.minContextTokens
501
+ )) {
502
+ return { params, segments: [] };
503
+ }
504
+ if (shouldUseUsageTapMessageEndpoint(compression)) {
505
+ const result = await usageTap.compressPromptMessages(source, {
506
+ provider: "usagetap",
507
+ failOpen: compression.failOpen,
508
+ aggressiveness: resolveMessageEndpointAggressiveness(compression),
509
+ signal
510
+ });
511
+ return {
512
+ params: result.compressedInput,
513
+ segments: [{ role: "user", result }]
514
+ };
515
+ }
498
516
  const messageResults = await Promise.all(
499
517
  messages.map(
500
518
  (message) => compressOpenAIMessage(message, usageTap, compression, signal)
@@ -514,6 +532,16 @@ async function compressResponsesParams(params, usageTap, compression, signal) {
514
532
  }
515
533
  const source = cloneRecord(params);
516
534
  const segments = [];
535
+ if (isBelowMinContextTokens(
536
+ {
537
+ instructions: source.instructions,
538
+ input: source.input,
539
+ tools: source.tools
540
+ },
541
+ compression.minContextTokens
542
+ )) {
543
+ return { params, segments };
544
+ }
517
545
  if (typeof source.instructions === "string") {
518
546
  const compressed = await compressTextForRole(
519
547
  source.instructions,
@@ -718,8 +746,11 @@ async function compressTextForRole(text, role, usageTap, compression, signal) {
718
746
  provider: roleOptions.provider,
719
747
  failOpen: roleOptions.failOpen,
720
748
  tokenCompanyModel: roleOptions.tokenCompanyModel,
749
+ aggressiveness: roleOptions.aggressiveness,
721
750
  tokenCompanyAggressiveness: roleOptions.tokenCompanyAggressiveness,
722
751
  tokenCompanyAppId: roleOptions.tokenCompanyAppId,
752
+ usageTapCompressionModel: roleOptions.usageTapCompressionModel,
753
+ usageTapCompressionAggressiveness: roleOptions.usageTapCompressionAggressiveness,
723
754
  signal
724
755
  });
725
756
  const compressedText = typeof result.compressedInput === "string" ? result.compressedInput : String(result.compressedInput);
@@ -740,6 +771,9 @@ function normalizePromptCompressionOptions(options) {
740
771
  }
741
772
  return options;
742
773
  }
774
+ function isBelowMinContextTokens(context, minContextTokens) {
775
+ return typeof minContextTokens === "number" && estimatePromptTokens(context) < Math.max(0, minContextTokens);
776
+ }
743
777
  function resolveEffectivePromptCompressionOptions(defaults, override) {
744
778
  if (override === false) {
745
779
  return void 0;
@@ -778,16 +812,67 @@ function resolveRoleCompressionOptions(compression, role) {
778
812
  minTokens: roleOptions?.minTokens ?? compression.minTokens,
779
813
  failOpen: compression.failOpen,
780
814
  tokenCompanyModel: compression.tokenCompanyModel,
815
+ aggressiveness: roleOptions?.aggressiveness ?? resolveAggressiveness(compression, role),
781
816
  tokenCompanyAggressiveness: roleOptions?.tokenCompanyAggressiveness ?? resolveTokenCompanyAggressiveness(compression, role),
782
- tokenCompanyAppId: compression.tokenCompanyAppId
817
+ tokenCompanyAppId: compression.tokenCompanyAppId,
818
+ usageTapCompressionModel: compression.usageTapCompressionModel,
819
+ usageTapCompressionAggressiveness: roleOptions?.usageTapCompressionAggressiveness ?? resolveUsageTapCompressionAggressiveness(compression, role)
783
820
  };
784
821
  }
822
+ function resolveAggressiveness(compression, role) {
823
+ if (typeof compression.aggressiveness === "number") {
824
+ return compression.aggressiveness;
825
+ }
826
+ return compression.aggressiveness?.[role];
827
+ }
785
828
  function resolveTokenCompanyAggressiveness(compression, role) {
786
829
  if (typeof compression.tokenCompanyAggressiveness === "number") {
787
830
  return compression.tokenCompanyAggressiveness;
788
831
  }
789
832
  return compression.tokenCompanyAggressiveness?.[role];
790
833
  }
834
+ function resolveUsageTapCompressionAggressiveness(compression, role) {
835
+ if (typeof compression.usageTapCompressionAggressiveness === "number") {
836
+ return compression.usageTapCompressionAggressiveness;
837
+ }
838
+ return compression.usageTapCompressionAggressiveness?.[role];
839
+ }
840
+ function shouldUseUsageTapMessageEndpoint(compression) {
841
+ if (compression.provider !== "usagetap") {
842
+ return false;
843
+ }
844
+ return Object.values(compression.roles ?? {}).every((setting) => {
845
+ if (typeof setting !== "object" || setting === null) {
846
+ return true;
847
+ }
848
+ return setting.provider === void 0 || setting.provider === "usagetap";
849
+ });
850
+ }
851
+ function resolveMessageEndpointAggressiveness(compression) {
852
+ const base = compression.aggressiveness ?? compression.usageTapCompressionAggressiveness ?? compression.tokenCompanyAggressiveness;
853
+ if (typeof base === "number" || base === void 0) {
854
+ return hasExplicitEnabledRoles(compression) ? buildRoleAggressiveness(compression, base) : base;
855
+ }
856
+ return buildRoleAggressiveness(compression, void 0, base);
857
+ }
858
+ function hasExplicitEnabledRoles(compression) {
859
+ return Object.values(compression.roles ?? {}).some((setting) => setting !== false);
860
+ }
861
+ function buildRoleAggressiveness(compression, fallback, base = {}) {
862
+ const roles = ["system", "user", "tool", "assistant"];
863
+ const result = {};
864
+ for (const role of roles) {
865
+ const roleOptions = resolveRoleCompressionOptions(compression, role);
866
+ if (!roleOptions) {
867
+ continue;
868
+ }
869
+ const roleAggressiveness = roleOptions.aggressiveness ?? roleOptions.usageTapCompressionAggressiveness ?? roleOptions.tokenCompanyAggressiveness ?? base[role] ?? fallback;
870
+ if (roleAggressiveness !== void 0) {
871
+ result[role] = roleAggressiveness;
872
+ }
873
+ }
874
+ return result;
875
+ }
791
876
  function buildPromptCompressionTelemetry(segments) {
792
877
  if (!segments.length) {
793
878
  return void 0;