@plurnk/plurnk-providers 1.5.0 → 1.6.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 (89) hide show
  1. package/.env.defaults +36 -22
  2. package/SPEC.md +133 -59
  3. package/dist/AiSdkProvider.d.ts +19 -26
  4. package/dist/AiSdkProvider.d.ts.map +1 -1
  5. package/dist/AiSdkProvider.js +318 -106
  6. package/dist/AiSdkProvider.js.map +1 -1
  7. package/dist/Mock.d.ts +4 -9
  8. package/dist/Mock.d.ts.map +1 -1
  9. package/dist/Mock.js +36 -9
  10. package/dist/Mock.js.map +1 -1
  11. package/dist/Pool.d.ts +2 -21
  12. package/dist/Pool.d.ts.map +1 -1
  13. package/dist/Pool.js +19 -14
  14. package/dist/Pool.js.map +1 -1
  15. package/dist/accounting.d.ts +5 -2
  16. package/dist/accounting.d.ts.map +1 -1
  17. package/dist/accounting.js +100 -16
  18. package/dist/accounting.js.map +1 -1
  19. package/dist/aiSdkTransport.d.ts +9 -2
  20. package/dist/aiSdkTransport.d.ts.map +1 -1
  21. package/dist/aiSdkTransport.js +160 -62
  22. package/dist/aiSdkTransport.js.map +1 -1
  23. package/dist/catalogProvider.d.ts +7 -3
  24. package/dist/catalogProvider.d.ts.map +1 -1
  25. package/dist/catalogProvider.js +30 -24
  26. package/dist/catalogProvider.js.map +1 -1
  27. package/dist/compatibleProvider.d.ts.map +1 -1
  28. package/dist/compatibleProvider.js +18 -7
  29. package/dist/compatibleProvider.js.map +1 -1
  30. package/dist/cost.d.ts +10 -10
  31. package/dist/cost.d.ts.map +1 -1
  32. package/dist/cost.js +90 -42
  33. package/dist/cost.js.map +1 -1
  34. package/dist/env.d.ts +5 -1
  35. package/dist/env.d.ts.map +1 -1
  36. package/dist/env.js +30 -10
  37. package/dist/env.js.map +1 -1
  38. package/dist/errors.d.ts +14 -2
  39. package/dist/errors.d.ts.map +1 -1
  40. package/dist/errors.js +58 -2
  41. package/dist/errors.js.map +1 -1
  42. package/dist/index.d.ts +4 -4
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +3 -2
  45. package/dist/index.js.map +1 -1
  46. package/dist/ollama.js +3 -3
  47. package/dist/ollama.js.map +1 -1
  48. package/dist/sdkModels.d.ts +6 -2
  49. package/dist/sdkModels.d.ts.map +1 -1
  50. package/dist/sdkModels.js +38 -5
  51. package/dist/sdkModels.js.map +1 -1
  52. package/dist/types.d.ts +33 -31
  53. package/dist/types.d.ts.map +1 -1
  54. package/dist/usage.d.ts +21 -5
  55. package/dist/usage.d.ts.map +1 -1
  56. package/dist/usage.js +164 -83
  57. package/dist/usage.js.map +1 -1
  58. package/package.json +7 -6
  59. package/src/AiSdkProvider.test.ts +788 -191
  60. package/src/AiSdkProvider.ts +381 -124
  61. package/src/Mock.test.ts +37 -12
  62. package/src/Mock.ts +45 -14
  63. package/src/Pool.test.ts +19 -6
  64. package/src/Pool.ts +20 -16
  65. package/src/ProviderRegistry.test.ts +16 -11
  66. package/src/accounting.test.ts +58 -22
  67. package/src/accounting.ts +120 -18
  68. package/src/aiSdkTransport.test.ts +42 -49
  69. package/src/aiSdkTransport.ts +174 -62
  70. package/src/boundaries.test.ts +1 -0
  71. package/src/catalogProvider.test.ts +258 -22
  72. package/src/catalogProvider.ts +42 -27
  73. package/src/compatibleProvider.test.ts +6 -3
  74. package/src/compatibleProvider.ts +20 -7
  75. package/src/cost.test.ts +55 -36
  76. package/src/cost.ts +111 -50
  77. package/src/defaults.test.ts +13 -3
  78. package/src/env.test.ts +54 -5
  79. package/src/env.ts +43 -18
  80. package/src/errors.test.ts +47 -2
  81. package/src/errors.ts +67 -3
  82. package/src/index.ts +21 -5
  83. package/src/ollama.test.ts +4 -1
  84. package/src/ollama.ts +3 -3
  85. package/src/sdkModels.test.ts +76 -4
  86. package/src/sdkModels.ts +45 -7
  87. package/src/types.ts +77 -38
  88. package/src/usage.test.ts +112 -116
  89. package/src/usage.ts +209 -93
@@ -1,9 +1,9 @@
1
1
  import { lookupProvider, resolveModel } from "@plurnk/plurnk-models";
2
- import { contextWindowFromEnv, effectiveContextWindow, dataCaptureFromEnv, envelopeFromEnv, parseRequiredFloat, parseRequiredInt, promptCacheKeyFromEnv, reasoningFromEnv, reasoningResponseStyleFromEnv, resolveReserve, } from "./env.js";
2
+ import { contextWindowFromEnv, effectiveContextWindow, dataCaptureFromEnv, envelopeFromEnv, parseRequiredFloat, parseRequiredInt, parseTimeoutMs, cacheAffinityFromEnv, cacheWritePolicyFromEnv, reasoningFromEnv, reasoningResponseStyleFromEnv, resolveReserve, } from "./env.js";
3
3
  import AiSdkProvider from "./AiSdkProvider.js";
4
4
  import { configuredProviderInfo, createSdkModel } from "./sdkModels.js";
5
5
  import { providerSource } from "./notices.js";
6
- import { calculateCostUsd, calculateCostUsdDecimal } from "./usage.js";
6
+ import { estimateProviderCost } from "./cost.js";
7
7
  import { emitWarningOnce } from "./warnings.js";
8
8
  const reasoningStyleFromEnv = (env, name) => {
9
9
  const prefix = name.replaceAll(/[^a-zA-Z0-9]/g, "_").toUpperCase();
@@ -19,8 +19,8 @@ const reasoningStyleFromEnv = (env, name) => {
19
19
  }
20
20
  return value;
21
21
  };
22
- export const providerFromSdkModel = ({ name, env, model, languageModel, normalizeCharge, url, headers, contextWindow, info, attributions, }) => {
23
- emitWarningOnce(`${name} provider: physical prompt counting is a chars/2 estimate; over-policy recovery fails closed without exact or bounded request evidence`, "PLURNK_PROMPT_COUNT_ESTIMATE");
22
+ export const providerFromSdkModel = ({ name, env, model, languageModel, normalizeCost, url, headers, contextWindow, info, attributions, cacheAffinity, systemCacheProviderOptions, reasoningResponseProviderOptions, }) => {
23
+ emitWarningOnce(`${name} provider: request-level prompt counting is a chars/2 estimate; hard context-envelope admission fails closed without exact or bounded evidence`, "PLURNK_PROMPT_COUNT_ESTIMATE");
24
24
  const reasoning = reasoningFromEnv(env, name);
25
25
  const { reasoningReserve: configuredReasoning, completionReserve: configuredCompletion } = envelopeFromEnv(env, name);
26
26
  const completionReserve = "tokens" in configuredCompletion
@@ -40,30 +40,28 @@ export const providerFromSdkModel = ({ name, env, model, languageModel, normaliz
40
40
  const rates = catalogCost === undefined ? null : {
41
41
  input: catalogCost.inputPer1M,
42
42
  output: catalogCost.outputPer1M,
43
- cached: catalogCost.cacheReadPer1M ?? catalogCost.inputPer1M,
43
+ ...(catalogCost.cacheReadPer1M === undefined
44
+ ? {}
45
+ : { cacheRead: catalogCost.cacheReadPer1M }),
46
+ ...(catalogCost.cacheWritePer1M === undefined
47
+ ? {}
48
+ : { cacheWrite: catalogCost.cacheWritePer1M }),
44
49
  };
45
- const calculateCost = rates === null
46
- ? undefined
47
- : (usage) => calculateCostUsd(usage, rates);
48
- const calculateCharge = rates === null
49
- ? () => ({ kind: "unknown", reason: "the response reported no cost and Models.dev has no rate for this model" })
50
- : rates.input === 0 && rates.output === 0 && rates.cached === 0
51
- ? () => ({ kind: "free", source: "Models.dev catalog rates" })
52
- : (usage) => ({
53
- kind: "estimated",
54
- usd: calculateCostUsdDecimal(usage, rates),
55
- source: "Models.dev catalog rates",
56
- });
50
+ const estimateCost = (usage) => estimateProviderCost(usage, rates, "Models.dev catalog rates");
51
+ const affinityEnabled = cacheAffinityFromEnv(env, name);
52
+ const cacheWritePolicy = cacheWritePolicyFromEnv(env, name);
57
53
  return new AiSdkProvider({
58
54
  model,
59
55
  ...(attributions === undefined ? {} : { attributions }),
60
56
  ...(languageModel === undefined ? {} : { languageModel }),
61
- ...(normalizeCharge === undefined ? {} : { normalizeCharge }),
57
+ ...(normalizeCost === undefined ? {} : { normalizeCost }),
62
58
  ...(url === undefined ? {} : { url }),
63
59
  ...(headers === undefined ? {} : { headers: { ...headers } }),
64
60
  contextWindow,
65
- fetchTimeoutMs: parseRequiredInt(env.PLURNK_PROVIDERS_FETCH_TIMEOUT, "PLURNK_PROVIDERS_FETCH_TIMEOUT", name),
66
- streamIdleTimeoutMs: parseRequiredInt(env.PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT, "PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT", name),
61
+ fetchTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_FETCH_TIMEOUT, "PLURNK_PROVIDERS_FETCH_TIMEOUT", name),
62
+ operationTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_OPERATION_TIMEOUT, "PLURNK_PROVIDERS_OPERATION_TIMEOUT", name),
63
+ firstContentTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_FIRST_CONTENT_TIMEOUT, "PLURNK_PROVIDERS_FIRST_CONTENT_TIMEOUT", name),
64
+ streamIdleTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT, "PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT", name),
67
65
  reasoning,
68
66
  reasoningResponseStyle: reasoningResponseStyleFromEnv(env, name),
69
67
  temperature: parseRequiredFloat(env.PLURNK_PROVIDERS_TEMPERATURE, "PLURNK_PROVIDERS_TEMPERATURE", name, 0),
@@ -74,10 +72,15 @@ export const providerFromSdkModel = ({ name, env, model, languageModel, normaliz
74
72
  retryAttempts: parseRequiredInt(env.PLURNK_PROVIDERS_RETRY_ATTEMPTS, "PLURNK_PROVIDERS_RETRY_ATTEMPTS", name),
75
73
  errorDetailLimit: parseRequiredInt(env.PLURNK_PROVIDERS_ERROR_DETAIL_LIMIT, "PLURNK_PROVIDERS_ERROR_DETAIL_LIMIT", name),
76
74
  reasoningStyle: reasoningStyleFromEnv(env, name),
77
- promptCacheKey: url === undefined ? false : promptCacheKeyFromEnv(env, name),
75
+ ...(affinityEnabled && cacheAffinity !== undefined ? { cacheAffinity } : {}),
76
+ ...(cacheWritePolicy === "stable-system" && systemCacheProviderOptions !== undefined
77
+ ? { systemCacheProviderOptions }
78
+ : {}),
79
+ ...(reasoningResponseProviderOptions === undefined
80
+ ? {}
81
+ : { reasoningResponseProviderOptions }),
78
82
  serviceTier: env.PLURNK_PROVIDERS_SERVICE_TIER,
79
- calculateCost,
80
- calculateCharge,
83
+ estimateCost,
81
84
  source: providerSource(name),
82
85
  gbnfDebug: env.PLURNK_PROVIDERS_GBNF_DEBUG !== undefined
83
86
  && env.PLURNK_PROVIDERS_GBNF_DEBUG !== ""
@@ -109,9 +112,12 @@ export const catalogProviderFromEnv = (name, env, model, baseUrlOverride) => {
109
112
  env,
110
113
  model: wireModel,
111
114
  languageModel: sdk.languageModel,
112
- normalizeCharge: sdk.normalizeCharge,
115
+ normalizeCost: sdk.normalizeCost,
113
116
  url: sdk.compatible?.url,
114
117
  headers: sdk.compatible?.headers,
118
+ cacheAffinity: sdk.cacheAffinity,
119
+ systemCacheProviderOptions: sdk.systemCacheProviderOptions,
120
+ reasoningResponseProviderOptions: sdk.reasoningResponseProviderOptions,
115
121
  contextWindow,
116
122
  info,
117
123
  });
@@ -1 +1 @@
1
- {"version":3,"file":"catalogProvider.js","sourceRoot":"","sources":["../src/catalogProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalogProvider.js","sourceRoot":"","sources":["../src/catalogProvider.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"compatibleProvider.d.ts","sourceRoot":"","sources":["../src/compatibleProvider.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA6F3C,eAAO,MAAM,yBAAyB,aACxB,QAAQ,GAAG,QAAQ,OACxB,MAAM,CAAC,UAAU,SACf,MAAM,oBACK,MAAM,KACzB,OAAO,CAAC,QAAQ,CAoGlB,CAAC"}
1
+ {"version":3,"file":"compatibleProvider.d.ts","sourceRoot":"","sources":["../src/compatibleProvider.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAgG3C,eAAO,MAAM,yBAAyB,aACxB,QAAQ,GAAG,QAAQ,OACxB,MAAM,CAAC,UAAU,SACf,MAAM,oBACK,MAAM,KACzB,OAAO,CAAC,QAAQ,CA2GlB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import AiSdkProvider from "./AiSdkProvider.js";
2
- import { contextWindowFromEnv, effectiveContextWindow, dataCaptureFromEnv, envelopeFromEnv, parseOptionalFloat, parseOptionalInt, parseRequiredFloat, parseRequiredInt, promptCacheKeyFromEnv, reasoningFromEnv, reasoningResponseStyleFromEnv, } from "./env.js";
2
+ import { contextWindowFromEnv, effectiveContextWindow, dataCaptureFromEnv, envelopeFromEnv, parseOptionalFloat, parseOptionalInt, parseRequiredFloat, parseRequiredInt, parseTimeoutMs, cacheAffinityFromEnv, cacheWritePolicyFromEnv, reasoningFromEnv, reasoningResponseStyleFromEnv, } from "./env.js";
3
3
  import { providerSource } from "./notices.js";
4
+ import { plurnkCostNormalizer } from "./accounting.js";
4
5
  import { emitWarningOnce } from "./warnings.js";
5
6
  const chatUrl = (provider, env, override) => {
6
7
  const configured = override
@@ -20,7 +21,10 @@ const chatUrl = (provider, env, override) => {
20
21
  const probeModels = async (url, headers, model, timeout) => {
21
22
  const modelsUrl = url.replace(/\/chat\/completions$/, "/models");
22
23
  try {
23
- const response = await fetch(modelsUrl, { headers, signal: AbortSignal.timeout(timeout) });
24
+ const response = await fetch(modelsUrl, {
25
+ headers,
26
+ ...(timeout > 0 ? { signal: AbortSignal.timeout(timeout) } : {}),
27
+ });
24
28
  if (!response.ok)
25
29
  return { nCtx: null, llamaServer: false, servedModel: null, failed: true };
26
30
  const data = await response.json();
@@ -53,7 +57,7 @@ const probeProps = async (url, headers, timeout) => {
53
57
  try {
54
58
  const response = await fetch(url.replace(/\/v1\/chat\/completions$/, "/props"), {
55
59
  headers,
56
- signal: AbortSignal.timeout(timeout),
60
+ ...(timeout > 0 ? { signal: AbortSignal.timeout(timeout) } : {}),
57
61
  });
58
62
  if (!response.ok)
59
63
  return { slotCount: null, eosText: null };
@@ -68,12 +72,17 @@ const probeProps = async (url, headers, timeout) => {
68
72
  }
69
73
  };
70
74
  export const compatibleProviderFromEnv = async (provider, env, model, baseUrlOverride) => {
75
+ // The knobs remain universal and fail hard when malformed, but this local /
76
+ // first-party compatible route declares no vendor cache projection. llama-server
77
+ // already owns slot affinity and the first-party endpoint receives worker metadata.
78
+ cacheAffinityFromEnv(env, provider);
79
+ cacheWritePolicyFromEnv(env, provider);
71
80
  const url = chatUrl(provider, env, baseUrlOverride);
72
81
  const apiKey = provider === "openai" ? env.OPENAI_API_KEY : env.PLURNK_API_KEY;
73
82
  const headers = apiKey === undefined || apiKey.length === 0
74
83
  ? {}
75
84
  : { Authorization: `Bearer ${apiKey}` };
76
- const timeout = parseRequiredInt(env.PLURNK_PROVIDERS_FETCH_TIMEOUT, "PLURNK_PROVIDERS_FETCH_TIMEOUT", provider);
85
+ const timeout = parseTimeoutMs(env.PLURNK_PROVIDERS_FETCH_TIMEOUT, "PLURNK_PROVIDERS_FETCH_TIMEOUT", provider);
77
86
  const attempts = parseRequiredInt(env.PLURNK_PROVIDERS_PROBE_ATTEMPTS, "PLURNK_PROVIDERS_PROBE_ATTEMPTS", provider);
78
87
  const probe = await probeModelsRetrying(url, headers, model, timeout, attempts, parseRequiredInt(env.PLURNK_PROVIDERS_PROBE_DELAY, "PLURNK_PROVIDERS_PROBE_DELAY", provider));
79
88
  const contextWindow = effectiveContextWindow(contextWindowFromEnv(env, provider), probe.nCtx);
@@ -105,7 +114,7 @@ export const compatibleProviderFromEnv = async (provider, env, model, baseUrlOve
105
114
  promptTokensUrl = url.replace(/\/v1\/chat\/completions$/, "/v1/chat/completions/input_tokens");
106
115
  }
107
116
  if (!llamaServer) {
108
- emitWarningOnce(`${provider} provider: physical prompt counting is a chars/2 estimate; over-policy recovery fails closed without exact or bounded request evidence`, "PLURNK_PROMPT_COUNT_ESTIMATE");
117
+ emitWarningOnce(`${provider} provider: request-level prompt counting is a chars/2 estimate; hard context-envelope admission fails closed without exact or bounded evidence`, "PLURNK_PROMPT_COUNT_ESTIMATE");
109
118
  }
110
119
  const { reasoningReserve, completionReserve } = envelopeFromEnv(env, provider);
111
120
  return new AiSdkProvider({
@@ -114,7 +123,9 @@ export const compatibleProviderFromEnv = async (provider, env, model, baseUrlOve
114
123
  headers,
115
124
  contextWindow,
116
125
  fetchTimeoutMs: timeout,
117
- streamIdleTimeoutMs: parseRequiredInt(env.PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT, "PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT", provider),
126
+ operationTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_OPERATION_TIMEOUT, "PLURNK_PROVIDERS_OPERATION_TIMEOUT", provider),
127
+ firstContentTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_FIRST_CONTENT_TIMEOUT, "PLURNK_PROVIDERS_FIRST_CONTENT_TIMEOUT", provider),
128
+ streamIdleTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT, "PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT", provider),
118
129
  reasoning: reasoningFromEnv(env, provider),
119
130
  reasoningResponseStyle: reasoningResponseStyleFromEnv(env, provider),
120
131
  reasoningStyle,
@@ -130,7 +141,6 @@ export const compatibleProviderFromEnv = async (provider, env, model, baseUrlOve
130
141
  tuningFloors: provider !== "plurnk",
131
142
  retryAttempts: parseRequiredInt(env.PLURNK_PROVIDERS_RETRY_ATTEMPTS, "PLURNK_PROVIDERS_RETRY_ATTEMPTS", provider),
132
143
  errorDetailLimit: parseRequiredInt(env.PLURNK_PROVIDERS_ERROR_DETAIL_LIMIT, "PLURNK_PROVIDERS_ERROR_DETAIL_LIMIT", provider),
133
- promptCacheKey: promptCacheKeyFromEnv(env, provider),
134
144
  source: providerSource(provider),
135
145
  grammarStyle,
136
146
  gbnfDebug: env.PLURNK_PROVIDERS_GBNF_DEBUG !== undefined
@@ -138,6 +148,7 @@ export const compatibleProviderFromEnv = async (provider, env, model, baseUrlOve
138
148
  && env.PLURNK_PROVIDERS_GBNF_DEBUG !== "0",
139
149
  ...dataCaptureFromEnv(env, provider),
140
150
  firstPartyMetadata: provider === "plurnk",
151
+ normalizeCost: provider === "plurnk" ? plurnkCostNormalizer : undefined,
141
152
  apiKeyRejectedMessage: provider === "plurnk"
142
153
  ? "PLURNK_API_KEY was rejected by plurnk.ai (invalid or expired)."
143
154
  : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"compatibleProvider.js","sourceRoot":"","sources":["../src/compatibleProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compatibleProvider.js","sourceRoot":"","sources":["../src/compatibleProvider.ts"],"names":[],"mappings":"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"}
package/dist/cost.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import type { AuthoritativeCharge, ProviderUsage } from "./types.ts";
2
- import type { ProviderCost } from "@plurnk/plurnk-contracts";
3
- export declare const validateAuthoritativeCharge: (charge: AuthoritativeCharge) => AuthoritativeCharge;
4
- export declare const validateProviderCost: (cost: ProviderCost) => ProviderCost;
5
- export declare const resolveProviderCost: (charge: AuthoritativeCharge | undefined, current: ProviderCost | undefined) => ProviderCost;
6
- export declare const providerCostUsd: (cost: ProviderCost) => number | null;
7
- export declare const providerCostFor: (provider: {
8
- calculateCharge?(usage: ProviderUsage): Exclude<ProviderCost, AuthoritativeCharge>;
9
- calculateCost(usage: ProviderUsage): number;
10
- }, usage: ProviderUsage, charge?: AuthoritativeCharge) => ProviderCost;
1
+ import type { ChargedCost, ProviderCost, ProviderUsage } from "./types.ts";
2
+ import { type TokenRates } from "./usage.ts";
3
+ export declare const validateDecimal: (value: unknown, name: string) => string;
4
+ export declare const validateChargedCost: (value: unknown) => ChargedCost;
5
+ export declare const validateProviderCost: (value: unknown) => ProviderCost;
6
+ export declare const estimateProviderCost: (usage: ProviderUsage | undefined, rates: TokenRates | null, source: string) => ProviderCost;
7
+ export declare const resolveProviderCost: (direct: ProviderCost | undefined, estimated: ProviderCost) => ProviderCost;
8
+ export declare const providerCostUsd: (cost: ProviderCost) => string | null;
9
+ export declare const addDecimals: (values: readonly string[]) => string;
10
+ export declare const sumProviderCostsUsd: (costs: readonly ProviderCost[]) => string | null;
11
11
  //# sourceMappingURL=cost.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,mBAAmB,EACnB,aAAa,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAe7D,eAAO,MAAM,2BAA2B,WAAY,mBAAmB,KAAG,mBASzE,CAAC;AAEF,eAAO,MAAM,oBAAoB,SAAU,YAAY,KAAG,YAezD,CAAC;AAEF,eAAO,MAAM,mBAAmB,WACpB,mBAAmB,GAAG,SAAS,WAC9B,YAAY,GAAG,SAAS,KAClC,YAOF,CAAC;AAEF,eAAO,MAAM,eAAe,SAAU,YAAY,KAAG,MAAM,GAAG,IAS7D,CAAC;AAEF,eAAO,MAAM,eAAe,aACd;IAAE,eAAe,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;IAAC,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAAA;CAAE,SACtI,aAAa,WACX,mBAAmB,KAC7B,YAGF,CAAC"}
1
+ {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,WAAW,EACX,YAAY,EACZ,aAAa,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAGH,KAAK,UAAU,EAClB,MAAM,YAAY,CAAC;AAmBpB,eAAO,MAAM,eAAe,UAAW,OAAO,QAAQ,MAAM,KAAG,MAK9D,CAAC;AAWF,eAAO,MAAM,mBAAmB,UAAW,OAAO,KAAG,WASpD,CAAC;AAEF,eAAO,MAAM,oBAAoB,UAAW,OAAO,KAAG,YAerD,CAAC;AAEF,eAAO,MAAM,oBAAoB,UACtB,aAAa,GAAG,SAAS,SACzB,UAAU,GAAG,IAAI,UAChB,MAAM,KACf,YAkBF,CAAC;AAEF,eAAO,MAAM,mBAAmB,WACpB,YAAY,GAAG,SAAS,aACrB,YAAY,KACxB,YAE+B,CAAC;AAEnC,eAAO,MAAM,eAAe,SAAU,YAAY,KAAG,MAAM,GAAG,IAY7D,CAAC;AAQF,eAAO,MAAM,WAAW,WAAY,SAAS,MAAM,EAAE,KAAG,MAQvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,UAAW,SAAS,YAAY,EAAE,KAAG,MAAM,GAAG,IAK7E,CAAC"}
package/dist/cost.js CHANGED
@@ -1,61 +1,109 @@
1
+ import { calculateCostUsdDecimal, canonicalDecimal, } from "./usage.js";
1
2
  const DECIMAL = /^(?:0|[1-9]\d*)(?:\.\d+)?$/;
2
3
  const CURRENCY = /^[A-Z][A-Z0-9]{2,11}$/;
4
+ const recordOf = (value, name) => {
5
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
6
+ throw new TypeError(`${name} must be an object`);
7
+ }
8
+ return value;
9
+ };
3
10
  const nonEmpty = (value, name) => {
4
- if (value.trim() === "")
5
- throw new TypeError(`${name} must be non-empty`);
11
+ if (typeof value !== "string" || value.trim() === "") {
12
+ throw new TypeError(`${name} must be a non-empty string`);
13
+ }
6
14
  return value;
7
15
  };
8
- const decimal = (value, name) => {
9
- if (!DECIMAL.test(value))
16
+ export const validateDecimal = (value, name) => {
17
+ if (typeof value !== "string" || !DECIMAL.test(value)) {
10
18
  throw new TypeError(`${name} must be a canonical non-negative decimal string`);
19
+ }
11
20
  return value;
12
21
  };
13
- export const validateAuthoritativeCharge = (charge) => {
14
- if (charge.kind !== "authoritative")
15
- throw new TypeError("provider charge must be authoritative");
16
- decimal(charge.amount.amount, "provider charge amount");
17
- if (!CURRENCY.test(charge.amount.currency)) {
18
- throw new TypeError("provider charge currency must be an uppercase currency code");
22
+ const monetaryAmount = (value, name) => {
23
+ const amount = recordOf(value, name);
24
+ const decimalAmount = validateDecimal(amount.amount, `${name} amount`);
25
+ if (typeof amount.currency !== "string" || !CURRENCY.test(amount.currency)) {
26
+ throw new TypeError(`${name} currency must be an uppercase currency code`);
19
27
  }
20
- decimal(charge.usdEquivalent, "provider charge USD equivalent");
21
- nonEmpty(charge.source, "provider charge source");
22
- return charge;
28
+ return { amount: decimalAmount, currency: amount.currency };
23
29
  };
24
- export const validateProviderCost = (cost) => {
30
+ export const validateChargedCost = (value) => {
31
+ const cost = recordOf(value, "provider charged cost");
32
+ if (cost.kind !== "charged")
33
+ throw new TypeError("provider charged cost kind must be charged");
34
+ monetaryAmount(cost.amount, "provider charged cost");
35
+ if (cost.usdEquivalent !== undefined) {
36
+ validateDecimal(cost.usdEquivalent, "provider charged cost USD equivalent");
37
+ }
38
+ nonEmpty(cost.source, "provider charged cost source");
39
+ return value;
40
+ };
41
+ export const validateProviderCost = (value) => {
42
+ const cost = recordOf(value, "provider cost");
25
43
  switch (cost.kind) {
26
- case "authoritative":
27
- return validateAuthoritativeCharge(cost);
44
+ case "charged":
45
+ return validateChargedCost(value);
28
46
  case "estimated":
29
- decimal(cost.usd, "provider cost estimate");
30
- nonEmpty(cost.source, "provider cost estimate source");
31
- return cost;
32
- case "free":
33
- nonEmpty(cost.source, "provider free source");
34
- return cost;
47
+ monetaryAmount(cost.amount, "provider estimated cost");
48
+ nonEmpty(cost.source, "provider estimated cost source");
49
+ return value;
35
50
  case "unknown":
36
51
  nonEmpty(cost.reason, "provider unknown-cost reason");
37
- return cost;
52
+ return value;
53
+ default:
54
+ throw new TypeError("provider cost kind must be charged, estimated, or unknown");
38
55
  }
39
56
  };
40
- export const resolveProviderCost = (charge, current) => {
41
- if (charge !== undefined)
42
- return validateAuthoritativeCharge(charge);
43
- if (current !== undefined)
44
- return validateProviderCost(current);
45
- return {
46
- kind: "unknown",
47
- reason: "the response reported no cost and Models.dev has no rate for this model",
48
- };
57
+ export const estimateProviderCost = (usage, rates, source) => {
58
+ if (usage === undefined) {
59
+ return { kind: "unknown", reason: "the provider response reported no normalized usage" };
60
+ }
61
+ if (rates === null) {
62
+ return { kind: "unknown", reason: "Models.dev has no complete rate for this model" };
63
+ }
64
+ const usd = calculateCostUsdDecimal(usage, rates);
65
+ return usd === null
66
+ ? {
67
+ kind: "unknown",
68
+ reason: "the provider response omitted a token category with a distinct Models.dev rate",
69
+ }
70
+ : {
71
+ kind: "estimated",
72
+ amount: { amount: usd, currency: "USD" },
73
+ source,
74
+ };
49
75
  };
76
+ export const resolveProviderCost = (direct, estimated) => direct === undefined
77
+ ? validateProviderCost(estimated)
78
+ : validateProviderCost(direct);
50
79
  export const providerCostUsd = (cost) => {
51
- const value = cost.kind === "authoritative"
52
- ? cost.usdEquivalent
53
- : cost.kind === "estimated"
54
- ? cost.usd
55
- : cost.kind === "free"
56
- ? "0"
57
- : null;
58
- return value === null ? null : Number(value);
59
- };
60
- export const providerCostFor = (provider, usage, charge) => resolveProviderCost(charge, provider.calculateCharge?.(usage));
80
+ const validated = validateProviderCost(cost);
81
+ switch (validated.kind) {
82
+ case "charged":
83
+ return validated.amount.currency === "USD"
84
+ ? validated.amount.amount
85
+ : validated.usdEquivalent ?? null;
86
+ case "estimated":
87
+ return validated.amount.currency === "USD" ? validated.amount.amount : null;
88
+ case "unknown":
89
+ return null;
90
+ }
91
+ };
92
+ const decimalParts = (value) => {
93
+ validateDecimal(value, "decimal amount");
94
+ const [integer, fraction = ""] = value.split(".");
95
+ return { coefficient: BigInt(`${integer}${fraction}`), scale: fraction.length };
96
+ };
97
+ export const addDecimals = (values) => {
98
+ const parts = values.map(decimalParts);
99
+ const scale = Math.max(0, ...parts.map((part) => part.scale));
100
+ const coefficient = parts.reduce((sum, part) => sum + part.coefficient * 10n ** BigInt(scale - part.scale), 0n);
101
+ return canonicalDecimal(coefficient, scale);
102
+ };
103
+ export const sumProviderCostsUsd = (costs) => {
104
+ const values = costs.map(providerCostUsd);
105
+ return values.some((value) => value === null)
106
+ ? null
107
+ : addDecimals(values);
108
+ };
61
109
  //# sourceMappingURL=cost.js.map
package/dist/cost.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"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"}
package/dist/env.d.ts CHANGED
@@ -1,9 +1,13 @@
1
1
  export declare const parseRequiredInt: (raw: string | undefined, name: string, label: string) => number;
2
+ export declare const MAX_PROVIDER_TIMEOUT_MS = 2147483647;
3
+ export declare const parseTimeoutMs: (raw: string | undefined, name: string, label: string) => number;
2
4
  export declare const parseOptionalInt: (raw: string | undefined, name: string, label: string) => number | null;
3
5
  export declare const parseRequiredFloat: (raw: string | undefined, name: string, label: string, min: number) => number;
4
6
  export declare const parseOptionalFloat: (raw: string | undefined, name: string, label: string, min: number) => number | null;
5
7
  export declare const requireEnv: (raw: string | undefined, name: string, label: string) => string;
6
- export declare const promptCacheKeyFromEnv: (env: NodeJS.ProcessEnv, label: string) => boolean;
8
+ export type CacheWritePolicy = "off" | "stable-system";
9
+ export declare const cacheAffinityFromEnv: (env: NodeJS.ProcessEnv, label: string) => boolean;
10
+ export declare const cacheWritePolicyFromEnv: (env: NodeJS.ProcessEnv, label: string) => CacheWritePolicy;
7
11
  export declare const dataCaptureFromEnv: (env: NodeJS.ProcessEnv, label: string) => {
8
12
  topLogprobs: number | null;
9
13
  rawBody: boolean;
package/dist/env.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,KAAG,MAKvF,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,KAAG,MAAM,GAAG,IAKhG,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,OAAO,MAAM,KAAG,MAKtG,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,OAAO,MAAM,KAAG,MAAM,GAAG,IAK/G,CAAC;AAEF,eAAO,MAAM,UAAU,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,KAAG,MAGjF,CAAC;AAEF,eAAO,MAAM,qBAAqB,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,KAAG,OAO7E,CAAC;AAoBF,eAAO,MAAM,kBAAkB,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,KAAG;IAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CASxH,CAAC;AAIF,eAAO,MAAM,oBAAoB,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,KAAG,MAAM,GAAG,IAGrF,CAAC;AAIF,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;AAClG,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;AAmBhH,MAAM,MAAM,WAAW,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAenE,eAAO,MAAM,eAAe,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,KAAG;IAAE,gBAAgB,EAAE,WAAW,CAAC;IAAC,iBAAiB,EAAE,WAAW,CAAA;CAGrI,CAAC;AAIH,eAAO,MAAM,cAAc,SAAU,WAAW,UAAU,MAAM,GAAG,IAAI,KAAG,MAAM,GAAG,IACY,CAAC;AAQhG,eAAO,MAAM,sBAAsB,QAAS,MAAM,CAAC,UAAU,UAAU,MAAM,GAAG,IAAI,KAAG;IAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;CAOzJ,CAAC;AAUF,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC;AACtD,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAEvE,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,YAAY,CAAC;AAE/D,eAAO,MAAM,6BAA6B,QACjC,MAAM,CAAC,UAAU,SACf,MAAM,KACd,sBAQF,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,KAAG,SAcxE,CAAC;AASF,eAAO,MAAM,eAAe,mBA0B1B,CAAC;AAaH,eAAO,MAAM,eAAe,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,UAAS,SAAS,MAAM,EAAE,KAAqB,MAAM,CAAC,UAkB1H,CAAC"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
package/dist/env.js CHANGED
@@ -8,6 +8,14 @@ export const parseRequiredInt = (raw, name, label) => {
8
8
  throw new Error(`${label} provider: ${name} must be a non-negative integer (got "${raw}")`);
9
9
  return n;
10
10
  };
11
+ export const MAX_PROVIDER_TIMEOUT_MS = 2_147_483_647;
12
+ export const parseTimeoutMs = (raw, name, label) => {
13
+ const timeoutMs = parseRequiredInt(raw, name, label);
14
+ if (timeoutMs > MAX_PROVIDER_TIMEOUT_MS) {
15
+ throw new Error(`${label} provider: ${name} must be at most ${MAX_PROVIDER_TIMEOUT_MS} milliseconds (got "${raw}")`);
16
+ }
17
+ return timeoutMs;
18
+ };
11
19
  export const parseOptionalInt = (raw, name, label) => {
12
20
  if (raw === undefined || raw.length === 0)
13
21
  return null;
@@ -37,14 +45,6 @@ export const requireEnv = (raw, name, label) => {
37
45
  throw new Error(`${label} provider: ${name} must be set`);
38
46
  return raw;
39
47
  };
40
- export const promptCacheKeyFromEnv = (env, label) => {
41
- const name = "PLURNK_PROVIDERS_PROMPT_CACHE_KEY";
42
- const value = env[name];
43
- if (value !== "0" && value !== "1") {
44
- throw new Error(`${label} provider: ${name} must be "0" or "1"`);
45
- }
46
- return value === "1";
47
- };
48
48
  // {§provider-configuration} A still-set retired knob fails
49
49
  // hard pointing at its successor — never silently coexists with the new floor.
50
50
  // The retired names appear ONLY as this function's ARGUMENTS at the call sites
@@ -54,6 +54,23 @@ const shedRenamed = (env, oldName, newName, label, ref) => {
54
54
  if (stale !== undefined && stale.length > 0)
55
55
  throw new Error(`${label} provider: ${oldName} was renamed to ${newName} (${ref}); update the env`);
56
56
  };
57
+ export const cacheAffinityFromEnv = (env, label) => {
58
+ const name = "PLURNK_PROVIDERS_CACHE_AFFINITY";
59
+ shedRenamed(env, "PLURNK_PROVIDERS_PROMPT_CACHE_KEY", name, label, "{§provider-cache-affinity}"); // lexicon-allow
60
+ const value = env[name];
61
+ if (value !== "0" && value !== "1") {
62
+ throw new Error(`${label} provider: ${name} must be "0" or "1"`);
63
+ }
64
+ return value === "1";
65
+ };
66
+ export const cacheWritePolicyFromEnv = (env, label) => {
67
+ const name = "PLURNK_PROVIDERS_CACHE_WRITE_POLICY";
68
+ const value = env[name];
69
+ if (value !== "off" && value !== "stable-system") {
70
+ throw new Error(`${label} provider: ${name} must be "off" or "stable-system"`);
71
+ }
72
+ return value;
73
+ };
57
74
  // {§provider-evidence} Data-capture knobs are read identically by every provider
58
75
  // (standard AND
59
76
  // plugin) so the opt-in surface is one source of truth. Both OFF by default —
@@ -145,7 +162,7 @@ export const reasoningFromEnv = (env, label) => {
145
162
  const capName = "PLURNK_PROVIDERS_REASONING_BUDGET";
146
163
  const capRaw = env[capName];
147
164
  if (capRaw === undefined || capRaw.length === 0)
148
- throw new Error(`${label} provider: ${capName} must be set when ${name}=on`);
165
+ return { mode: "on", budget: null };
149
166
  const n = Number(capRaw);
150
167
  if (!Number.isInteger(n) || n <= 0)
151
168
  throw new Error(`${label} provider: ${capName} must be a positive integer (got "${capRaw}")`);
@@ -167,14 +184,17 @@ export const PROVIDERS_KNOBS = Object.freeze([
167
184
  "PLURNK_PROVIDERS_CONTEXT_WINDOW",
168
185
  "PLURNK_PROVIDERS_RETRY_ATTEMPTS",
169
186
  "PLURNK_PROVIDERS_ERROR_DETAIL_LIMIT",
187
+ "PLURNK_PROVIDERS_OPERATION_TIMEOUT",
170
188
  "PLURNK_PROVIDERS_FETCH_TIMEOUT",
189
+ "PLURNK_PROVIDERS_FIRST_CONTENT_TIMEOUT",
171
190
  "PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT",
172
191
  "PLURNK_PROVIDERS_LLAMA_SERVER",
173
192
  "PLURNK_PROVIDERS_TEMPERATURE",
174
193
  "PLURNK_PROVIDERS_REPEAT_PENALTY",
175
194
  "PLURNK_PROVIDERS_FREQUENCY_PENALTY",
176
195
  "PLURNK_PROVIDERS_SERVICE_TIER",
177
- "PLURNK_PROVIDERS_PROMPT_CACHE_KEY",
196
+ "PLURNK_PROVIDERS_CACHE_WRITE_POLICY",
197
+ "PLURNK_PROVIDERS_CACHE_AFFINITY",
178
198
  "PLURNK_PROVIDERS_REPEAT_LAST_N",
179
199
  "PLURNK_PROVIDERS_DRY_MULTIPLIER",
180
200
  "PLURNK_PROVIDERS_DRY_BASE",