@copilotkit/aimock 1.45.1 → 1.47.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 (492) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +25 -1
  4. package/README.md +11 -2
  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/aws-event-stream.cjs +20 -23
  25. package/dist/aws-event-stream.cjs.map +1 -1
  26. package/dist/aws-event-stream.d.cts +0 -1
  27. package/dist/aws-event-stream.d.ts +0 -1
  28. package/dist/aws-event-stream.js +20 -24
  29. package/dist/aws-event-stream.js.map +1 -1
  30. package/dist/batches.cjs +2 -4
  31. package/dist/batches.cjs.map +1 -1
  32. package/dist/batches.d.cts.map +1 -1
  33. package/dist/batches.d.ts.map +1 -1
  34. package/dist/batches.js +2 -4
  35. package/dist/batches.js.map +1 -1
  36. package/dist/bedrock-converse.cjs +139 -161
  37. package/dist/bedrock-converse.cjs.map +1 -1
  38. package/dist/bedrock-converse.d.cts.map +1 -1
  39. package/dist/bedrock-converse.d.ts.map +1 -1
  40. package/dist/bedrock-converse.js +137 -159
  41. package/dist/bedrock-converse.js.map +1 -1
  42. package/dist/bedrock.cjs +175 -216
  43. package/dist/bedrock.cjs.map +1 -1
  44. package/dist/bedrock.d.cts.map +1 -1
  45. package/dist/bedrock.d.ts.map +1 -1
  46. package/dist/bedrock.js +172 -213
  47. package/dist/bedrock.js.map +1 -1
  48. package/dist/byteplus-video.cjs +11 -10
  49. package/dist/byteplus-video.cjs.map +1 -1
  50. package/dist/byteplus-video.d.cts.map +1 -1
  51. package/dist/byteplus-video.d.ts.map +1 -1
  52. package/dist/byteplus-video.js +5 -4
  53. package/dist/byteplus-video.js.map +1 -1
  54. package/dist/chaos.cjs +5 -4
  55. package/dist/chaos.cjs.map +1 -1
  56. package/dist/chaos.d.cts.map +1 -1
  57. package/dist/chaos.d.ts.map +1 -1
  58. package/dist/chaos.js +5 -4
  59. package/dist/chaos.js.map +1 -1
  60. package/dist/cli.cjs +15 -0
  61. package/dist/cli.cjs.map +1 -1
  62. package/dist/cli.js +15 -0
  63. package/dist/cli.js.map +1 -1
  64. package/dist/cohere.cjs +107 -180
  65. package/dist/cohere.cjs.map +1 -1
  66. package/dist/cohere.d.cts.map +1 -1
  67. package/dist/cohere.d.ts.map +1 -1
  68. package/dist/cohere.js +106 -179
  69. package/dist/cohere.js.map +1 -1
  70. package/dist/config-loader.cjs +29 -1
  71. package/dist/config-loader.cjs.map +1 -1
  72. package/dist/config-loader.d.cts +7 -1
  73. package/dist/config-loader.d.cts.map +1 -1
  74. package/dist/config-loader.d.ts +7 -1
  75. package/dist/config-loader.d.ts.map +1 -1
  76. package/dist/config-loader.js +29 -2
  77. package/dist/config-loader.js.map +1 -1
  78. package/dist/count-tokens.cjs +146 -0
  79. package/dist/count-tokens.cjs.map +1 -0
  80. package/dist/count-tokens.js +146 -0
  81. package/dist/count-tokens.js.map +1 -0
  82. package/dist/elevenlabs-audio.cjs +36 -34
  83. package/dist/elevenlabs-audio.cjs.map +1 -1
  84. package/dist/elevenlabs-audio.d.cts.map +1 -1
  85. package/dist/elevenlabs-audio.d.ts.map +1 -1
  86. package/dist/elevenlabs-audio.js +33 -31
  87. package/dist/elevenlabs-audio.js.map +1 -1
  88. package/dist/elevenlabs-voice.cjs +38 -37
  89. package/dist/elevenlabs-voice.cjs.map +1 -1
  90. package/dist/elevenlabs-voice.d.cts.map +1 -1
  91. package/dist/elevenlabs-voice.d.ts.map +1 -1
  92. package/dist/elevenlabs-voice.js +33 -32
  93. package/dist/elevenlabs-voice.js.map +1 -1
  94. package/dist/embedding-request.cjs +16 -0
  95. package/dist/embedding-request.cjs.map +1 -0
  96. package/dist/embedding-request.js +14 -0
  97. package/dist/embedding-request.js.map +1 -0
  98. package/dist/embeddings.cjs +30 -20
  99. package/dist/embeddings.cjs.map +1 -1
  100. package/dist/embeddings.d.cts.map +1 -1
  101. package/dist/embeddings.d.ts.map +1 -1
  102. package/dist/embeddings.js +30 -20
  103. package/dist/embeddings.js.map +1 -1
  104. package/dist/fal-audio.cjs +45 -43
  105. package/dist/fal-audio.cjs.map +1 -1
  106. package/dist/fal-audio.d.cts.map +1 -1
  107. package/dist/fal-audio.d.ts.map +1 -1
  108. package/dist/fal-audio.js +42 -40
  109. package/dist/fal-audio.js.map +1 -1
  110. package/dist/fal.cjs +17 -15
  111. package/dist/fal.cjs.map +1 -1
  112. package/dist/fal.js +16 -14
  113. package/dist/fal.js.map +1 -1
  114. package/dist/files.cjs +2 -4
  115. package/dist/files.cjs.map +1 -1
  116. package/dist/files.d.cts.map +1 -1
  117. package/dist/files.d.ts.map +1 -1
  118. package/dist/files.js +2 -4
  119. package/dist/files.js.map +1 -1
  120. package/dist/fine-tuning.cjs +2 -4
  121. package/dist/fine-tuning.cjs.map +1 -1
  122. package/dist/fine-tuning.d.cts.map +1 -1
  123. package/dist/fine-tuning.d.ts.map +1 -1
  124. package/dist/fine-tuning.js +2 -4
  125. package/dist/fine-tuning.js.map +1 -1
  126. package/dist/fixture-loader.cjs +140 -44
  127. package/dist/fixture-loader.cjs.map +1 -1
  128. package/dist/fixture-loader.d.cts.map +1 -1
  129. package/dist/fixture-loader.d.ts.map +1 -1
  130. package/dist/fixture-loader.js +141 -46
  131. package/dist/fixture-loader.js.map +1 -1
  132. package/dist/gemini-embeddings.cjs +26 -24
  133. package/dist/gemini-embeddings.cjs.map +1 -1
  134. package/dist/gemini-embeddings.js +26 -24
  135. package/dist/gemini-embeddings.js.map +1 -1
  136. package/dist/gemini-interactions.cjs +113 -156
  137. package/dist/gemini-interactions.cjs.map +1 -1
  138. package/dist/gemini-interactions.d.cts +0 -1
  139. package/dist/gemini-interactions.d.cts.map +1 -1
  140. package/dist/gemini-interactions.d.ts +0 -1
  141. package/dist/gemini-interactions.d.ts.map +1 -1
  142. package/dist/gemini-interactions.js +113 -156
  143. package/dist/gemini-interactions.js.map +1 -1
  144. package/dist/gemini.cjs +295 -218
  145. package/dist/gemini.cjs.map +1 -1
  146. package/dist/gemini.d.cts.map +1 -1
  147. package/dist/gemini.d.ts.map +1 -1
  148. package/dist/gemini.js +295 -219
  149. package/dist/gemini.js.map +1 -1
  150. package/dist/grok-video.cjs +14 -12
  151. package/dist/grok-video.cjs.map +1 -1
  152. package/dist/grok-video.d.cts.map +1 -1
  153. package/dist/grok-video.d.ts.map +1 -1
  154. package/dist/grok-video.js +8 -6
  155. package/dist/grok-video.js.map +1 -1
  156. package/dist/helpers.cjs +411 -75
  157. package/dist/helpers.cjs.map +1 -1
  158. package/dist/helpers.d.cts +51 -1
  159. package/dist/helpers.d.cts.map +1 -1
  160. package/dist/helpers.d.ts +51 -1
  161. package/dist/helpers.d.ts.map +1 -1
  162. package/dist/helpers.js +402 -74
  163. package/dist/helpers.js.map +1 -1
  164. package/dist/images.cjs +30 -28
  165. package/dist/images.cjs.map +1 -1
  166. package/dist/images.d.cts.map +1 -1
  167. package/dist/images.d.ts.map +1 -1
  168. package/dist/images.js +27 -25
  169. package/dist/images.js.map +1 -1
  170. package/dist/index.cjs +4 -2
  171. package/dist/index.d.cts +4 -4
  172. package/dist/index.d.ts +4 -4
  173. package/dist/index.js +4 -4
  174. package/dist/journal.cjs +3 -1
  175. package/dist/journal.cjs.map +1 -1
  176. package/dist/journal.d.cts.map +1 -1
  177. package/dist/journal.d.ts.map +1 -1
  178. package/dist/journal.js +2 -1
  179. package/dist/journal.js.map +1 -1
  180. package/dist/llmock.cjs +3 -0
  181. package/dist/llmock.cjs.map +1 -1
  182. package/dist/llmock.d.cts.map +1 -1
  183. package/dist/llmock.d.ts.map +1 -1
  184. package/dist/llmock.js +3 -0
  185. package/dist/llmock.js.map +1 -1
  186. package/dist/mcp-fakes.d.cts.map +1 -1
  187. package/dist/mcp-handler.cjs +7 -3
  188. package/dist/mcp-handler.cjs.map +1 -1
  189. package/dist/mcp-handler.js +7 -3
  190. package/dist/mcp-handler.js.map +1 -1
  191. package/dist/mcp-recorder.cjs +2 -1
  192. package/dist/mcp-recorder.cjs.map +1 -1
  193. package/dist/mcp-recorder.js +3 -2
  194. package/dist/mcp-recorder.js.map +1 -1
  195. package/dist/messages.cjs +235 -202
  196. package/dist/messages.cjs.map +1 -1
  197. package/dist/messages.d.cts.map +1 -1
  198. package/dist/messages.d.ts.map +1 -1
  199. package/dist/messages.js +234 -202
  200. package/dist/messages.js.map +1 -1
  201. package/dist/metrics.cjs +5 -2
  202. package/dist/metrics.cjs.map +1 -1
  203. package/dist/metrics.d.cts.map +1 -1
  204. package/dist/metrics.d.ts.map +1 -1
  205. package/dist/metrics.js +6 -3
  206. package/dist/metrics.js.map +1 -1
  207. package/dist/misbehavior.cjs +62 -3
  208. package/dist/misbehavior.cjs.map +1 -1
  209. package/dist/misbehavior.d.cts.map +1 -1
  210. package/dist/misbehavior.d.ts.map +1 -1
  211. package/dist/misbehavior.js +63 -4
  212. package/dist/misbehavior.js.map +1 -1
  213. package/dist/model-utils.cjs +1 -0
  214. package/dist/model-utils.cjs.map +1 -1
  215. package/dist/model-utils.js +1 -1
  216. package/dist/model-utils.js.map +1 -1
  217. package/dist/moderation.cjs +15 -12
  218. package/dist/moderation.cjs.map +1 -1
  219. package/dist/moderation.js +14 -11
  220. package/dist/moderation.js.map +1 -1
  221. package/dist/ndjson-writer.cjs +21 -23
  222. package/dist/ndjson-writer.cjs.map +1 -1
  223. package/dist/ndjson-writer.d.cts +0 -1
  224. package/dist/ndjson-writer.d.cts.map +1 -1
  225. package/dist/ndjson-writer.d.ts +0 -1
  226. package/dist/ndjson-writer.d.ts.map +1 -1
  227. package/dist/ndjson-writer.js +21 -24
  228. package/dist/ndjson-writer.js.map +1 -1
  229. package/dist/ollama.cjs +276 -210
  230. package/dist/ollama.cjs.map +1 -1
  231. package/dist/ollama.d.cts.map +1 -1
  232. package/dist/ollama.d.ts.map +1 -1
  233. package/dist/ollama.js +273 -207
  234. package/dist/ollama.js.map +1 -1
  235. package/dist/openapi.cjs +323 -3
  236. package/dist/openapi.cjs.map +1 -1
  237. package/dist/openapi.d.cts.map +1 -1
  238. package/dist/openapi.d.ts.map +1 -1
  239. package/dist/openapi.js +324 -4
  240. package/dist/openapi.js.map +1 -1
  241. package/dist/openrouter-chat.cjs +11 -155
  242. package/dist/openrouter-chat.cjs.map +1 -1
  243. package/dist/openrouter-chat.js +11 -155
  244. package/dist/openrouter-chat.js.map +1 -1
  245. package/dist/openrouter-video.cjs +51 -74
  246. package/dist/openrouter-video.cjs.map +1 -1
  247. package/dist/openrouter-video.d.cts.map +1 -1
  248. package/dist/openrouter-video.d.ts.map +1 -1
  249. package/dist/openrouter-video.js +37 -60
  250. package/dist/openrouter-video.js.map +1 -1
  251. package/dist/raw-validation.cjs +177 -0
  252. package/dist/raw-validation.cjs.map +1 -0
  253. package/dist/raw-validation.js +176 -0
  254. package/dist/raw-validation.js.map +1 -0
  255. package/dist/recorder.cjs +176 -95
  256. package/dist/recorder.cjs.map +1 -1
  257. package/dist/recorder.d.cts.map +1 -1
  258. package/dist/recorder.d.ts.map +1 -1
  259. package/dist/recorder.js +176 -95
  260. package/dist/recorder.js.map +1 -1
  261. package/dist/rerank.cjs +13 -11
  262. package/dist/rerank.cjs.map +1 -1
  263. package/dist/rerank.js +12 -10
  264. package/dist/rerank.js.map +1 -1
  265. package/dist/response/catalog/anthropic-page.cjs +39 -0
  266. package/dist/response/catalog/anthropic-page.cjs.map +1 -0
  267. package/dist/response/catalog/anthropic-page.js +38 -0
  268. package/dist/response/catalog/anthropic-page.js.map +1 -0
  269. package/dist/response/catalog/collect.cjs +61 -0
  270. package/dist/response/catalog/collect.cjs.map +1 -0
  271. package/dist/response/catalog/collect.js +59 -0
  272. package/dist/response/catalog/collect.js.map +1 -0
  273. package/dist/response/catalog/gemini-page.cjs +25 -0
  274. package/dist/response/catalog/gemini-page.cjs.map +1 -0
  275. package/dist/response/catalog/gemini-page.js +24 -0
  276. package/dist/response/catalog/gemini-page.js.map +1 -0
  277. package/dist/response/catalog/render.cjs +182 -0
  278. package/dist/response/catalog/render.cjs.map +1 -0
  279. package/dist/response/catalog/render.js +171 -0
  280. package/dist/response/catalog/render.js.map +1 -0
  281. package/dist/response/deliver.cjs +144 -0
  282. package/dist/response/deliver.cjs.map +1 -0
  283. package/dist/response/deliver.js +143 -0
  284. package/dist/response/deliver.js.map +1 -0
  285. package/dist/response/errors.cjs +225 -0
  286. package/dist/response/errors.cjs.map +1 -0
  287. package/dist/response/errors.js +224 -0
  288. package/dist/response/errors.js.map +1 -0
  289. package/dist/response/finish.cjs +39 -0
  290. package/dist/response/finish.cjs.map +1 -0
  291. package/dist/response/finish.js +35 -0
  292. package/dist/response/finish.js.map +1 -0
  293. package/dist/response/frame-loop.cjs +102 -0
  294. package/dist/response/frame-loop.cjs.map +1 -0
  295. package/dist/response/frame-loop.js +100 -0
  296. package/dist/response/frame-loop.js.map +1 -0
  297. package/dist/response/lifecycle.cjs +223 -0
  298. package/dist/response/lifecycle.cjs.map +1 -0
  299. package/dist/response/lifecycle.js +211 -0
  300. package/dist/response/lifecycle.js.map +1 -0
  301. package/dist/response/policy.cjs +126 -0
  302. package/dist/response/policy.cjs.map +1 -0
  303. package/dist/response/policy.js +120 -0
  304. package/dist/response/policy.js.map +1 -0
  305. package/dist/response/profiles.cjs +69 -0
  306. package/dist/response/profiles.cjs.map +1 -0
  307. package/dist/response/profiles.js +65 -0
  308. package/dist/response/profiles.js.map +1 -0
  309. package/dist/response/proxy.cjs +71 -0
  310. package/dist/response/proxy.cjs.map +1 -0
  311. package/dist/response/proxy.js +70 -0
  312. package/dist/response/proxy.js.map +1 -0
  313. package/dist/response/raw.cjs +228 -0
  314. package/dist/response/raw.cjs.map +1 -0
  315. package/dist/response/raw.js +227 -0
  316. package/dist/response/raw.js.map +1 -0
  317. package/dist/response/timing.cjs +157 -0
  318. package/dist/response/timing.cjs.map +1 -0
  319. package/dist/response/timing.js +150 -0
  320. package/dist/response/timing.js.map +1 -0
  321. package/dist/response/usage/codecs/anthropic.cjs +52 -0
  322. package/dist/response/usage/codecs/anthropic.cjs.map +1 -0
  323. package/dist/response/usage/codecs/anthropic.js +50 -0
  324. package/dist/response/usage/codecs/anthropic.js.map +1 -0
  325. package/dist/response/usage/codecs/cohere.cjs +36 -0
  326. package/dist/response/usage/codecs/cohere.cjs.map +1 -0
  327. package/dist/response/usage/codecs/cohere.js +35 -0
  328. package/dist/response/usage/codecs/cohere.js.map +1 -0
  329. package/dist/response/usage/codecs/converse.cjs +16 -0
  330. package/dist/response/usage/codecs/converse.cjs.map +1 -0
  331. package/dist/response/usage/codecs/converse.js +15 -0
  332. package/dist/response/usage/codecs/converse.js.map +1 -0
  333. package/dist/response/usage/codecs/gemini.cjs +31 -0
  334. package/dist/response/usage/codecs/gemini.cjs.map +1 -0
  335. package/dist/response/usage/codecs/gemini.js +31 -0
  336. package/dist/response/usage/codecs/gemini.js.map +1 -0
  337. package/dist/response/usage/codecs/interactions.cjs +22 -0
  338. package/dist/response/usage/codecs/interactions.cjs.map +1 -0
  339. package/dist/response/usage/codecs/interactions.js +21 -0
  340. package/dist/response/usage/codecs/interactions.js.map +1 -0
  341. package/dist/response/usage/codecs/ollama.cjs +17 -0
  342. package/dist/response/usage/codecs/ollama.cjs.map +1 -0
  343. package/dist/response/usage/codecs/ollama.js +17 -0
  344. package/dist/response/usage/codecs/ollama.js.map +1 -0
  345. package/dist/response/usage/codecs/openai.cjs +52 -0
  346. package/dist/response/usage/codecs/openai.cjs.map +1 -0
  347. package/dist/response/usage/codecs/openai.js +50 -0
  348. package/dist/response/usage/codecs/openai.js.map +1 -0
  349. package/dist/response/usage/codecs/openrouter.cjs +68 -0
  350. package/dist/response/usage/codecs/openrouter.cjs.map +1 -0
  351. package/dist/response/usage/codecs/openrouter.js +67 -0
  352. package/dist/response/usage/codecs/openrouter.js.map +1 -0
  353. package/dist/response/usage/codecs/realtime.cjs +19 -0
  354. package/dist/response/usage/codecs/realtime.cjs.map +1 -0
  355. package/dist/response/usage/codecs/realtime.js +18 -0
  356. package/dist/response/usage/codecs/realtime.js.map +1 -0
  357. package/dist/response/usage/codecs/responses.cjs +21 -0
  358. package/dist/response/usage/codecs/responses.cjs.map +1 -0
  359. package/dist/response/usage/codecs/responses.js +20 -0
  360. package/dist/response/usage/codecs/responses.js.map +1 -0
  361. package/dist/response/usage/estimate.cjs +23 -0
  362. package/dist/response/usage/estimate.cjs.map +1 -0
  363. package/dist/response/usage/estimate.js +21 -0
  364. package/dist/response/usage/estimate.js.map +1 -0
  365. package/dist/response/usage/fields.cjs +72 -0
  366. package/dist/response/usage/fields.cjs.map +1 -0
  367. package/dist/response/usage/fields.js +70 -0
  368. package/dist/response/usage/fields.js.map +1 -0
  369. package/dist/response/usage/recording.cjs +52 -0
  370. package/dist/response/usage/recording.cjs.map +1 -0
  371. package/dist/response/usage/recording.js +52 -0
  372. package/dist/response/usage/recording.js.map +1 -0
  373. package/dist/responses.cjs +304 -196
  374. package/dist/responses.cjs.map +1 -1
  375. package/dist/responses.d.cts.map +1 -1
  376. package/dist/responses.d.ts.map +1 -1
  377. package/dist/responses.js +303 -195
  378. package/dist/responses.js.map +1 -1
  379. package/dist/route-registry.cjs +45 -0
  380. package/dist/route-registry.cjs.map +1 -1
  381. package/dist/route-registry.d.cts.map +1 -1
  382. package/dist/route-registry.d.ts.map +1 -1
  383. package/dist/route-registry.js +41 -1
  384. package/dist/route-registry.js.map +1 -1
  385. package/dist/router.cjs +24 -4
  386. package/dist/router.cjs.map +1 -1
  387. package/dist/router.d.cts +7 -1
  388. package/dist/router.d.cts.map +1 -1
  389. package/dist/router.d.ts +7 -1
  390. package/dist/router.d.ts.map +1 -1
  391. package/dist/router.js +24 -5
  392. package/dist/router.js.map +1 -1
  393. package/dist/search.cjs +13 -11
  394. package/dist/search.cjs.map +1 -1
  395. package/dist/search.js +12 -10
  396. package/dist/search.js.map +1 -1
  397. package/dist/server.cjs +293 -248
  398. package/dist/server.cjs.map +1 -1
  399. package/dist/server.d.cts.map +1 -1
  400. package/dist/server.d.ts.map +1 -1
  401. package/dist/server.js +294 -249
  402. package/dist/server.js.map +1 -1
  403. package/dist/speech.cjs +20 -18
  404. package/dist/speech.cjs.map +1 -1
  405. package/dist/speech.d.cts.map +1 -1
  406. package/dist/speech.d.ts.map +1 -1
  407. package/dist/speech.js +19 -17
  408. package/dist/speech.js.map +1 -1
  409. package/dist/sse-writer.cjs +56 -30
  410. package/dist/sse-writer.cjs.map +1 -1
  411. package/dist/sse-writer.d.cts +0 -1
  412. package/dist/sse-writer.d.cts.map +1 -1
  413. package/dist/sse-writer.d.ts +0 -1
  414. package/dist/sse-writer.d.ts.map +1 -1
  415. package/dist/sse-writer.js +55 -31
  416. package/dist/sse-writer.js.map +1 -1
  417. package/dist/stream-collapse.cjs +118 -11
  418. package/dist/stream-collapse.cjs.map +1 -1
  419. package/dist/stream-collapse.d.cts +10 -9
  420. package/dist/stream-collapse.d.cts.map +1 -1
  421. package/dist/stream-collapse.d.ts +10 -9
  422. package/dist/stream-collapse.d.ts.map +1 -1
  423. package/dist/stream-collapse.js +118 -11
  424. package/dist/stream-collapse.js.map +1 -1
  425. package/dist/transcription.cjs +31 -43
  426. package/dist/transcription.cjs.map +1 -1
  427. package/dist/transcription.d.cts.map +1 -1
  428. package/dist/transcription.d.ts.map +1 -1
  429. package/dist/transcription.js +31 -43
  430. package/dist/transcription.js.map +1 -1
  431. package/dist/types.cjs.map +1 -1
  432. package/dist/types.d.cts +231 -9
  433. package/dist/types.d.cts.map +1 -1
  434. package/dist/types.d.ts +231 -9
  435. package/dist/types.d.ts.map +1 -1
  436. package/dist/types.js.map +1 -1
  437. package/dist/vector-mock.cjs +3 -8
  438. package/dist/vector-mock.cjs.map +1 -1
  439. package/dist/vector-mock.d.cts.map +1 -1
  440. package/dist/vector-mock.d.ts.map +1 -1
  441. package/dist/vector-mock.js +3 -8
  442. package/dist/vector-mock.js.map +1 -1
  443. package/dist/vector-stores.cjs +2 -4
  444. package/dist/vector-stores.cjs.map +1 -1
  445. package/dist/vector-stores.d.cts.map +1 -1
  446. package/dist/vector-stores.d.ts.map +1 -1
  447. package/dist/vector-stores.js +2 -4
  448. package/dist/vector-stores.js.map +1 -1
  449. package/dist/veo-video.cjs +16 -14
  450. package/dist/veo-video.cjs.map +1 -1
  451. package/dist/veo-video.js +10 -8
  452. package/dist/veo-video.js.map +1 -1
  453. package/dist/video.cjs +21 -19
  454. package/dist/video.cjs.map +1 -1
  455. package/dist/video.d.cts.map +1 -1
  456. package/dist/video.d.ts.map +1 -1
  457. package/dist/video.js +20 -18
  458. package/dist/video.js.map +1 -1
  459. package/dist/ws-framing.cjs +12 -6
  460. package/dist/ws-framing.cjs.map +1 -1
  461. package/dist/ws-framing.d.cts +2 -0
  462. package/dist/ws-framing.d.cts.map +1 -1
  463. package/dist/ws-framing.d.ts +2 -0
  464. package/dist/ws-framing.d.ts.map +1 -1
  465. package/dist/ws-framing.js +12 -6
  466. package/dist/ws-framing.js.map +1 -1
  467. package/dist/ws-gemini-live.cjs +131 -96
  468. package/dist/ws-gemini-live.cjs.map +1 -1
  469. package/dist/ws-gemini-live.d.cts +0 -1
  470. package/dist/ws-gemini-live.d.cts.map +1 -1
  471. package/dist/ws-gemini-live.d.ts +0 -1
  472. package/dist/ws-gemini-live.d.ts.map +1 -1
  473. package/dist/ws-gemini-live.js +130 -95
  474. package/dist/ws-gemini-live.js.map +1 -1
  475. package/dist/ws-live.cjs +6 -5
  476. package/dist/ws-live.cjs.map +1 -1
  477. package/dist/ws-live.js +5 -4
  478. package/dist/ws-live.js.map +1 -1
  479. package/dist/ws-realtime.cjs +108 -124
  480. package/dist/ws-realtime.cjs.map +1 -1
  481. package/dist/ws-realtime.d.cts.map +1 -1
  482. package/dist/ws-realtime.d.ts.map +1 -1
  483. package/dist/ws-realtime.js +105 -121
  484. package/dist/ws-realtime.js.map +1 -1
  485. package/dist/ws-responses.cjs +80 -59
  486. package/dist/ws-responses.cjs.map +1 -1
  487. package/dist/ws-responses.d.cts.map +1 -1
  488. package/dist/ws-responses.d.ts.map +1 -1
  489. package/dist/ws-responses.js +79 -58
  490. package/dist/ws-responses.js.map +1 -1
  491. package/package.json +4 -1
  492. package/skills/write-fixtures/SKILL.md +57 -16
@@ -1 +1 @@
1
- {"version":3,"file":"bedrock-converse.cjs","names":["servedToolArgs","resolveFixtureBlockOutcome","generateToolUseId","isCombinedFixtureResponse","isToolCallResponse","toolArgsForWire","resolveReasoningForModel","resolveStrictMode","estimatePromptTokens","estimateTokens","InvalidToolArgumentsError","flattenHeaders","isJsonObject","getContext","getTestId","matchFixtureDiagnostic","recordMatchOptions","applyChaosAsync","strictNoMatchMessage","strictNoMatchLogLine","strictOverrideField","proxyAndRecord","resolveResponse","planMisbehavior","isErrorResponse","extractOverrides","requireEmittedFunctionToolCalls","isTextResponse","createInterruptionSignal","writeEventStream"],"sources":["../src/bedrock-converse.ts"],"sourcesContent":["/**\n * AWS Bedrock Converse API support.\n *\n * Translates incoming Converse and Converse-stream requests (Bedrock Converse\n * format) into the ChatCompletionRequest format used by the fixture router,\n * and converts fixture responses back into Converse API format — either a\n * single JSON response or an Event Stream binary stream.\n */\n\nimport type * as http from \"node:http\";\nimport type {\n ChatCompletionRequest,\n ChatMessage,\n Fixture,\n FixtureBlock,\n HandlerDefaults,\n ResponseOverrides,\n ToolCall,\n ToolDefinition,\n} from \"./types.js\";\nimport {\n requireEmittedFunctionToolCalls,\n type FunctionFixtureBlock,\n generateToolUseId,\n estimatePromptTokens,\n estimateTokens,\n extractOverrides,\n isTextResponse,\n isToolCallResponse,\n isCombinedFixtureResponse,\n resolveFixtureBlockOutcome,\n isErrorResponse,\n flattenHeaders,\n isJsonObject,\n getContext,\n getTestId,\n resolveResponse,\n resolveReasoningForModel,\n resolveStrictMode,\n strictOverrideField,\n strictNoMatchMessage,\n strictNoMatchLogLine,\n toolArgsForWire,\n servedToolArgs,\n InvalidToolArgumentsError,\n} from \"./helpers.js\";\nimport { matchFixtureDiagnostic, recordMatchOptions } from \"./router.js\";\nimport { writeErrorResponse } from \"./sse-writer.js\";\nimport { writeEventStream } from \"./aws-event-stream.js\";\nimport { createInterruptionSignal } from \"./interruption.js\";\nimport type { Journal } from \"./journal.js\";\nimport type { Logger } from \"./logger.js\";\nimport { applyChaosAsync } from \"./chaos.js\";\nimport { proxyAndRecord } from \"./recorder.js\";\nimport { planMisbehavior, recordMisbehaviorOutcome, type MisbehaviorPlan } from \"./misbehavior.js\";\n\n// ─── Converse request types ─────────────────────────────────────────────────\n\ninterface ConverseContentBlock {\n text?: string;\n toolUse?: { toolUseId: string; name: string; input: object };\n toolResult?: { toolUseId: string; content: { text?: string }[] };\n}\n\ninterface ConverseMessage {\n role: \"user\" | \"assistant\";\n content: ConverseContentBlock[];\n}\n\ninterface ConverseToolSpec {\n name: string;\n description?: string;\n inputSchema?: object;\n}\n\ninterface ConverseRequest {\n messages: ConverseMessage[];\n system?: { text: string }[];\n inferenceConfig?: { maxTokens?: number; temperature?: number };\n toolConfig?: { tools: { toolSpec: ConverseToolSpec }[] };\n}\n\n// ─── Converse stop_reason mapping ──────────────────────────────────────────\n\nfunction converseStopReason(\n overrideFinishReason: string | undefined,\n defaultReason: string,\n): string {\n if (!overrideFinishReason) return defaultReason;\n if (overrideFinishReason === \"stop\") return \"end_turn\";\n if (overrideFinishReason === \"tool_calls\") return \"tool_use\";\n if (overrideFinishReason === \"length\") return \"max_tokens\";\n return overrideFinishReason;\n}\n\n/**\n * Build Converse-format usage from fixture overrides.\n *\n * When no overrides are provided (the common case for mocks), all token\n * counts default to zero. This is intentional — aimock is a mock server\n * and does not perform real tokenisation. Callers that need non-zero\n * usage should supply explicit `usage` overrides in their fixture.\n */\nfunction converseUsage(overrides?: ResponseOverrides): {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n} {\n if (!overrides?.usage) return { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\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 { inputTokens, outputTokens, totalTokens: inputTokens + outputTokens };\n}\n\nfunction parseConverseToolArgumentsForStream(toolCall: ToolCall, logger: Logger): string {\n return servedToolArgs(toolCall, \"string\", logger).text;\n}\n\nfunction buildBedrockStreamTextEvents(\n content: string,\n chunkSize: number,\n reasoning?: string,\n overrides?: ResponseOverrides,\n): Array<{ eventType: string; payload: object }> {\n const events: Array<{ eventType: string; payload: object }> = [\n { eventType: \"messageStart\", payload: { role: \"assistant\" } },\n ];\n\n if (reasoning) {\n const blockIndex = 0;\n events.push({\n eventType: \"contentBlockStart\",\n payload: { contentBlockIndex: blockIndex, start: { reasoningContent: {} } },\n });\n for (let i = 0; i < reasoning.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: blockIndex,\n delta: { reasoningContent: { text: reasoning.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: blockIndex },\n });\n }\n\n const textBlockIndex = reasoning ? 1 : 0;\n events.push({\n eventType: \"contentBlockStart\",\n payload: { contentBlockIndex: textBlockIndex, start: {} },\n });\n for (let i = 0; i < content.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: textBlockIndex,\n delta: { text: content.slice(i, i + chunkSize) },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: textBlockIndex },\n });\n events.push({\n eventType: \"messageStop\",\n payload: { stopReason: converseStopReason(overrides?.finishReason, \"end_turn\") },\n });\n const usage = converseUsage(overrides);\n events.push({\n eventType: \"metadata\",\n payload: { usage, metrics: { latencyMs: 0 } },\n });\n return events;\n}\n\nfunction buildBedrockStreamContentWithToolCallsEvents(\n content: string,\n toolCalls: ToolCall[],\n chunkSize: number,\n logger: Logger,\n reasoning?: string,\n overrides?: ResponseOverrides,\n blocks?: FixtureBlock[],\n): Array<{ eventType: string; payload: object }> {\n if (blocks && blocks.length > 0) {\n // NEW PATH: stream `text`/`toolUse` content blocks in the fixture's array\n // order. Converse's indexed contentBlock events make ordering observable —\n // a `toolCall` block can take a lower `contentBlockIndex` than a `text`\n // block. Indices are assigned in encounter order, continuing from any\n // leading reasoning block (which occupies index 0).\n const events: Array<{ eventType: string; payload: object }> = [\n { eventType: \"messageStart\", payload: { role: \"assistant\" } },\n ];\n\n let blockIndex = 0;\n if (reasoning) {\n events.push({\n eventType: \"contentBlockStart\",\n payload: { contentBlockIndex: blockIndex, start: { reasoningContent: {} } },\n });\n for (let i = 0; i < reasoning.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: blockIndex,\n delta: { reasoningContent: { text: reasoning.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: blockIndex },\n });\n blockIndex++;\n }\n\n const outcome = resolveFixtureBlockOutcome(blocks);\n const ordered = outcome.ordered;\n for (const block of ordered) {\n if (block.type === \"text\") {\n events.push({\n eventType: \"contentBlockStart\",\n payload: { contentBlockIndex: blockIndex, start: {} },\n });\n for (let i = 0; i < block.text.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: blockIndex,\n delta: { text: block.text.slice(i, i + chunkSize) },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: blockIndex },\n });\n } else {\n const toolUseId = block.id || generateToolUseId();\n events.push({\n eventType: \"contentBlockStart\",\n payload: {\n contentBlockIndex: blockIndex,\n start: { toolUse: { toolUseId, name: block.name } },\n },\n });\n const argsStr = parseConverseToolArgumentsForStream(\n { name: block.name, arguments: block.arguments } as ToolCall,\n logger,\n );\n for (let i = 0; i < argsStr.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: blockIndex,\n delta: { toolUse: { input: argsStr.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: blockIndex },\n });\n }\n blockIndex++;\n }\n\n events.push({\n eventType: \"messageStop\",\n payload: {\n stopReason: converseStopReason(\n overrides?.finishReason,\n outcome.hasToolCalls ? \"tool_use\" : \"end_turn\",\n ),\n },\n });\n events.push({\n eventType: \"metadata\",\n payload: { usage: converseUsage(overrides), metrics: { latencyMs: 0 } },\n });\n return events;\n }\n\n const events = buildBedrockStreamTextEvents(content, chunkSize, reasoning, overrides);\n // Remove trailing metadata + messageStop events — we re-emit them after tool blocks\n for (let i = events.length - 1; i >= 0; i--) {\n const et = (events[i] as { eventType: string }).eventType;\n if (et === \"metadata\" || et === \"messageStop\") {\n events.splice(i, 1);\n }\n }\n let blockIndex = reasoning ? 2 : 1;\n\n for (const tc of toolCalls) {\n const toolUseId = tc.id || generateToolUseId();\n events.push({\n eventType: \"contentBlockStart\",\n payload: {\n contentBlockIndex: blockIndex,\n start: { toolUse: { toolUseId, name: tc.name } },\n },\n });\n const argsStr = parseConverseToolArgumentsForStream(tc, logger);\n for (let i = 0; i < argsStr.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: blockIndex,\n delta: { toolUse: { input: argsStr.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: blockIndex },\n });\n blockIndex++;\n }\n events.push({\n eventType: \"messageStop\",\n payload: { stopReason: converseStopReason(overrides?.finishReason, \"tool_use\") },\n });\n const usage = converseUsage(overrides);\n events.push({\n eventType: \"metadata\",\n payload: { usage, metrics: { latencyMs: 0 } },\n });\n return events;\n}\n\nfunction buildBedrockStreamToolCallEvents(\n toolCalls: ToolCall[],\n chunkSize: number,\n logger: Logger,\n reasoning?: string,\n overrides?: ResponseOverrides,\n): Array<{ eventType: string; payload: object }> {\n const events: Array<{ eventType: string; payload: object }> = [\n { eventType: \"messageStart\", payload: { role: \"assistant\" } },\n ];\n\n // A leading reasoning block occupies contentBlockIndex 0, shifting the\n // toolUse blocks by +1 (mirrors the content+tool builder's sequencing).\n if (reasoning) {\n const reasoningBlockIndex = 0;\n events.push({\n eventType: \"contentBlockStart\",\n payload: { contentBlockIndex: reasoningBlockIndex, start: { reasoningContent: {} } },\n });\n for (let i = 0; i < reasoning.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: reasoningBlockIndex,\n delta: { reasoningContent: { text: reasoning.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: reasoningBlockIndex },\n });\n }\n\n const toolBlockOffset = reasoning ? 1 : 0;\n\n for (let tcIdx = 0; tcIdx < toolCalls.length; tcIdx++) {\n const blockIndex = tcIdx + toolBlockOffset;\n const tc = toolCalls[tcIdx];\n const toolUseId = tc.id || generateToolUseId();\n events.push({\n eventType: \"contentBlockStart\",\n payload: {\n contentBlockIndex: blockIndex,\n start: { toolUse: { toolUseId, name: tc.name } },\n },\n });\n const argsStr = parseConverseToolArgumentsForStream(tc, logger);\n for (let i = 0; i < argsStr.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: blockIndex,\n delta: { toolUse: { input: argsStr.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: blockIndex },\n });\n }\n events.push({\n eventType: \"messageStop\",\n payload: { stopReason: converseStopReason(overrides?.finishReason, \"tool_use\") },\n });\n const usage = converseUsage(overrides);\n events.push({\n eventType: \"metadata\",\n payload: { usage, metrics: { latencyMs: 0 } },\n });\n return events;\n}\n\n// ─── Input conversion: Converse → ChatCompletionRequest ─────────────────────\n\n/** Validate only message fields consumed by the user-message converter. */\nfunction validateConverseMessages(req: ConverseRequest): string | undefined {\n for (const [i, message] of req.messages.entries()) {\n if (message === null) return `Invalid request: messages[${i}] must not be null`;\n // Unknown roles are intentionally skipped; assistant toolResult is inert.\n if (message.role !== \"user\") continue;\n if (!Array.isArray(message.content)) {\n return `Invalid request: messages[${i}].content must be an array`;\n }\n for (const [j, block] of message.content.entries()) {\n if (block === null) {\n return `Invalid request: messages[${i}].content[${j}] must not be null`;\n }\n if (block.toolResult && !Array.isArray(block.toolResult.content)) {\n return `Invalid request: messages[${i}].content[${j}].toolResult.content must be an array`;\n }\n }\n }\n return undefined;\n}\n\n/** Validate only system fields consumed by the converter. */\nfunction validateConverseSystem(req: ConverseRequest): string | undefined {\n if (req.system && req.system.length > 0) {\n if (!Array.isArray(req.system)) {\n return \"Invalid request: system must be an array\";\n }\n for (const [i, block] of req.system.entries()) {\n if (block === null) return `Invalid request: system[${i}] must not be null`;\n }\n }\n return undefined;\n}\n\n/** Validate only tool fields consumed by the converter. */\nfunction validateConverseTools(req: ConverseRequest): string | undefined {\n if (req.toolConfig?.tools && req.toolConfig.tools.length > 0) {\n if (!Array.isArray(req.toolConfig.tools)) {\n return \"Invalid request: toolConfig.tools must be an array\";\n }\n for (const [i, tool] of req.toolConfig.tools.entries()) {\n if (tool?.toolSpec === null) {\n return `Invalid request: toolConfig.tools[${i}].toolSpec must not be null`;\n }\n }\n }\n return undefined;\n}\n\nexport function converseToCompletionRequest(\n req: ConverseRequest,\n modelId: string,\n logger?: Logger,\n): ChatCompletionRequest {\n const messages: ChatMessage[] = [];\n\n // system field → system message\n if (req.system && req.system.length > 0) {\n const systemText = req.system.map((s) => s.text).join(\"\");\n if (systemText) {\n messages.push({ role: \"system\", content: systemText });\n }\n }\n\n for (const msg of req.messages) {\n if (msg.role === \"user\") {\n // Check for toolResult blocks\n const toolResults = msg.content.filter((b) => b.toolResult);\n const textBlocks = msg.content.filter(\n (b) => b.text !== undefined && b.text !== \"\" && !b.toolResult,\n );\n const unsupportedBlocks = msg.content.filter(\n (b) => b.text === undefined && !b.toolResult && !b.toolUse,\n );\n if (unsupportedBlocks.length > 0 && logger) {\n logger.warn(\n `Converse user message contains unsupported content block types — these will be dropped during conversion`,\n );\n }\n\n if (toolResults.length > 0) {\n for (const block of toolResults) {\n const tr = block.toolResult!;\n const resultContent = tr.content.map((c) => c.text ?? \"\").join(\"\");\n messages.push({\n role: \"tool\",\n content: resultContent,\n tool_call_id: tr.toolUseId,\n });\n }\n if (textBlocks.length > 0) {\n messages.push({\n role: \"user\",\n content: textBlocks.map((b) => b.text ?? \"\").join(\"\"),\n });\n }\n continue;\n }\n\n // Plain user message\n const text = msg.content\n .filter((b) => b.text !== undefined && b.text !== \"\")\n .map((b) => b.text ?? \"\")\n .join(\"\");\n messages.push({ role: \"user\", content: text });\n } else if (msg.role === \"assistant\") {\n const toolUseBlocks = msg.content.filter((b) => b.toolUse);\n const textContent = msg.content\n .filter((b) => b.text !== undefined && b.text !== \"\")\n .map((b) => b.text ?? \"\")\n .join(\"\");\n\n if (toolUseBlocks.length > 0) {\n messages.push({\n role: \"assistant\",\n content: textContent || null,\n tool_calls: toolUseBlocks.map((b) => ({\n id: b.toolUse!.toolUseId,\n type: \"function\" as const,\n function: {\n name: b.toolUse!.name,\n arguments: JSON.stringify(b.toolUse!.input),\n },\n })),\n });\n } else {\n messages.push({ role: \"assistant\", content: textContent || null });\n }\n } else {\n const warnMsg = `Unexpected message role \"${msg.role}\" in Converse request — skipping`;\n if (logger) {\n logger.warn(warnMsg);\n }\n }\n }\n\n // Convert tools\n let tools: ToolDefinition[] | undefined;\n if (req.toolConfig?.tools && req.toolConfig.tools.length > 0) {\n tools = req.toolConfig.tools.map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.toolSpec.name,\n description: t.toolSpec.description,\n parameters: (t.toolSpec.inputSchema && \"json\" in t.toolSpec.inputSchema\n ? (t.toolSpec.inputSchema as Record<string, unknown>).json\n : t.toolSpec.inputSchema) as object | undefined,\n },\n }));\n }\n\n return {\n model: modelId,\n messages,\n stream: false,\n temperature: req.inferenceConfig?.temperature,\n max_tokens: req.inferenceConfig?.maxTokens,\n tools,\n };\n}\n\n// ─── Response builders ──────────────────────────────────────────────────────\n\nfunction buildConverseTextResponse(\n content: string,\n reasoning?: string,\n overrides?: ResponseOverrides,\n): object {\n const contentBlocks: object[] = [];\n if (reasoning) {\n contentBlocks.push({\n reasoningContent: { reasoningText: { text: reasoning } },\n });\n }\n contentBlocks.push({ text: content });\n\n return {\n output: {\n message: {\n role: \"assistant\",\n content: contentBlocks,\n },\n },\n stopReason: converseStopReason(overrides?.finishReason, \"end_turn\"),\n usage: converseUsage(overrides),\n metrics: { latencyMs: 0 },\n };\n}\n\nfunction buildConverseToolCallResponse(\n toolCalls: ToolCall[],\n logger: Logger,\n reasoning?: string,\n overrides?: ResponseOverrides,\n): object {\n const contentBlocks: object[] = [];\n if (reasoning) {\n contentBlocks.push({\n reasoningContent: { reasoningText: { text: reasoning } },\n });\n }\n for (const tc of toolCalls) {\n const args = servedToolArgs(tc, \"object\", logger);\n contentBlocks.push({\n toolUse: {\n toolUseId: tc.id || generateToolUseId(),\n name: tc.name,\n input: args.value,\n },\n });\n }\n\n return {\n output: {\n message: {\n role: \"assistant\",\n content: contentBlocks,\n },\n },\n stopReason: converseStopReason(overrides?.finishReason, \"tool_use\"),\n usage: converseUsage(overrides),\n metrics: { latencyMs: 0 },\n };\n}\n\nfunction buildConverseContentWithToolCallsResponse(\n content: string,\n toolCalls: ToolCall[],\n logger: Logger,\n reasoning?: string,\n overrides?: ResponseOverrides,\n blocks?: FixtureBlock[],\n): object {\n const contentBlocks: object[] = [];\n if (reasoning) {\n contentBlocks.push({\n reasoningContent: { reasoningText: { text: reasoning } },\n });\n }\n\n // Converse `input` requires a JSON value; reject malformed arguments before\n // emitting an object response instead of substituting an empty object.\n const toolUseBlock = (tc: { name: string; arguments: string; id?: string }): object => {\n const args = servedToolArgs(tc, \"object\", logger);\n return {\n toolUse: {\n toolUseId: tc.id || generateToolUseId(),\n name: tc.name,\n input: args.value,\n },\n };\n };\n\n let blockHasTools: boolean | undefined;\n if (blocks && blocks.length > 0) {\n // NEW PATH: the non-streaming `content[]` array is positionally observable,\n // so emit `text`/`toolUse` content blocks in the fixture's ARRAY ORDER\n // (after any leading reasoning block). A toolCall block before a text block\n // therefore yields a toolUse ahead of the text — matching the streaming\n // path for the same `blocks` fixture.\n const outcome = resolveFixtureBlockOutcome(blocks);\n const ordered = outcome.ordered;\n blockHasTools = outcome.hasToolCalls;\n for (const block of ordered) {\n if (block.type === \"text\") {\n contentBlocks.push({ text: block.text });\n } else {\n contentBlocks.push(\n toolUseBlock({ name: block.name, arguments: block.arguments, id: block.id }),\n );\n }\n }\n } else {\n // LEGACY PATH (unchanged): text content block, then toolUse blocks in\n // `toolCalls` order.\n contentBlocks.push({ text: content });\n for (const tc of toolCalls) {\n contentBlocks.push(toolUseBlock(tc));\n }\n }\n\n return {\n output: {\n message: {\n role: \"assistant\",\n content: contentBlocks,\n },\n },\n stopReason: converseStopReason(\n overrides?.finishReason,\n blockHasTools === false ? \"end_turn\" : \"tool_use\",\n ),\n usage: converseUsage(overrides),\n metrics: { latencyMs: 0 },\n };\n}\n\ninterface PreparedConverseMisbehavior {\n plan: MisbehaviorPlan;\n blocks: FunctionFixtureBlock[];\n reasoning: string;\n stopReason: string;\n usage: ReturnType<typeof converseUsage>;\n}\n\n/** Prepare actual emitted calls and identities before journaling or writing bytes. */\nfunction prepareConverseMisbehavior(\n plan: MisbehaviorPlan,\n request: ChatCompletionRequest,\n stream: boolean,\n defaults: HandlerDefaults,\n headers: http.IncomingHttpHeaders,\n): PreparedConverseMisbehavior {\n const response = plan.response;\n const combined = isCombinedFixtureResponse(response);\n const outcome =\n combined && response.blocks?.length ? resolveFixtureBlockOutcome(response.blocks) : undefined;\n // The planner skips a custom-call fixture on this wire, so the narrowing\n // below never throws; the normal path's guard rejects it instead.\n let blocks: FunctionFixtureBlock[] = outcome?.ordered.map((block) => ({ ...block })) ?? [\n ...(\"content\" in response && response.content\n ? [{ type: \"text\" as const, text: response.content }]\n : []),\n ...(combined || isToolCallResponse(response) ? (response.toolCalls ?? []) : []).map((call) => ({\n type: \"toolCall\" as const,\n ...call,\n })),\n ];\n const calls = blocks.filter((block) => block.type === \"toolCall\");\n const preparedCalls = calls.map((call, index) => {\n const args = toolArgsForWire(call);\n return {\n ...call,\n arguments: args.kind === \"parsed\" ? args.text : args.raw,\n ...(index === plan.duplicateId?.destinationIndex\n ? {}\n : { id: call.id || generateToolUseId() }),\n };\n });\n if (plan.duplicateId) {\n preparedCalls[plan.duplicateId.destinationIndex].id =\n preparedCalls[plan.duplicateId.sourceIndex].id;\n }\n let callIndex = 0;\n blocks = blocks.map((block) => (block.type === \"toolCall\" ? preparedCalls[callIndex++] : block));\n let stopReason = converseStopReason(\n \"finishReason\" in response ? response.finishReason : undefined,\n calls.length ? \"tool_use\" : \"end_turn\",\n );\n if (plan.stop === \"stop\") stopReason = \"end_turn\";\n if (plan.stop === \"length\") stopReason = \"max_tokens\";\n if (plan.stop === \"content_filter\") stopReason = \"content_filtered\";\n if (!stream && plan.summary.fault === \"tool-args-invalid-json\") {\n // This native signal carries no malformed object and no toolUse blocks.\n blocks = blocks.filter((block) => block.type !== \"toolCall\");\n stopReason = \"malformed_tool_use\";\n }\n if (!stream && plan.summary.fault === \"stop-length-mid-tool\") {\n // Captured Converse max_tokens output retains the unfinished call with empty input.\n let index = 0;\n blocks = blocks.map((block) => {\n if (block.type !== \"toolCall\") return block;\n return index++ === plan.target?.index ? { ...block, arguments: \"{}\" } : block;\n });\n }\n const reasoning =\n plan.reasoning ??\n resolveReasoningForModel(\n \"reasoning\" in response ? response.reasoning : undefined,\n request.model,\n resolveStrictMode(defaults.strict, headers),\n defaults.logger,\n ) ??\n \"\";\n const servedToolCalls = blocks.flatMap((block) =>\n block.type === \"toolCall\"\n ? [{ name: block.name, arguments: block.arguments, id: block.id }]\n : [],\n );\n const inputTokens = estimatePromptTokens(request.messages);\n const outputTokens = estimateTokens(\n reasoning +\n blocks\n .map((block) => (block.type === \"text\" ? block.text : block.name + block.arguments))\n .join(\"\"),\n );\n return {\n plan: { ...plan, summary: { ...plan.summary, servedToolCalls } },\n blocks,\n reasoning,\n stopReason,\n usage: { inputTokens, outputTokens, totalTokens: inputTokens + outputTokens },\n };\n}\n\nfunction buildConverseMisbehaviorResponse(prepared: PreparedConverseMisbehavior): object {\n const content: object[] =\n prepared.reasoning || prepared.plan.summary.fault === \"reasoning-only\"\n ? [{ reasoningContent: { reasoningText: { text: prepared.reasoning } } }]\n : [];\n for (const block of prepared.blocks) {\n if (block.type === \"text\") content.push({ text: block.text });\n else {\n const args = toolArgsForWire(block);\n if (args.kind === \"verbatim\") throw new InvalidToolArgumentsError(block);\n content.push({ toolUse: { toolUseId: block.id, name: block.name, input: args.value } });\n }\n }\n return {\n output: { message: { role: \"assistant\", content } },\n stopReason: prepared.stopReason,\n usage: prepared.usage,\n metrics: { latencyMs: 0 },\n };\n}\n\nfunction buildConverseMisbehaviorEvents(\n prepared: PreparedConverseMisbehavior,\n chunkSize: number,\n): Array<{ eventType: string; payload: object }> {\n const events: Array<{ eventType: string; payload: object }> = [\n { eventType: \"messageStart\", payload: { role: \"assistant\" } },\n ];\n let index = 0;\n if (prepared.reasoning || prepared.plan.summary.fault === \"reasoning-only\") {\n events.push({\n eventType: \"contentBlockStart\",\n payload: { contentBlockIndex: index, start: { reasoningContent: {} } },\n });\n for (let i = 0; i < prepared.reasoning.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: index,\n delta: { reasoningContent: { text: prepared.reasoning.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({ eventType: \"contentBlockStop\", payload: { contentBlockIndex: index++ } });\n }\n for (const block of prepared.blocks) {\n events.push({\n eventType: \"contentBlockStart\",\n payload: {\n contentBlockIndex: index,\n start:\n block.type === \"toolCall\" ? { toolUse: { toolUseId: block.id, name: block.name } } : {},\n },\n });\n const value = block.type === \"text\" ? block.text : block.arguments;\n for (let i = 0; i < value.length; i += chunkSize) {\n const part = value.slice(i, i + chunkSize);\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: index,\n delta: block.type === \"text\" ? { text: part } : { toolUse: { input: part } },\n },\n });\n }\n events.push({ eventType: \"contentBlockStop\", payload: { contentBlockIndex: index++ } });\n }\n events.push(\n { eventType: \"messageStop\", payload: { stopReason: prepared.stopReason } },\n { eventType: \"metadata\", payload: { usage: prepared.usage, metrics: { latencyMs: 0 } } },\n );\n return events;\n}\n\n// ─── Request handlers ───────────────────────────────────────────────────────\n\nexport async function handleConverse(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n raw: string,\n modelId: string,\n fixtures: Fixture[],\n journal: Journal,\n defaults: HandlerDefaults,\n setCorsHeaders: (res: http.ServerResponse) => void,\n): Promise<void> {\n const { logger } = defaults;\n setCorsHeaders(res);\n\n const urlPath = req.url ?? `/model/${modelId}/converse`;\n\n let converseReq: ConverseRequest;\n try {\n converseReq = JSON.parse(raw) as ConverseRequest;\n } catch (parseErr) {\n const detail = parseErr instanceof Error ? parseErr.message : \"unknown\";\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: null,\n response: { status: 400, fixture: null },\n });\n writeErrorResponse(\n res,\n 400,\n JSON.stringify({\n error: {\n message: `Malformed JSON: ${detail}`,\n type: \"invalid_request_error\",\n },\n }),\n );\n return;\n }\n\n // Reject bodies that parsed but are not a JSON object (e.g. `null`) before\n // touching fields — otherwise `converseReq.messages` throws a TypeError that\n // surfaces as a 500 instead of a 400.\n if (!isJsonObject(converseReq)) {\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: null,\n response: { status: 400, fixture: null },\n });\n writeErrorResponse(\n res,\n 400,\n JSON.stringify({\n error: {\n message: \"Request body must be a JSON object\",\n type: \"invalid_request_error\",\n },\n }),\n );\n return;\n }\n\n const messageError = !Array.isArray(converseReq.messages)\n ? \"Invalid request: messages array is required\"\n : (validateConverseMessages(converseReq) ??\n validateConverseSystem(converseReq) ??\n validateConverseTools(converseReq));\n if (messageError) {\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: null,\n response: { status: 400, fixture: null },\n });\n writeErrorResponse(\n res,\n 400,\n JSON.stringify({\n error: {\n message: messageError,\n type: \"invalid_request_error\",\n },\n }),\n );\n return;\n }\n\n const completionReq = converseToCompletionRequest(converseReq, modelId, logger);\n completionReq._endpointType = \"chat\";\n completionReq._context = getContext(req);\n\n const testId = getTestId(req);\n const { fixture, skippedBySequenceOrTurn } = matchFixtureDiagnostic(\n fixtures,\n completionReq,\n journal.getFixtureMatchCountsForTest(testId),\n defaults.requestTransform,\n // Record mode proxies on a miss to capture a fresh turn (see record gate\n // below), so keep turnIndex strict to prevent an earlier-turn fixture from\n // shadowing a longer request and skipping the new turn's recording.\n recordMatchOptions(!!defaults.record, defaults.logger),\n );\n\n if (fixture) {\n logger.debug(`Fixture matched: ${JSON.stringify(fixture.match).slice(0, 120)}`);\n } else {\n logger.debug(`No fixture matched for request`);\n }\n\n if (fixture) {\n journal.incrementFixtureMatchCount(fixture, fixtures, testId);\n }\n\n if (\n await applyChaosAsync(\n res,\n fixture,\n defaults.chaos,\n req.headers,\n req.url,\n journal,\n {\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n },\n fixture ? \"fixture\" : \"proxy\",\n defaults.registry,\n defaults.logger,\n )\n )\n return;\n\n if (!fixture) {\n const effectiveStrict = resolveStrictMode(defaults.strict, req.headers);\n if (effectiveStrict) {\n const strictStatus = 503;\n const strictMessage = strictNoMatchMessage(skippedBySequenceOrTurn);\n logger.error(strictNoMatchLogLine(req.method ?? \"POST\", urlPath, skippedBySequenceOrTurn));\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: {\n status: strictStatus,\n fixture: null,\n ...strictOverrideField(defaults.strict, req.headers),\n },\n });\n writeErrorResponse(\n res,\n strictStatus,\n JSON.stringify({\n error: {\n message: strictMessage,\n type: \"invalid_request_error\",\n },\n }),\n );\n return;\n }\n if (defaults.record) {\n const outcome = await proxyAndRecord(\n req,\n res,\n completionReq,\n \"bedrock\",\n urlPath,\n fixtures,\n defaults,\n raw,\n );\n if (outcome === \"handled_by_hook\") return;\n if (outcome !== \"not_configured\") {\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: res.statusCode ?? 200, fixture: null, source: \"proxy\" },\n });\n return;\n }\n }\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: {\n status: 404,\n fixture: null,\n ...strictOverrideField(defaults.strict, req.headers),\n },\n });\n writeErrorResponse(\n res,\n 404,\n JSON.stringify({\n error: {\n message: \"No fixture matched\",\n type: \"invalid_request_error\",\n },\n }),\n );\n return;\n }\n\n const response = await resolveResponse(fixture, completionReq);\n let misbehavior = planMisbehavior({\n wire: \"bedrock-converse\",\n emitsToolCallIds: true,\n fixture,\n response,\n request: completionReq,\n stream: false,\n defaults,\n rawHeaders: req.headers,\n url: req.url,\n });\n const addResponseEntry = (input: Parameters<Journal[\"add\"]>[0]) => {\n const entry = journal.add(input);\n recordMisbehaviorOutcome({ entry, summary: misbehavior.summary, defaults, testId });\n return entry;\n };\n if (misbehavior.kind === \"error\") {\n if (!misbehavior.summary?.evaluations.length) logger.error(misbehavior.message);\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: misbehavior.status, fixture, error: misbehavior.message },\n });\n const type = misbehavior.status === 400 ? \"ValidationException\" : \"InternalServerException\";\n res.setHeader(\"x-amzn-errortype\", type);\n writeErrorResponse(\n res,\n misbehavior.status,\n JSON.stringify({\n __type: type,\n message: misbehavior.message,\n code: misbehavior.code,\n }),\n );\n return;\n }\n\n if (misbehavior.kind === \"applied\") {\n const prepared = prepareConverseMisbehavior(\n misbehavior,\n completionReq,\n false,\n defaults,\n req.headers,\n );\n misbehavior = prepared.plan;\n const body = buildConverseMisbehaviorResponse(prepared);\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(body));\n return;\n }\n\n // Error response\n if (isErrorResponse(response)) {\n const status = response.status ?? 500;\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status, fixture },\n });\n const errBody = {\n type: \"error\",\n error: {\n type: response.error.type ?? \"invalid_request_error\",\n message: response.error.message,\n },\n };\n writeErrorResponse(res, status, JSON.stringify(errBody), {\n retryAfter: response.retryAfter,\n });\n return;\n }\n\n // Content + tool calls response\n if (isCombinedFixtureResponse(response)) {\n if (response.webSearches?.length) {\n logger.warn(\n \"webSearches in fixture response are not supported for Bedrock Converse API — ignoring\",\n );\n }\n const overrides = extractOverrides(response);\n const effReasoning = resolveReasoningForModel(\n response.reasoning,\n completionReq.model,\n resolveStrictMode(defaults.strict, req.headers),\n logger,\n );\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n const functionToolCalls = requireEmittedFunctionToolCalls(response, \"Bedrock Converse\");\n const body = buildConverseContentWithToolCallsResponse(\n response.content ?? \"\",\n functionToolCalls,\n logger,\n effReasoning,\n overrides,\n response.blocks,\n );\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(body));\n return;\n }\n\n // Text response\n if (isTextResponse(response)) {\n if (response.webSearches?.length) {\n logger.warn(\n \"webSearches in fixture response are not supported for Bedrock Converse API — ignoring\",\n );\n }\n const overrides = extractOverrides(response);\n const effReasoning = resolveReasoningForModel(\n response.reasoning,\n completionReq.model,\n resolveStrictMode(defaults.strict, req.headers),\n logger,\n );\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n const body = buildConverseTextResponse(response.content, effReasoning, overrides);\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(body));\n return;\n }\n\n // Tool call response\n if (isToolCallResponse(response)) {\n if (response.webSearches?.length) {\n logger.warn(\n \"webSearches in fixture response are not supported for Bedrock Converse API — ignoring\",\n );\n }\n const overrides = extractOverrides(response);\n const effReasoning = resolveReasoningForModel(\n response.reasoning,\n completionReq.model,\n resolveStrictMode(defaults.strict, req.headers),\n logger,\n );\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n const functionToolCalls = requireEmittedFunctionToolCalls(response, \"Bedrock Converse\");\n const body = buildConverseToolCallResponse(functionToolCalls, logger, effReasoning, overrides);\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(body));\n return;\n }\n\n // Unknown response type\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 500, fixture },\n });\n writeErrorResponse(\n res,\n 500,\n JSON.stringify({\n error: {\n message: \"Fixture response did not match any known type\",\n type: \"server_error\",\n },\n }),\n );\n}\n\nexport async function handleConverseStream(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n raw: string,\n modelId: string,\n fixtures: Fixture[],\n journal: Journal,\n defaults: HandlerDefaults,\n setCorsHeaders: (res: http.ServerResponse) => void,\n): Promise<void> {\n const { logger } = defaults;\n setCorsHeaders(res);\n\n const urlPath = req.url ?? `/model/${modelId}/converse-stream`;\n\n let converseReq: ConverseRequest;\n try {\n converseReq = JSON.parse(raw) as ConverseRequest;\n } catch (parseErr) {\n const detail = parseErr instanceof Error ? parseErr.message : \"unknown\";\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: null,\n response: { status: 400, fixture: null },\n });\n writeErrorResponse(\n res,\n 400,\n JSON.stringify({\n error: {\n message: `Malformed JSON: ${detail}`,\n type: \"invalid_request_error\",\n },\n }),\n );\n return;\n }\n\n // Reject bodies that parsed but are not a JSON object (e.g. `null`) before\n // touching fields — otherwise `converseReq.messages` throws a TypeError that\n // surfaces as a 500 instead of a 400.\n if (!isJsonObject(converseReq)) {\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: null,\n response: { status: 400, fixture: null },\n });\n writeErrorResponse(\n res,\n 400,\n JSON.stringify({\n error: {\n message: \"Request body must be a JSON object\",\n type: \"invalid_request_error\",\n },\n }),\n );\n return;\n }\n\n const messageError = !Array.isArray(converseReq.messages)\n ? \"Invalid request: messages array is required\"\n : (validateConverseMessages(converseReq) ??\n validateConverseSystem(converseReq) ??\n validateConverseTools(converseReq));\n if (messageError) {\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: null,\n response: { status: 400, fixture: null },\n });\n writeErrorResponse(\n res,\n 400,\n JSON.stringify({\n error: {\n message: messageError,\n type: \"invalid_request_error\",\n },\n }),\n );\n return;\n }\n\n const completionReq = converseToCompletionRequest(converseReq, modelId, logger);\n completionReq.stream = true;\n completionReq._endpointType = \"chat\";\n completionReq._context = getContext(req);\n\n const testId = getTestId(req);\n const { fixture, skippedBySequenceOrTurn } = matchFixtureDiagnostic(\n fixtures,\n completionReq,\n journal.getFixtureMatchCountsForTest(testId),\n defaults.requestTransform,\n // Record mode proxies on a miss to capture a fresh turn (see record gate\n // below), so keep turnIndex strict to prevent an earlier-turn fixture from\n // shadowing a longer request and skipping the new turn's recording.\n recordMatchOptions(!!defaults.record, defaults.logger),\n );\n\n if (fixture) {\n logger.debug(`Fixture matched: ${JSON.stringify(fixture.match).slice(0, 120)}`);\n } else {\n logger.debug(`No fixture matched for request`);\n }\n\n if (fixture) {\n journal.incrementFixtureMatchCount(fixture, fixtures, testId);\n }\n\n if (\n await applyChaosAsync(\n res,\n fixture,\n defaults.chaos,\n req.headers,\n req.url,\n journal,\n {\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n },\n fixture ? \"fixture\" : \"proxy\",\n defaults.registry,\n defaults.logger,\n )\n )\n return;\n\n if (!fixture) {\n const effectiveStrict = resolveStrictMode(defaults.strict, req.headers);\n if (effectiveStrict) {\n const strictStatus = 503;\n const strictMessage = strictNoMatchMessage(skippedBySequenceOrTurn);\n logger.error(strictNoMatchLogLine(req.method ?? \"POST\", urlPath, skippedBySequenceOrTurn));\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: {\n status: strictStatus,\n fixture: null,\n ...strictOverrideField(defaults.strict, req.headers),\n },\n });\n writeErrorResponse(\n res,\n strictStatus,\n JSON.stringify({\n error: {\n message: strictMessage,\n type: \"invalid_request_error\",\n },\n }),\n );\n return;\n }\n if (defaults.record) {\n const outcome = await proxyAndRecord(\n req,\n res,\n completionReq,\n \"bedrock\",\n urlPath,\n fixtures,\n defaults,\n raw,\n );\n if (outcome === \"handled_by_hook\") return;\n if (outcome !== \"not_configured\") {\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: res.statusCode ?? 200, fixture: null, source: \"proxy\" },\n });\n return;\n }\n }\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: {\n status: 404,\n fixture: null,\n ...strictOverrideField(defaults.strict, req.headers),\n },\n });\n writeErrorResponse(\n res,\n 404,\n JSON.stringify({\n error: {\n message: \"No fixture matched\",\n type: \"invalid_request_error\",\n },\n }),\n );\n return;\n }\n\n const response = await resolveResponse(fixture, completionReq);\n let misbehavior = planMisbehavior({\n wire: \"bedrock-converse\",\n emitsToolCallIds: true,\n fixture,\n response,\n request: completionReq,\n stream: true,\n defaults,\n rawHeaders: req.headers,\n url: req.url,\n });\n const addResponseEntry = (input: Parameters<Journal[\"add\"]>[0]) => {\n const entry = journal.add(input);\n recordMisbehaviorOutcome({ entry, summary: misbehavior.summary, defaults, testId });\n return entry;\n };\n if (misbehavior.kind === \"error\") {\n if (!misbehavior.summary?.evaluations.length) logger.error(misbehavior.message);\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: misbehavior.status, fixture, error: misbehavior.message },\n });\n const type = misbehavior.status === 400 ? \"ValidationException\" : \"InternalServerException\";\n res.setHeader(\"x-amzn-errortype\", type);\n writeErrorResponse(\n res,\n misbehavior.status,\n JSON.stringify({\n __type: type,\n message: misbehavior.message,\n code: misbehavior.code,\n }),\n );\n return;\n }\n const latency = fixture.latency ?? defaults.latency;\n const chunkSize = Math.max(1, fixture.chunkSize ?? defaults.chunkSize);\n\n if (misbehavior.kind === \"applied\") {\n const prepared = prepareConverseMisbehavior(\n misbehavior,\n completionReq,\n true,\n defaults,\n req.headers,\n );\n misbehavior = prepared.plan;\n const events = buildConverseMisbehaviorEvents(prepared, chunkSize);\n const entry = addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n const interruption = createInterruptionSignal(fixture);\n const completed = await writeEventStream(res, events, {\n latency,\n streamingProfile: fixture.streamingProfile,\n recordedTimings: fixture.recordedTimings,\n replaySpeed: fixture.replaySpeed ?? defaults.replaySpeed,\n signal: interruption?.signal,\n onChunkSent: interruption?.tick,\n });\n if (!completed) {\n if (!res.writableEnded) res.destroy();\n entry.response.interrupted = true;\n entry.response.interruptReason = interruption?.reason();\n }\n interruption?.cleanup();\n return;\n }\n\n // Error response\n if (isErrorResponse(response)) {\n const status = response.status ?? 500;\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status, fixture },\n });\n const errBody = {\n type: \"error\",\n error: {\n type: response.error.type ?? \"invalid_request_error\",\n message: response.error.message,\n },\n };\n writeErrorResponse(res, status, JSON.stringify(errBody), {\n retryAfter: response.retryAfter,\n });\n return;\n }\n\n // Content + tool calls response — stream as Event Stream\n if (isCombinedFixtureResponse(response)) {\n if (response.webSearches?.length) {\n logger.warn(\n \"webSearches in fixture response are not supported for Bedrock Converse API — ignoring\",\n );\n }\n const overrides = extractOverrides(response);\n const effReasoning = resolveReasoningForModel(\n response.reasoning,\n completionReq.model,\n resolveStrictMode(defaults.strict, req.headers),\n logger,\n );\n const journalEntry = addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n const functionToolCalls = requireEmittedFunctionToolCalls(response, \"Bedrock Converse\");\n const events = buildBedrockStreamContentWithToolCallsEvents(\n response.content ?? \"\",\n functionToolCalls,\n chunkSize,\n logger,\n effReasoning,\n overrides,\n response.blocks,\n );\n const interruption = createInterruptionSignal(fixture);\n const completed = await writeEventStream(res, events, {\n latency,\n streamingProfile: fixture.streamingProfile,\n recordedTimings: fixture.recordedTimings,\n replaySpeed: fixture.replaySpeed ?? defaults.replaySpeed,\n signal: interruption?.signal,\n onChunkSent: interruption?.tick,\n });\n if (!completed) {\n if (!res.writableEnded) res.destroy();\n journalEntry.response.interrupted = true;\n journalEntry.response.interruptReason = interruption?.reason();\n }\n interruption?.cleanup();\n return;\n }\n\n // Text response — stream as Event Stream\n if (isTextResponse(response)) {\n if (response.webSearches?.length) {\n logger.warn(\n \"webSearches in fixture response are not supported for Bedrock Converse API — ignoring\",\n );\n }\n const overrides = extractOverrides(response);\n const effReasoning = resolveReasoningForModel(\n response.reasoning,\n completionReq.model,\n resolveStrictMode(defaults.strict, req.headers),\n logger,\n );\n const journalEntry = addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n const events = buildBedrockStreamTextEvents(\n response.content,\n chunkSize,\n effReasoning,\n overrides,\n );\n const interruption = createInterruptionSignal(fixture);\n const completed = await writeEventStream(res, events, {\n latency,\n streamingProfile: fixture.streamingProfile,\n recordedTimings: fixture.recordedTimings,\n replaySpeed: fixture.replaySpeed ?? defaults.replaySpeed,\n signal: interruption?.signal,\n onChunkSent: interruption?.tick,\n });\n if (!completed) {\n if (!res.writableEnded) res.destroy();\n journalEntry.response.interrupted = true;\n journalEntry.response.interruptReason = interruption?.reason();\n }\n interruption?.cleanup();\n return;\n }\n\n // Tool call response — stream as Event Stream\n if (isToolCallResponse(response)) {\n if (response.webSearches?.length) {\n logger.warn(\n \"webSearches in fixture response are not supported for Bedrock Converse API — ignoring\",\n );\n }\n const overrides = extractOverrides(response);\n const effReasoning = resolveReasoningForModel(\n response.reasoning,\n completionReq.model,\n resolveStrictMode(defaults.strict, req.headers),\n logger,\n );\n const journalEntry = addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n const functionToolCalls = requireEmittedFunctionToolCalls(response, \"Bedrock Converse\");\n const events = buildBedrockStreamToolCallEvents(\n functionToolCalls,\n chunkSize,\n logger,\n effReasoning,\n overrides,\n );\n const interruption = createInterruptionSignal(fixture);\n const completed = await writeEventStream(res, events, {\n latency,\n streamingProfile: fixture.streamingProfile,\n recordedTimings: fixture.recordedTimings,\n replaySpeed: fixture.replaySpeed ?? defaults.replaySpeed,\n signal: interruption?.signal,\n onChunkSent: interruption?.tick,\n });\n if (!completed) {\n if (!res.writableEnded) res.destroy();\n journalEntry.response.interrupted = true;\n journalEntry.response.interruptReason = interruption?.reason();\n }\n interruption?.cleanup();\n return;\n }\n\n // Unknown response type\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 500, fixture },\n });\n writeErrorResponse(\n res,\n 500,\n JSON.stringify({\n error: {\n message: \"Fixture response did not match any known type\",\n type: \"server_error\",\n },\n }),\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"bedrock-converse.cjs","names":["mapAnthropicFinish","renderConverseUsage","servedToolArgs","resolveFixtureBlockOutcome","generateToolUseId","isCombinedFixtureResponse","isToolCallResponse","toolArgsForWire","resolveReasoningForModel","resolveRequestDecisions","estimatePromptTokens","estimateTokens","InvalidToolArgumentsError","flattenHeaders","renderError","isJsonObject","getContext","getTestId","matchFixtureDiagnostic","recordMatchOptions","applyChaosAsync","strictNoMatchMessage","strictNoMatchLogLine","strictOverrideField","withHangUpDetection","proxyAndRecord","proxyInterruption","resolveResponse","planMisbehavior","deliverJson","misbehaviorPayloadLength","isRawResponse","serveRawResponse","isErrorResponse","extractOverrides","requireEmittedFunctionToolCalls","servedPayloadLength","isTextResponse","deliverStream","eventStreamCodec"],"sources":["../src/bedrock-converse.ts"],"sourcesContent":["/**\n * AWS Bedrock Converse API support.\n *\n * Translates incoming Converse and Converse-stream requests (Bedrock Converse\n * format) into the ChatCompletionRequest format used by the fixture router,\n * and converts fixture responses back into Converse API format — either a\n * single JSON response or an Event Stream binary stream.\n */\n\nimport type * as http from \"node:http\";\nimport type {\n ChatCompletionRequest,\n ChatMessage,\n Fixture,\n FixtureBlock,\n HandlerDefaults,\n ResponseOverrides,\n ToolCall,\n ToolDefinition,\n} from \"./types.js\";\nimport {\n requireEmittedFunctionToolCalls,\n type FunctionFixtureBlock,\n generateToolUseId,\n estimatePromptTokens,\n estimateTokens,\n extractOverrides,\n isTextResponse,\n isToolCallResponse,\n isCombinedFixtureResponse,\n resolveFixtureBlockOutcome,\n isErrorResponse,\n isRawResponse,\n flattenHeaders,\n isJsonObject,\n getContext,\n getTestId,\n resolveResponse,\n resolveReasoningForModel,\n strictNoMatchMessage,\n strictNoMatchLogLine,\n toolArgsForWire,\n servedToolArgs,\n InvalidToolArgumentsError,\n} from \"./helpers.js\";\nimport { matchFixtureDiagnostic, recordMatchOptions } from \"./router.js\";\nimport { writeErrorResponse } from \"./sse-writer.js\";\nimport { eventStreamCodec } from \"./aws-event-stream.js\";\nimport { deliverJson, deliverStream } from \"./response/deliver.js\";\nimport { proxyInterruption, withHangUpDetection } from \"./response/proxy.js\";\nimport { misbehaviorPayloadLength, servedPayloadLength } from \"./response/timing.js\";\nimport type { Journal } from \"./journal.js\";\nimport type { Logger } from \"./logger.js\";\nimport { mapAnthropicFinish } from \"./response/finish.js\";\nimport { render as renderConverseUsage } from \"./response/usage/codecs/converse.js\";\nimport { resolveRequestDecisions, strictOverrideField } from \"./response/policy.js\";\nimport { renderError } from \"./response/errors.js\";\nimport { serveRawResponse } from \"./response/raw.js\";\nimport { applyChaosAsync } from \"./chaos.js\";\nimport { proxyAndRecord } from \"./recorder.js\";\nimport { planMisbehavior, recordMisbehaviorOutcome, type MisbehaviorPlan } from \"./misbehavior.js\";\n\n// ─── Converse request types ─────────────────────────────────────────────────\n\ninterface ConverseContentBlock {\n text?: string;\n toolUse?: { toolUseId: string; name: string; input: object };\n toolResult?: { toolUseId: string; content: { text?: string }[] };\n}\n\ninterface ConverseMessage {\n role: \"user\" | \"assistant\";\n content: ConverseContentBlock[];\n}\n\ninterface ConverseToolSpec {\n name: string;\n description?: string;\n inputSchema?: object;\n}\n\ninterface ConverseRequest {\n messages: ConverseMessage[];\n system?: { text: string }[];\n inferenceConfig?: { maxTokens?: number; temperature?: number };\n toolConfig?: { tools: { toolSpec: ConverseToolSpec }[] };\n}\n\n// ─── Converse stop_reason mapping ──────────────────────────────────────────\n\nfunction converseStopReason(\n overrideFinishReason: string | undefined,\n defaultReason: string,\n): string {\n if (!overrideFinishReason) return defaultReason;\n return mapAnthropicFinish(overrideFinishReason);\n}\n\n/**\n * Build Converse-format usage from fixture overrides.\n *\n * When no overrides are provided (the common case for mocks), all token\n * counts default to zero. This is intentional — aimock is a mock server\n * and does not perform real tokenisation. Callers that need non-zero\n * usage should supply explicit `usage` overrides in their fixture.\n */\nfunction converseUsage(overrides?: ResponseOverrides): ReturnType<typeof renderConverseUsage> {\n return renderConverseUsage(overrides);\n}\n\nfunction parseConverseToolArgumentsForStream(toolCall: ToolCall, logger: Logger): string {\n return servedToolArgs(toolCall, \"string\", logger).text;\n}\n\nfunction buildBedrockStreamTextEvents(\n content: string,\n chunkSize: number,\n reasoning?: string,\n overrides?: ResponseOverrides,\n): Array<{ eventType: string; payload: object }> {\n const events: Array<{ eventType: string; payload: object }> = [\n { eventType: \"messageStart\", payload: { role: \"assistant\" } },\n ];\n\n if (reasoning) {\n const blockIndex = 0;\n events.push({\n eventType: \"contentBlockStart\",\n payload: { contentBlockIndex: blockIndex, start: { reasoningContent: {} } },\n });\n for (let i = 0; i < reasoning.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: blockIndex,\n delta: { reasoningContent: { text: reasoning.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: blockIndex },\n });\n }\n\n const textBlockIndex = reasoning ? 1 : 0;\n events.push({\n eventType: \"contentBlockStart\",\n payload: { contentBlockIndex: textBlockIndex, start: {} },\n });\n for (let i = 0; i < content.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: textBlockIndex,\n delta: { text: content.slice(i, i + chunkSize) },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: textBlockIndex },\n });\n events.push({\n eventType: \"messageStop\",\n payload: { stopReason: converseStopReason(overrides?.finishReason, \"end_turn\") },\n });\n const usage = converseUsage(overrides);\n events.push({\n eventType: \"metadata\",\n payload: { usage, metrics: { latencyMs: 0 } },\n });\n return events;\n}\n\nfunction buildBedrockStreamContentWithToolCallsEvents(\n content: string,\n toolCalls: ToolCall[],\n chunkSize: number,\n logger: Logger,\n reasoning?: string,\n overrides?: ResponseOverrides,\n blocks?: FixtureBlock[],\n): Array<{ eventType: string; payload: object }> {\n if (blocks && blocks.length > 0) {\n // NEW PATH: stream `text`/`toolUse` content blocks in the fixture's array\n // order. Converse's indexed contentBlock events make ordering observable —\n // a `toolCall` block can take a lower `contentBlockIndex` than a `text`\n // block. Indices are assigned in encounter order, continuing from any\n // leading reasoning block (which occupies index 0).\n const events: Array<{ eventType: string; payload: object }> = [\n { eventType: \"messageStart\", payload: { role: \"assistant\" } },\n ];\n\n let blockIndex = 0;\n if (reasoning) {\n events.push({\n eventType: \"contentBlockStart\",\n payload: { contentBlockIndex: blockIndex, start: { reasoningContent: {} } },\n });\n for (let i = 0; i < reasoning.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: blockIndex,\n delta: { reasoningContent: { text: reasoning.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: blockIndex },\n });\n blockIndex++;\n }\n\n const outcome = resolveFixtureBlockOutcome(blocks);\n const ordered = outcome.ordered;\n for (const block of ordered) {\n if (block.type === \"text\") {\n events.push({\n eventType: \"contentBlockStart\",\n payload: { contentBlockIndex: blockIndex, start: {} },\n });\n for (let i = 0; i < block.text.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: blockIndex,\n delta: { text: block.text.slice(i, i + chunkSize) },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: blockIndex },\n });\n } else {\n const toolUseId = block.id || generateToolUseId();\n events.push({\n eventType: \"contentBlockStart\",\n payload: {\n contentBlockIndex: blockIndex,\n start: { toolUse: { toolUseId, name: block.name } },\n },\n });\n const argsStr = parseConverseToolArgumentsForStream(\n { name: block.name, arguments: block.arguments } as ToolCall,\n logger,\n );\n for (let i = 0; i < argsStr.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: blockIndex,\n delta: { toolUse: { input: argsStr.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: blockIndex },\n });\n }\n blockIndex++;\n }\n\n events.push({\n eventType: \"messageStop\",\n payload: {\n stopReason: converseStopReason(\n overrides?.finishReason,\n outcome.hasToolCalls ? \"tool_use\" : \"end_turn\",\n ),\n },\n });\n events.push({\n eventType: \"metadata\",\n payload: { usage: converseUsage(overrides), metrics: { latencyMs: 0 } },\n });\n return events;\n }\n\n const events = buildBedrockStreamTextEvents(content, chunkSize, reasoning, overrides);\n // Remove trailing metadata + messageStop events — we re-emit them after tool blocks\n for (let i = events.length - 1; i >= 0; i--) {\n const et = (events[i] as { eventType: string }).eventType;\n if (et === \"metadata\" || et === \"messageStop\") {\n events.splice(i, 1);\n }\n }\n let blockIndex = reasoning ? 2 : 1;\n\n for (const tc of toolCalls) {\n const toolUseId = tc.id || generateToolUseId();\n events.push({\n eventType: \"contentBlockStart\",\n payload: {\n contentBlockIndex: blockIndex,\n start: { toolUse: { toolUseId, name: tc.name } },\n },\n });\n const argsStr = parseConverseToolArgumentsForStream(tc, logger);\n for (let i = 0; i < argsStr.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: blockIndex,\n delta: { toolUse: { input: argsStr.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: blockIndex },\n });\n blockIndex++;\n }\n events.push({\n eventType: \"messageStop\",\n payload: { stopReason: converseStopReason(overrides?.finishReason, \"tool_use\") },\n });\n const usage = converseUsage(overrides);\n events.push({\n eventType: \"metadata\",\n payload: { usage, metrics: { latencyMs: 0 } },\n });\n return events;\n}\n\nfunction buildBedrockStreamToolCallEvents(\n toolCalls: ToolCall[],\n chunkSize: number,\n logger: Logger,\n reasoning?: string,\n overrides?: ResponseOverrides,\n): Array<{ eventType: string; payload: object }> {\n const events: Array<{ eventType: string; payload: object }> = [\n { eventType: \"messageStart\", payload: { role: \"assistant\" } },\n ];\n\n // A leading reasoning block occupies contentBlockIndex 0, shifting the\n // toolUse blocks by +1 (mirrors the content+tool builder's sequencing).\n if (reasoning) {\n const reasoningBlockIndex = 0;\n events.push({\n eventType: \"contentBlockStart\",\n payload: { contentBlockIndex: reasoningBlockIndex, start: { reasoningContent: {} } },\n });\n for (let i = 0; i < reasoning.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: reasoningBlockIndex,\n delta: { reasoningContent: { text: reasoning.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: reasoningBlockIndex },\n });\n }\n\n const toolBlockOffset = reasoning ? 1 : 0;\n\n for (let tcIdx = 0; tcIdx < toolCalls.length; tcIdx++) {\n const blockIndex = tcIdx + toolBlockOffset;\n const tc = toolCalls[tcIdx];\n const toolUseId = tc.id || generateToolUseId();\n events.push({\n eventType: \"contentBlockStart\",\n payload: {\n contentBlockIndex: blockIndex,\n start: { toolUse: { toolUseId, name: tc.name } },\n },\n });\n const argsStr = parseConverseToolArgumentsForStream(tc, logger);\n for (let i = 0; i < argsStr.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: blockIndex,\n delta: { toolUse: { input: argsStr.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({\n eventType: \"contentBlockStop\",\n payload: { contentBlockIndex: blockIndex },\n });\n }\n events.push({\n eventType: \"messageStop\",\n payload: { stopReason: converseStopReason(overrides?.finishReason, \"tool_use\") },\n });\n const usage = converseUsage(overrides);\n events.push({\n eventType: \"metadata\",\n payload: { usage, metrics: { latencyMs: 0 } },\n });\n return events;\n}\n\n// ─── Input conversion: Converse → ChatCompletionRequest ─────────────────────\n\n/** Validate only message fields consumed by the user-message converter. */\nfunction validateConverseMessages(req: ConverseRequest): string | undefined {\n for (const [i, message] of req.messages.entries()) {\n if (message === null) return `Invalid request: messages[${i}] must not be null`;\n // Unknown roles are intentionally skipped; assistant toolResult is inert.\n if (message.role !== \"user\") continue;\n if (!Array.isArray(message.content)) {\n return `Invalid request: messages[${i}].content must be an array`;\n }\n for (const [j, block] of message.content.entries()) {\n if (block === null) {\n return `Invalid request: messages[${i}].content[${j}] must not be null`;\n }\n if (block.toolResult && !Array.isArray(block.toolResult.content)) {\n return `Invalid request: messages[${i}].content[${j}].toolResult.content must be an array`;\n }\n }\n }\n return undefined;\n}\n\n/** Validate only system fields consumed by the converter. */\nfunction validateConverseSystem(req: ConverseRequest): string | undefined {\n if (req.system && req.system.length > 0) {\n if (!Array.isArray(req.system)) {\n return \"Invalid request: system must be an array\";\n }\n for (const [i, block] of req.system.entries()) {\n if (block === null) return `Invalid request: system[${i}] must not be null`;\n }\n }\n return undefined;\n}\n\n/** Validate only tool fields consumed by the converter. */\nfunction validateConverseTools(req: ConverseRequest): string | undefined {\n if (req.toolConfig?.tools && req.toolConfig.tools.length > 0) {\n if (!Array.isArray(req.toolConfig.tools)) {\n return \"Invalid request: toolConfig.tools must be an array\";\n }\n for (const [i, tool] of req.toolConfig.tools.entries()) {\n if (tool?.toolSpec === null) {\n return `Invalid request: toolConfig.tools[${i}].toolSpec must not be null`;\n }\n }\n }\n return undefined;\n}\n\nexport function converseToCompletionRequest(\n req: ConverseRequest,\n modelId: string,\n logger?: Logger,\n): ChatCompletionRequest {\n const messages: ChatMessage[] = [];\n\n // system field → system message\n if (req.system && req.system.length > 0) {\n const systemText = req.system.map((s) => s.text).join(\"\");\n if (systemText) {\n messages.push({ role: \"system\", content: systemText });\n }\n }\n\n for (const msg of req.messages) {\n if (msg.role === \"user\") {\n // Check for toolResult blocks\n const toolResults = msg.content.filter((b) => b.toolResult);\n const textBlocks = msg.content.filter(\n (b) => b.text !== undefined && b.text !== \"\" && !b.toolResult,\n );\n const unsupportedBlocks = msg.content.filter(\n (b) => b.text === undefined && !b.toolResult && !b.toolUse,\n );\n if (unsupportedBlocks.length > 0 && logger) {\n logger.warn(\n `Converse user message contains unsupported content block types — these will be dropped during conversion`,\n );\n }\n\n if (toolResults.length > 0) {\n for (const block of toolResults) {\n const tr = block.toolResult!;\n const resultContent = tr.content.map((c) => c.text ?? \"\").join(\"\");\n messages.push({\n role: \"tool\",\n content: resultContent,\n tool_call_id: tr.toolUseId,\n });\n }\n if (textBlocks.length > 0) {\n messages.push({\n role: \"user\",\n content: textBlocks.map((b) => b.text ?? \"\").join(\"\"),\n });\n }\n continue;\n }\n\n // Plain user message\n const text = msg.content\n .filter((b) => b.text !== undefined && b.text !== \"\")\n .map((b) => b.text ?? \"\")\n .join(\"\");\n messages.push({ role: \"user\", content: text });\n } else if (msg.role === \"assistant\") {\n const toolUseBlocks = msg.content.filter((b) => b.toolUse);\n const textContent = msg.content\n .filter((b) => b.text !== undefined && b.text !== \"\")\n .map((b) => b.text ?? \"\")\n .join(\"\");\n\n if (toolUseBlocks.length > 0) {\n messages.push({\n role: \"assistant\",\n content: textContent || null,\n tool_calls: toolUseBlocks.map((b) => ({\n id: b.toolUse!.toolUseId,\n type: \"function\" as const,\n function: {\n name: b.toolUse!.name,\n arguments: JSON.stringify(b.toolUse!.input),\n },\n })),\n });\n } else {\n messages.push({ role: \"assistant\", content: textContent || null });\n }\n } else {\n const warnMsg = `Unexpected message role \"${msg.role}\" in Converse request — skipping`;\n if (logger) {\n logger.warn(warnMsg);\n }\n }\n }\n\n // Convert tools\n let tools: ToolDefinition[] | undefined;\n if (req.toolConfig?.tools && req.toolConfig.tools.length > 0) {\n tools = req.toolConfig.tools.map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.toolSpec.name,\n description: t.toolSpec.description,\n parameters: (t.toolSpec.inputSchema && \"json\" in t.toolSpec.inputSchema\n ? (t.toolSpec.inputSchema as Record<string, unknown>).json\n : t.toolSpec.inputSchema) as object | undefined,\n },\n }));\n }\n\n return {\n model: modelId,\n messages,\n stream: false,\n temperature: req.inferenceConfig?.temperature,\n max_tokens: req.inferenceConfig?.maxTokens,\n tools,\n };\n}\n\n// ─── Response builders ──────────────────────────────────────────────────────\n\nfunction buildConverseTextResponse(\n content: string,\n reasoning?: string,\n overrides?: ResponseOverrides,\n): object {\n const contentBlocks: object[] = [];\n if (reasoning) {\n contentBlocks.push({\n reasoningContent: { reasoningText: { text: reasoning } },\n });\n }\n contentBlocks.push({ text: content });\n\n return {\n output: {\n message: {\n role: \"assistant\",\n content: contentBlocks,\n },\n },\n stopReason: converseStopReason(overrides?.finishReason, \"end_turn\"),\n usage: converseUsage(overrides),\n metrics: { latencyMs: 0 },\n };\n}\n\nfunction buildConverseToolCallResponse(\n toolCalls: ToolCall[],\n logger: Logger,\n reasoning?: string,\n overrides?: ResponseOverrides,\n): object {\n const contentBlocks: object[] = [];\n if (reasoning) {\n contentBlocks.push({\n reasoningContent: { reasoningText: { text: reasoning } },\n });\n }\n for (const tc of toolCalls) {\n const args = servedToolArgs(tc, \"object\", logger);\n contentBlocks.push({\n toolUse: {\n toolUseId: tc.id || generateToolUseId(),\n name: tc.name,\n input: args.value,\n },\n });\n }\n\n return {\n output: {\n message: {\n role: \"assistant\",\n content: contentBlocks,\n },\n },\n stopReason: converseStopReason(overrides?.finishReason, \"tool_use\"),\n usage: converseUsage(overrides),\n metrics: { latencyMs: 0 },\n };\n}\n\nfunction buildConverseContentWithToolCallsResponse(\n content: string,\n toolCalls: ToolCall[],\n logger: Logger,\n reasoning?: string,\n overrides?: ResponseOverrides,\n blocks?: FixtureBlock[],\n): object {\n const contentBlocks: object[] = [];\n if (reasoning) {\n contentBlocks.push({\n reasoningContent: { reasoningText: { text: reasoning } },\n });\n }\n\n // Converse `input` requires a JSON value; reject malformed arguments before\n // emitting an object response instead of substituting an empty object.\n const toolUseBlock = (tc: { name: string; arguments: string; id?: string }): object => {\n const args = servedToolArgs(tc, \"object\", logger);\n return {\n toolUse: {\n toolUseId: tc.id || generateToolUseId(),\n name: tc.name,\n input: args.value,\n },\n };\n };\n\n let blockHasTools: boolean | undefined;\n if (blocks && blocks.length > 0) {\n // NEW PATH: the non-streaming `content[]` array is positionally observable,\n // so emit `text`/`toolUse` content blocks in the fixture's ARRAY ORDER\n // (after any leading reasoning block). A toolCall block before a text block\n // therefore yields a toolUse ahead of the text — matching the streaming\n // path for the same `blocks` fixture.\n const outcome = resolveFixtureBlockOutcome(blocks);\n const ordered = outcome.ordered;\n blockHasTools = outcome.hasToolCalls;\n for (const block of ordered) {\n if (block.type === \"text\") {\n contentBlocks.push({ text: block.text });\n } else {\n contentBlocks.push(\n toolUseBlock({ name: block.name, arguments: block.arguments, id: block.id }),\n );\n }\n }\n } else {\n // LEGACY PATH (unchanged): text content block, then toolUse blocks in\n // `toolCalls` order.\n contentBlocks.push({ text: content });\n for (const tc of toolCalls) {\n contentBlocks.push(toolUseBlock(tc));\n }\n }\n\n return {\n output: {\n message: {\n role: \"assistant\",\n content: contentBlocks,\n },\n },\n stopReason: converseStopReason(\n overrides?.finishReason,\n blockHasTools === false ? \"end_turn\" : \"tool_use\",\n ),\n usage: converseUsage(overrides),\n metrics: { latencyMs: 0 },\n };\n}\n\ninterface PreparedConverseMisbehavior {\n plan: MisbehaviorPlan;\n blocks: FunctionFixtureBlock[];\n reasoning: string;\n stopReason: string;\n usage: ReturnType<typeof converseUsage>;\n}\n\n/** Prepare actual emitted calls and identities before journaling or writing bytes. */\nfunction prepareConverseMisbehavior(\n plan: MisbehaviorPlan,\n request: ChatCompletionRequest,\n stream: boolean,\n defaults: HandlerDefaults,\n headers: http.IncomingHttpHeaders,\n): PreparedConverseMisbehavior {\n const response = plan.response;\n const combined = isCombinedFixtureResponse(response);\n const outcome =\n combined && response.blocks?.length ? resolveFixtureBlockOutcome(response.blocks) : undefined;\n // The planner skips a custom-call fixture on this wire, so the narrowing\n // below never throws; the normal path's guard rejects it instead.\n let blocks: FunctionFixtureBlock[] = outcome?.ordered.map((block) => ({ ...block })) ?? [\n ...(\"content\" in response && response.content\n ? [{ type: \"text\" as const, text: response.content }]\n : []),\n ...(combined || isToolCallResponse(response) ? (response.toolCalls ?? []) : []).map((call) => ({\n type: \"toolCall\" as const,\n ...call,\n })),\n ];\n const calls = blocks.filter((block) => block.type === \"toolCall\");\n const preparedCalls = calls.map((call, index) => {\n const args = toolArgsForWire(call);\n return {\n ...call,\n arguments: args.kind === \"parsed\" ? args.text : args.raw,\n ...(index === plan.duplicateId?.destinationIndex\n ? {}\n : { id: call.id || generateToolUseId() }),\n };\n });\n if (plan.duplicateId) {\n preparedCalls[plan.duplicateId.destinationIndex].id =\n preparedCalls[plan.duplicateId.sourceIndex].id;\n }\n let callIndex = 0;\n blocks = blocks.map((block) => (block.type === \"toolCall\" ? preparedCalls[callIndex++] : block));\n let stopReason = converseStopReason(\n \"finishReason\" in response ? response.finishReason : undefined,\n calls.length ? \"tool_use\" : \"end_turn\",\n );\n if (plan.stop === \"stop\") stopReason = \"end_turn\";\n if (plan.stop === \"length\") stopReason = \"max_tokens\";\n if (plan.stop === \"content_filter\") stopReason = \"content_filtered\";\n if (!stream && plan.summary.fault === \"tool-args-invalid-json\") {\n // This native signal carries no malformed object and no toolUse blocks.\n blocks = blocks.filter((block) => block.type !== \"toolCall\");\n stopReason = \"malformed_tool_use\";\n }\n if (!stream && plan.summary.fault === \"stop-length-mid-tool\") {\n // Captured Converse max_tokens output retains the unfinished call with empty input.\n let index = 0;\n blocks = blocks.map((block) => {\n if (block.type !== \"toolCall\") return block;\n return index++ === plan.target?.index ? { ...block, arguments: \"{}\" } : block;\n });\n }\n const reasoning =\n plan.reasoning ??\n resolveReasoningForModel(\n \"reasoning\" in response ? response.reasoning : undefined,\n request.model,\n resolveRequestDecisions(defaults.strict, headers).reasoningSuppression,\n defaults.logger,\n ) ??\n \"\";\n const servedToolCalls = blocks.flatMap((block) =>\n block.type === \"toolCall\"\n ? [{ name: block.name, arguments: block.arguments, id: block.id }]\n : [],\n );\n const inputTokens = estimatePromptTokens(request.messages);\n const outputTokens = estimateTokens(\n reasoning +\n blocks\n .map((block) => (block.type === \"text\" ? block.text : block.name + block.arguments))\n .join(\"\"),\n );\n return {\n plan: { ...plan, summary: { ...plan.summary, servedToolCalls } },\n blocks,\n reasoning,\n stopReason,\n usage: renderConverseUsage(undefined, { input: inputTokens, output: outputTokens }),\n };\n}\n\nfunction buildConverseMisbehaviorResponse(prepared: PreparedConverseMisbehavior): object {\n const content: object[] =\n prepared.reasoning || prepared.plan.summary.fault === \"reasoning-only\"\n ? [{ reasoningContent: { reasoningText: { text: prepared.reasoning } } }]\n : [];\n for (const block of prepared.blocks) {\n if (block.type === \"text\") content.push({ text: block.text });\n else {\n const args = toolArgsForWire(block);\n if (args.kind === \"verbatim\") throw new InvalidToolArgumentsError(block);\n content.push({ toolUse: { toolUseId: block.id, name: block.name, input: args.value } });\n }\n }\n return {\n output: { message: { role: \"assistant\", content } },\n stopReason: prepared.stopReason,\n usage: prepared.usage,\n metrics: { latencyMs: 0 },\n };\n}\n\nfunction buildConverseMisbehaviorEvents(\n prepared: PreparedConverseMisbehavior,\n chunkSize: number,\n): Array<{ eventType: string; payload: object }> {\n const events: Array<{ eventType: string; payload: object }> = [\n { eventType: \"messageStart\", payload: { role: \"assistant\" } },\n ];\n let index = 0;\n if (prepared.reasoning || prepared.plan.summary.fault === \"reasoning-only\") {\n events.push({\n eventType: \"contentBlockStart\",\n payload: { contentBlockIndex: index, start: { reasoningContent: {} } },\n });\n for (let i = 0; i < prepared.reasoning.length; i += chunkSize) {\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: index,\n delta: { reasoningContent: { text: prepared.reasoning.slice(i, i + chunkSize) } },\n },\n });\n }\n events.push({ eventType: \"contentBlockStop\", payload: { contentBlockIndex: index++ } });\n }\n for (const block of prepared.blocks) {\n events.push({\n eventType: \"contentBlockStart\",\n payload: {\n contentBlockIndex: index,\n start:\n block.type === \"toolCall\" ? { toolUse: { toolUseId: block.id, name: block.name } } : {},\n },\n });\n const value = block.type === \"text\" ? block.text : block.arguments;\n for (let i = 0; i < value.length; i += chunkSize) {\n const part = value.slice(i, i + chunkSize);\n events.push({\n eventType: \"contentBlockDelta\",\n payload: {\n contentBlockIndex: index,\n delta: block.type === \"text\" ? { text: part } : { toolUse: { input: part } },\n },\n });\n }\n events.push({ eventType: \"contentBlockStop\", payload: { contentBlockIndex: index++ } });\n }\n events.push(\n { eventType: \"messageStop\", payload: { stopReason: prepared.stopReason } },\n { eventType: \"metadata\", payload: { usage: prepared.usage, metrics: { latencyMs: 0 } } },\n );\n return events;\n}\n\n// ─── Request handlers ───────────────────────────────────────────────────────\n\nexport async function handleConverse(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n raw: string,\n modelId: string,\n fixtures: Fixture[],\n journal: Journal,\n defaults: HandlerDefaults,\n setCorsHeaders: (res: http.ServerResponse) => void,\n): Promise<void> {\n const { logger } = defaults;\n setCorsHeaders(res);\n\n const urlPath = req.url ?? `/model/${modelId}/converse`;\n\n let converseReq: ConverseRequest;\n try {\n converseReq = JSON.parse(raw) as ConverseRequest;\n } catch (parseErr) {\n const detail = parseErr instanceof Error ? parseErr.message : \"unknown\";\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: null,\n response: { status: 400, fixture: null },\n });\n writeErrorResponse(\n res,\n 400,\n renderError(\"bedrock\", \"validation\", {\n message: `Malformed JSON: ${detail}`,\n type: \"invalid_request_error\",\n }).body,\n );\n return;\n }\n\n // Reject bodies that parsed but are not a JSON object (e.g. `null`) before\n // touching fields — otherwise `converseReq.messages` throws a TypeError that\n // surfaces as a 500 instead of a 400.\n if (!isJsonObject(converseReq)) {\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: null,\n response: { status: 400, fixture: null },\n });\n writeErrorResponse(\n res,\n 400,\n renderError(\"bedrock\", \"validation\", {\n message: \"Request body must be a JSON object\",\n type: \"invalid_request_error\",\n }).body,\n );\n return;\n }\n\n const messageError = !Array.isArray(converseReq.messages)\n ? \"Invalid request: messages array is required\"\n : (validateConverseMessages(converseReq) ??\n validateConverseSystem(converseReq) ??\n validateConverseTools(converseReq));\n if (messageError) {\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: null,\n response: { status: 400, fixture: null },\n });\n writeErrorResponse(\n res,\n 400,\n renderError(\"bedrock\", \"validation\", { message: messageError, type: \"invalid_request_error\" })\n .body,\n );\n return;\n }\n\n const completionReq = converseToCompletionRequest(converseReq, modelId, logger);\n completionReq._endpointType = \"chat\";\n completionReq._context = getContext(req);\n\n const testId = getTestId(req);\n const { fixture, skippedBySequenceOrTurn } = matchFixtureDiagnostic(\n fixtures,\n completionReq,\n journal.getFixtureMatchCountsForTest(testId),\n defaults.requestTransform,\n // Record mode proxies on a miss to capture a fresh turn (see record gate\n // below), so keep turnIndex strict to prevent an earlier-turn fixture from\n // shadowing a longer request and skipping the new turn's recording.\n { ...recordMatchOptions(!!defaults.record, defaults.logger), wire: \"bedrock-converse\" },\n );\n\n if (fixture) {\n logger.debug(`Fixture matched: ${JSON.stringify(fixture.match).slice(0, 120)}`);\n } else {\n logger.debug(`No fixture matched for request`);\n }\n\n if (fixture) {\n journal.incrementFixtureMatchCount(fixture, fixtures, testId);\n }\n\n if (\n await applyChaosAsync(\n res,\n fixture,\n defaults.chaos,\n req.headers,\n req.url,\n journal,\n {\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n },\n fixture ? \"fixture\" : \"proxy\",\n defaults.registry,\n defaults.logger,\n )\n )\n return;\n\n if (!fixture) {\n const effectiveStrict = resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss;\n if (effectiveStrict) {\n const strictStatus = 503;\n const strictMessage = strictNoMatchMessage(skippedBySequenceOrTurn);\n logger.error(strictNoMatchLogLine(req.method ?? \"POST\", urlPath, skippedBySequenceOrTurn));\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: {\n status: strictStatus,\n fixture: null,\n ...strictOverrideField(defaults.strict, req.headers),\n },\n });\n writeErrorResponse(\n res,\n strictStatus,\n renderError(\"bedrock\", \"strict-miss\", {\n message: strictMessage,\n type: \"invalid_request_error\",\n }).body,\n );\n return;\n }\n if (defaults.record) {\n const { outcome, clientHungUp } = await withHangUpDetection(req, res, () =>\n proxyAndRecord(req, res, completionReq, \"bedrock\", urlPath, fixtures, defaults, raw),\n );\n if (outcome === \"handled_by_hook\") return;\n if (outcome !== \"not_configured\") {\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: {\n status: res.statusCode ?? 200,\n fixture: null,\n source: \"proxy\",\n ...proxyInterruption(res, clientHungUp),\n },\n });\n return;\n }\n }\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: {\n status: 404,\n fixture: null,\n ...strictOverrideField(defaults.strict, req.headers),\n },\n });\n writeErrorResponse(\n res,\n 404,\n renderError(\"bedrock\", \"fixture-miss\", {\n message: \"No fixture matched\",\n type: \"invalid_request_error\",\n }).body,\n );\n return;\n }\n\n const response = await resolveResponse(fixture, completionReq);\n let misbehavior = planMisbehavior({\n wire: \"bedrock-converse\",\n emitsToolCallIds: true,\n fixture,\n response,\n request: completionReq,\n stream: false,\n defaults,\n rawHeaders: req.headers,\n url: req.url,\n });\n const addResponseEntry = (input: Parameters<Journal[\"add\"]>[0]) => {\n const entry = journal.add(input);\n recordMisbehaviorOutcome({ entry, summary: misbehavior.summary, defaults, testId });\n return entry;\n };\n if (misbehavior.kind === \"error\") {\n if (!misbehavior.summary?.evaluations.length) logger.error(misbehavior.message);\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: misbehavior.status, fixture, error: misbehavior.message },\n });\n const type = misbehavior.status === 400 ? \"ValidationException\" : \"InternalServerException\";\n res.setHeader(\"x-amzn-errortype\", type);\n writeErrorResponse(\n res,\n misbehavior.status,\n renderError(\"bedrock-converse\", \"misbehavior\", {\n type,\n message: misbehavior.message,\n code: misbehavior.code,\n }).body,\n );\n return;\n }\n const jsonOpts = (payloadLength: number, duplicateId = false) => ({\n surface: \"other\" as const,\n payloadLength,\n chunkSize: Math.max(1, fixture.chunkSize ?? defaults.chunkSize),\n recordedTimings: fixture.recordedTimings,\n duplicateId,\n replaySpeed: fixture.replaySpeed ?? defaults.replaySpeed,\n });\n\n if (misbehavior.kind === \"applied\") {\n const prepared = prepareConverseMisbehavior(\n misbehavior,\n completionReq,\n false,\n defaults,\n req.headers,\n );\n misbehavior = prepared.plan;\n // Built before the journal entry, as before: a builder that throws leaves\n // no entry. The reply carries no timestamp, so building early is safe.\n const body = buildConverseMisbehaviorResponse(prepared);\n const entry = addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n await deliverJson(\n res,\n entry,\n fixture,\n () => body,\n jsonOpts(\n misbehaviorPayloadLength(\n prepared.plan,\n prepared.plan.reasoning === undefined ? prepared.reasoning : undefined,\n ),\n !!prepared.plan.duplicateId,\n ),\n );\n return;\n }\n\n // Raw passthrough (#549): the authored events or JSON, framed for this wire.\n if (isRawResponse(response)) {\n await serveRawResponse({\n wire: \"bedrock-converse\",\n stream: false,\n req,\n res,\n fixture,\n response,\n body: completionReq,\n journal,\n defaults,\n testId,\n misbehaviorSummary: misbehavior.summary,\n errorWire: \"bedrock-converse\",\n });\n return;\n }\n\n // Error response\n if (isErrorResponse(response)) {\n const status = response.status ?? 500;\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status, fixture },\n });\n writeErrorResponse(\n res,\n status,\n renderError(\"bedrock\", \"fixture\", {\n message: response.error.message,\n type: response.error.type ?? \"invalid_request_error\",\n }).body,\n {\n retryAfter: response.retryAfter,\n },\n );\n return;\n }\n\n // Content + tool calls response\n if (isCombinedFixtureResponse(response)) {\n if (response.webSearches?.length) {\n logger.warn(\n \"webSearches in fixture response are not supported for Bedrock Converse API — ignoring\",\n );\n }\n const overrides = extractOverrides(response);\n const effReasoning = resolveReasoningForModel(\n response.reasoning,\n completionReq.model,\n resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression,\n logger,\n );\n const journalEntry = addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n const functionToolCalls = requireEmittedFunctionToolCalls(response, \"Bedrock Converse\");\n await deliverJson(\n res,\n journalEntry,\n fixture,\n () =>\n buildConverseContentWithToolCallsResponse(\n response.content ?? \"\",\n functionToolCalls,\n logger,\n effReasoning,\n overrides,\n response.blocks,\n ),\n jsonOpts(servedPayloadLength(response, effReasoning)),\n );\n return;\n }\n\n // Text response\n if (isTextResponse(response)) {\n if (response.webSearches?.length) {\n logger.warn(\n \"webSearches in fixture response are not supported for Bedrock Converse API — ignoring\",\n );\n }\n const overrides = extractOverrides(response);\n const effReasoning = resolveReasoningForModel(\n response.reasoning,\n completionReq.model,\n resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression,\n logger,\n );\n const journalEntry = addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n await deliverJson(\n res,\n journalEntry,\n fixture,\n () => buildConverseTextResponse(response.content, effReasoning, overrides),\n jsonOpts(servedPayloadLength(response, effReasoning)),\n );\n return;\n }\n\n // Tool call response\n if (isToolCallResponse(response)) {\n if (response.webSearches?.length) {\n logger.warn(\n \"webSearches in fixture response are not supported for Bedrock Converse API — ignoring\",\n );\n }\n const overrides = extractOverrides(response);\n const effReasoning = resolveReasoningForModel(\n response.reasoning,\n completionReq.model,\n resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression,\n logger,\n );\n const journalEntry = addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n const functionToolCalls = requireEmittedFunctionToolCalls(response, \"Bedrock Converse\");\n await deliverJson(\n res,\n journalEntry,\n fixture,\n () => buildConverseToolCallResponse(functionToolCalls, logger, effReasoning, overrides),\n jsonOpts(servedPayloadLength(response, effReasoning)),\n );\n return;\n }\n\n // Unknown response type\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 500, fixture },\n });\n writeErrorResponse(\n res,\n 500,\n renderError(\"bedrock\", \"unknown-response\", {\n message: \"Fixture response did not match any known type\",\n type: \"server_error\",\n }).body,\n );\n}\n\nexport async function handleConverseStream(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n raw: string,\n modelId: string,\n fixtures: Fixture[],\n journal: Journal,\n defaults: HandlerDefaults,\n setCorsHeaders: (res: http.ServerResponse) => void,\n): Promise<void> {\n const { logger } = defaults;\n setCorsHeaders(res);\n\n const urlPath = req.url ?? `/model/${modelId}/converse-stream`;\n\n let converseReq: ConverseRequest;\n try {\n converseReq = JSON.parse(raw) as ConverseRequest;\n } catch (parseErr) {\n const detail = parseErr instanceof Error ? parseErr.message : \"unknown\";\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: null,\n response: { status: 400, fixture: null },\n });\n writeErrorResponse(\n res,\n 400,\n renderError(\"bedrock\", \"validation\", {\n message: `Malformed JSON: ${detail}`,\n type: \"invalid_request_error\",\n }).body,\n );\n return;\n }\n\n // Reject bodies that parsed but are not a JSON object (e.g. `null`) before\n // touching fields — otherwise `converseReq.messages` throws a TypeError that\n // surfaces as a 500 instead of a 400.\n if (!isJsonObject(converseReq)) {\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: null,\n response: { status: 400, fixture: null },\n });\n writeErrorResponse(\n res,\n 400,\n renderError(\"bedrock\", \"validation\", {\n message: \"Request body must be a JSON object\",\n type: \"invalid_request_error\",\n }).body,\n );\n return;\n }\n\n const messageError = !Array.isArray(converseReq.messages)\n ? \"Invalid request: messages array is required\"\n : (validateConverseMessages(converseReq) ??\n validateConverseSystem(converseReq) ??\n validateConverseTools(converseReq));\n if (messageError) {\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: null,\n response: { status: 400, fixture: null },\n });\n writeErrorResponse(\n res,\n 400,\n renderError(\"bedrock\", \"validation\", { message: messageError, type: \"invalid_request_error\" })\n .body,\n );\n return;\n }\n\n const completionReq = converseToCompletionRequest(converseReq, modelId, logger);\n completionReq.stream = true;\n completionReq._endpointType = \"chat\";\n completionReq._context = getContext(req);\n\n const testId = getTestId(req);\n const { fixture, skippedBySequenceOrTurn } = matchFixtureDiagnostic(\n fixtures,\n completionReq,\n journal.getFixtureMatchCountsForTest(testId),\n defaults.requestTransform,\n // Record mode proxies on a miss to capture a fresh turn (see record gate\n // below), so keep turnIndex strict to prevent an earlier-turn fixture from\n // shadowing a longer request and skipping the new turn's recording.\n { ...recordMatchOptions(!!defaults.record, defaults.logger), wire: \"bedrock-converse\" },\n );\n\n if (fixture) {\n logger.debug(`Fixture matched: ${JSON.stringify(fixture.match).slice(0, 120)}`);\n } else {\n logger.debug(`No fixture matched for request`);\n }\n\n if (fixture) {\n journal.incrementFixtureMatchCount(fixture, fixtures, testId);\n }\n\n if (\n await applyChaosAsync(\n res,\n fixture,\n defaults.chaos,\n req.headers,\n req.url,\n journal,\n {\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n },\n fixture ? \"fixture\" : \"proxy\",\n defaults.registry,\n defaults.logger,\n )\n )\n return;\n\n if (!fixture) {\n const effectiveStrict = resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss;\n if (effectiveStrict) {\n const strictStatus = 503;\n const strictMessage = strictNoMatchMessage(skippedBySequenceOrTurn);\n logger.error(strictNoMatchLogLine(req.method ?? \"POST\", urlPath, skippedBySequenceOrTurn));\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: {\n status: strictStatus,\n fixture: null,\n ...strictOverrideField(defaults.strict, req.headers),\n },\n });\n writeErrorResponse(\n res,\n strictStatus,\n renderError(\"bedrock\", \"strict-miss\", {\n message: strictMessage,\n type: \"invalid_request_error\",\n }).body,\n );\n return;\n }\n if (defaults.record) {\n const { outcome, clientHungUp } = await withHangUpDetection(req, res, () =>\n proxyAndRecord(req, res, completionReq, \"bedrock\", urlPath, fixtures, defaults, raw),\n );\n if (outcome === \"handled_by_hook\") return;\n if (outcome !== \"not_configured\") {\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: {\n status: res.statusCode ?? 200,\n fixture: null,\n source: \"proxy\",\n ...proxyInterruption(res, clientHungUp),\n },\n });\n return;\n }\n }\n journal.add({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: {\n status: 404,\n fixture: null,\n ...strictOverrideField(defaults.strict, req.headers),\n },\n });\n writeErrorResponse(\n res,\n 404,\n renderError(\"bedrock\", \"fixture-miss\", {\n message: \"No fixture matched\",\n type: \"invalid_request_error\",\n }).body,\n );\n return;\n }\n\n const response = await resolveResponse(fixture, completionReq);\n let misbehavior = planMisbehavior({\n wire: \"bedrock-converse\",\n emitsToolCallIds: true,\n fixture,\n response,\n request: completionReq,\n stream: true,\n defaults,\n rawHeaders: req.headers,\n url: req.url,\n });\n const addResponseEntry = (input: Parameters<Journal[\"add\"]>[0]) => {\n const entry = journal.add(input);\n recordMisbehaviorOutcome({ entry, summary: misbehavior.summary, defaults, testId });\n return entry;\n };\n if (misbehavior.kind === \"error\") {\n if (!misbehavior.summary?.evaluations.length) logger.error(misbehavior.message);\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: misbehavior.status, fixture, error: misbehavior.message },\n });\n const type = misbehavior.status === 400 ? \"ValidationException\" : \"InternalServerException\";\n res.setHeader(\"x-amzn-errortype\", type);\n writeErrorResponse(\n res,\n misbehavior.status,\n renderError(\"bedrock-converse\", \"misbehavior\", {\n type,\n message: misbehavior.message,\n code: misbehavior.code,\n }).body,\n );\n return;\n }\n const chunkSize = Math.max(1, fixture.chunkSize ?? defaults.chunkSize);\n const streamTiming = {\n latency: fixture.latency ?? defaults.latency,\n streamingProfile: fixture.streamingProfile,\n recordedTimings: fixture.recordedTimings,\n replaySpeed: fixture.replaySpeed ?? defaults.replaySpeed,\n };\n\n if (misbehavior.kind === \"applied\") {\n const prepared = prepareConverseMisbehavior(\n misbehavior,\n completionReq,\n true,\n defaults,\n req.headers,\n );\n misbehavior = prepared.plan;\n const events = buildConverseMisbehaviorEvents(prepared, chunkSize);\n const entry = addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n await deliverStream(res, entry, fixture, eventStreamCodec(), events, streamTiming);\n return;\n }\n\n // Raw passthrough (#549): the authored events or JSON, framed for this wire.\n if (isRawResponse(response)) {\n await serveRawResponse({\n wire: \"bedrock-converse\",\n stream: true,\n req,\n res,\n fixture,\n response,\n body: completionReq,\n journal,\n defaults,\n testId,\n misbehaviorSummary: misbehavior.summary,\n errorWire: \"bedrock-converse\",\n });\n return;\n }\n\n // Error response\n if (isErrorResponse(response)) {\n const status = response.status ?? 500;\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status, fixture },\n });\n writeErrorResponse(\n res,\n status,\n renderError(\"bedrock\", \"fixture\", {\n message: response.error.message,\n type: response.error.type ?? \"invalid_request_error\",\n }).body,\n {\n retryAfter: response.retryAfter,\n },\n );\n return;\n }\n\n // Content + tool calls response — stream as Event Stream\n if (isCombinedFixtureResponse(response)) {\n if (response.webSearches?.length) {\n logger.warn(\n \"webSearches in fixture response are not supported for Bedrock Converse API — ignoring\",\n );\n }\n const overrides = extractOverrides(response);\n const effReasoning = resolveReasoningForModel(\n response.reasoning,\n completionReq.model,\n resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression,\n logger,\n );\n const journalEntry = addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n const functionToolCalls = requireEmittedFunctionToolCalls(response, \"Bedrock Converse\");\n const events = buildBedrockStreamContentWithToolCallsEvents(\n response.content ?? \"\",\n functionToolCalls,\n chunkSize,\n logger,\n effReasoning,\n overrides,\n response.blocks,\n );\n await deliverStream(res, journalEntry, fixture, eventStreamCodec(), events, streamTiming);\n return;\n }\n\n // Text response — stream as Event Stream\n if (isTextResponse(response)) {\n if (response.webSearches?.length) {\n logger.warn(\n \"webSearches in fixture response are not supported for Bedrock Converse API — ignoring\",\n );\n }\n const overrides = extractOverrides(response);\n const effReasoning = resolveReasoningForModel(\n response.reasoning,\n completionReq.model,\n resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression,\n logger,\n );\n const journalEntry = addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n const events = buildBedrockStreamTextEvents(\n response.content,\n chunkSize,\n effReasoning,\n overrides,\n );\n await deliverStream(res, journalEntry, fixture, eventStreamCodec(), events, streamTiming);\n return;\n }\n\n // Tool call response — stream as Event Stream\n if (isToolCallResponse(response)) {\n if (response.webSearches?.length) {\n logger.warn(\n \"webSearches in fixture response are not supported for Bedrock Converse API — ignoring\",\n );\n }\n const overrides = extractOverrides(response);\n const effReasoning = resolveReasoningForModel(\n response.reasoning,\n completionReq.model,\n resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression,\n logger,\n );\n const journalEntry = addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 200, fixture },\n });\n const functionToolCalls = requireEmittedFunctionToolCalls(response, \"Bedrock Converse\");\n const events = buildBedrockStreamToolCallEvents(\n functionToolCalls,\n chunkSize,\n logger,\n effReasoning,\n overrides,\n );\n await deliverStream(res, journalEntry, fixture, eventStreamCodec(), events, streamTiming);\n return;\n }\n\n // Unknown response type\n addResponseEntry({\n method: req.method ?? \"POST\",\n path: urlPath,\n headers: flattenHeaders(req.headers),\n body: completionReq,\n response: { status: 500, fixture },\n });\n writeErrorResponse(\n res,\n 500,\n renderError(\"bedrock\", \"unknown-response\", {\n message: \"Fixture response did not match any known type\",\n type: \"server_error\",\n }).body,\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bedrock-converse.d.cts","names":[],"sources":["../src/bedrock-converse.ts"],"sourcesContent":[],"mappings":";;;;;;;UA0DU,oBAAA,CAqB0B;EAAgB,IAAA,CAAA,EAAA,MAAA;EA4XpC,OAAA,CAAA,EAAA;IAA2B,SAAA,EAAA,MAAA;IACpC,IAAA,EAAA,MAAA;IAEI,KAAA,EAAA,MAAA;;EACa,UAAA,CAAA,EAAA;IAkaF,SAAA,EAAA,MAAc;IAAA,OAAA,EAAA;MAC7B,IAAK,CAAA,EAAA,MAAA;IACL,CAAA,EAAA;;;UAnzBG,eAAA,CAwzBE;MACY,EAAA,MAAK,GAAA,WAAA;SAC1B,EAxzBQ,oBAwzBR,EAAA;;AA+YH,UApsCU,gBAAA,CAosCgC;EAAA,IAAA,EAAA,MAAA;aAC9B,CAAA,EAAA,MAAA;aACA,CAAA,EAAA,MAAA;;UAhsCF,eAAA,CAosCC;UACC,EApsCA,eAosCA,EAAA;QACY,CAAA,EAAA;IACrB,IAAA,EAAA,MAAA;EAAO,CAAA,EAAA;;;;;;;gBAnsC0B;;;;iBA4XpB,2BAAA,MACT,2CAEI,SACR;iBAkamB,cAAA,MACf,MAAA,CAAK,sBACL,MAAA,CAAK,wDAGA,oBACD,mBACC,uCACY,MAAA,CAAK,0BAC1B;iBA+YmB,oBAAA,MACf,MAAA,CAAK,sBACL,MAAA,CAAK,wDAGA,oBACD,mBACC,uCACY,MAAA,CAAK,0BAC1B"}
1
+ {"version":3,"file":"bedrock-converse.d.cts","names":[],"sources":["../src/bedrock-converse.ts"],"sourcesContent":[],"mappings":";;;;;;;UAgEU,oBAAA,CAqB0B;EAAgB,IAAA,CAAA,EAAA,MAAA;EAkXpC,OAAA,CAAA,EAAA;IAA2B,SAAA,EAAA,MAAA;IACpC,IAAA,EAAA,MAAA;IAEI,KAAA,EAAA,MAAA;;EACa,UAAA,CAAA,EAAA;IAkaF,SAAA,EAAA,MAAc;IAAA,OAAA,EAAA;MAC7B,IAAK,CAAA,EAAA,MAAA;IACL,CAAA,EAAA;;;UAzyBG,eAAA,CA8yBE;MACY,EAAA,MAAK,GAAA,WAAA;SAC1B,EA9yBQ,oBA8yBR,EAAA;;AAqbH,UAhuCU,gBAAA,CAguCgC;EAAA,IAAA,EAAA,MAAA;aAC9B,CAAA,EAAA,MAAA;aACA,CAAA,EAAA,MAAA;;UA5tCF,eAAA,CAguCC;UACC,EAhuCA,eAguCA,EAAA;QACY,CAAA,EAAA;IACrB,IAAA,EAAA,MAAA;EAAO,CAAA,EAAA;;;;;;;gBA/tC0B;;;;iBAkXpB,2BAAA,MACT,2CAEI,SACR;iBAkamB,cAAA,MACf,MAAA,CAAK,sBACL,MAAA,CAAK,wDAGA,oBACD,mBACC,uCACY,MAAA,CAAK,0BAC1B;iBAqbmB,oBAAA,MACf,MAAA,CAAK,sBACL,MAAA,CAAK,wDAGA,oBACD,mBACC,uCACY,MAAA,CAAK,0BAC1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"bedrock-converse.d.ts","names":[],"sources":["../src/bedrock-converse.ts"],"sourcesContent":[],"mappings":";;;;;;;UA0DU,oBAAA,CAqB0B;EAAgB,IAAA,CAAA,EAAA,MAAA;EA4XpC,OAAA,CAAA,EAAA;IAA2B,SAAA,EAAA,MAAA;IACpC,IAAA,EAAA,MAAA;IAEI,KAAA,EAAA,MAAA;;EACa,UAAA,CAAA,EAAA;IAkaF,SAAA,EAAA,MAAc;IAAA,OAAA,EAAA;MAC7B,IAAK,CAAA,EAAA,MAAA;IACL,CAAA,EAAA;;;UAnzBG,eAAA,CAwzBE;MACY,EAAA,MAAK,GAAA,WAAA;SAC1B,EAxzBQ,oBAwzBR,EAAA;;AA+YH,UApsCU,gBAAA,CAosCgC;EAAA,IAAA,EAAA,MAAA;aAC9B,CAAA,EAAA,MAAA;aACA,CAAA,EAAA,MAAA;;UAhsCF,eAAA,CAosCC;UACC,EApsCA,eAosCA,EAAA;QACY,CAAA,EAAA;IACrB,IAAA,EAAA,MAAA;EAAO,CAAA,EAAA;;;;;;;gBAnsC0B;;;;iBA4XpB,2BAAA,MACT,2CAEI,SACR;iBAkamB,cAAA,MACf,MAAA,CAAK,sBACL,MAAA,CAAK,wDAGA,oBACD,mBACC,uCACY,MAAA,CAAK,0BAC1B;iBA+YmB,oBAAA,MACf,MAAA,CAAK,sBACL,MAAA,CAAK,wDAGA,oBACD,mBACC,uCACY,MAAA,CAAK,0BAC1B"}
1
+ {"version":3,"file":"bedrock-converse.d.ts","names":[],"sources":["../src/bedrock-converse.ts"],"sourcesContent":[],"mappings":";;;;;;;UAgEU,oBAAA,CAqB0B;EAAgB,IAAA,CAAA,EAAA,MAAA;EAkXpC,OAAA,CAAA,EAAA;IAA2B,SAAA,EAAA,MAAA;IACpC,IAAA,EAAA,MAAA;IAEI,KAAA,EAAA,MAAA;;EACa,UAAA,CAAA,EAAA;IAkaF,SAAA,EAAA,MAAc;IAAA,OAAA,EAAA;MAC7B,IAAK,CAAA,EAAA,MAAA;IACL,CAAA,EAAA;;;UAzyBG,eAAA,CA8yBE;MACY,EAAA,MAAK,GAAA,WAAA;SAC1B,EA9yBQ,oBA8yBR,EAAA;;AAqbH,UAhuCU,gBAAA,CAguCgC;EAAA,IAAA,EAAA,MAAA;aAC9B,CAAA,EAAA,MAAA;aACA,CAAA,EAAA,MAAA;;UA5tCF,eAAA,CAguCC;UACC,EAhuCA,eAguCA,EAAA;QACY,CAAA,EAAA;IACrB,IAAA,EAAA,MAAA;EAAO,CAAA,EAAA;;;;;;;gBA/tC0B;;;;iBAkXpB,2BAAA,MACT,2CAEI,SACR;iBAkamB,cAAA,MACf,MAAA,CAAK,sBACL,MAAA,CAAK,wDAGA,oBACD,mBACC,uCACY,MAAA,CAAK,0BAC1B;iBAqbmB,oBAAA,MACf,MAAA,CAAK,sBACL,MAAA,CAAK,wDAGA,oBACD,mBACC,uCACY,MAAA,CAAK,0BAC1B"}