@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
@@ -1,6 +1,6 @@
1
1
  import OpenAI from 'openai';
2
2
  import { Request, Response, NextFunction } from 'express';
3
- import { U as UsageTapClient } from '../client-BA-QlnRq.cjs';
3
+ import { U as UsageTapClient } from '../client-BD8O2J8Z.cjs';
4
4
  import { WrapOpenAIContext, WrapOpenAIOptions, wrapOpenAI, pipeToResponse } from '../adapters/openai.cjs';
5
5
 
6
6
  interface ExpressUsageTapContext {
@@ -1,6 +1,6 @@
1
1
  import OpenAI from 'openai';
2
2
  import { Request, Response, NextFunction } from 'express';
3
- import { U as UsageTapClient } from '../client-BA-QlnRq.js';
3
+ import { U as UsageTapClient } from '../client-BD8O2J8Z.js';
4
4
  import { WrapOpenAIContext, WrapOpenAIOptions, wrapOpenAI, pipeToResponse } from '../adapters/openai.js';
5
5
 
6
6
  interface ExpressUsageTapContext {
@@ -493,6 +493,24 @@ async function compressChatParams(params, usageTap, compression, signal) {
493
493
  if (!messages) {
494
494
  return { params, segments: [] };
495
495
  }
496
+ if (isBelowMinContextTokens(
497
+ { messages, tools: source.tools },
498
+ compression.minContextTokens
499
+ )) {
500
+ return { params, segments: [] };
501
+ }
502
+ if (shouldUseUsageTapMessageEndpoint(compression)) {
503
+ const result = await usageTap.compressPromptMessages(source, {
504
+ provider: "usagetap",
505
+ failOpen: compression.failOpen,
506
+ aggressiveness: resolveMessageEndpointAggressiveness(compression),
507
+ signal
508
+ });
509
+ return {
510
+ params: result.compressedInput,
511
+ segments: [{ role: "user", result }]
512
+ };
513
+ }
496
514
  const messageResults = await Promise.all(
497
515
  messages.map(
498
516
  (message) => compressOpenAIMessage(message, usageTap, compression, signal)
@@ -512,6 +530,16 @@ async function compressResponsesParams(params, usageTap, compression, signal) {
512
530
  }
513
531
  const source = cloneRecord(params);
514
532
  const segments = [];
533
+ if (isBelowMinContextTokens(
534
+ {
535
+ instructions: source.instructions,
536
+ input: source.input,
537
+ tools: source.tools
538
+ },
539
+ compression.minContextTokens
540
+ )) {
541
+ return { params, segments };
542
+ }
515
543
  if (typeof source.instructions === "string") {
516
544
  const compressed = await compressTextForRole(
517
545
  source.instructions,
@@ -716,8 +744,11 @@ async function compressTextForRole(text, role, usageTap, compression, signal) {
716
744
  provider: roleOptions.provider,
717
745
  failOpen: roleOptions.failOpen,
718
746
  tokenCompanyModel: roleOptions.tokenCompanyModel,
747
+ aggressiveness: roleOptions.aggressiveness,
719
748
  tokenCompanyAggressiveness: roleOptions.tokenCompanyAggressiveness,
720
749
  tokenCompanyAppId: roleOptions.tokenCompanyAppId,
750
+ usageTapCompressionModel: roleOptions.usageTapCompressionModel,
751
+ usageTapCompressionAggressiveness: roleOptions.usageTapCompressionAggressiveness,
721
752
  signal
722
753
  });
723
754
  const compressedText = typeof result.compressedInput === "string" ? result.compressedInput : String(result.compressedInput);
@@ -738,6 +769,9 @@ function normalizePromptCompressionOptions(options) {
738
769
  }
739
770
  return options;
740
771
  }
772
+ function isBelowMinContextTokens(context, minContextTokens) {
773
+ return typeof minContextTokens === "number" && estimatePromptTokens(context) < Math.max(0, minContextTokens);
774
+ }
741
775
  function resolveEffectivePromptCompressionOptions(defaults, override) {
742
776
  if (override === false) {
743
777
  return void 0;
@@ -776,16 +810,67 @@ function resolveRoleCompressionOptions(compression, role) {
776
810
  minTokens: roleOptions?.minTokens ?? compression.minTokens,
777
811
  failOpen: compression.failOpen,
778
812
  tokenCompanyModel: compression.tokenCompanyModel,
813
+ aggressiveness: roleOptions?.aggressiveness ?? resolveAggressiveness(compression, role),
779
814
  tokenCompanyAggressiveness: roleOptions?.tokenCompanyAggressiveness ?? resolveTokenCompanyAggressiveness(compression, role),
780
- tokenCompanyAppId: compression.tokenCompanyAppId
815
+ tokenCompanyAppId: compression.tokenCompanyAppId,
816
+ usageTapCompressionModel: compression.usageTapCompressionModel,
817
+ usageTapCompressionAggressiveness: roleOptions?.usageTapCompressionAggressiveness ?? resolveUsageTapCompressionAggressiveness(compression, role)
781
818
  };
782
819
  }
820
+ function resolveAggressiveness(compression, role) {
821
+ if (typeof compression.aggressiveness === "number") {
822
+ return compression.aggressiveness;
823
+ }
824
+ return compression.aggressiveness?.[role];
825
+ }
783
826
  function resolveTokenCompanyAggressiveness(compression, role) {
784
827
  if (typeof compression.tokenCompanyAggressiveness === "number") {
785
828
  return compression.tokenCompanyAggressiveness;
786
829
  }
787
830
  return compression.tokenCompanyAggressiveness?.[role];
788
831
  }
832
+ function resolveUsageTapCompressionAggressiveness(compression, role) {
833
+ if (typeof compression.usageTapCompressionAggressiveness === "number") {
834
+ return compression.usageTapCompressionAggressiveness;
835
+ }
836
+ return compression.usageTapCompressionAggressiveness?.[role];
837
+ }
838
+ function shouldUseUsageTapMessageEndpoint(compression) {
839
+ if (compression.provider !== "usagetap") {
840
+ return false;
841
+ }
842
+ return Object.values(compression.roles ?? {}).every((setting) => {
843
+ if (typeof setting !== "object" || setting === null) {
844
+ return true;
845
+ }
846
+ return setting.provider === void 0 || setting.provider === "usagetap";
847
+ });
848
+ }
849
+ function resolveMessageEndpointAggressiveness(compression) {
850
+ const base = compression.aggressiveness ?? compression.usageTapCompressionAggressiveness ?? compression.tokenCompanyAggressiveness;
851
+ if (typeof base === "number" || base === void 0) {
852
+ return hasExplicitEnabledRoles(compression) ? buildRoleAggressiveness(compression, base) : base;
853
+ }
854
+ return buildRoleAggressiveness(compression, void 0, base);
855
+ }
856
+ function hasExplicitEnabledRoles(compression) {
857
+ return Object.values(compression.roles ?? {}).some((setting) => setting !== false);
858
+ }
859
+ function buildRoleAggressiveness(compression, fallback, base = {}) {
860
+ const roles = ["system", "user", "tool", "assistant"];
861
+ const result = {};
862
+ for (const role of roles) {
863
+ const roleOptions = resolveRoleCompressionOptions(compression, role);
864
+ if (!roleOptions) {
865
+ continue;
866
+ }
867
+ const roleAggressiveness = roleOptions.aggressiveness ?? roleOptions.usageTapCompressionAggressiveness ?? roleOptions.tokenCompanyAggressiveness ?? base[role] ?? fallback;
868
+ if (roleAggressiveness !== void 0) {
869
+ result[role] = roleAggressiveness;
870
+ }
871
+ }
872
+ return result;
873
+ }
789
874
  function buildPromptCompressionTelemetry(segments) {
790
875
  if (!segments.length) {
791
876
  return void 0;