@copilotkit/aimock 1.45.1 → 1.46.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 (425) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +13 -0
  4. package/README.md +7 -1
  5. package/dist/agui-mock.cjs +25 -25
  6. package/dist/agui-mock.cjs.map +1 -1
  7. package/dist/agui-mock.d.cts.map +1 -1
  8. package/dist/agui-mock.d.ts.map +1 -1
  9. package/dist/agui-mock.js +25 -25
  10. package/dist/agui-mock.js.map +1 -1
  11. package/dist/agui-types.d.cts.map +1 -1
  12. package/dist/aimock-cli.cjs +15 -1
  13. package/dist/aimock-cli.cjs.map +1 -1
  14. package/dist/aimock-cli.d.cts.map +1 -1
  15. package/dist/aimock-cli.d.ts.map +1 -1
  16. package/dist/aimock-cli.js +16 -2
  17. package/dist/aimock-cli.js.map +1 -1
  18. package/dist/api-key-auth.cjs +10 -9
  19. package/dist/api-key-auth.cjs.map +1 -1
  20. package/dist/api-key-auth.d.cts.map +1 -1
  21. package/dist/api-key-auth.d.ts.map +1 -1
  22. package/dist/api-key-auth.js +11 -10
  23. package/dist/api-key-auth.js.map +1 -1
  24. package/dist/batches.cjs +2 -4
  25. package/dist/batches.cjs.map +1 -1
  26. package/dist/batches.d.cts.map +1 -1
  27. package/dist/batches.d.ts.map +1 -1
  28. package/dist/batches.js +2 -4
  29. package/dist/batches.js.map +1 -1
  30. package/dist/bedrock-converse.cjs +61 -80
  31. package/dist/bedrock-converse.cjs.map +1 -1
  32. package/dist/bedrock-converse.d.cts.map +1 -1
  33. package/dist/bedrock-converse.d.ts.map +1 -1
  34. package/dist/bedrock-converse.js +58 -77
  35. package/dist/bedrock-converse.js.map +1 -1
  36. package/dist/bedrock.cjs +65 -97
  37. package/dist/bedrock.cjs.map +1 -1
  38. package/dist/bedrock.d.cts.map +1 -1
  39. package/dist/bedrock.d.ts.map +1 -1
  40. package/dist/bedrock.js +62 -94
  41. package/dist/bedrock.js.map +1 -1
  42. package/dist/byteplus-video.cjs +11 -10
  43. package/dist/byteplus-video.cjs.map +1 -1
  44. package/dist/byteplus-video.d.cts.map +1 -1
  45. package/dist/byteplus-video.d.ts.map +1 -1
  46. package/dist/byteplus-video.js +5 -4
  47. package/dist/byteplus-video.js.map +1 -1
  48. package/dist/chaos.cjs +5 -4
  49. package/dist/chaos.cjs.map +1 -1
  50. package/dist/chaos.d.cts.map +1 -1
  51. package/dist/chaos.d.ts.map +1 -1
  52. package/dist/chaos.js +5 -4
  53. package/dist/chaos.js.map +1 -1
  54. package/dist/cli.cjs +15 -0
  55. package/dist/cli.cjs.map +1 -1
  56. package/dist/cli.js +15 -0
  57. package/dist/cli.js.map +1 -1
  58. package/dist/cohere.cjs +49 -74
  59. package/dist/cohere.cjs.map +1 -1
  60. package/dist/cohere.d.cts.map +1 -1
  61. package/dist/cohere.d.ts.map +1 -1
  62. package/dist/cohere.js +47 -72
  63. package/dist/cohere.js.map +1 -1
  64. package/dist/config-loader.cjs +29 -1
  65. package/dist/config-loader.cjs.map +1 -1
  66. package/dist/config-loader.d.cts +7 -1
  67. package/dist/config-loader.d.cts.map +1 -1
  68. package/dist/config-loader.d.ts +7 -1
  69. package/dist/config-loader.d.ts.map +1 -1
  70. package/dist/config-loader.js +29 -2
  71. package/dist/config-loader.js.map +1 -1
  72. package/dist/count-tokens.cjs +146 -0
  73. package/dist/count-tokens.cjs.map +1 -0
  74. package/dist/count-tokens.js +146 -0
  75. package/dist/count-tokens.js.map +1 -0
  76. package/dist/elevenlabs-audio.cjs +36 -34
  77. package/dist/elevenlabs-audio.cjs.map +1 -1
  78. package/dist/elevenlabs-audio.d.cts.map +1 -1
  79. package/dist/elevenlabs-audio.d.ts.map +1 -1
  80. package/dist/elevenlabs-audio.js +33 -31
  81. package/dist/elevenlabs-audio.js.map +1 -1
  82. package/dist/elevenlabs-voice.cjs +38 -37
  83. package/dist/elevenlabs-voice.cjs.map +1 -1
  84. package/dist/elevenlabs-voice.d.cts.map +1 -1
  85. package/dist/elevenlabs-voice.d.ts.map +1 -1
  86. package/dist/elevenlabs-voice.js +33 -32
  87. package/dist/elevenlabs-voice.js.map +1 -1
  88. package/dist/embedding-request.cjs +16 -0
  89. package/dist/embedding-request.cjs.map +1 -0
  90. package/dist/embedding-request.js +14 -0
  91. package/dist/embedding-request.js.map +1 -0
  92. package/dist/embeddings.cjs +30 -20
  93. package/dist/embeddings.cjs.map +1 -1
  94. package/dist/embeddings.d.cts.map +1 -1
  95. package/dist/embeddings.d.ts.map +1 -1
  96. package/dist/embeddings.js +30 -20
  97. package/dist/embeddings.js.map +1 -1
  98. package/dist/fal-audio.cjs +45 -43
  99. package/dist/fal-audio.cjs.map +1 -1
  100. package/dist/fal-audio.d.cts.map +1 -1
  101. package/dist/fal-audio.d.ts.map +1 -1
  102. package/dist/fal-audio.js +42 -40
  103. package/dist/fal-audio.js.map +1 -1
  104. package/dist/fal.cjs +17 -15
  105. package/dist/fal.cjs.map +1 -1
  106. package/dist/fal.js +16 -14
  107. package/dist/fal.js.map +1 -1
  108. package/dist/files.cjs +2 -4
  109. package/dist/files.cjs.map +1 -1
  110. package/dist/files.d.cts.map +1 -1
  111. package/dist/files.d.ts.map +1 -1
  112. package/dist/files.js +2 -4
  113. package/dist/files.js.map +1 -1
  114. package/dist/fine-tuning.cjs +2 -4
  115. package/dist/fine-tuning.cjs.map +1 -1
  116. package/dist/fine-tuning.d.cts.map +1 -1
  117. package/dist/fine-tuning.d.ts.map +1 -1
  118. package/dist/fine-tuning.js +2 -4
  119. package/dist/fine-tuning.js.map +1 -1
  120. package/dist/fixture-loader.cjs +37 -42
  121. package/dist/fixture-loader.cjs.map +1 -1
  122. package/dist/fixture-loader.d.cts.map +1 -1
  123. package/dist/fixture-loader.d.ts.map +1 -1
  124. package/dist/fixture-loader.js +37 -42
  125. package/dist/fixture-loader.js.map +1 -1
  126. package/dist/gemini-embeddings.cjs +26 -24
  127. package/dist/gemini-embeddings.cjs.map +1 -1
  128. package/dist/gemini-embeddings.js +26 -24
  129. package/dist/gemini-embeddings.js.map +1 -1
  130. package/dist/gemini-interactions.cjs +50 -35
  131. package/dist/gemini-interactions.cjs.map +1 -1
  132. package/dist/gemini-interactions.d.cts +0 -1
  133. package/dist/gemini-interactions.d.cts.map +1 -1
  134. package/dist/gemini-interactions.d.ts +0 -1
  135. package/dist/gemini-interactions.d.ts.map +1 -1
  136. package/dist/gemini-interactions.js +49 -34
  137. package/dist/gemini-interactions.js.map +1 -1
  138. package/dist/gemini.cjs +57 -67
  139. package/dist/gemini.cjs.map +1 -1
  140. package/dist/gemini.d.cts.map +1 -1
  141. package/dist/gemini.d.ts.map +1 -1
  142. package/dist/gemini.js +56 -67
  143. package/dist/gemini.js.map +1 -1
  144. package/dist/grok-video.cjs +14 -12
  145. package/dist/grok-video.cjs.map +1 -1
  146. package/dist/grok-video.d.cts.map +1 -1
  147. package/dist/grok-video.d.ts.map +1 -1
  148. package/dist/grok-video.js +8 -6
  149. package/dist/grok-video.js.map +1 -1
  150. package/dist/helpers.cjs +11 -68
  151. package/dist/helpers.cjs.map +1 -1
  152. package/dist/helpers.d.cts.map +1 -1
  153. package/dist/helpers.d.ts.map +1 -1
  154. package/dist/helpers.js +12 -67
  155. package/dist/helpers.js.map +1 -1
  156. package/dist/images.cjs +30 -28
  157. package/dist/images.cjs.map +1 -1
  158. package/dist/images.d.cts.map +1 -1
  159. package/dist/images.d.ts.map +1 -1
  160. package/dist/images.js +27 -25
  161. package/dist/images.js.map +1 -1
  162. package/dist/index.d.cts +2 -2
  163. package/dist/index.d.ts +2 -2
  164. package/dist/journal.cjs +3 -1
  165. package/dist/journal.cjs.map +1 -1
  166. package/dist/journal.d.cts.map +1 -1
  167. package/dist/journal.d.ts.map +1 -1
  168. package/dist/journal.js +2 -1
  169. package/dist/journal.js.map +1 -1
  170. package/dist/llmock.cjs +3 -0
  171. package/dist/llmock.cjs.map +1 -1
  172. package/dist/llmock.d.cts.map +1 -1
  173. package/dist/llmock.d.ts.map +1 -1
  174. package/dist/llmock.js +3 -0
  175. package/dist/llmock.js.map +1 -1
  176. package/dist/mcp-handler.cjs +7 -3
  177. package/dist/mcp-handler.cjs.map +1 -1
  178. package/dist/mcp-handler.js +7 -3
  179. package/dist/mcp-handler.js.map +1 -1
  180. package/dist/mcp-recorder.cjs +2 -1
  181. package/dist/mcp-recorder.cjs.map +1 -1
  182. package/dist/mcp-recorder.js +3 -2
  183. package/dist/mcp-recorder.js.map +1 -1
  184. package/dist/messages.cjs +111 -96
  185. package/dist/messages.cjs.map +1 -1
  186. package/dist/messages.d.cts.map +1 -1
  187. package/dist/messages.d.ts.map +1 -1
  188. package/dist/messages.js +109 -95
  189. package/dist/messages.js.map +1 -1
  190. package/dist/metrics.cjs +5 -2
  191. package/dist/metrics.cjs.map +1 -1
  192. package/dist/metrics.d.cts.map +1 -1
  193. package/dist/metrics.d.ts.map +1 -1
  194. package/dist/metrics.js +6 -3
  195. package/dist/metrics.js.map +1 -1
  196. package/dist/model-utils.cjs +1 -0
  197. package/dist/model-utils.cjs.map +1 -1
  198. package/dist/model-utils.js +1 -1
  199. package/dist/model-utils.js.map +1 -1
  200. package/dist/moderation.cjs +15 -12
  201. package/dist/moderation.cjs.map +1 -1
  202. package/dist/moderation.js +14 -11
  203. package/dist/moderation.js.map +1 -1
  204. package/dist/ollama.cjs +128 -68
  205. package/dist/ollama.cjs.map +1 -1
  206. package/dist/ollama.d.cts.map +1 -1
  207. package/dist/ollama.d.ts.map +1 -1
  208. package/dist/ollama.js +124 -64
  209. package/dist/ollama.js.map +1 -1
  210. package/dist/openapi.cjs +323 -3
  211. package/dist/openapi.cjs.map +1 -1
  212. package/dist/openapi.d.cts.map +1 -1
  213. package/dist/openapi.d.ts.map +1 -1
  214. package/dist/openapi.js +324 -4
  215. package/dist/openapi.js.map +1 -1
  216. package/dist/openrouter-chat.cjs +11 -155
  217. package/dist/openrouter-chat.cjs.map +1 -1
  218. package/dist/openrouter-chat.js +11 -155
  219. package/dist/openrouter-chat.js.map +1 -1
  220. package/dist/openrouter-video.cjs +51 -74
  221. package/dist/openrouter-video.cjs.map +1 -1
  222. package/dist/openrouter-video.d.cts.map +1 -1
  223. package/dist/openrouter-video.d.ts.map +1 -1
  224. package/dist/openrouter-video.js +37 -60
  225. package/dist/openrouter-video.js.map +1 -1
  226. package/dist/recorder.cjs +176 -95
  227. package/dist/recorder.cjs.map +1 -1
  228. package/dist/recorder.d.cts.map +1 -1
  229. package/dist/recorder.d.ts.map +1 -1
  230. package/dist/recorder.js +176 -95
  231. package/dist/recorder.js.map +1 -1
  232. package/dist/rerank.cjs +13 -11
  233. package/dist/rerank.cjs.map +1 -1
  234. package/dist/rerank.js +12 -10
  235. package/dist/rerank.js.map +1 -1
  236. package/dist/response/catalog/anthropic-page.cjs +39 -0
  237. package/dist/response/catalog/anthropic-page.cjs.map +1 -0
  238. package/dist/response/catalog/anthropic-page.js +38 -0
  239. package/dist/response/catalog/anthropic-page.js.map +1 -0
  240. package/dist/response/catalog/collect.cjs +61 -0
  241. package/dist/response/catalog/collect.cjs.map +1 -0
  242. package/dist/response/catalog/collect.js +59 -0
  243. package/dist/response/catalog/collect.js.map +1 -0
  244. package/dist/response/catalog/gemini-page.cjs +25 -0
  245. package/dist/response/catalog/gemini-page.cjs.map +1 -0
  246. package/dist/response/catalog/gemini-page.js +24 -0
  247. package/dist/response/catalog/gemini-page.js.map +1 -0
  248. package/dist/response/catalog/render.cjs +182 -0
  249. package/dist/response/catalog/render.cjs.map +1 -0
  250. package/dist/response/catalog/render.js +171 -0
  251. package/dist/response/catalog/render.js.map +1 -0
  252. package/dist/response/errors.cjs +225 -0
  253. package/dist/response/errors.cjs.map +1 -0
  254. package/dist/response/errors.js +224 -0
  255. package/dist/response/errors.js.map +1 -0
  256. package/dist/response/finish.cjs +39 -0
  257. package/dist/response/finish.cjs.map +1 -0
  258. package/dist/response/finish.js +35 -0
  259. package/dist/response/finish.js.map +1 -0
  260. package/dist/response/policy.cjs +126 -0
  261. package/dist/response/policy.cjs.map +1 -0
  262. package/dist/response/policy.js +120 -0
  263. package/dist/response/policy.js.map +1 -0
  264. package/dist/response/profiles.cjs +69 -0
  265. package/dist/response/profiles.cjs.map +1 -0
  266. package/dist/response/profiles.js +65 -0
  267. package/dist/response/profiles.js.map +1 -0
  268. package/dist/response/usage/codecs/anthropic.cjs +52 -0
  269. package/dist/response/usage/codecs/anthropic.cjs.map +1 -0
  270. package/dist/response/usage/codecs/anthropic.js +50 -0
  271. package/dist/response/usage/codecs/anthropic.js.map +1 -0
  272. package/dist/response/usage/codecs/cohere.cjs +36 -0
  273. package/dist/response/usage/codecs/cohere.cjs.map +1 -0
  274. package/dist/response/usage/codecs/cohere.js +35 -0
  275. package/dist/response/usage/codecs/cohere.js.map +1 -0
  276. package/dist/response/usage/codecs/converse.cjs +16 -0
  277. package/dist/response/usage/codecs/converse.cjs.map +1 -0
  278. package/dist/response/usage/codecs/converse.js +15 -0
  279. package/dist/response/usage/codecs/converse.js.map +1 -0
  280. package/dist/response/usage/codecs/gemini.cjs +31 -0
  281. package/dist/response/usage/codecs/gemini.cjs.map +1 -0
  282. package/dist/response/usage/codecs/gemini.js +31 -0
  283. package/dist/response/usage/codecs/gemini.js.map +1 -0
  284. package/dist/response/usage/codecs/interactions.cjs +22 -0
  285. package/dist/response/usage/codecs/interactions.cjs.map +1 -0
  286. package/dist/response/usage/codecs/interactions.js +21 -0
  287. package/dist/response/usage/codecs/interactions.js.map +1 -0
  288. package/dist/response/usage/codecs/ollama.cjs +17 -0
  289. package/dist/response/usage/codecs/ollama.cjs.map +1 -0
  290. package/dist/response/usage/codecs/ollama.js +17 -0
  291. package/dist/response/usage/codecs/ollama.js.map +1 -0
  292. package/dist/response/usage/codecs/openai.cjs +52 -0
  293. package/dist/response/usage/codecs/openai.cjs.map +1 -0
  294. package/dist/response/usage/codecs/openai.js +50 -0
  295. package/dist/response/usage/codecs/openai.js.map +1 -0
  296. package/dist/response/usage/codecs/openrouter.cjs +68 -0
  297. package/dist/response/usage/codecs/openrouter.cjs.map +1 -0
  298. package/dist/response/usage/codecs/openrouter.js +67 -0
  299. package/dist/response/usage/codecs/openrouter.js.map +1 -0
  300. package/dist/response/usage/codecs/realtime.cjs +19 -0
  301. package/dist/response/usage/codecs/realtime.cjs.map +1 -0
  302. package/dist/response/usage/codecs/realtime.js +18 -0
  303. package/dist/response/usage/codecs/realtime.js.map +1 -0
  304. package/dist/response/usage/codecs/responses.cjs +21 -0
  305. package/dist/response/usage/codecs/responses.cjs.map +1 -0
  306. package/dist/response/usage/codecs/responses.js +20 -0
  307. package/dist/response/usage/codecs/responses.js.map +1 -0
  308. package/dist/response/usage/estimate.cjs +23 -0
  309. package/dist/response/usage/estimate.cjs.map +1 -0
  310. package/dist/response/usage/estimate.js +21 -0
  311. package/dist/response/usage/estimate.js.map +1 -0
  312. package/dist/response/usage/fields.cjs +72 -0
  313. package/dist/response/usage/fields.cjs.map +1 -0
  314. package/dist/response/usage/fields.js +70 -0
  315. package/dist/response/usage/fields.js.map +1 -0
  316. package/dist/response/usage/recording.cjs +52 -0
  317. package/dist/response/usage/recording.cjs.map +1 -0
  318. package/dist/response/usage/recording.js +52 -0
  319. package/dist/response/usage/recording.js.map +1 -0
  320. package/dist/responses.cjs +45 -58
  321. package/dist/responses.cjs.map +1 -1
  322. package/dist/responses.d.cts.map +1 -1
  323. package/dist/responses.d.ts.map +1 -1
  324. package/dist/responses.js +44 -57
  325. package/dist/responses.js.map +1 -1
  326. package/dist/route-registry.cjs +45 -0
  327. package/dist/route-registry.cjs.map +1 -1
  328. package/dist/route-registry.d.cts.map +1 -1
  329. package/dist/route-registry.d.ts.map +1 -1
  330. package/dist/route-registry.js +41 -1
  331. package/dist/route-registry.js.map +1 -1
  332. package/dist/router.cjs +4 -0
  333. package/dist/router.cjs.map +1 -1
  334. package/dist/router.d.cts.map +1 -1
  335. package/dist/router.d.ts.map +1 -1
  336. package/dist/router.js +3 -0
  337. package/dist/router.js.map +1 -1
  338. package/dist/search.cjs +13 -11
  339. package/dist/search.cjs.map +1 -1
  340. package/dist/search.js +12 -10
  341. package/dist/search.js.map +1 -1
  342. package/dist/server.cjs +222 -146
  343. package/dist/server.cjs.map +1 -1
  344. package/dist/server.d.cts.map +1 -1
  345. package/dist/server.d.ts.map +1 -1
  346. package/dist/server.js +223 -147
  347. package/dist/server.js.map +1 -1
  348. package/dist/speech.cjs +20 -18
  349. package/dist/speech.cjs.map +1 -1
  350. package/dist/speech.d.cts.map +1 -1
  351. package/dist/speech.d.ts.map +1 -1
  352. package/dist/speech.js +19 -17
  353. package/dist/speech.js.map +1 -1
  354. package/dist/sse-writer.cjs +7 -0
  355. package/dist/sse-writer.cjs.map +1 -1
  356. package/dist/sse-writer.d.cts.map +1 -1
  357. package/dist/sse-writer.d.ts.map +1 -1
  358. package/dist/sse-writer.js +7 -1
  359. package/dist/sse-writer.js.map +1 -1
  360. package/dist/stream-collapse.cjs +118 -11
  361. package/dist/stream-collapse.cjs.map +1 -1
  362. package/dist/stream-collapse.d.cts +10 -9
  363. package/dist/stream-collapse.d.cts.map +1 -1
  364. package/dist/stream-collapse.d.ts +10 -9
  365. package/dist/stream-collapse.d.ts.map +1 -1
  366. package/dist/stream-collapse.js +118 -11
  367. package/dist/stream-collapse.js.map +1 -1
  368. package/dist/transcription.cjs +12 -10
  369. package/dist/transcription.cjs.map +1 -1
  370. package/dist/transcription.d.cts.map +1 -1
  371. package/dist/transcription.d.ts.map +1 -1
  372. package/dist/transcription.js +11 -9
  373. package/dist/transcription.js.map +1 -1
  374. package/dist/types.cjs.map +1 -1
  375. package/dist/types.d.cts +62 -3
  376. package/dist/types.d.cts.map +1 -1
  377. package/dist/types.d.ts +62 -3
  378. package/dist/types.d.ts.map +1 -1
  379. package/dist/types.js.map +1 -1
  380. package/dist/vector-mock.cjs +3 -8
  381. package/dist/vector-mock.cjs.map +1 -1
  382. package/dist/vector-mock.d.cts.map +1 -1
  383. package/dist/vector-mock.d.ts.map +1 -1
  384. package/dist/vector-mock.js +3 -8
  385. package/dist/vector-mock.js.map +1 -1
  386. package/dist/vector-stores.cjs +2 -4
  387. package/dist/vector-stores.cjs.map +1 -1
  388. package/dist/vector-stores.d.cts.map +1 -1
  389. package/dist/vector-stores.d.ts.map +1 -1
  390. package/dist/vector-stores.js +2 -4
  391. package/dist/vector-stores.js.map +1 -1
  392. package/dist/veo-video.cjs +16 -14
  393. package/dist/veo-video.cjs.map +1 -1
  394. package/dist/veo-video.js +10 -8
  395. package/dist/veo-video.js.map +1 -1
  396. package/dist/video.cjs +21 -19
  397. package/dist/video.cjs.map +1 -1
  398. package/dist/video.d.cts.map +1 -1
  399. package/dist/video.d.ts.map +1 -1
  400. package/dist/video.js +20 -18
  401. package/dist/video.js.map +1 -1
  402. package/dist/ws-gemini-live.cjs +11 -3
  403. package/dist/ws-gemini-live.cjs.map +1 -1
  404. package/dist/ws-gemini-live.d.cts +0 -1
  405. package/dist/ws-gemini-live.d.cts.map +1 -1
  406. package/dist/ws-gemini-live.d.ts +0 -1
  407. package/dist/ws-gemini-live.d.ts.map +1 -1
  408. package/dist/ws-gemini-live.js +10 -2
  409. package/dist/ws-gemini-live.js.map +1 -1
  410. package/dist/ws-live.cjs +6 -5
  411. package/dist/ws-live.cjs.map +1 -1
  412. package/dist/ws-live.js +5 -4
  413. package/dist/ws-live.js.map +1 -1
  414. package/dist/ws-realtime.cjs +28 -54
  415. package/dist/ws-realtime.cjs.map +1 -1
  416. package/dist/ws-realtime.d.cts.map +1 -1
  417. package/dist/ws-realtime.d.ts.map +1 -1
  418. package/dist/ws-realtime.js +25 -51
  419. package/dist/ws-realtime.js.map +1 -1
  420. package/dist/ws-responses.cjs +8 -6
  421. package/dist/ws-responses.cjs.map +1 -1
  422. package/dist/ws-responses.js +7 -5
  423. package/dist/ws-responses.js.map +1 -1
  424. package/package.json +4 -1
  425. package/skills/write-fixtures/SKILL.md +25 -16
@@ -0,0 +1,69 @@
1
+
2
+ //#region src/response/profiles.ts
3
+ /** Inbound HTTP auth uses only provider-owned paths; shared routes stay legacy. */
4
+ function authErrorDialectForPath(pathname) {
5
+ if (pathname === "/v1/messages" || pathname === "/v1/messages/count_tokens") return "messages";
6
+ if (pathname.startsWith("/v1beta/") || /^\/v1\/projects\/[^/]+\/locations\/[^/]+\/publishers\/google\//.test(pathname)) return "gemini";
7
+ return "openai";
8
+ }
9
+ /**
10
+ * Shared catalog response dialect. The list route uses it only under
11
+ * `policy.modelCatalog: "native"`. Auth retains its pathname-selected dialect.
12
+ */
13
+ function isAnthropicModelRequest(headers) {
14
+ return headers["anthropic-version"] !== void 0 || headers["x-api-key"] !== void 0 && headers.authorization === void 0;
15
+ }
16
+ /** Static wire facts only. Status selection and transport behavior belong to callers. */
17
+ const errorProfiles = {
18
+ openai: {
19
+ fixtureType: "server_error",
20
+ validationType: "invalid_request_error"
21
+ },
22
+ messages: {
23
+ fixtureType: "api_error",
24
+ validationType: "invalid_request_error",
25
+ requiredHeaders: ["anthropic-version"]
26
+ },
27
+ bedrock: {
28
+ fixtureType: "api_error",
29
+ validationType: "invalid_request_error",
30
+ toolArgumentType: "InternalServerException"
31
+ },
32
+ "bedrock-converse": {
33
+ fixtureType: "api_error",
34
+ validationType: "invalid_request_error",
35
+ toolArgumentType: "InternalServerException"
36
+ },
37
+ ollama: {
38
+ fixtureType: "server_error",
39
+ validationType: "invalid_request_error"
40
+ },
41
+ "ollama-embed": {
42
+ fixtureType: "server_error",
43
+ validationType: "invalid_request_error"
44
+ },
45
+ cohere: {
46
+ fixtureType: "server_error",
47
+ validationType: "invalid_request_error"
48
+ },
49
+ interactions: {
50
+ fixtureType: "server_error",
51
+ validationType: "invalid_request_error"
52
+ },
53
+ gemini: {
54
+ fixtureType: "server_error",
55
+ validationType: "invalid_request_error"
56
+ }
57
+ };
58
+ /** Bedrock's body-level version and other wire families have no header requirement. */
59
+ function missingRequiredHeader(wire, headers) {
60
+ if (wire !== "messages") return;
61
+ return errorProfiles.messages.requiredHeaders.find((name) => headers[name] === void 0);
62
+ }
63
+
64
+ //#endregion
65
+ exports.authErrorDialectForPath = authErrorDialectForPath;
66
+ exports.errorProfiles = errorProfiles;
67
+ exports.isAnthropicModelRequest = isAnthropicModelRequest;
68
+ exports.missingRequiredHeader = missingRequiredHeader;
69
+ //# sourceMappingURL=profiles.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.cjs","names":[],"sources":["../../src/response/profiles.ts"],"sourcesContent":["import type { IncomingHttpHeaders } from \"node:http\";\n\n/** Inbound HTTP auth uses only provider-owned paths; shared routes stay legacy. */\nexport function authErrorDialectForPath(pathname: string): \"messages\" | \"gemini\" | \"openai\" {\n if (pathname === \"/v1/messages\" || pathname === \"/v1/messages/count_tokens\") return \"messages\";\n if (\n pathname.startsWith(\"/v1beta/\") ||\n /^\\/v1\\/projects\\/[^/]+\\/locations\\/[^/]+\\/publishers\\/google\\//.test(pathname)\n )\n return \"gemini\";\n return \"openai\";\n}\n\n/**\n * Shared catalog response dialect. The list route uses it only under\n * `policy.modelCatalog: \"native\"`. Auth retains its pathname-selected dialect.\n */\nexport function isAnthropicModelRequest(headers: IncomingHttpHeaders): boolean {\n return (\n headers[\"anthropic-version\"] !== undefined ||\n (headers[\"x-api-key\"] !== undefined && headers.authorization === undefined)\n );\n}\n\n/** Static wire facts only. Status selection and transport behavior belong to callers. */\nexport const errorProfiles = {\n openai: { fixtureType: \"server_error\", validationType: \"invalid_request_error\" },\n messages: {\n fixtureType: \"api_error\",\n validationType: \"invalid_request_error\",\n requiredHeaders: [\"anthropic-version\"],\n },\n bedrock: {\n fixtureType: \"api_error\",\n validationType: \"invalid_request_error\",\n toolArgumentType: \"InternalServerException\",\n },\n \"bedrock-converse\": {\n fixtureType: \"api_error\",\n validationType: \"invalid_request_error\",\n toolArgumentType: \"InternalServerException\",\n },\n ollama: { fixtureType: \"server_error\", validationType: \"invalid_request_error\" },\n \"ollama-embed\": { fixtureType: \"server_error\", validationType: \"invalid_request_error\" },\n cohere: { fixtureType: \"server_error\", validationType: \"invalid_request_error\" },\n interactions: { fixtureType: \"server_error\", validationType: \"invalid_request_error\" },\n gemini: { fixtureType: \"server_error\", validationType: \"invalid_request_error\" },\n} as const;\n\nexport type ErrorWire = keyof typeof errorProfiles;\n\n/** Bedrock's body-level version and other wire families have no header requirement. */\nexport function missingRequiredHeader(\n wire: ErrorWire,\n headers: IncomingHttpHeaders,\n): string | undefined {\n if (wire !== \"messages\") return;\n return errorProfiles.messages.requiredHeaders.find((name) => headers[name] === undefined);\n}\n"],"mappings":";;;AAGA,SAAgB,wBAAwB,UAAoD;AAC1F,KAAI,aAAa,kBAAkB,aAAa,4BAA6B,QAAO;AACpF,KACE,SAAS,WAAW,WAAW,IAC/B,iEAAiE,KAAK,SAAS,CAE/E,QAAO;AACT,QAAO;;;;;;AAOT,SAAgB,wBAAwB,SAAuC;AAC7E,QACE,QAAQ,yBAAyB,UAChC,QAAQ,iBAAiB,UAAa,QAAQ,kBAAkB;;;AAKrE,MAAa,gBAAgB;CAC3B,QAAQ;EAAE,aAAa;EAAgB,gBAAgB;EAAyB;CAChF,UAAU;EACR,aAAa;EACb,gBAAgB;EAChB,iBAAiB,CAAC,oBAAoB;EACvC;CACD,SAAS;EACP,aAAa;EACb,gBAAgB;EAChB,kBAAkB;EACnB;CACD,oBAAoB;EAClB,aAAa;EACb,gBAAgB;EAChB,kBAAkB;EACnB;CACD,QAAQ;EAAE,aAAa;EAAgB,gBAAgB;EAAyB;CAChF,gBAAgB;EAAE,aAAa;EAAgB,gBAAgB;EAAyB;CACxF,QAAQ;EAAE,aAAa;EAAgB,gBAAgB;EAAyB;CAChF,cAAc;EAAE,aAAa;EAAgB,gBAAgB;EAAyB;CACtF,QAAQ;EAAE,aAAa;EAAgB,gBAAgB;EAAyB;CACjF;;AAKD,SAAgB,sBACd,MACA,SACoB;AACpB,KAAI,SAAS,WAAY;AACzB,QAAO,cAAc,SAAS,gBAAgB,MAAM,SAAS,QAAQ,UAAU,OAAU"}
@@ -0,0 +1,65 @@
1
+ //#region src/response/profiles.ts
2
+ /** Inbound HTTP auth uses only provider-owned paths; shared routes stay legacy. */
3
+ function authErrorDialectForPath(pathname) {
4
+ if (pathname === "/v1/messages" || pathname === "/v1/messages/count_tokens") return "messages";
5
+ if (pathname.startsWith("/v1beta/") || /^\/v1\/projects\/[^/]+\/locations\/[^/]+\/publishers\/google\//.test(pathname)) return "gemini";
6
+ return "openai";
7
+ }
8
+ /**
9
+ * Shared catalog response dialect. The list route uses it only under
10
+ * `policy.modelCatalog: "native"`. Auth retains its pathname-selected dialect.
11
+ */
12
+ function isAnthropicModelRequest(headers) {
13
+ return headers["anthropic-version"] !== void 0 || headers["x-api-key"] !== void 0 && headers.authorization === void 0;
14
+ }
15
+ /** Static wire facts only. Status selection and transport behavior belong to callers. */
16
+ const errorProfiles = {
17
+ openai: {
18
+ fixtureType: "server_error",
19
+ validationType: "invalid_request_error"
20
+ },
21
+ messages: {
22
+ fixtureType: "api_error",
23
+ validationType: "invalid_request_error",
24
+ requiredHeaders: ["anthropic-version"]
25
+ },
26
+ bedrock: {
27
+ fixtureType: "api_error",
28
+ validationType: "invalid_request_error",
29
+ toolArgumentType: "InternalServerException"
30
+ },
31
+ "bedrock-converse": {
32
+ fixtureType: "api_error",
33
+ validationType: "invalid_request_error",
34
+ toolArgumentType: "InternalServerException"
35
+ },
36
+ ollama: {
37
+ fixtureType: "server_error",
38
+ validationType: "invalid_request_error"
39
+ },
40
+ "ollama-embed": {
41
+ fixtureType: "server_error",
42
+ validationType: "invalid_request_error"
43
+ },
44
+ cohere: {
45
+ fixtureType: "server_error",
46
+ validationType: "invalid_request_error"
47
+ },
48
+ interactions: {
49
+ fixtureType: "server_error",
50
+ validationType: "invalid_request_error"
51
+ },
52
+ gemini: {
53
+ fixtureType: "server_error",
54
+ validationType: "invalid_request_error"
55
+ }
56
+ };
57
+ /** Bedrock's body-level version and other wire families have no header requirement. */
58
+ function missingRequiredHeader(wire, headers) {
59
+ if (wire !== "messages") return;
60
+ return errorProfiles.messages.requiredHeaders.find((name) => headers[name] === void 0);
61
+ }
62
+
63
+ //#endregion
64
+ export { authErrorDialectForPath, errorProfiles, isAnthropicModelRequest, missingRequiredHeader };
65
+ //# sourceMappingURL=profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","names":[],"sources":["../../src/response/profiles.ts"],"sourcesContent":["import type { IncomingHttpHeaders } from \"node:http\";\n\n/** Inbound HTTP auth uses only provider-owned paths; shared routes stay legacy. */\nexport function authErrorDialectForPath(pathname: string): \"messages\" | \"gemini\" | \"openai\" {\n if (pathname === \"/v1/messages\" || pathname === \"/v1/messages/count_tokens\") return \"messages\";\n if (\n pathname.startsWith(\"/v1beta/\") ||\n /^\\/v1\\/projects\\/[^/]+\\/locations\\/[^/]+\\/publishers\\/google\\//.test(pathname)\n )\n return \"gemini\";\n return \"openai\";\n}\n\n/**\n * Shared catalog response dialect. The list route uses it only under\n * `policy.modelCatalog: \"native\"`. Auth retains its pathname-selected dialect.\n */\nexport function isAnthropicModelRequest(headers: IncomingHttpHeaders): boolean {\n return (\n headers[\"anthropic-version\"] !== undefined ||\n (headers[\"x-api-key\"] !== undefined && headers.authorization === undefined)\n );\n}\n\n/** Static wire facts only. Status selection and transport behavior belong to callers. */\nexport const errorProfiles = {\n openai: { fixtureType: \"server_error\", validationType: \"invalid_request_error\" },\n messages: {\n fixtureType: \"api_error\",\n validationType: \"invalid_request_error\",\n requiredHeaders: [\"anthropic-version\"],\n },\n bedrock: {\n fixtureType: \"api_error\",\n validationType: \"invalid_request_error\",\n toolArgumentType: \"InternalServerException\",\n },\n \"bedrock-converse\": {\n fixtureType: \"api_error\",\n validationType: \"invalid_request_error\",\n toolArgumentType: \"InternalServerException\",\n },\n ollama: { fixtureType: \"server_error\", validationType: \"invalid_request_error\" },\n \"ollama-embed\": { fixtureType: \"server_error\", validationType: \"invalid_request_error\" },\n cohere: { fixtureType: \"server_error\", validationType: \"invalid_request_error\" },\n interactions: { fixtureType: \"server_error\", validationType: \"invalid_request_error\" },\n gemini: { fixtureType: \"server_error\", validationType: \"invalid_request_error\" },\n} as const;\n\nexport type ErrorWire = keyof typeof errorProfiles;\n\n/** Bedrock's body-level version and other wire families have no header requirement. */\nexport function missingRequiredHeader(\n wire: ErrorWire,\n headers: IncomingHttpHeaders,\n): string | undefined {\n if (wire !== \"messages\") return;\n return errorProfiles.messages.requiredHeaders.find((name) => headers[name] === undefined);\n}\n"],"mappings":";;AAGA,SAAgB,wBAAwB,UAAoD;AAC1F,KAAI,aAAa,kBAAkB,aAAa,4BAA6B,QAAO;AACpF,KACE,SAAS,WAAW,WAAW,IAC/B,iEAAiE,KAAK,SAAS,CAE/E,QAAO;AACT,QAAO;;;;;;AAOT,SAAgB,wBAAwB,SAAuC;AAC7E,QACE,QAAQ,yBAAyB,UAChC,QAAQ,iBAAiB,UAAa,QAAQ,kBAAkB;;;AAKrE,MAAa,gBAAgB;CAC3B,QAAQ;EAAE,aAAa;EAAgB,gBAAgB;EAAyB;CAChF,UAAU;EACR,aAAa;EACb,gBAAgB;EAChB,iBAAiB,CAAC,oBAAoB;EACvC;CACD,SAAS;EACP,aAAa;EACb,gBAAgB;EAChB,kBAAkB;EACnB;CACD,oBAAoB;EAClB,aAAa;EACb,gBAAgB;EAChB,kBAAkB;EACnB;CACD,QAAQ;EAAE,aAAa;EAAgB,gBAAgB;EAAyB;CAChF,gBAAgB;EAAE,aAAa;EAAgB,gBAAgB;EAAyB;CACxF,QAAQ;EAAE,aAAa;EAAgB,gBAAgB;EAAyB;CAChF,cAAc;EAAE,aAAa;EAAgB,gBAAgB;EAAyB;CACtF,QAAQ;EAAE,aAAa;EAAgB,gBAAgB;EAAyB;CACjF;;AAKD,SAAgB,sBACd,MACA,SACoB;AACpB,KAAI,SAAS,WAAY;AACzB,QAAO,cAAc,SAAS,gBAAgB,MAAM,SAAS,QAAQ,UAAU,OAAU"}
@@ -0,0 +1,52 @@
1
+ const require_fields = require('../fields.cjs');
2
+
3
+ //#region src/response/usage/codecs/anthropic.ts
4
+ /** Retain native supplied values and insertion order alongside the serving counts. */
5
+ function resolve(overrides, estimates) {
6
+ const native = overrides?.usage;
7
+ return {
8
+ native,
9
+ supplied: native !== void 0,
10
+ inputTokens: estimates?.inputTokens ?? native?.input_tokens ?? native?.prompt_tokens ?? 0,
11
+ outputTokens: estimates?.outputTokens ?? native?.output_tokens ?? native?.completion_tokens ?? 0
12
+ };
13
+ }
14
+ function render(resolved, position, variant = "ordinary") {
15
+ const cache = {};
16
+ if (variant === "ordinary") {
17
+ const native = resolved.native;
18
+ if (native?.cache_read_input_tokens !== void 0) cache.cache_read_input_tokens = native.cache_read_input_tokens;
19
+ if (native?.cache_creation_input_tokens !== void 0) cache.cache_creation_input_tokens = native.cache_creation_input_tokens;
20
+ const creation = native?.cache_creation;
21
+ if (position !== "messages-delta" && position !== "bedrock-delta" && typeof creation === "object" && creation !== null && !Array.isArray(creation)) {
22
+ const members = creation;
23
+ cache.cache_creation = {
24
+ ephemeral_5m_input_tokens: typeof members.ephemeral_5m_input_tokens === "number" ? members.ephemeral_5m_input_tokens : 0,
25
+ ephemeral_1h_input_tokens: typeof members.ephemeral_1h_input_tokens === "number" ? members.ephemeral_1h_input_tokens : 0
26
+ };
27
+ }
28
+ }
29
+ if (position === "messages-delta" || position === "bedrock-delta") return {
30
+ output_tokens: position === "bedrock-delta" && variant === "ordinary" ? 0 : resolved.outputTokens,
31
+ ...cache
32
+ };
33
+ return {
34
+ input_tokens: resolved.inputTokens,
35
+ output_tokens: resolved.outputTokens,
36
+ ...cache
37
+ };
38
+ }
39
+ /** Numeric observations replace earlier counts; null never erases a start value. */
40
+ function capture(previous, observation, position = "final") {
41
+ if (typeof observation !== "object" || observation === null || Array.isArray(observation)) return previous;
42
+ const merged = { ...previous };
43
+ for (const [key, value] of Object.entries(observation)) if (typeof value === "number") merged[key] = value;
44
+ else if (key === "cache_creation" && position !== "delta" && typeof value === "object" && value !== null && !Array.isArray(value)) merged[key] = value;
45
+ return require_fields.sanitizeUsage(merged);
46
+ }
47
+
48
+ //#endregion
49
+ exports.capture = capture;
50
+ exports.render = render;
51
+ exports.resolve = resolve;
52
+ //# sourceMappingURL=anthropic.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.cjs","names":["sanitizeUsage"],"sources":["../../../../src/response/usage/codecs/anthropic.ts"],"sourcesContent":["import type { ResponseOverrides } from \"../../../types.js\";\nimport { sanitizeUsage } from \"../fields.js\";\n\ntype CacheUsage = {\n cache_read_input_tokens?: unknown;\n cache_creation_input_tokens?: unknown;\n cache_creation?: { ephemeral_5m_input_tokens: number; ephemeral_1h_input_tokens: number };\n};\ntype AnthropicUsage = { input_tokens: number; output_tokens: number } & CacheUsage;\ntype AnthropicDeltaUsage = { output_tokens: number } & CacheUsage;\ntype FinalPosition = \"messages-final\" | \"messages-start\" | \"bedrock-final\" | \"bedrock-start\";\ntype DeltaPosition = \"messages-delta\" | \"bedrock-delta\";\ntype Variant = \"ordinary\" | \"applied-misbehavior\";\n\n/** Retain native supplied values and insertion order alongside the serving counts. */\nexport function resolve(\n overrides?: ResponseOverrides,\n estimates?: { inputTokens: number; outputTokens: number },\n) {\n const native = overrides?.usage;\n return {\n native,\n supplied: native !== undefined,\n inputTokens: estimates?.inputTokens ?? native?.input_tokens ?? native?.prompt_tokens ?? 0,\n outputTokens:\n estimates?.outputTokens ?? native?.output_tokens ?? native?.completion_tokens ?? 0,\n };\n}\n\nexport function render(\n resolved: ReturnType<typeof resolve>,\n position: FinalPosition,\n variant?: Variant,\n): AnthropicUsage;\nexport function render(\n resolved: ReturnType<typeof resolve>,\n position: DeltaPosition,\n variant?: Variant,\n): AnthropicDeltaUsage;\nexport function render(\n resolved: ReturnType<typeof resolve>,\n position: FinalPosition | DeltaPosition,\n variant: Variant = \"ordinary\",\n): AnthropicUsage | AnthropicDeltaUsage {\n const cache: CacheUsage = {};\n if (variant === \"ordinary\") {\n const native = resolved.native;\n if (native?.cache_read_input_tokens !== undefined)\n cache.cache_read_input_tokens = native.cache_read_input_tokens;\n if (native?.cache_creation_input_tokens !== undefined)\n cache.cache_creation_input_tokens = native.cache_creation_input_tokens;\n const creation = native?.cache_creation;\n if (\n position !== \"messages-delta\" &&\n position !== \"bedrock-delta\" &&\n typeof creation === \"object\" &&\n creation !== null &&\n !Array.isArray(creation)\n ) {\n const members = creation as Record<string, unknown>;\n cache.cache_creation = {\n ephemeral_5m_input_tokens:\n typeof members.ephemeral_5m_input_tokens === \"number\"\n ? members.ephemeral_5m_input_tokens\n : 0,\n ephemeral_1h_input_tokens:\n typeof members.ephemeral_1h_input_tokens === \"number\"\n ? members.ephemeral_1h_input_tokens\n : 0,\n };\n }\n }\n if (position === \"messages-delta\" || position === \"bedrock-delta\") {\n return {\n output_tokens:\n position === \"bedrock-delta\" && variant === \"ordinary\" ? 0 : resolved.outputTokens,\n ...cache,\n };\n }\n return { input_tokens: resolved.inputTokens, output_tokens: resolved.outputTokens, ...cache };\n}\n\n/** Numeric observations replace earlier counts; null never erases a start value. */\nexport function capture(\n previous: ResponseOverrides[\"usage\"],\n observation: unknown,\n position: \"start\" | \"delta\" | \"final\" = \"final\",\n): ResponseOverrides[\"usage\"] | undefined {\n if (typeof observation !== \"object\" || observation === null || Array.isArray(observation))\n return previous;\n const merged: Record<string, unknown> = { ...previous };\n for (const [key, value] of Object.entries(observation)) {\n if (typeof value === \"number\") merged[key] = value;\n else if (\n key === \"cache_creation\" &&\n position !== \"delta\" &&\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value)\n )\n merged[key] = value;\n }\n return sanitizeUsage(merged);\n}\n"],"mappings":";;;;AAeA,SAAgB,QACd,WACA,WACA;CACA,MAAM,SAAS,WAAW;AAC1B,QAAO;EACL;EACA,UAAU,WAAW;EACrB,aAAa,WAAW,eAAe,QAAQ,gBAAgB,QAAQ,iBAAiB;EACxF,cACE,WAAW,gBAAgB,QAAQ,iBAAiB,QAAQ,qBAAqB;EACpF;;AAaH,SAAgB,OACd,UACA,UACA,UAAmB,YACmB;CACtC,MAAM,QAAoB,EAAE;AAC5B,KAAI,YAAY,YAAY;EAC1B,MAAM,SAAS,SAAS;AACxB,MAAI,QAAQ,4BAA4B,OACtC,OAAM,0BAA0B,OAAO;AACzC,MAAI,QAAQ,gCAAgC,OAC1C,OAAM,8BAA8B,OAAO;EAC7C,MAAM,WAAW,QAAQ;AACzB,MACE,aAAa,oBACb,aAAa,mBACb,OAAO,aAAa,YACpB,aAAa,QACb,CAAC,MAAM,QAAQ,SAAS,EACxB;GACA,MAAM,UAAU;AAChB,SAAM,iBAAiB;IACrB,2BACE,OAAO,QAAQ,8BAA8B,WACzC,QAAQ,4BACR;IACN,2BACE,OAAO,QAAQ,8BAA8B,WACzC,QAAQ,4BACR;IACP;;;AAGL,KAAI,aAAa,oBAAoB,aAAa,gBAChD,QAAO;EACL,eACE,aAAa,mBAAmB,YAAY,aAAa,IAAI,SAAS;EACxE,GAAG;EACJ;AAEH,QAAO;EAAE,cAAc,SAAS;EAAa,eAAe,SAAS;EAAc,GAAG;EAAO;;;AAI/F,SAAgB,QACd,UACA,aACA,WAAwC,SACA;AACxC,KAAI,OAAO,gBAAgB,YAAY,gBAAgB,QAAQ,MAAM,QAAQ,YAAY,CACvF,QAAO;CACT,MAAM,SAAkC,EAAE,GAAG,UAAU;AACvD,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,YAAY,CACpD,KAAI,OAAO,UAAU,SAAU,QAAO,OAAO;UAE3C,QAAQ,oBACR,aAAa,WACb,OAAO,UAAU,YACjB,UAAU,QACV,CAAC,MAAM,QAAQ,MAAM,CAErB,QAAO,OAAO;AAElB,QAAOA,6BAAc,OAAO"}
@@ -0,0 +1,50 @@
1
+ import { sanitizeUsage } from "../fields.js";
2
+
3
+ //#region src/response/usage/codecs/anthropic.ts
4
+ /** Retain native supplied values and insertion order alongside the serving counts. */
5
+ function resolve(overrides, estimates) {
6
+ const native = overrides?.usage;
7
+ return {
8
+ native,
9
+ supplied: native !== void 0,
10
+ inputTokens: estimates?.inputTokens ?? native?.input_tokens ?? native?.prompt_tokens ?? 0,
11
+ outputTokens: estimates?.outputTokens ?? native?.output_tokens ?? native?.completion_tokens ?? 0
12
+ };
13
+ }
14
+ function render(resolved, position, variant = "ordinary") {
15
+ const cache = {};
16
+ if (variant === "ordinary") {
17
+ const native = resolved.native;
18
+ if (native?.cache_read_input_tokens !== void 0) cache.cache_read_input_tokens = native.cache_read_input_tokens;
19
+ if (native?.cache_creation_input_tokens !== void 0) cache.cache_creation_input_tokens = native.cache_creation_input_tokens;
20
+ const creation = native?.cache_creation;
21
+ if (position !== "messages-delta" && position !== "bedrock-delta" && typeof creation === "object" && creation !== null && !Array.isArray(creation)) {
22
+ const members = creation;
23
+ cache.cache_creation = {
24
+ ephemeral_5m_input_tokens: typeof members.ephemeral_5m_input_tokens === "number" ? members.ephemeral_5m_input_tokens : 0,
25
+ ephemeral_1h_input_tokens: typeof members.ephemeral_1h_input_tokens === "number" ? members.ephemeral_1h_input_tokens : 0
26
+ };
27
+ }
28
+ }
29
+ if (position === "messages-delta" || position === "bedrock-delta") return {
30
+ output_tokens: position === "bedrock-delta" && variant === "ordinary" ? 0 : resolved.outputTokens,
31
+ ...cache
32
+ };
33
+ return {
34
+ input_tokens: resolved.inputTokens,
35
+ output_tokens: resolved.outputTokens,
36
+ ...cache
37
+ };
38
+ }
39
+ /** Numeric observations replace earlier counts; null never erases a start value. */
40
+ function capture(previous, observation, position = "final") {
41
+ if (typeof observation !== "object" || observation === null || Array.isArray(observation)) return previous;
42
+ const merged = { ...previous };
43
+ for (const [key, value] of Object.entries(observation)) if (typeof value === "number") merged[key] = value;
44
+ else if (key === "cache_creation" && position !== "delta" && typeof value === "object" && value !== null && !Array.isArray(value)) merged[key] = value;
45
+ return sanitizeUsage(merged);
46
+ }
47
+
48
+ //#endregion
49
+ export { capture, render, resolve };
50
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","names":[],"sources":["../../../../src/response/usage/codecs/anthropic.ts"],"sourcesContent":["import type { ResponseOverrides } from \"../../../types.js\";\nimport { sanitizeUsage } from \"../fields.js\";\n\ntype CacheUsage = {\n cache_read_input_tokens?: unknown;\n cache_creation_input_tokens?: unknown;\n cache_creation?: { ephemeral_5m_input_tokens: number; ephemeral_1h_input_tokens: number };\n};\ntype AnthropicUsage = { input_tokens: number; output_tokens: number } & CacheUsage;\ntype AnthropicDeltaUsage = { output_tokens: number } & CacheUsage;\ntype FinalPosition = \"messages-final\" | \"messages-start\" | \"bedrock-final\" | \"bedrock-start\";\ntype DeltaPosition = \"messages-delta\" | \"bedrock-delta\";\ntype Variant = \"ordinary\" | \"applied-misbehavior\";\n\n/** Retain native supplied values and insertion order alongside the serving counts. */\nexport function resolve(\n overrides?: ResponseOverrides,\n estimates?: { inputTokens: number; outputTokens: number },\n) {\n const native = overrides?.usage;\n return {\n native,\n supplied: native !== undefined,\n inputTokens: estimates?.inputTokens ?? native?.input_tokens ?? native?.prompt_tokens ?? 0,\n outputTokens:\n estimates?.outputTokens ?? native?.output_tokens ?? native?.completion_tokens ?? 0,\n };\n}\n\nexport function render(\n resolved: ReturnType<typeof resolve>,\n position: FinalPosition,\n variant?: Variant,\n): AnthropicUsage;\nexport function render(\n resolved: ReturnType<typeof resolve>,\n position: DeltaPosition,\n variant?: Variant,\n): AnthropicDeltaUsage;\nexport function render(\n resolved: ReturnType<typeof resolve>,\n position: FinalPosition | DeltaPosition,\n variant: Variant = \"ordinary\",\n): AnthropicUsage | AnthropicDeltaUsage {\n const cache: CacheUsage = {};\n if (variant === \"ordinary\") {\n const native = resolved.native;\n if (native?.cache_read_input_tokens !== undefined)\n cache.cache_read_input_tokens = native.cache_read_input_tokens;\n if (native?.cache_creation_input_tokens !== undefined)\n cache.cache_creation_input_tokens = native.cache_creation_input_tokens;\n const creation = native?.cache_creation;\n if (\n position !== \"messages-delta\" &&\n position !== \"bedrock-delta\" &&\n typeof creation === \"object\" &&\n creation !== null &&\n !Array.isArray(creation)\n ) {\n const members = creation as Record<string, unknown>;\n cache.cache_creation = {\n ephemeral_5m_input_tokens:\n typeof members.ephemeral_5m_input_tokens === \"number\"\n ? members.ephemeral_5m_input_tokens\n : 0,\n ephemeral_1h_input_tokens:\n typeof members.ephemeral_1h_input_tokens === \"number\"\n ? members.ephemeral_1h_input_tokens\n : 0,\n };\n }\n }\n if (position === \"messages-delta\" || position === \"bedrock-delta\") {\n return {\n output_tokens:\n position === \"bedrock-delta\" && variant === \"ordinary\" ? 0 : resolved.outputTokens,\n ...cache,\n };\n }\n return { input_tokens: resolved.inputTokens, output_tokens: resolved.outputTokens, ...cache };\n}\n\n/** Numeric observations replace earlier counts; null never erases a start value. */\nexport function capture(\n previous: ResponseOverrides[\"usage\"],\n observation: unknown,\n position: \"start\" | \"delta\" | \"final\" = \"final\",\n): ResponseOverrides[\"usage\"] | undefined {\n if (typeof observation !== \"object\" || observation === null || Array.isArray(observation))\n return previous;\n const merged: Record<string, unknown> = { ...previous };\n for (const [key, value] of Object.entries(observation)) {\n if (typeof value === \"number\") merged[key] = value;\n else if (\n key === \"cache_creation\" &&\n position !== \"delta\" &&\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value)\n )\n merged[key] = value;\n }\n return sanitizeUsage(merged);\n}\n"],"mappings":";;;;AAeA,SAAgB,QACd,WACA,WACA;CACA,MAAM,SAAS,WAAW;AAC1B,QAAO;EACL;EACA,UAAU,WAAW;EACrB,aAAa,WAAW,eAAe,QAAQ,gBAAgB,QAAQ,iBAAiB;EACxF,cACE,WAAW,gBAAgB,QAAQ,iBAAiB,QAAQ,qBAAqB;EACpF;;AAaH,SAAgB,OACd,UACA,UACA,UAAmB,YACmB;CACtC,MAAM,QAAoB,EAAE;AAC5B,KAAI,YAAY,YAAY;EAC1B,MAAM,SAAS,SAAS;AACxB,MAAI,QAAQ,4BAA4B,OACtC,OAAM,0BAA0B,OAAO;AACzC,MAAI,QAAQ,gCAAgC,OAC1C,OAAM,8BAA8B,OAAO;EAC7C,MAAM,WAAW,QAAQ;AACzB,MACE,aAAa,oBACb,aAAa,mBACb,OAAO,aAAa,YACpB,aAAa,QACb,CAAC,MAAM,QAAQ,SAAS,EACxB;GACA,MAAM,UAAU;AAChB,SAAM,iBAAiB;IACrB,2BACE,OAAO,QAAQ,8BAA8B,WACzC,QAAQ,4BACR;IACN,2BACE,OAAO,QAAQ,8BAA8B,WACzC,QAAQ,4BACR;IACP;;;AAGL,KAAI,aAAa,oBAAoB,aAAa,gBAChD,QAAO;EACL,eACE,aAAa,mBAAmB,YAAY,aAAa,IAAI,SAAS;EACxE,GAAG;EACJ;AAEH,QAAO;EAAE,cAAc,SAAS;EAAa,eAAe,SAAS;EAAc,GAAG;EAAO;;;AAI/F,SAAgB,QACd,UACA,aACA,WAAwC,SACA;AACxC,KAAI,OAAO,gBAAgB,YAAY,gBAAgB,QAAQ,MAAM,QAAQ,YAAY,CACvF,QAAO;CACT,MAAM,SAAkC,EAAE,GAAG,UAAU;AACvD,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,YAAY,CACpD,KAAI,OAAO,UAAU,SAAU,QAAO,OAAO;UAE3C,QAAQ,oBACR,aAAa,WACb,OAAO,UAAU,YACjB,UAAU,QACV,CAAC,MAAM,QAAQ,MAAM,CAErB,QAAO,OAAO;AAElB,QAAO,cAAc,OAAO"}
@@ -0,0 +1,36 @@
1
+
2
+ //#region src/response/usage/codecs/cohere.ts
3
+ const ZERO_USAGE = {
4
+ billed_units: {
5
+ input_tokens: 0,
6
+ output_tokens: 0,
7
+ search_units: 0,
8
+ classifications: 0
9
+ },
10
+ tokens: {
11
+ input_tokens: 0,
12
+ output_tokens: 0
13
+ }
14
+ };
15
+ /** Cohere repeats its selected counts and keeps the other billed dimensions zero. */
16
+ function render(overrides) {
17
+ if (!overrides?.usage) return ZERO_USAGE;
18
+ const inputTokens = overrides.usage.input_tokens ?? overrides.usage.prompt_tokens ?? 0;
19
+ const outputTokens = overrides.usage.output_tokens ?? overrides.usage.completion_tokens ?? 0;
20
+ return {
21
+ billed_units: {
22
+ input_tokens: inputTokens,
23
+ output_tokens: outputTokens,
24
+ search_units: 0,
25
+ classifications: 0
26
+ },
27
+ tokens: {
28
+ input_tokens: inputTokens,
29
+ output_tokens: outputTokens
30
+ }
31
+ };
32
+ }
33
+
34
+ //#endregion
35
+ exports.render = render;
36
+ //# sourceMappingURL=cohere.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohere.cjs","names":[],"sources":["../../../../src/response/usage/codecs/cohere.ts"],"sourcesContent":["import type { ResponseOverrides } from \"../../../types.js\";\n\nconst ZERO_USAGE = {\n billed_units: { input_tokens: 0, output_tokens: 0, search_units: 0, classifications: 0 },\n tokens: { input_tokens: 0, output_tokens: 0 },\n};\n\n/** Cohere repeats its selected counts and keeps the other billed dimensions zero. */\nexport function render(overrides?: ResponseOverrides): typeof ZERO_USAGE {\n if (!overrides?.usage) return ZERO_USAGE;\n const inputTokens = overrides.usage.input_tokens ?? overrides.usage.prompt_tokens ?? 0;\n const outputTokens = overrides.usage.output_tokens ?? overrides.usage.completion_tokens ?? 0;\n return {\n billed_units: {\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n search_units: 0,\n classifications: 0,\n },\n tokens: { input_tokens: inputTokens, output_tokens: outputTokens },\n };\n}\n"],"mappings":";;AAEA,MAAM,aAAa;CACjB,cAAc;EAAE,cAAc;EAAG,eAAe;EAAG,cAAc;EAAG,iBAAiB;EAAG;CACxF,QAAQ;EAAE,cAAc;EAAG,eAAe;EAAG;CAC9C;;AAGD,SAAgB,OAAO,WAAkD;AACvE,KAAI,CAAC,WAAW,MAAO,QAAO;CAC9B,MAAM,cAAc,UAAU,MAAM,gBAAgB,UAAU,MAAM,iBAAiB;CACrF,MAAM,eAAe,UAAU,MAAM,iBAAiB,UAAU,MAAM,qBAAqB;AAC3F,QAAO;EACL,cAAc;GACZ,cAAc;GACd,eAAe;GACf,cAAc;GACd,iBAAiB;GAClB;EACD,QAAQ;GAAE,cAAc;GAAa,eAAe;GAAc;EACnE"}
@@ -0,0 +1,35 @@
1
+ //#region src/response/usage/codecs/cohere.ts
2
+ const ZERO_USAGE = {
3
+ billed_units: {
4
+ input_tokens: 0,
5
+ output_tokens: 0,
6
+ search_units: 0,
7
+ classifications: 0
8
+ },
9
+ tokens: {
10
+ input_tokens: 0,
11
+ output_tokens: 0
12
+ }
13
+ };
14
+ /** Cohere repeats its selected counts and keeps the other billed dimensions zero. */
15
+ function render(overrides) {
16
+ if (!overrides?.usage) return ZERO_USAGE;
17
+ const inputTokens = overrides.usage.input_tokens ?? overrides.usage.prompt_tokens ?? 0;
18
+ const outputTokens = overrides.usage.output_tokens ?? overrides.usage.completion_tokens ?? 0;
19
+ return {
20
+ billed_units: {
21
+ input_tokens: inputTokens,
22
+ output_tokens: outputTokens,
23
+ search_units: 0,
24
+ classifications: 0
25
+ },
26
+ tokens: {
27
+ input_tokens: inputTokens,
28
+ output_tokens: outputTokens
29
+ }
30
+ };
31
+ }
32
+
33
+ //#endregion
34
+ export { render };
35
+ //# sourceMappingURL=cohere.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohere.js","names":[],"sources":["../../../../src/response/usage/codecs/cohere.ts"],"sourcesContent":["import type { ResponseOverrides } from \"../../../types.js\";\n\nconst ZERO_USAGE = {\n billed_units: { input_tokens: 0, output_tokens: 0, search_units: 0, classifications: 0 },\n tokens: { input_tokens: 0, output_tokens: 0 },\n};\n\n/** Cohere repeats its selected counts and keeps the other billed dimensions zero. */\nexport function render(overrides?: ResponseOverrides): typeof ZERO_USAGE {\n if (!overrides?.usage) return ZERO_USAGE;\n const inputTokens = overrides.usage.input_tokens ?? overrides.usage.prompt_tokens ?? 0;\n const outputTokens = overrides.usage.output_tokens ?? overrides.usage.completion_tokens ?? 0;\n return {\n billed_units: {\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n search_units: 0,\n classifications: 0,\n },\n tokens: { input_tokens: inputTokens, output_tokens: outputTokens },\n };\n}\n"],"mappings":";AAEA,MAAM,aAAa;CACjB,cAAc;EAAE,cAAc;EAAG,eAAe;EAAG,cAAc;EAAG,iBAAiB;EAAG;CACxF,QAAQ;EAAE,cAAc;EAAG,eAAe;EAAG;CAC9C;;AAGD,SAAgB,OAAO,WAAkD;AACvE,KAAI,CAAC,WAAW,MAAO,QAAO;CAC9B,MAAM,cAAc,UAAU,MAAM,gBAAgB,UAAU,MAAM,iBAAiB;CACrF,MAAM,eAAe,UAAU,MAAM,iBAAiB,UAAU,MAAM,qBAAqB;AAC3F,QAAO;EACL,cAAc;GACZ,cAAc;GACd,eAAe;GACf,cAAc;GACd,iBAAiB;GAClB;EACD,QAAQ;GAAE,cAAc;GAAa,eAAe;GAAc;EACnE"}
@@ -0,0 +1,16 @@
1
+
2
+ //#region src/response/usage/codecs/converse.ts
3
+ /** Converse always computes its total; applied estimates remain caller-owned. */
4
+ function render(overrides, estimates) {
5
+ const inputTokens = estimates?.input ?? overrides?.usage?.input_tokens ?? overrides?.usage?.prompt_tokens ?? 0;
6
+ const outputTokens = estimates?.output ?? overrides?.usage?.output_tokens ?? overrides?.usage?.completion_tokens ?? 0;
7
+ return {
8
+ inputTokens,
9
+ outputTokens,
10
+ totalTokens: inputTokens + outputTokens
11
+ };
12
+ }
13
+
14
+ //#endregion
15
+ exports.render = render;
16
+ //# sourceMappingURL=converse.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converse.cjs","names":[],"sources":["../../../../src/response/usage/codecs/converse.ts"],"sourcesContent":["import type { ResponseOverrides } from \"../../../types.js\";\n\n/** Converse always computes its total; applied estimates remain caller-owned. */\nexport function render(\n overrides?: ResponseOverrides,\n estimates?: { input: number; output: number },\n): { inputTokens: number; outputTokens: number; totalTokens: number } {\n const inputTokens =\n estimates?.input ?? overrides?.usage?.input_tokens ?? overrides?.usage?.prompt_tokens ?? 0;\n const outputTokens =\n estimates?.output ??\n overrides?.usage?.output_tokens ??\n overrides?.usage?.completion_tokens ??\n 0;\n return { inputTokens, outputTokens, totalTokens: inputTokens + outputTokens };\n}\n"],"mappings":";;;AAGA,SAAgB,OACd,WACA,WACoE;CACpE,MAAM,cACJ,WAAW,SAAS,WAAW,OAAO,gBAAgB,WAAW,OAAO,iBAAiB;CAC3F,MAAM,eACJ,WAAW,UACX,WAAW,OAAO,iBAClB,WAAW,OAAO,qBAClB;AACF,QAAO;EAAE;EAAa;EAAc,aAAa,cAAc;EAAc"}
@@ -0,0 +1,15 @@
1
+ //#region src/response/usage/codecs/converse.ts
2
+ /** Converse always computes its total; applied estimates remain caller-owned. */
3
+ function render(overrides, estimates) {
4
+ const inputTokens = estimates?.input ?? overrides?.usage?.input_tokens ?? overrides?.usage?.prompt_tokens ?? 0;
5
+ const outputTokens = estimates?.output ?? overrides?.usage?.output_tokens ?? overrides?.usage?.completion_tokens ?? 0;
6
+ return {
7
+ inputTokens,
8
+ outputTokens,
9
+ totalTokens: inputTokens + outputTokens
10
+ };
11
+ }
12
+
13
+ //#endregion
14
+ export { render };
15
+ //# sourceMappingURL=converse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converse.js","names":[],"sources":["../../../../src/response/usage/codecs/converse.ts"],"sourcesContent":["import type { ResponseOverrides } from \"../../../types.js\";\n\n/** Converse always computes its total; applied estimates remain caller-owned. */\nexport function render(\n overrides?: ResponseOverrides,\n estimates?: { input: number; output: number },\n): { inputTokens: number; outputTokens: number; totalTokens: number } {\n const inputTokens =\n estimates?.input ?? overrides?.usage?.input_tokens ?? overrides?.usage?.prompt_tokens ?? 0;\n const outputTokens =\n estimates?.output ??\n overrides?.usage?.output_tokens ??\n overrides?.usage?.completion_tokens ??\n 0;\n return { inputTokens, outputTokens, totalTokens: inputTokens + outputTokens };\n}\n"],"mappings":";;AAGA,SAAgB,OACd,WACA,WACoE;CACpE,MAAM,cACJ,WAAW,SAAS,WAAW,OAAO,gBAAgB,WAAW,OAAO,iBAAiB;CAC3F,MAAM,eACJ,WAAW,UACX,WAAW,OAAO,iBAClB,WAAW,OAAO,qBAClB;AACF,QAAO;EAAE;EAAa;EAAc,aAAa,cAAc;EAAc"}
@@ -0,0 +1,31 @@
1
+ const require_estimate = require('../estimate.cjs');
2
+
3
+ //#region src/response/usage/codecs/gemini.ts
4
+ /** Gemini and Vertex share native precedence; only the native total overrides the sum. */
5
+ function render(overrides, variant = { kind: "ordinary" }) {
6
+ if (variant.kind === "applied-misbehavior") {
7
+ const prompt = require_estimate.estimateTokens(variant.promptText || "x");
8
+ const candidates = require_estimate.estimateTokens(variant.completionText || "x");
9
+ return {
10
+ promptTokenCount: prompt,
11
+ candidatesTokenCount: candidates,
12
+ totalTokenCount: prompt + candidates
13
+ };
14
+ }
15
+ if (!overrides?.usage) return {
16
+ promptTokenCount: 0,
17
+ candidatesTokenCount: 0,
18
+ totalTokenCount: 0
19
+ };
20
+ const prompt = overrides.usage.promptTokenCount ?? overrides.usage.prompt_tokens ?? overrides.usage.input_tokens ?? 0;
21
+ const candidates = overrides.usage.candidatesTokenCount ?? overrides.usage.completion_tokens ?? overrides.usage.output_tokens ?? 0;
22
+ return {
23
+ promptTokenCount: prompt,
24
+ candidatesTokenCount: candidates,
25
+ totalTokenCount: overrides.usage.totalTokenCount ?? prompt + candidates
26
+ };
27
+ }
28
+
29
+ //#endregion
30
+ exports.render = render;
31
+ //# sourceMappingURL=gemini.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.cjs","names":["estimateTokens"],"sources":["../../../../src/response/usage/codecs/gemini.ts"],"sourcesContent":["import type { ResponseOverrides } from \"../../../types.js\";\nimport { estimateTokens } from \"../estimate.js\";\n\ntype GeminiUsage = {\n promptTokenCount: number;\n candidatesTokenCount: number;\n totalTokenCount: number;\n};\ntype Variant =\n | { kind: \"ordinary\" }\n | { kind: \"applied-misbehavior\"; promptText: string; completionText: string };\n\n/** Gemini and Vertex share native precedence; only the native total overrides the sum. */\nexport function render(\n overrides?: ResponseOverrides,\n variant: Variant = { kind: \"ordinary\" },\n): GeminiUsage {\n if (variant.kind === \"applied-misbehavior\") {\n const prompt = estimateTokens(variant.promptText || \"x\");\n const candidates = estimateTokens(variant.completionText || \"x\");\n return {\n promptTokenCount: prompt,\n candidatesTokenCount: candidates,\n totalTokenCount: prompt + candidates,\n };\n }\n if (!overrides?.usage)\n return { promptTokenCount: 0, candidatesTokenCount: 0, totalTokenCount: 0 };\n const prompt =\n overrides.usage.promptTokenCount ??\n overrides.usage.prompt_tokens ??\n overrides.usage.input_tokens ??\n 0;\n const candidates =\n overrides.usage.candidatesTokenCount ??\n overrides.usage.completion_tokens ??\n overrides.usage.output_tokens ??\n 0;\n return {\n promptTokenCount: prompt,\n candidatesTokenCount: candidates,\n totalTokenCount: overrides.usage.totalTokenCount ?? prompt + candidates,\n };\n}\n"],"mappings":";;;;AAaA,SAAgB,OACd,WACA,UAAmB,EAAE,MAAM,YAAY,EAC1B;AACb,KAAI,QAAQ,SAAS,uBAAuB;EAC1C,MAAM,SAASA,gCAAe,QAAQ,cAAc,IAAI;EACxD,MAAM,aAAaA,gCAAe,QAAQ,kBAAkB,IAAI;AAChE,SAAO;GACL,kBAAkB;GAClB,sBAAsB;GACtB,iBAAiB,SAAS;GAC3B;;AAEH,KAAI,CAAC,WAAW,MACd,QAAO;EAAE,kBAAkB;EAAG,sBAAsB;EAAG,iBAAiB;EAAG;CAC7E,MAAM,SACJ,UAAU,MAAM,oBAChB,UAAU,MAAM,iBAChB,UAAU,MAAM,gBAChB;CACF,MAAM,aACJ,UAAU,MAAM,wBAChB,UAAU,MAAM,qBAChB,UAAU,MAAM,iBAChB;AACF,QAAO;EACL,kBAAkB;EAClB,sBAAsB;EACtB,iBAAiB,UAAU,MAAM,mBAAmB,SAAS;EAC9D"}
@@ -0,0 +1,31 @@
1
+ import { estimateTokens } from "../estimate.js";
2
+
3
+ //#region src/response/usage/codecs/gemini.ts
4
+ /** Gemini and Vertex share native precedence; only the native total overrides the sum. */
5
+ function render(overrides, variant = { kind: "ordinary" }) {
6
+ if (variant.kind === "applied-misbehavior") {
7
+ const prompt = estimateTokens(variant.promptText || "x");
8
+ const candidates = estimateTokens(variant.completionText || "x");
9
+ return {
10
+ promptTokenCount: prompt,
11
+ candidatesTokenCount: candidates,
12
+ totalTokenCount: prompt + candidates
13
+ };
14
+ }
15
+ if (!overrides?.usage) return {
16
+ promptTokenCount: 0,
17
+ candidatesTokenCount: 0,
18
+ totalTokenCount: 0
19
+ };
20
+ const prompt = overrides.usage.promptTokenCount ?? overrides.usage.prompt_tokens ?? overrides.usage.input_tokens ?? 0;
21
+ const candidates = overrides.usage.candidatesTokenCount ?? overrides.usage.completion_tokens ?? overrides.usage.output_tokens ?? 0;
22
+ return {
23
+ promptTokenCount: prompt,
24
+ candidatesTokenCount: candidates,
25
+ totalTokenCount: overrides.usage.totalTokenCount ?? prompt + candidates
26
+ };
27
+ }
28
+
29
+ //#endregion
30
+ export { render };
31
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","names":[],"sources":["../../../../src/response/usage/codecs/gemini.ts"],"sourcesContent":["import type { ResponseOverrides } from \"../../../types.js\";\nimport { estimateTokens } from \"../estimate.js\";\n\ntype GeminiUsage = {\n promptTokenCount: number;\n candidatesTokenCount: number;\n totalTokenCount: number;\n};\ntype Variant =\n | { kind: \"ordinary\" }\n | { kind: \"applied-misbehavior\"; promptText: string; completionText: string };\n\n/** Gemini and Vertex share native precedence; only the native total overrides the sum. */\nexport function render(\n overrides?: ResponseOverrides,\n variant: Variant = { kind: \"ordinary\" },\n): GeminiUsage {\n if (variant.kind === \"applied-misbehavior\") {\n const prompt = estimateTokens(variant.promptText || \"x\");\n const candidates = estimateTokens(variant.completionText || \"x\");\n return {\n promptTokenCount: prompt,\n candidatesTokenCount: candidates,\n totalTokenCount: prompt + candidates,\n };\n }\n if (!overrides?.usage)\n return { promptTokenCount: 0, candidatesTokenCount: 0, totalTokenCount: 0 };\n const prompt =\n overrides.usage.promptTokenCount ??\n overrides.usage.prompt_tokens ??\n overrides.usage.input_tokens ??\n 0;\n const candidates =\n overrides.usage.candidatesTokenCount ??\n overrides.usage.completion_tokens ??\n overrides.usage.output_tokens ??\n 0;\n return {\n promptTokenCount: prompt,\n candidatesTokenCount: candidates,\n totalTokenCount: overrides.usage.totalTokenCount ?? prompt + candidates,\n };\n}\n"],"mappings":";;;;AAaA,SAAgB,OACd,WACA,UAAmB,EAAE,MAAM,YAAY,EAC1B;AACb,KAAI,QAAQ,SAAS,uBAAuB;EAC1C,MAAM,SAAS,eAAe,QAAQ,cAAc,IAAI;EACxD,MAAM,aAAa,eAAe,QAAQ,kBAAkB,IAAI;AAChE,SAAO;GACL,kBAAkB;GAClB,sBAAsB;GACtB,iBAAiB,SAAS;GAC3B;;AAEH,KAAI,CAAC,WAAW,MACd,QAAO;EAAE,kBAAkB;EAAG,sBAAsB;EAAG,iBAAiB;EAAG;CAC7E,MAAM,SACJ,UAAU,MAAM,oBAChB,UAAU,MAAM,iBAChB,UAAU,MAAM,gBAChB;CACF,MAAM,aACJ,UAAU,MAAM,wBAChB,UAAU,MAAM,qBAChB,UAAU,MAAM,iBAChB;AACF,QAAO;EACL,kBAAkB;EAClB,sBAAsB;EACtB,iBAAiB,UAAU,MAAM,mBAAmB,SAAS;EAC9D"}
@@ -0,0 +1,22 @@
1
+
2
+ //#region src/response/usage/codecs/interactions.ts
3
+ /** Interactions prefers input/output aliases and its snake-case total before Gemini aliases. */
4
+ function render(overrides, variant = "ordinary") {
5
+ const input = overrides?.usage?.input_tokens ?? overrides?.usage?.prompt_tokens ?? overrides?.usage?.promptTokenCount ?? 0;
6
+ const output = overrides?.usage?.output_tokens ?? overrides?.usage?.completion_tokens ?? overrides?.usage?.candidatesTokenCount ?? 0;
7
+ const usage = {
8
+ total_input_tokens: input,
9
+ total_output_tokens: output,
10
+ total_tokens: overrides?.usage?.total_tokens ?? overrides?.usage?.totalTokenCount ?? input + output
11
+ };
12
+ if (variant === "applied-reasoning-only") return {
13
+ ...usage,
14
+ total_output_tokens: 0,
15
+ total_thought_tokens: overrides?.usage?.completion_tokens ?? 0
16
+ };
17
+ return usage;
18
+ }
19
+
20
+ //#endregion
21
+ exports.render = render;
22
+ //# sourceMappingURL=interactions.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.cjs","names":[],"sources":["../../../../src/response/usage/codecs/interactions.ts"],"sourcesContent":["import type { ResponseOverrides } from \"../../../types.js\";\n\ntype InteractionsUsage = {\n total_input_tokens: number;\n total_output_tokens: number;\n total_tokens: number;\n};\ntype InteractionsThoughtUsage = InteractionsUsage & { total_thought_tokens: number };\n\nexport function render(overrides?: ResponseOverrides, variant?: \"ordinary\"): InteractionsUsage;\nexport function render(\n overrides: ResponseOverrides | undefined,\n variant: \"applied-reasoning-only\",\n): InteractionsThoughtUsage;\n/** Interactions prefers input/output aliases and its snake-case total before Gemini aliases. */\nexport function render(\n overrides?: ResponseOverrides,\n variant: \"ordinary\" | \"applied-reasoning-only\" = \"ordinary\",\n): InteractionsUsage | InteractionsThoughtUsage {\n const input =\n overrides?.usage?.input_tokens ??\n overrides?.usage?.prompt_tokens ??\n overrides?.usage?.promptTokenCount ??\n 0;\n const output =\n overrides?.usage?.output_tokens ??\n overrides?.usage?.completion_tokens ??\n overrides?.usage?.candidatesTokenCount ??\n 0;\n const usage = {\n total_input_tokens: input,\n total_output_tokens: output,\n total_tokens:\n overrides?.usage?.total_tokens ?? overrides?.usage?.totalTokenCount ?? input + output,\n };\n if (variant === \"applied-reasoning-only\")\n return {\n ...usage,\n total_output_tokens: 0,\n total_thought_tokens: overrides?.usage?.completion_tokens ?? 0,\n };\n return usage;\n}\n"],"mappings":";;;AAeA,SAAgB,OACd,WACA,UAAiD,YACH;CAC9C,MAAM,QACJ,WAAW,OAAO,gBAClB,WAAW,OAAO,iBAClB,WAAW,OAAO,oBAClB;CACF,MAAM,SACJ,WAAW,OAAO,iBAClB,WAAW,OAAO,qBAClB,WAAW,OAAO,wBAClB;CACF,MAAM,QAAQ;EACZ,oBAAoB;EACpB,qBAAqB;EACrB,cACE,WAAW,OAAO,gBAAgB,WAAW,OAAO,mBAAmB,QAAQ;EAClF;AACD,KAAI,YAAY,yBACd,QAAO;EACL,GAAG;EACH,qBAAqB;EACrB,sBAAsB,WAAW,OAAO,qBAAqB;EAC9D;AACH,QAAO"}
@@ -0,0 +1,21 @@
1
+ //#region src/response/usage/codecs/interactions.ts
2
+ /** Interactions prefers input/output aliases and its snake-case total before Gemini aliases. */
3
+ function render(overrides, variant = "ordinary") {
4
+ const input = overrides?.usage?.input_tokens ?? overrides?.usage?.prompt_tokens ?? overrides?.usage?.promptTokenCount ?? 0;
5
+ const output = overrides?.usage?.output_tokens ?? overrides?.usage?.completion_tokens ?? overrides?.usage?.candidatesTokenCount ?? 0;
6
+ const usage = {
7
+ total_input_tokens: input,
8
+ total_output_tokens: output,
9
+ total_tokens: overrides?.usage?.total_tokens ?? overrides?.usage?.totalTokenCount ?? input + output
10
+ };
11
+ if (variant === "applied-reasoning-only") return {
12
+ ...usage,
13
+ total_output_tokens: 0,
14
+ total_thought_tokens: overrides?.usage?.completion_tokens ?? 0
15
+ };
16
+ return usage;
17
+ }
18
+
19
+ //#endregion
20
+ export { render };
21
+ //# sourceMappingURL=interactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.js","names":[],"sources":["../../../../src/response/usage/codecs/interactions.ts"],"sourcesContent":["import type { ResponseOverrides } from \"../../../types.js\";\n\ntype InteractionsUsage = {\n total_input_tokens: number;\n total_output_tokens: number;\n total_tokens: number;\n};\ntype InteractionsThoughtUsage = InteractionsUsage & { total_thought_tokens: number };\n\nexport function render(overrides?: ResponseOverrides, variant?: \"ordinary\"): InteractionsUsage;\nexport function render(\n overrides: ResponseOverrides | undefined,\n variant: \"applied-reasoning-only\",\n): InteractionsThoughtUsage;\n/** Interactions prefers input/output aliases and its snake-case total before Gemini aliases. */\nexport function render(\n overrides?: ResponseOverrides,\n variant: \"ordinary\" | \"applied-reasoning-only\" = \"ordinary\",\n): InteractionsUsage | InteractionsThoughtUsage {\n const input =\n overrides?.usage?.input_tokens ??\n overrides?.usage?.prompt_tokens ??\n overrides?.usage?.promptTokenCount ??\n 0;\n const output =\n overrides?.usage?.output_tokens ??\n overrides?.usage?.completion_tokens ??\n overrides?.usage?.candidatesTokenCount ??\n 0;\n const usage = {\n total_input_tokens: input,\n total_output_tokens: output,\n total_tokens:\n overrides?.usage?.total_tokens ?? overrides?.usage?.totalTokenCount ?? input + output,\n };\n if (variant === \"applied-reasoning-only\")\n return {\n ...usage,\n total_output_tokens: 0,\n total_thought_tokens: overrides?.usage?.completion_tokens ?? 0,\n };\n return usage;\n}\n"],"mappings":";;AAeA,SAAgB,OACd,WACA,UAAiD,YACH;CAC9C,MAAM,QACJ,WAAW,OAAO,gBAClB,WAAW,OAAO,iBAClB,WAAW,OAAO,oBAClB;CACF,MAAM,SACJ,WAAW,OAAO,iBAClB,WAAW,OAAO,qBAClB,WAAW,OAAO,wBAClB;CACF,MAAM,QAAQ;EACZ,oBAAoB;EACpB,qBAAqB;EACrB,cACE,WAAW,OAAO,gBAAgB,WAAW,OAAO,mBAAmB,QAAQ;EAClF;AACD,KAAI,YAAY,yBACd,QAAO;EACL,GAAG;EACH,qBAAqB;EACrB,sBAAsB,WAAW,OAAO,qBAAqB;EAC9D;AACH,QAAO"}
@@ -0,0 +1,17 @@
1
+ const require_estimate = require('../estimate.cjs');
2
+
3
+ //#region src/response/usage/codecs/ollama.ts
4
+ function render(variant, position = "both") {
5
+ const promptCount = variant.kind === "ordinary-zero" ? 0 : require_estimate.estimatePromptTokens(variant.messages);
6
+ const completionCount = variant.kind === "ordinary-zero" ? 0 : require_estimate.estimateTokens(variant.completion);
7
+ if (position === "prompt") return { prompt_eval_count: promptCount };
8
+ if (position === "completion") return { eval_count: completionCount };
9
+ return {
10
+ prompt_eval_count: promptCount,
11
+ eval_count: completionCount
12
+ };
13
+ }
14
+
15
+ //#endregion
16
+ exports.render = render;
17
+ //# sourceMappingURL=ollama.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.cjs","names":["estimatePromptTokens","estimateTokens"],"sources":["../../../../src/response/usage/codecs/ollama.ts"],"sourcesContent":["import type { ChatCompletionRequest } from \"../../../types.js\";\nimport { estimatePromptTokens, estimateTokens } from \"../estimate.js\";\n\ntype CountVariant =\n | { kind: \"ordinary-zero\" }\n | {\n kind: \"applied-chat-estimate\";\n messages: ChatCompletionRequest[\"messages\"];\n completion: string;\n };\n\n/** Render counts only; callers retain duration fields and their insertion order. */\nexport function render(\n variant: CountVariant,\n position?: \"both\",\n): {\n prompt_eval_count: number;\n eval_count: number;\n};\nexport function render(variant: CountVariant, position: \"prompt\"): { prompt_eval_count: number };\nexport function render(variant: CountVariant, position: \"completion\"): { eval_count: number };\nexport function render(variant: CountVariant, position: \"prompt\" | \"completion\" | \"both\" = \"both\") {\n const promptCount = variant.kind === \"ordinary-zero\" ? 0 : estimatePromptTokens(variant.messages);\n const completionCount = variant.kind === \"ordinary-zero\" ? 0 : estimateTokens(variant.completion);\n if (position === \"prompt\") return { prompt_eval_count: promptCount };\n if (position === \"completion\") return { eval_count: completionCount };\n return { prompt_eval_count: promptCount, eval_count: completionCount };\n}\n"],"mappings":";;;AAqBA,SAAgB,OAAO,SAAuB,WAA6C,QAAQ;CACjG,MAAM,cAAc,QAAQ,SAAS,kBAAkB,IAAIA,sCAAqB,QAAQ,SAAS;CACjG,MAAM,kBAAkB,QAAQ,SAAS,kBAAkB,IAAIC,gCAAe,QAAQ,WAAW;AACjG,KAAI,aAAa,SAAU,QAAO,EAAE,mBAAmB,aAAa;AACpE,KAAI,aAAa,aAAc,QAAO,EAAE,YAAY,iBAAiB;AACrE,QAAO;EAAE,mBAAmB;EAAa,YAAY;EAAiB"}
@@ -0,0 +1,17 @@
1
+ import { estimatePromptTokens, estimateTokens } from "../estimate.js";
2
+
3
+ //#region src/response/usage/codecs/ollama.ts
4
+ function render(variant, position = "both") {
5
+ const promptCount = variant.kind === "ordinary-zero" ? 0 : estimatePromptTokens(variant.messages);
6
+ const completionCount = variant.kind === "ordinary-zero" ? 0 : estimateTokens(variant.completion);
7
+ if (position === "prompt") return { prompt_eval_count: promptCount };
8
+ if (position === "completion") return { eval_count: completionCount };
9
+ return {
10
+ prompt_eval_count: promptCount,
11
+ eval_count: completionCount
12
+ };
13
+ }
14
+
15
+ //#endregion
16
+ export { render };
17
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","names":[],"sources":["../../../../src/response/usage/codecs/ollama.ts"],"sourcesContent":["import type { ChatCompletionRequest } from \"../../../types.js\";\nimport { estimatePromptTokens, estimateTokens } from \"../estimate.js\";\n\ntype CountVariant =\n | { kind: \"ordinary-zero\" }\n | {\n kind: \"applied-chat-estimate\";\n messages: ChatCompletionRequest[\"messages\"];\n completion: string;\n };\n\n/** Render counts only; callers retain duration fields and their insertion order. */\nexport function render(\n variant: CountVariant,\n position?: \"both\",\n): {\n prompt_eval_count: number;\n eval_count: number;\n};\nexport function render(variant: CountVariant, position: \"prompt\"): { prompt_eval_count: number };\nexport function render(variant: CountVariant, position: \"completion\"): { eval_count: number };\nexport function render(variant: CountVariant, position: \"prompt\" | \"completion\" | \"both\" = \"both\") {\n const promptCount = variant.kind === \"ordinary-zero\" ? 0 : estimatePromptTokens(variant.messages);\n const completionCount = variant.kind === \"ordinary-zero\" ? 0 : estimateTokens(variant.completion);\n if (position === \"prompt\") return { prompt_eval_count: promptCount };\n if (position === \"completion\") return { eval_count: completionCount };\n return { prompt_eval_count: promptCount, eval_count: completionCount };\n}\n"],"mappings":";;;AAqBA,SAAgB,OAAO,SAAuB,WAA6C,QAAQ;CACjG,MAAM,cAAc,QAAQ,SAAS,kBAAkB,IAAI,qBAAqB,QAAQ,SAAS;CACjG,MAAM,kBAAkB,QAAQ,SAAS,kBAAkB,IAAI,eAAe,QAAQ,WAAW;AACjG,KAAI,aAAa,SAAU,QAAO,EAAE,mBAAmB,aAAa;AACpE,KAAI,aAAa,aAAc,QAAO,EAAE,YAAY,iBAAiB;AACrE,QAAO;EAAE,mBAAmB;EAAa,YAAY;EAAiB"}