@plurnk/plurnk-providers 1.3.12 → 1.5.0

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 (139) hide show
  1. package/.env.defaults +47 -38
  2. package/README.md +68 -4
  3. package/SPEC.md +245 -62
  4. package/dist/AiSdkProvider.d.ts +19 -5
  5. package/dist/AiSdkProvider.d.ts.map +1 -1
  6. package/dist/AiSdkProvider.js +264 -156
  7. package/dist/AiSdkProvider.js.map +1 -1
  8. package/dist/Mock.d.ts +15 -17
  9. package/dist/Mock.d.ts.map +1 -1
  10. package/dist/Mock.js +27 -10
  11. package/dist/Mock.js.map +1 -1
  12. package/dist/Pool.d.ts +8 -2
  13. package/dist/Pool.d.ts.map +1 -1
  14. package/dist/Pool.js +41 -8
  15. package/dist/Pool.js.map +1 -1
  16. package/dist/ProviderRegistry.d.ts +4 -1
  17. package/dist/ProviderRegistry.d.ts.map +1 -1
  18. package/dist/ProviderRegistry.js +7 -3
  19. package/dist/ProviderRegistry.js.map +1 -1
  20. package/dist/accounting.d.ts +3 -0
  21. package/dist/accounting.d.ts.map +1 -0
  22. package/dist/accounting.js +84 -0
  23. package/dist/accounting.js.map +1 -0
  24. package/dist/aiSdkTransport.d.ts +5 -2
  25. package/dist/aiSdkTransport.d.ts.map +1 -1
  26. package/dist/aiSdkTransport.js +91 -5
  27. package/dist/aiSdkTransport.js.map +1 -1
  28. package/dist/catalogProvider.d.ts +5 -2
  29. package/dist/catalogProvider.d.ts.map +1 -1
  30. package/dist/catalogProvider.js +24 -11
  31. package/dist/catalogProvider.js.map +1 -1
  32. package/dist/compatibleProvider.d.ts.map +1 -1
  33. package/dist/compatibleProvider.js +11 -4
  34. package/dist/compatibleProvider.js.map +1 -1
  35. package/dist/cost.d.ts +11 -0
  36. package/dist/cost.d.ts.map +1 -0
  37. package/dist/cost.js +61 -0
  38. package/dist/cost.js.map +1 -0
  39. package/dist/discover.d.ts +2 -0
  40. package/dist/discover.d.ts.map +1 -1
  41. package/dist/discover.js +15 -9
  42. package/dist/discover.js.map +1 -1
  43. package/dist/env.d.ts +4 -6
  44. package/dist/env.d.ts.map +1 -1
  45. package/dist/env.js +27 -29
  46. package/dist/env.js.map +1 -1
  47. package/dist/errors.d.ts +27 -0
  48. package/dist/errors.d.ts.map +1 -0
  49. package/dist/errors.js +152 -0
  50. package/dist/errors.js.map +1 -0
  51. package/dist/index.d.ts +12 -6
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +8 -5
  54. package/dist/index.js.map +1 -1
  55. package/dist/notices.d.ts +10 -0
  56. package/dist/notices.d.ts.map +1 -0
  57. package/dist/notices.js +11 -0
  58. package/dist/notices.js.map +1 -0
  59. package/dist/ollama.d.ts.map +1 -1
  60. package/dist/ollama.js +3 -3
  61. package/dist/ollama.js.map +1 -1
  62. package/dist/openai.d.ts +1 -1
  63. package/dist/openai.d.ts.map +1 -1
  64. package/dist/promptTokens.d.ts +4 -0
  65. package/dist/promptTokens.d.ts.map +1 -0
  66. package/dist/promptTokens.js +32 -0
  67. package/dist/promptTokens.js.map +1 -0
  68. package/dist/sdkModels.d.ts +2 -0
  69. package/dist/sdkModels.d.ts.map +1 -1
  70. package/dist/sdkModels.js +17 -6
  71. package/dist/sdkModels.js.map +1 -1
  72. package/dist/types.d.ts +52 -16
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/types.js +1 -1
  75. package/dist/types.js.map +1 -1
  76. package/dist/usage.d.ts +4 -0
  77. package/dist/usage.d.ts.map +1 -1
  78. package/dist/usage.js +64 -19
  79. package/dist/usage.js.map +1 -1
  80. package/dist/warnings.js +0 -0
  81. package/dist/warnings.js.map +1 -1
  82. package/package.json +15 -10
  83. package/src/AiSdkProvider.test.ts +750 -169
  84. package/src/AiSdkProvider.ts +354 -200
  85. package/src/Mock.test.ts +29 -14
  86. package/src/Mock.ts +36 -15
  87. package/src/Pool.test.ts +43 -6
  88. package/src/Pool.ts +56 -10
  89. package/src/ProviderRegistry.test.ts +158 -9
  90. package/src/ProviderRegistry.ts +19 -6
  91. package/src/accounting.test.ts +58 -0
  92. package/src/accounting.ts +88 -0
  93. package/src/aiSdkTransport.ts +101 -8
  94. package/src/boundaries.test.ts +9 -3
  95. package/src/catalogProvider.test.ts +43 -15
  96. package/src/catalogProvider.ts +32 -16
  97. package/src/compatibleProvider.test.ts +96 -0
  98. package/src/compatibleProvider.ts +15 -6
  99. package/src/cost.test.ts +64 -0
  100. package/src/cost.ts +78 -0
  101. package/src/defaults.test.ts +1 -0
  102. package/src/discover.test.ts +48 -7
  103. package/src/discover.ts +31 -21
  104. package/src/env.test.ts +38 -48
  105. package/src/env.ts +43 -40
  106. package/src/errors.test.ts +148 -0
  107. package/src/errors.ts +208 -0
  108. package/src/index.ts +30 -8
  109. package/src/lexicon-guard.test.ts +6 -6
  110. package/src/notices.ts +22 -0
  111. package/src/ollama.test.ts +64 -0
  112. package/src/ollama.ts +6 -3
  113. package/src/openai.ts +3 -0
  114. package/src/promptTokens.ts +41 -0
  115. package/src/sdkModels.test.ts +29 -3
  116. package/src/sdkModels.ts +19 -11
  117. package/src/types.ts +125 -64
  118. package/src/usage.test.ts +24 -5
  119. package/src/usage.ts +72 -21
  120. package/src/warnings.test.ts +10 -10
  121. package/src/warnings.ts +0 -0
  122. package/dist/OpenAICompat.d.ts +0 -76
  123. package/dist/OpenAICompat.d.ts.map +0 -1
  124. package/dist/OpenAICompat.js +0 -555
  125. package/dist/OpenAICompat.js.map +0 -1
  126. package/dist/openaiStream.d.ts +0 -47
  127. package/dist/openaiStream.d.ts.map +0 -1
  128. package/dist/openaiStream.js +0 -280
  129. package/dist/openaiStream.js.map +0 -1
  130. package/dist/standardProviders.d.ts +0 -31
  131. package/dist/standardProviders.d.ts.map +0 -1
  132. package/dist/standardProviders.js +0 -518
  133. package/dist/standardProviders.js.map +0 -1
  134. package/dist/telemetry.d.ts +0 -24
  135. package/dist/telemetry.d.ts.map +0 -1
  136. package/dist/telemetry.js +0 -85
  137. package/dist/telemetry.js.map +0 -1
  138. package/src/telemetry.test.ts +0 -69
  139. package/src/telemetry.ts +0 -116
@@ -0,0 +1,10 @@
1
+ export type ProviderNoticeKind = "grammar_unenforced";
2
+ export interface ProviderNotice {
3
+ readonly source: string;
4
+ readonly kind: ProviderNoticeKind;
5
+ readonly level: "warn";
6
+ readonly message: string;
7
+ readonly position: number | null;
8
+ }
9
+ export declare const providerSource: (vendor: string) => string;
10
+ //# sourceMappingURL=notices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notices.d.ts","sourceRoot":"","sources":["../src/notices.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAKtD,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,eAAO,MAAM,cAAc,WAAY,MAAM,KAAG,MAQ/C,CAAC"}
@@ -0,0 +1,11 @@
1
+ export const providerSource = (vendor) => {
2
+ const raw = vendor.startsWith("provider:") ? vendor.slice("provider:".length) : vendor;
3
+ const normalized = raw
4
+ .toLowerCase()
5
+ .replace(/[^a-z0-9-]+/g, "-")
6
+ .replace(/^-+|-+$/g, "");
7
+ if (normalized.length === 0)
8
+ throw new TypeError("provider source must name a provider");
9
+ return `provider:${/^[a-z]/.test(normalized) ? normalized : `p-${normalized}`}`;
10
+ };
11
+ //# sourceMappingURL=notices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notices.js","sourceRoot":"","sources":["../src/notices.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAU,EAAE;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACvF,MAAM,UAAU,GAAG,GAAG;SACjB,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC7B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IACzF,OAAO,YAAY,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,EAAE,CAAC;AACpF,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA6B5D,eAAO,MAAM,qBAAqB,QACzB,MAAM,CAAC,UAAU,SACf,MAAM,YACH,eAAe,KAC1B,OAAO,CAAC,QAAQ,CA0BlB,CAAC"}
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA6B5D,eAAO,MAAM,qBAAqB,QACzB,MAAM,CAAC,UAAU,SACf,MAAM,YACH,eAAe,KAC1B,OAAO,CAAC,QAAQ,CA6BlB,CAAC"}
package/dist/ollama.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
2
- import { contextWindowFromEnv, parseRequiredInt, requireEnv } from "./env.js";
2
+ import { contextWindowFromEnv, effectiveContextWindow, parseRequiredInt, requireEnv } from "./env.js";
3
3
  import { providerFromSdkModel } from "./catalogProvider.js";
4
4
  const fetchContextWindow = async ({ baseUrl, model, timeout, }) => {
5
5
  const response = await fetch(`${baseUrl}/api/show`, {
@@ -21,8 +21,8 @@ export const ollamaProviderFromEnv = async (env, model, options) => {
21
21
  const configured = options?.baseUrl ?? env.OLLAMA_BASE_URL ?? env.OLLAMA_HOST;
22
22
  const baseUrl = requireEnv(configured, "OLLAMA_BASE_URL or OLLAMA_HOST (or a PLURNK_BASEURL_<alias> override)", "ollama").replace(/\/+$/, "").replace(/\/v1$/, "");
23
23
  const timeout = parseRequiredInt(env.PLURNK_PROVIDERS_FETCH_TIMEOUT, "PLURNK_PROVIDERS_FETCH_TIMEOUT", "ollama");
24
- const contextWindow = contextWindowFromEnv(env, "ollama")
25
- ?? await fetchContextWindow({ baseUrl, model, timeout });
24
+ // {§model-fact-resolution}
25
+ const contextWindow = effectiveContextWindow(contextWindowFromEnv(env, "ollama"), await fetchContextWindow({ baseUrl, model, timeout }));
26
26
  const languageModel = createOpenAICompatible({
27
27
  name: "ollama",
28
28
  baseURL: `${baseUrl}/v1`,
@@ -1 +1 @@
1
- {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAO5D,MAAM,kBAAkB,GAAG,KAAK,EAAE,EAC9B,OAAO,EACP,KAAK,EACL,OAAO,GAKV,EAAmB,EAAE;IAClB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,WAAW,EAAE;QAChD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;QAC/B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;KACvC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5F,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAkB,CAAC;IACnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,IAAI,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAChG,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,+DAA+D,KAAK,GAAG,CAAC,CAAC;AAC7F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACtC,GAAsB,EACtB,KAAa,EACb,OAAyB,EACR,EAAE;IACnB,MAAM,UAAU,GAAG,OAAO,EAAE,OAAO,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,WAAW,CAAC;IAC9E,MAAM,OAAO,GAAG,UAAU,CACtB,UAAU,EACV,uEAAuE,EACvE,QAAQ,CACX,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,gBAAgB,CAC5B,GAAG,CAAC,8BAA8B,EAClC,gCAAgC,EAChC,QAAQ,CACX,CAAC;IACF,MAAM,aAAa,GAAG,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC;WAClD,MAAM,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,sBAAsB,CAAC;QACzC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,GAAG,OAAO,KAAK;QACxB,YAAY,EAAE,IAAI;KACrB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,oBAAoB,CAAC;QACxB,IAAI,EAAE,QAAQ;QACd,GAAG;QACH,KAAK;QACL,aAAa;QACb,aAAa;KAChB,CAAC,CAAC;AACP,CAAC,CAAC"}
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAO5D,MAAM,kBAAkB,GAAG,KAAK,EAAE,EAC9B,OAAO,EACP,KAAK,EACL,OAAO,GAKV,EAAmB,EAAE;IAClB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,WAAW,EAAE;QAChD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;QAC/B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;KACvC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5F,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAkB,CAAC;IACnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,IAAI,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAChG,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,+DAA+D,KAAK,GAAG,CAAC,CAAC;AAC7F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACtC,GAAsB,EACtB,KAAa,EACb,OAAyB,EACR,EAAE;IACnB,MAAM,UAAU,GAAG,OAAO,EAAE,OAAO,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,WAAW,CAAC;IAC9E,MAAM,OAAO,GAAG,UAAU,CACtB,UAAU,EACV,uEAAuE,EACvE,QAAQ,CACX,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,gBAAgB,CAC5B,GAAG,CAAC,8BAA8B,EAClC,gCAAgC,EAChC,QAAQ,CACX,CAAC;IACF,2BAA2B;IAC3B,MAAM,aAAa,GAAG,sBAAsB,CACxC,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,EACnC,MAAM,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CACxD,CAAC;IACF,MAAM,aAAa,GAAG,sBAAsB,CAAC;QACzC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,GAAG,OAAO,KAAK;QACxB,YAAY,EAAE,IAAI;KACrB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,oBAAoB,CAAC;QACxB,IAAI,EAAE,QAAQ;QACd,GAAG;QACH,KAAK;QACL,aAAa;QACb,aAAa;KAChB,CAAC,CAAC;AACP,CAAC,CAAC"}
package/dist/openai.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { default as AiSdkProvider, effortFromBudget } from "./AiSdkProvider.ts";
2
2
  export type { AiSdkProviderConfig, GrammarStyle, ProviderFetch, ReasoningStyle } from "./AiSdkProvider.ts";
3
- export type { ChatMessage, FinishReason, Provider, ProviderAssistant, ProviderResponse, ProviderUsage, TokenAlternative, TokenLogprob, } from "./types.ts";
3
+ export type { ChatMessage, FinishReason, Provider, ProviderAssistant, ProviderAttempt, ProviderAttemptFinishReason, ProviderResponse, ProviderUsage, PromptTokenMeasurement, TokenAlternative, TokenLogprob, } from "./types.ts";
4
4
  //# sourceMappingURL=openai.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAChF,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3G,YAAY,EACR,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,YAAY,GACf,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAChF,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3G,YAAY,EACR,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC3B,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,GACf,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ChatMessage, PromptTokenMeasurement } from "./types.ts";
2
+ export declare const assertPromptTokenMeasurement: (value: unknown, owner?: string) => PromptTokenMeasurement;
3
+ export declare const estimatePromptTokens: (messages: readonly ChatMessage[], detail?: string) => PromptTokenMeasurement;
4
+ //# sourceMappingURL=promptTokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptTokens.d.ts","sourceRoot":"","sources":["../src/promptTokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAQtE,eAAO,MAAM,4BAA4B,UAC9B,OAAO,qBAEf,sBAmBF,CAAC;AAEF,eAAO,MAAM,oBAAoB,aACnB,SAAS,WAAW,EAAE,sBAEjC,sBAKD,CAAC"}
@@ -0,0 +1,32 @@
1
+ const KINDS = new Set([
2
+ "exact",
3
+ "upper_bound",
4
+ "estimate",
5
+ ]);
6
+ export const assertPromptTokenMeasurement = (value, owner = "provider") => {
7
+ if (typeof value !== "object" || value === null) {
8
+ throw new TypeError(`${owner}: prompt token measurement must be an object`);
9
+ }
10
+ const candidate = value;
11
+ if (!KINDS.has(candidate.kind)) {
12
+ throw new TypeError(`${owner}: prompt token measurement has invalid kind ${JSON.stringify(candidate.kind)}`);
13
+ }
14
+ if (!Number.isInteger(candidate.tokens) || candidate.tokens < 0) {
15
+ throw new TypeError(`${owner}: prompt token measurement tokens must be a non-negative integer`);
16
+ }
17
+ if (typeof candidate.source !== "string" || candidate.source.length === 0) {
18
+ throw new TypeError(`${owner}: prompt token measurement source must be a non-empty string`);
19
+ }
20
+ if (candidate.kind === "estimate"
21
+ && (typeof candidate.detail !== "string" || candidate.detail.length === 0)) {
22
+ throw new TypeError(`${owner}: estimated prompt token measurement requires detail`);
23
+ }
24
+ return value;
25
+ };
26
+ export const estimatePromptTokens = (messages, detail = "chars/2 over message content; provider request framing is unknown") => ({
27
+ kind: "estimate",
28
+ tokens: Math.ceil(messages.reduce((sum, { content }) => sum + content.length, 0) / 2),
29
+ source: "heuristic:chars2",
30
+ detail,
31
+ });
32
+ //# sourceMappingURL=promptTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptTokens.js","sourceRoot":"","sources":["../src/promptTokens.ts"],"names":[],"mappings":"AAEA,MAAM,KAAK,GAAG,IAAI,GAAG,CAAiC;IAClD,OAAO;IACP,aAAa;IACb,UAAU;CACb,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CACxC,KAAc,EACd,KAAK,GAAG,UAAU,EACI,EAAE;IACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,8CAA8C,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,SAAS,GAAG,KAAwC,CAAC;IAC3D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAsC,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,+CAA+C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAO,GAAG,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,kEAAkE,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,8DAA8D,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU;WAC1B,CAAC,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,sDAAsD,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,KAA+B,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,QAAgC,EAChC,MAAM,GAAG,mEAAmE,EACtD,EAAE,CAAC,CAAC;IAC1B,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACrF,MAAM,EAAE,kBAAkB;IAC1B,MAAM;CACT,CAAC,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import { type ProviderInfo } from "@plurnk/plurnk-models";
2
2
  import type { LanguageModel } from "ai";
3
+ import type { AuthoritativeChargeNormalizer } from "./types.ts";
3
4
  export type SdkModel = {
4
5
  readonly languageModel?: LanguageModel;
6
+ readonly normalizeCharge?: AuthoritativeChargeNormalizer;
5
7
  readonly compatible?: {
6
8
  readonly url: string;
7
9
  readonly headers: Readonly<Record<string, string>>;
@@ -1 +1 @@
1
- {"version":3,"file":"sdkModels.d.ts","sourceRoot":"","sources":["../src/sdkModels.ts"],"names":[],"mappings":"AAUA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,MAAM,MAAM,QAAQ,GAAG;IACnB,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE;QAClB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;KACtD,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CACzC,CAAC;AAKF,eAAO,MAAM,sBAAsB,aACrB,MAAM,OACX,MAAM,CAAC,UAAU,KACvB,YAAY,GAAG,IAejB,CAAC;AA6DF,eAAO,MAAM,cAAc,aACb,MAAM,SACT,MAAM,OACR,MAAM,CAAC,UAAU,oBACJ,MAAM,KACzB,QAAQ,GAAG,IAoFb,CAAC"}
1
+ {"version":3,"file":"sdkModels.d.ts","sourceRoot":"","sources":["../src/sdkModels.ts"],"names":[],"mappings":"AASA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,MAAM,QAAQ,GAAG;IACnB,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,6BAA6B,CAAC;IACzD,QAAQ,CAAC,UAAU,CAAC,EAAE;QAClB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;KACtD,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CACzC,CAAC;AAKF,eAAO,MAAM,sBAAsB,aACrB,MAAM,OACX,MAAM,CAAC,UAAU,KACvB,YAAY,GAAG,IAejB,CAAC;AAuDF,eAAO,MAAM,cAAc,aACb,MAAM,SACT,MAAM,OACR,MAAM,CAAC,UAAU,oBACJ,MAAM,KACzB,QAAQ,GAAG,IAgGb,CAAC"}
package/dist/sdkModels.js CHANGED
@@ -6,9 +6,9 @@ import { createGroq } from "@ai-sdk/groq";
6
6
  import { createMistral } from "@ai-sdk/mistral";
7
7
  import { createOpenAI } from "@ai-sdk/openai";
8
8
  import { createTogetherAI } from "@ai-sdk/togetherai";
9
- import { createXai } from "@ai-sdk/xai";
10
9
  import { createOpenRouter } from "@openrouter/ai-sdk-provider";
11
10
  import { lookupProvider } from "@plurnk/plurnk-models";
11
+ import { authoritativeChargeNormalizer } from "./accounting.js";
12
12
  const envPrefix = (provider) => provider.replaceAll(/[^a-zA-Z0-9]/g, "_").toUpperCase();
13
13
  export const configuredProviderInfo = (provider, env) => {
14
14
  const prefix = `PLURNK_PROVIDERS_PROVIDER_${envPrefix(provider)}`;
@@ -56,7 +56,6 @@ const baseUrl = (provider, env, catalog, override) => {
56
56
  const value = override ?? configured;
57
57
  return value === undefined ? undefined : expandEnv(value, env, provider).replace(/\/+$/, "");
58
58
  };
59
- const apiKey = (provider, env, catalog) => firstSet(env, configuredKeyNames(provider, env, catalog));
60
59
  const requireApiKey = (provider, env, catalog) => {
61
60
  const names = configuredKeyNames(provider, env, catalog);
62
61
  const key = firstSet(env, names);
@@ -69,6 +68,7 @@ export const createSdkModel = (provider, model, env, baseUrlOverride) => {
69
68
  if (catalog === null)
70
69
  return null;
71
70
  const url = baseUrl(provider, env, catalog, baseUrlOverride);
71
+ const normalizeCharge = authoritativeChargeNormalizer(catalog.npm);
72
72
  switch (catalog.npm) {
73
73
  case "@ai-sdk/openai":
74
74
  return {
@@ -93,6 +93,7 @@ export const createSdkModel = (provider, model, env, baseUrlOverride) => {
93
93
  case "@ai-sdk/deepinfra":
94
94
  return {
95
95
  languageModel: createDeepInfra({ apiKey: requireApiKey(provider, env, catalog), baseURL: url }).languageModel(model),
96
+ ...(normalizeCharge === undefined ? {} : { normalizeCharge }),
96
97
  catalog,
97
98
  };
98
99
  case "@ai-sdk/google":
@@ -100,11 +101,18 @@ export const createSdkModel = (provider, model, env, baseUrlOverride) => {
100
101
  languageModel: createGoogle({ apiKey: requireApiKey(provider, env, catalog), baseURL: url }).languageModel(model),
101
102
  catalog,
102
103
  };
103
- case "@ai-sdk/xai":
104
+ case "@ai-sdk/xai": {
105
+ const key = requireApiKey(provider, env, catalog);
106
+ const compatibleBase = url ?? "https://api.x.ai/v1";
104
107
  return {
105
- languageModel: createXai({ apiKey: requireApiKey(provider, env, catalog), baseURL: url }).languageModel(model),
108
+ compatible: {
109
+ url: `${compatibleBase}/chat/completions`,
110
+ headers: { Authorization: `Bearer ${key}` },
111
+ },
112
+ ...(normalizeCharge === undefined ? {} : { normalizeCharge }),
106
113
  catalog,
107
114
  };
115
+ }
108
116
  case "@ai-sdk/anthropic":
109
117
  return {
110
118
  languageModel: createAnthropic({ apiKey: requireApiKey(provider, env, catalog), baseURL: url }).languageModel(model),
@@ -132,17 +140,20 @@ export const createSdkModel = (provider, model, env, baseUrlOverride) => {
132
140
  ...(env.OPENROUTER_X_TITLE === undefined ? {} : { "X-Title": env.OPENROUTER_X_TITLE }),
133
141
  },
134
142
  }).languageModel(model),
143
+ ...(normalizeCharge === undefined ? {} : { normalizeCharge }),
135
144
  catalog,
136
145
  };
137
146
  case "@ai-sdk/openai-compatible":
138
147
  if (url === undefined)
139
148
  throw new Error(`${provider} provider: Models.dev supplies no API URL and no base URL was configured`);
149
+ const keyNames = configuredKeyNames(provider, env, catalog);
150
+ const key = keyNames.length === 0 ? undefined : requireApiKey(provider, env, catalog);
140
151
  return {
141
152
  compatible: {
142
153
  url: `${url}/chat/completions`,
143
- headers: apiKey(provider, env, catalog) === undefined
154
+ headers: key === undefined
144
155
  ? {}
145
- : { Authorization: `Bearer ${apiKey(provider, env, catalog)}` },
156
+ : { Authorization: `Bearer ${key}` },
146
157
  },
147
158
  catalog,
148
159
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sdkModels.js","sourceRoot":"","sources":["../src/sdkModels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdkModels.js","sourceRoot":"","sources":["../src/sdkModels.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,9 +1,21 @@
1
- import type { TelemetryEvent } from "./telemetry.ts";
1
+ import type { ProviderNotice } from "./notices.ts";
2
2
  import type { LanguageModel } from "ai";
3
+ import type { PluginAttribution, PluginAttributionContext, PluginAttributionSource } from "@plurnk/plurnk-meta";
4
+ import type { ProviderCost } from "@plurnk/plurnk-contracts";
3
5
  export interface ChatMessage {
4
6
  role: "system" | "user" | "assistant";
5
7
  content: string;
6
8
  }
9
+ export type PromptTokenMeasurement = {
10
+ readonly kind: "exact" | "upper_bound";
11
+ readonly tokens: number;
12
+ readonly source: string;
13
+ } | {
14
+ readonly kind: "estimate";
15
+ readonly tokens: number;
16
+ readonly source: string;
17
+ readonly detail: string;
18
+ };
7
19
  export interface ProviderUsage {
8
20
  readonly prompt: number;
9
21
  readonly completion: number;
@@ -11,7 +23,20 @@ export interface ProviderUsage {
11
23
  readonly cached: number;
12
24
  readonly total: number;
13
25
  }
26
+ export type AuthoritativeCharge = Extract<ProviderCost, {
27
+ kind: "authoritative";
28
+ }>;
29
+ export interface ProviderChargeEvidence {
30
+ readonly providerMetadata?: unknown;
31
+ readonly usage?: unknown;
32
+ readonly response: {
33
+ readonly id: string;
34
+ readonly headers?: Readonly<Record<string, string>>;
35
+ };
36
+ }
37
+ export type AuthoritativeChargeNormalizer = (evidence: ProviderChargeEvidence) => AuthoritativeCharge | undefined;
14
38
  export type FinishReason = "stop" | "length" | "tool_calls" | "content_filter" | null;
39
+ export type ProviderAttemptFinishReason = FinishReason | "resource_interrupted";
15
40
  export interface TokenAlternative {
16
41
  readonly token: string;
17
42
  readonly logprob: number;
@@ -21,31 +46,41 @@ export interface TokenLogprob {
21
46
  readonly logprob: number;
22
47
  readonly top?: readonly TokenAlternative[];
23
48
  }
24
- export interface ProviderAssistant {
49
+ export interface ProviderEncryptedReasoningItem {
50
+ readonly id: string | null;
51
+ readonly subtype: string;
52
+ readonly encrypted: ReadonlyArray<{
53
+ data: string;
54
+ format: string | null;
55
+ }>;
56
+ }
57
+ export interface ProviderAssistant<TFinish extends ProviderAttemptFinishReason = FinishReason> {
25
58
  readonly content: string;
26
59
  readonly reasoning: string | null;
27
- readonly reasoningEncrypted?: ReadonlyArray<{
28
- id: string | null;
29
- subtype: string;
30
- encrypted: ReadonlyArray<{
31
- data: string;
32
- format: string | null;
33
- }>;
34
- }>;
60
+ readonly reasoningEncrypted?: ReadonlyArray<ProviderEncryptedReasoningItem>;
35
61
  readonly usage: ProviderUsage;
36
- readonly finishReason: FinishReason;
62
+ readonly finishReason: TFinish;
37
63
  readonly model: string;
38
64
  readonly logprobs?: readonly TokenLogprob[];
39
65
  readonly meanLogprob?: number;
40
66
  }
41
- export interface ProviderResponse {
42
- readonly assistant: ProviderAssistant;
67
+ export interface GrammarEvidence {
68
+ readonly input: string;
69
+ readonly contentStart: number;
70
+ readonly transported: boolean;
71
+ }
72
+ export interface ProviderResponse<TFinish extends ProviderAttemptFinishReason = FinishReason> {
73
+ readonly assistant: ProviderAssistant<TFinish>;
43
74
  readonly assistantRaw: unknown;
75
+ readonly charge?: AuthoritativeCharge;
76
+ readonly grammarEvidence?: GrammarEvidence;
44
77
  readonly meta?: Record<string, unknown>;
45
78
  readonly rawBody?: unknown;
46
- readonly telemetry?: readonly TelemetryEvent[];
79
+ readonly notices?: readonly ProviderNotice[];
47
80
  }
81
+ export type ProviderAttempt = ProviderResponse<ProviderAttemptFinishReason>;
48
82
  export interface Provider {
83
+ attributions?(context: PluginAttributionContext): PluginAttribution;
49
84
  generate(args: {
50
85
  messages: ChatMessage[];
51
86
  workerId: string;
@@ -68,14 +103,15 @@ export interface Provider {
68
103
  readonly requiresMaxTokens?: boolean;
69
104
  readonly reasoningReserve?: number | null;
70
105
  readonly completionReserve?: number | null;
71
- countTokens(text: string): number;
106
+ countPromptTokens(messages: readonly ChatMessage[], signal?: AbortSignal): Promise<PromptTokenMeasurement>;
72
107
  tokenize?(text: string): Promise<number[]>;
73
108
  calculateCost(usage: ProviderUsage): number;
109
+ calculateCharge?(usage: ProviderUsage): Exclude<ProviderCost, AuthoritativeCharge>;
74
110
  }
75
111
  export interface ProviderOptions {
76
112
  readonly baseUrl?: string;
77
113
  }
78
- export interface AiSdkProviderPlugin {
114
+ export interface AiSdkProviderPlugin extends PluginAttributionSource {
79
115
  languageModel(model: string): LanguageModel;
80
116
  }
81
117
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // Provider transport contract. Providers return raw wire-level output —
2
- // content unparsed (consumer parses via @plurnk/plurnk-grammar), reasoning
2
+ // content unparsed (consumer parses via @plurnk/plurnk-contracts), reasoning
3
3
  // is the wire-reported CoT only.
4
4
  export {};
5
5
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,iCAAiC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,6EAA6E;AAC7E,iCAAiC"}
package/dist/usage.d.ts CHANGED
@@ -4,6 +4,8 @@ export type RawUsage = {
4
4
  completion_tokens?: number;
5
5
  total_tokens?: number;
6
6
  cached_tokens?: number;
7
+ prompt_cache_hit_tokens?: number;
8
+ prompt_cache_miss_tokens?: number;
7
9
  prompt_tokens_details?: {
8
10
  cached_tokens?: number;
9
11
  };
@@ -11,11 +13,13 @@ export type RawUsage = {
11
13
  reasoning_tokens?: number;
12
14
  };
13
15
  };
16
+ export declare const attributeUnitemizedReasoning: (usage: ProviderUsage, reasoningText: string, contentText: string) => ProviderUsage;
14
17
  export declare const normalizeUsage: (raw: RawUsage | null | undefined, reasoningText?: string, contentText?: string) => ProviderUsage;
15
18
  export type TokenRates = {
16
19
  input: number;
17
20
  output: number;
18
21
  cached: number;
19
22
  };
23
+ export declare const calculateCostUsdDecimal: (usage: ProviderUsage, rates: TokenRates) => string;
20
24
  export declare const calculateCostUsd: (usage: ProviderUsage, rates: TokenRates) => number;
21
25
  //# sourceMappingURL=usage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,MAAM,QAAQ,GAAG;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,yBAAyB,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7D,CAAC;AAEF,eAAO,MAAM,cAAc,QAAS,QAAQ,GAAG,IAAI,GAAG,SAAS,mDAAyC,aA2CvG,CAAC;AAGF,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAK3E,eAAO,MAAM,gBAAgB,UAAW,aAAa,SAAS,UAAU,KAAG,MAQ1E,CAAC"}
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,MAAM,QAAQ,GAAG;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,qBAAqB,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,yBAAyB,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7D,CAAC;AAIF,eAAO,MAAM,4BAA4B,UAC9B,aAAa,iBACL,MAAM,eACR,MAAM,KACpB,aAUF,CAAC;AAEF,eAAO,MAAM,cAAc,QAAS,QAAQ,GAAG,IAAI,GAAG,SAAS,mDAAyC,aAyCvG,CAAC;AAGF,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA4B3E,eAAO,MAAM,uBAAuB,UAAW,aAAa,SAAS,UAAU,KAAG,MAWjF,CAAC;AAKF,eAAO,MAAM,gBAAgB,UAAW,aAAa,SAAS,UAAU,KAAG,MAE1E,CAAC"}
package/dist/usage.js CHANGED
@@ -11,12 +11,29 @@
11
11
  // normalizeUsage collapses all three into one invariant (see ProviderUsage):
12
12
  // total = prompt + completion + reasoning; cached ⊆ prompt;
13
13
  // completion EXCLUDES reasoning; billable output = completion + reasoning.
14
+ // Some providers return distinct reasoning text while reporting one combined
15
+ // output count. Attribute that count without disturbing an upstream split.
16
+ export const attributeUnitemizedReasoning = (usage, reasoningText, contentText) => {
17
+ if (usage.reasoning !== 0 || usage.completion === 0 || reasoningText.length === 0)
18
+ return usage;
19
+ const reasoning = contentText.length === 0
20
+ ? usage.completion
21
+ : Math.round(usage.completion * reasoningText.length / (reasoningText.length + contentText.length));
22
+ return {
23
+ ...usage,
24
+ completion: usage.completion - reasoning,
25
+ reasoning,
26
+ };
27
+ };
14
28
  export const normalizeUsage = (raw, reasoningText = "", contentText = "") => {
15
29
  const prompt = raw?.prompt_tokens ?? 0;
16
30
  const completionRaw = raw?.completion_tokens ?? 0;
17
31
  const reportedTotal = raw?.total_tokens ?? 0;
18
32
  // OpenAI nests cached under prompt_tokens_details; others put it top-level.
19
- const cached = raw?.prompt_tokens_details?.cached_tokens ?? raw?.cached_tokens ?? 0;
33
+ const cached = raw?.prompt_tokens_details?.cached_tokens
34
+ ?? raw?.prompt_cache_hit_tokens
35
+ ?? raw?.cached_tokens
36
+ ?? 0;
20
37
  const reasoningDetail = raw?.completion_tokens_details?.reasoning_tokens;
21
38
  let completion;
22
39
  let reasoning;
@@ -26,7 +43,7 @@ export const normalizeUsage = (raw, reasoningText = "", contentText = "") => {
26
43
  // o-series folds it INTO completion_tokens (subset: total = prompt + completion,
27
44
  // so completion must have reasoning subtracted out). xAI/Grok reports it
28
45
  // ADDITIVE to a visible-only completion_tokens (total = prompt + completion +
29
- // reasoning), where subtracting wrongly zeroes the visible output (#28). Tell
46
+ // reasoning), where subtracting wrongly zeroes the visible output. Tell
30
47
  // them apart by the total identity; with no total reported, fall back on the
31
48
  // impossible-subset signal — reasoning can't exceed the completion it's a
32
49
  // subset of.
@@ -40,29 +57,57 @@ export const normalizeUsage = (raw, reasoningText = "", contentText = "") => {
40
57
  // reasoning. Only trust the gap when a total was actually reported.
41
58
  reasoning = reportedTotal > 0 ? Math.max(0, reportedTotal - prompt - completionRaw) : 0;
42
59
  completion = completionRaw;
43
- // Fireworks folds reasoning INTO completion_tokens and itemizes no
44
- // reasoning_tokens, so a turn that shipped only reasoning reads reasoning=0
45
- // though 300k chars of it arrived (#425). When reasoning TEXT came back but
46
- // the reported totals leave no gap, re-split the reported completion by the
47
- // emitted text proportions. Sum-preserving: billable output
48
- // (completion+reasoning) and cost are byte-identical; only the
49
- // visible/reasoning gauge is corrected (pure-reasoning turn -> completion 0).
50
- if (reasoning === 0 && reasoningText.length > 0 && reportedTotal > 0 && completionRaw > 0) {
51
- reasoning = Math.round(completionRaw * reasoningText.length / (reasoningText.length + contentText.length));
52
- completion = completionRaw - reasoning;
53
- }
54
60
  }
55
61
  const total = reportedTotal > 0 ? reportedTotal : prompt + completion + reasoning;
56
- return { prompt, completion, reasoning, cached, total };
62
+ const usage = { prompt, completion, reasoning, cached, total };
63
+ // Fireworks folds reasoning INTO completion_tokens and itemizes no
64
+ // reasoning_tokens. A reported total establishes that completion is an
65
+ // upstream quantity rather than a locally synthesized fallback.
66
+ return reasoningDetail === undefined && reportedTotal > 0
67
+ ? attributeUnitemizedReasoning(usage, reasoningText, contentText)
68
+ : usage;
69
+ };
70
+ const decimalParts = (value) => {
71
+ if (!Number.isFinite(value) || value < 0) {
72
+ throw new TypeError("token rates must be finite non-negative numbers");
73
+ }
74
+ const match = /^(\d+)(?:\.(\d+))?(?:e([+-]?\d+))?$/i.exec(String(value));
75
+ if (match === null)
76
+ throw new TypeError(`cannot represent token rate ${value} as a decimal`);
77
+ const fraction = match[2] ?? "";
78
+ const exponent = Number(match[3] ?? "0");
79
+ const scale = fraction.length - exponent;
80
+ const coefficient = BigInt(`${match[1]}${fraction}`);
81
+ return scale < 0
82
+ ? { coefficient: coefficient * 10n ** BigInt(-scale), scale: 0 }
83
+ : { coefficient, scale };
84
+ };
85
+ const decimalString = (coefficient, scale) => {
86
+ const digits = String(coefficient).padStart(scale + 1, "0");
87
+ if (scale === 0)
88
+ return digits;
89
+ const integer = digits.slice(0, -scale);
90
+ const fraction = digits.slice(-scale).replace(/0+$/, "");
91
+ return fraction.length === 0 ? integer : `${integer}.${fraction}`;
92
+ };
93
+ // Models.dev rates are decimal USD-per-million values. Calculate their
94
+ // projection as decimal arithmetic so ProviderCost preserves the table and
95
+ // exact response counts without binary floating-point artifacts.
96
+ export const calculateCostUsdDecimal = (usage, rates) => {
97
+ const parts = [rates.input, rates.cached, rates.output].map(decimalParts);
98
+ const rateScale = Math.max(...parts.map(({ scale }) => scale));
99
+ const [input, cached, output] = parts.map(({ coefficient, scale }) => coefficient * 10n ** BigInt(rateScale - scale));
100
+ const nonCachedPrompt = Math.max(0, usage.prompt - usage.cached);
101
+ const outputTokens = usage.completion + usage.reasoning;
102
+ const coefficient = BigInt(nonCachedPrompt) * input
103
+ + BigInt(usage.cached) * cached
104
+ + BigInt(outputTokens) * output;
105
+ return decimalString(coefficient, rateScale + 6);
57
106
  };
58
107
  // The one cost formula every provider uses: non-cached prompt at the input
59
108
  // rate, cached prompt at the cache rate, and billable output (completion +
60
109
  // reasoning) at the output rate.
61
110
  export const calculateCostUsd = (usage, rates) => {
62
- const nonCachedPrompt = Math.max(0, usage.prompt - usage.cached);
63
- const output = usage.completion + usage.reasoning;
64
- return (nonCachedPrompt * rates.input
65
- + usage.cached * rates.cached
66
- + output * rates.output) / 1_000_000;
111
+ return Number(calculateCostUsdDecimal(usage, rates));
67
112
  };
68
113
  //# sourceMappingURL=usage.js.map
package/dist/usage.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"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"}
package/dist/warnings.js CHANGED
Binary file
@@ -1 +1 @@
1
- {"version":3,"file":"warnings.js","sourceRoot":"","sources":["../src/warnings.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,gFAAgF;AAChF,gFAAgF;AAChF,iFAAiF;AACjF,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,IAAY,EAAQ,EAAE;IACnE,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IACjC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,cAAc,GAAI,UAEtB,CAAC,OAAO,CAAC;IACX,IAAI,cAAc,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;QAC5C,cAAc,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC;AACL,CAAC,CAAC;AAEF,mFAAmF;AACnF,uCAAuC;AACvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAS,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"warnings.js","sourceRoot":"","sources":["../src/warnings.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,yFAAyF;AACzF,gFAAgF;AAChF,iFAAiF;AACjF,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,IAAY,EAAQ,EAAE;IACnE,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IACjC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,cAAc,GAAI,UAEtB,CAAC,OAAO,CAAC;IACX,IAAI,cAAc,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;QAC5C,cAAc,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC;AACL,CAAC,CAAC;AAEF,mFAAmF;AACnF,uCAAuC;AACvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAS,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC"}