@plurnk/plurnk-providers 1.5.0 → 1.6.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 (105) hide show
  1. package/.env.defaults +41 -34
  2. package/README.md +15 -0
  3. package/SPEC.md +242 -89
  4. package/dist/AiSdkProvider.d.ts +33 -33
  5. package/dist/AiSdkProvider.d.ts.map +1 -1
  6. package/dist/AiSdkProvider.js +442 -133
  7. package/dist/AiSdkProvider.js.map +1 -1
  8. package/dist/Mock.d.ts +10 -11
  9. package/dist/Mock.d.ts.map +1 -1
  10. package/dist/Mock.js +87 -25
  11. package/dist/Mock.js.map +1 -1
  12. package/dist/Pool.d.ts +9 -24
  13. package/dist/Pool.d.ts.map +1 -1
  14. package/dist/Pool.js +86 -25
  15. package/dist/Pool.js.map +1 -1
  16. package/dist/accounting.d.ts +5 -2
  17. package/dist/accounting.d.ts.map +1 -1
  18. package/dist/accounting.js +100 -16
  19. package/dist/accounting.js.map +1 -1
  20. package/dist/accountingPublic.d.ts +5 -0
  21. package/dist/accountingPublic.d.ts.map +1 -0
  22. package/dist/accountingPublic.js +3 -0
  23. package/dist/accountingPublic.js.map +1 -0
  24. package/dist/aiSdkTransport.d.ts +9 -2
  25. package/dist/aiSdkTransport.d.ts.map +1 -1
  26. package/dist/aiSdkTransport.js +160 -62
  27. package/dist/aiSdkTransport.js.map +1 -1
  28. package/dist/capacity.d.ts +26 -0
  29. package/dist/capacity.d.ts.map +1 -0
  30. package/dist/capacity.js +90 -0
  31. package/dist/capacity.js.map +1 -0
  32. package/dist/catalogProvider.d.ts +8 -3
  33. package/dist/catalogProvider.d.ts.map +1 -1
  34. package/dist/catalogProvider.js +45 -41
  35. package/dist/catalogProvider.js.map +1 -1
  36. package/dist/compatibleProvider.d.ts.map +1 -1
  37. package/dist/compatibleProvider.js +26 -12
  38. package/dist/compatibleProvider.js.map +1 -1
  39. package/dist/cost.d.ts +10 -10
  40. package/dist/cost.d.ts.map +1 -1
  41. package/dist/cost.js +90 -42
  42. package/dist/cost.js.map +1 -1
  43. package/dist/env.d.ts +13 -11
  44. package/dist/env.d.ts.map +1 -1
  45. package/dist/env.js +83 -46
  46. package/dist/env.js.map +1 -1
  47. package/dist/errors.d.ts +17 -3
  48. package/dist/errors.d.ts.map +1 -1
  49. package/dist/errors.js +91 -8
  50. package/dist/errors.js.map +1 -1
  51. package/dist/index.d.ts +7 -6
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +5 -3
  54. package/dist/index.js.map +1 -1
  55. package/dist/ollama.js +3 -3
  56. package/dist/ollama.js.map +1 -1
  57. package/dist/promptTokens.d.ts.map +1 -1
  58. package/dist/promptTokens.js +7 -4
  59. package/dist/promptTokens.js.map +1 -1
  60. package/dist/sdkModels.d.ts +7 -2
  61. package/dist/sdkModels.d.ts.map +1 -1
  62. package/dist/sdkModels.js +43 -13
  63. package/dist/sdkModels.js.map +1 -1
  64. package/dist/types.d.ts +55 -33
  65. package/dist/types.d.ts.map +1 -1
  66. package/dist/usage.d.ts +22 -5
  67. package/dist/usage.d.ts.map +1 -1
  68. package/dist/usage.js +169 -83
  69. package/dist/usage.js.map +1 -1
  70. package/package.json +18 -7
  71. package/src/AiSdkProvider.test.ts +964 -206
  72. package/src/AiSdkProvider.ts +545 -155
  73. package/src/Mock.test.ts +69 -30
  74. package/src/Mock.ts +99 -29
  75. package/src/Pool.test.ts +90 -19
  76. package/src/Pool.ts +96 -27
  77. package/src/ProviderRegistry.test.ts +16 -11
  78. package/src/accounting.test.ts +58 -22
  79. package/src/accounting.ts +119 -18
  80. package/src/accountingPublic.ts +9 -0
  81. package/src/aiSdkTransport.test.ts +42 -49
  82. package/src/aiSdkTransport.ts +174 -62
  83. package/src/boundaries.test.ts +2 -0
  84. package/src/capacity.test.ts +92 -0
  85. package/src/capacity.ts +140 -0
  86. package/src/catalogProvider.test.ts +339 -30
  87. package/src/catalogProvider.ts +65 -47
  88. package/src/compatibleProvider.test.ts +7 -5
  89. package/src/compatibleProvider.ts +29 -13
  90. package/src/cost.test.ts +86 -36
  91. package/src/cost.ts +111 -50
  92. package/src/defaults.test.ts +13 -3
  93. package/src/env.test.ts +103 -25
  94. package/src/env.ts +153 -65
  95. package/src/errors.test.ts +80 -2
  96. package/src/errors.ts +107 -8
  97. package/src/index.ts +26 -7
  98. package/src/ollama.test.ts +5 -3
  99. package/src/ollama.ts +3 -3
  100. package/src/promptTokens.ts +8 -5
  101. package/src/sdkModels.test.ts +77 -8
  102. package/src/sdkModels.ts +51 -15
  103. package/src/types.ts +112 -51
  104. package/src/usage.test.ts +112 -116
  105. package/src/usage.ts +214 -93
package/dist/usage.js CHANGED
@@ -1,71 +1,149 @@
1
- // Usage normalization + cost — the shared token-accounting model.
2
- //
3
- // Providers report token usage in two incompatible ways:
4
- // - OpenAI-style: reasoning is a SUBSET of completion_tokens, surfaced via
5
- // completion_tokens_details.reasoning_tokens; total = prompt + completion.
6
- // - Gemini-style: reasoning is OMITTED from completion_tokens and only
7
- // recoverable as total - prompt - completion (no details field at all).
8
- // - Fireworks-style: reasoning ships as TEXT (reasoning_content) but is folded
9
- // into completion_tokens with NO reasoning_tokens itemization -- unrecoverable
10
- // from the numbers alone, so it is re-split from the emitted text lengths.
11
- // normalizeUsage collapses all three into one invariant (see ProviderUsage):
12
- // total = prompt + completion + reasoning; cached ⊆ prompt;
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
- };
1
+ // Provider usage normalization. The public shape follows {§provider-usage}:
2
+ // input/output totals own their optional cache/reasoning details, absence is
3
+ // unknown, and no token category is inferred from text length.
4
+ const knownTokens = (value, name) => {
5
+ if (value === undefined)
6
+ return undefined;
7
+ if (!Number.isSafeInteger(value) || value < 0) {
8
+ throw new TypeError(`${name} must be a non-negative safe integer`);
9
+ }
10
+ return value;
11
+ };
12
+ const nonEmptyDetails = (details) => {
13
+ const entries = Object.entries(details).filter((entry) => entry[1] !== undefined);
14
+ return entries.length === 0 ? undefined : Object.fromEntries(entries);
27
15
  };
28
- export const normalizeUsage = (raw, reasoningText = "", contentText = "") => {
29
- const prompt = raw?.prompt_tokens ?? 0;
30
- const completionRaw = raw?.completion_tokens ?? 0;
31
- const reportedTotal = raw?.total_tokens ?? 0;
32
- // OpenAI nests cached under prompt_tokens_details; others put it top-level.
33
- const cached = raw?.prompt_tokens_details?.cached_tokens
34
- ?? raw?.prompt_cache_hit_tokens
35
- ?? raw?.cached_tokens
36
- ?? 0;
37
- const reasoningDetail = raw?.completion_tokens_details?.reasoning_tokens;
38
- let completion;
39
- let reasoning;
40
- if (reasoningDetail !== undefined) {
41
- reasoning = reasoningDetail;
42
- // reasoning_tokens is reported two incompatible ways when detailed. OpenAI
43
- // o-series folds it INTO completion_tokens (subset: total = prompt + completion,
44
- // so completion must have reasoning subtracted out). xAI/Grok reports it
45
- // ADDITIVE to a visible-only completion_tokens (total = prompt + completion +
46
- // reasoning), where subtracting wrongly zeroes the visible output. Tell
47
- // them apart by the total identity; with no total reported, fall back on the
48
- // impossible-subset signal — reasoning can't exceed the completion it's a
49
- // subset of.
50
- const additive = reportedTotal > 0
51
- ? reportedTotal === prompt + completionRaw + reasoningDetail
52
- : completionRaw < reasoningDetail;
53
- completion = additive ? completionRaw : Math.max(0, completionRaw - reasoningDetail);
16
+ export const validateProviderUsage = (usage) => {
17
+ const input = knownTokens(usage.inputTokens, "provider usage.inputTokens");
18
+ const output = knownTokens(usage.outputTokens, "provider usage.outputTokens");
19
+ const total = knownTokens(usage.totalTokens, "provider usage.totalTokens");
20
+ const inputDetails = usage.inputTokenDetails;
21
+ const outputDetails = usage.outputTokenDetails;
22
+ if (input === undefined && output === undefined && total === undefined
23
+ && inputDetails === undefined && outputDetails === undefined) {
24
+ throw new TypeError("provider usage must contain at least one known quantity");
54
25
  }
55
- else {
56
- // Gemini-style (or no reasoning): tokens beyond prompt+completion are
57
- // reasoning. Only trust the gap when a total was actually reported.
58
- reasoning = reportedTotal > 0 ? Math.max(0, reportedTotal - prompt - completionRaw) : 0;
59
- completion = completionRaw;
26
+ if (input !== undefined && output !== undefined && total !== undefined
27
+ && total !== input + output) {
28
+ throw new TypeError("provider usage.totalTokens must equal inputTokens + outputTokens");
60
29
  }
61
- const total = reportedTotal > 0 ? reportedTotal : prompt + completion + reasoning;
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;
30
+ if (inputDetails !== undefined) {
31
+ const values = [
32
+ knownTokens(inputDetails.noCacheTokens, "provider usage.inputTokenDetails.noCacheTokens"),
33
+ knownTokens(inputDetails.cacheReadTokens, "provider usage.inputTokenDetails.cacheReadTokens"),
34
+ knownTokens(inputDetails.cacheWriteTokens, "provider usage.inputTokenDetails.cacheWriteTokens"),
35
+ ];
36
+ if (values.every((value) => value === undefined)) {
37
+ throw new TypeError("provider usage.inputTokenDetails must contain a known quantity");
38
+ }
39
+ const known = values.filter((value) => value !== undefined);
40
+ if (input !== undefined && known.some((value) => value > input)) {
41
+ throw new TypeError("provider input-token detail must not exceed inputTokens");
42
+ }
43
+ if (input !== undefined && values.every((value) => value !== undefined)
44
+ && known.reduce((sum, value) => sum + value, 0) !== input) {
45
+ throw new TypeError("complete provider input-token details must sum to inputTokens");
46
+ }
47
+ }
48
+ if (outputDetails !== undefined) {
49
+ const values = [
50
+ knownTokens(outputDetails.textTokens, "provider usage.outputTokenDetails.textTokens"),
51
+ knownTokens(outputDetails.reasoningTokens, "provider usage.outputTokenDetails.reasoningTokens"),
52
+ ];
53
+ if (values.every((value) => value === undefined)) {
54
+ throw new TypeError("provider usage.outputTokenDetails must contain a known quantity");
55
+ }
56
+ const known = values.filter((value) => value !== undefined);
57
+ if (output !== undefined && known.some((value) => value > output)) {
58
+ throw new TypeError("provider output-token detail must not exceed outputTokens");
59
+ }
60
+ if (output !== undefined && values.every((value) => value !== undefined)
61
+ && known.reduce((sum, value) => sum + value, 0) !== output) {
62
+ throw new TypeError("complete provider output-token details must sum to outputTokens");
63
+ }
64
+ }
65
+ return usage;
66
+ };
67
+ export const normalizeUsage = (raw) => {
68
+ if (raw === null || raw === undefined)
69
+ return undefined;
70
+ const inputTokens = knownTokens(raw.input_tokens ?? raw.prompt_tokens, "provider usage input tokens");
71
+ const rawOutputTokens = knownTokens(raw.output_tokens ?? raw.completion_tokens, "provider usage output tokens");
72
+ const reportedTotal = knownTokens(raw.total_tokens, "provider usage total tokens");
73
+ const reasoningTokens = knownTokens(raw.output_tokens_details?.reasoning_tokens
74
+ ?? raw.completion_tokens_details?.reasoning_tokens
75
+ ?? raw.reasoning_tokens, "provider usage reasoning tokens");
76
+ let outputTokens = rawOutputTokens;
77
+ let textTokens;
78
+ let normalizedReasoning = reasoningTokens;
79
+ if (inputTokens !== undefined && rawOutputTokens !== undefined && reportedTotal !== undefined) {
80
+ if (reportedTotal === inputTokens + rawOutputTokens) {
81
+ outputTokens = rawOutputTokens;
82
+ if (reasoningTokens !== undefined)
83
+ textTokens = rawOutputTokens - reasoningTokens;
84
+ }
85
+ else if (reasoningTokens !== undefined
86
+ && reportedTotal === inputTokens + rawOutputTokens + reasoningTokens) {
87
+ outputTokens = rawOutputTokens + reasoningTokens;
88
+ textTokens = rawOutputTokens;
89
+ }
90
+ else if (reportedTotal >= inputTokens + rawOutputTokens) {
91
+ outputTokens = reportedTotal - inputTokens;
92
+ normalizedReasoning = outputTokens - rawOutputTokens;
93
+ textTokens = rawOutputTokens;
94
+ }
95
+ else {
96
+ throw new TypeError("provider usage total is inconsistent with input and output tokens");
97
+ }
98
+ }
99
+ else if (rawOutputTokens !== undefined && reasoningTokens !== undefined) {
100
+ if (reasoningTokens > rawOutputTokens) {
101
+ outputTokens = rawOutputTokens + reasoningTokens;
102
+ textTokens = rawOutputTokens;
103
+ }
104
+ else {
105
+ textTokens = rawOutputTokens - reasoningTokens;
106
+ }
107
+ }
108
+ else if (outputTokens === undefined && inputTokens !== undefined && reportedTotal !== undefined) {
109
+ if (reportedTotal < inputTokens) {
110
+ throw new TypeError("provider usage total must not be less than input tokens");
111
+ }
112
+ outputTokens = reportedTotal - inputTokens;
113
+ }
114
+ const totalTokens = reportedTotal
115
+ ?? (inputTokens !== undefined && outputTokens !== undefined
116
+ ? inputTokens + outputTokens
117
+ : undefined);
118
+ const cacheReadTokens = knownTokens(raw.input_tokens_details?.cache_read_tokens
119
+ ?? raw.input_tokens_details?.cached_tokens
120
+ ?? raw.prompt_tokens_details?.cache_read_tokens
121
+ ?? raw.prompt_tokens_details?.cached_tokens
122
+ ?? raw.cache_read_input_tokens
123
+ ?? raw.prompt_cache_hit_tokens
124
+ ?? raw.cached_tokens, "provider usage cache-read tokens");
125
+ const cacheWriteTokens = knownTokens(raw.input_tokens_details?.cache_write_tokens
126
+ ?? raw.prompt_tokens_details?.cache_write_tokens
127
+ ?? raw.cache_creation_input_tokens, "provider usage cache-write tokens");
128
+ const explicitNoCacheTokens = knownTokens(raw.prompt_cache_miss_tokens, "provider usage non-cache tokens");
129
+ const noCacheTokens = explicitNoCacheTokens
130
+ ?? (inputTokens !== undefined && cacheReadTokens !== undefined && cacheWriteTokens !== undefined
131
+ ? inputTokens - cacheReadTokens - cacheWriteTokens
132
+ : undefined);
133
+ const usage = {
134
+ ...(inputTokens === undefined ? {} : { inputTokens }),
135
+ ...(outputTokens === undefined ? {} : { outputTokens }),
136
+ ...(totalTokens === undefined ? {} : { totalTokens }),
137
+ ...(nonEmptyDetails({ noCacheTokens, cacheReadTokens, cacheWriteTokens }) === undefined
138
+ ? {}
139
+ : { inputTokenDetails: nonEmptyDetails({ noCacheTokens, cacheReadTokens, cacheWriteTokens }) }),
140
+ ...(nonEmptyDetails({ textTokens, reasoningTokens: normalizedReasoning }) === undefined
141
+ ? {}
142
+ : { outputTokenDetails: nonEmptyDetails({ textTokens, reasoningTokens: normalizedReasoning }) }),
143
+ };
144
+ if (Object.keys(usage).length === 0)
145
+ return undefined;
146
+ return validateProviderUsage(usage);
69
147
  };
70
148
  const decimalParts = (value) => {
71
149
  if (!Number.isFinite(value) || value < 0) {
@@ -82,7 +160,7 @@ const decimalParts = (value) => {
82
160
  ? { coefficient: coefficient * 10n ** BigInt(-scale), scale: 0 }
83
161
  : { coefficient, scale };
84
162
  };
85
- const decimalString = (coefficient, scale) => {
163
+ export const canonicalDecimal = (coefficient, scale) => {
86
164
  const digits = String(coefficient).padStart(scale + 1, "0");
87
165
  if (scale === 0)
88
166
  return digits;
@@ -90,24 +168,32 @@ const decimalString = (coefficient, scale) => {
90
168
  const fraction = digits.slice(-scale).replace(/0+$/, "");
91
169
  return fraction.length === 0 ? integer : `${integer}.${fraction}`;
92
170
  };
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
171
  export const calculateCostUsdDecimal = (usage, rates) => {
97
- const parts = [rates.input, rates.cached, rates.output].map(decimalParts);
172
+ validateProviderUsage(usage);
173
+ if (usage.inputTokens === undefined || usage.outputTokens === undefined)
174
+ return null;
175
+ const cacheReadRate = rates.cacheRead ?? rates.input;
176
+ const cacheWriteRate = rates.cacheWrite ?? rates.input;
177
+ const reasoningRate = rates.reasoning ?? rates.output;
178
+ const cacheReadTokens = usage.inputTokenDetails?.cacheReadTokens;
179
+ const cacheWriteTokens = usage.inputTokenDetails?.cacheWriteTokens;
180
+ const reasoningTokens = usage.outputTokenDetails?.reasoningTokens;
181
+ if (cacheReadRate !== rates.input && cacheReadTokens === undefined)
182
+ return null;
183
+ if (cacheWriteRate !== rates.input && cacheWriteTokens === undefined)
184
+ return null;
185
+ if (reasoningRate !== rates.output && reasoningTokens === undefined)
186
+ return null;
187
+ const parts = [rates.input, rates.output, reasoningRate, cacheReadRate, cacheWriteRate].map(decimalParts);
98
188
  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);
106
- };
107
- // The one cost formula every provider uses: non-cached prompt at the input
108
- // rate, cached prompt at the cache rate, and billable output (completion +
109
- // reasoning) at the output rate.
110
- export const calculateCostUsd = (usage, rates) => {
111
- return Number(calculateCostUsdDecimal(usage, rates));
189
+ const [input, output, reasoning, cacheRead, cacheWrite] = parts.map(({ coefficient, scale }) => coefficient * 10n ** BigInt(rateScale - scale));
190
+ const coefficient = BigInt(usage.inputTokens) * input
191
+ + BigInt(usage.outputTokens) * output
192
+ + BigInt(reasoningTokens ?? 0) * (reasoning - output)
193
+ + BigInt(cacheReadTokens ?? 0) * (cacheRead - input)
194
+ + BigInt(cacheWriteTokens ?? 0) * (cacheWrite - input);
195
+ if (coefficient < 0n)
196
+ throw new TypeError("provider token-rate details produced a negative estimate");
197
+ return canonicalDecimal(coefficient, rateScale + 6);
112
198
  };
113
199
  //# 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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plurnk/plurnk-providers",
3
- "version": "1.5.0",
3
+ "version": "1.6.1",
4
4
  "description": "PLURNK's stable model-provider contract and AI SDK adapter.",
5
5
  "keywords": [
6
6
  "plurnk",
@@ -37,6 +37,11 @@
37
37
  "types": "./dist/openai.d.ts",
38
38
  "default": "./dist/openai.js"
39
39
  },
40
+ "./accounting": {
41
+ "plurnk-dev": "./src/accountingPublic.ts",
42
+ "types": "./dist/accountingPublic.d.ts",
43
+ "default": "./dist/accountingPublic.js"
44
+ },
40
45
  "./package.json": "./package.json"
41
46
  },
42
47
  "files": [
@@ -51,8 +56,10 @@
51
56
  "test:unit": "node --conditions=plurnk-dev --test src/**/*.test.ts scripts/*.test.mjs",
52
57
  "test:llama": "node --conditions=plurnk-dev --test test/llama/*.test.ts",
53
58
  "test:providersPing": "bash ../scripts/operator-environment.sh node --conditions=plurnk-dev --import=../plurnk-core/test/floor.ts --env-file-if-exists=../plurnk-core/.env.defaults --env-file-if-exists=$HOME/.plurnk/.env --env-file-if-exists=../plurnk-core/.env --env-file-if-exists=../plurnk-core/.env.test scripts/providers-ping.mjs",
59
+ "probe:tokens": "bash ../scripts/operator-environment.sh node --conditions=plurnk-dev --import=../plurnk-core/test/floor.ts --env-file-if-exists=../plurnk-core/.env.defaults --env-file-if-exists=$HOME/.plurnk/.env --env-file-if-exists=../plurnk-core/.env --env-file-if-exists=../plurnk-core/.env.test scripts/token-envelope-probe.mjs",
54
60
  "test": "npm run test:lint && npm run test:unit",
55
- "prepublishOnly": "npm audit --audit-level=moderate && npm test",
61
+ "release:check": "node scripts/accounting-worker-smoke.mjs",
62
+ "prepublishOnly": "npm audit --audit-level=moderate && npm test && npm run build && npm run release:check",
56
63
  "build:clean": "rm -rf dist",
57
64
  "build:dist": "tsc -p tsconfig.build.json",
58
65
  "build": "npm run build:clean && npm run build:dist",
@@ -61,6 +68,7 @@
61
68
  "dependencies": {
62
69
  "@ai-sdk/amazon-bedrock": "^5.0.0",
63
70
  "@ai-sdk/anthropic": "^4.0.0",
71
+ "@ai-sdk/cerebras": "^3.0.0",
64
72
  "@ai-sdk/deepinfra": "^3.0.0",
65
73
  "@ai-sdk/google": "^4.0.0",
66
74
  "@ai-sdk/groq": "^4.0.0",
@@ -70,12 +78,15 @@
70
78
  "@ai-sdk/togetherai": "^3.0.0",
71
79
  "@ai-sdk/xai": "^4.0.0",
72
80
  "@openrouter/ai-sdk-provider": "^3.0.0",
73
- "@plurnk/gbnf": "1.5.0",
74
- "@plurnk/plurnk-aliases": "1.5.0",
75
- "@plurnk/plurnk-contracts": "1.5.0",
76
- "@plurnk/plurnk-meta": "1.5.0",
77
- "@plurnk/plurnk-models": "1.5.0",
81
+ "@plurnk/gbnf": "1.6.1",
82
+ "@plurnk/plurnk-aliases": "1.6.1",
83
+ "@plurnk/plurnk-contracts": "1.6.1",
84
+ "@plurnk/plurnk-meta": "1.6.1",
85
+ "@plurnk/plurnk-models": "1.6.1",
78
86
  "ai": "^7.0.37",
79
87
  "zod": "^3.25.76"
88
+ },
89
+ "devDependencies": {
90
+ "esbuild": "^0.28.2"
80
91
  }
81
92
  }