@jsonstudio/llms 0.4.3 → 0.4.5

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 (542) hide show
  1. package/README.md +3 -1
  2. package/dist/bridge/routecodex-adapter.js +6 -3
  3. package/dist/config-unified/enhanced-path-resolver.js +14 -6
  4. package/dist/config-unified/unified-config.js +103 -59
  5. package/dist/conversion/codec-registry.js +15 -3
  6. package/dist/conversion/codecs/anthropic-openai-codec.d.ts +3 -13
  7. package/dist/conversion/codecs/anthropic-openai-codec.js +18 -473
  8. package/dist/conversion/codecs/gemini-openai-codec.js +91 -48
  9. package/dist/conversion/codecs/responses-openai-codec.js +9 -2
  10. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.js +3 -0
  11. package/dist/conversion/hub/format-adapters/chat-format-adapter.js +3 -0
  12. package/dist/conversion/hub/format-adapters/gemini-format-adapter.js +3 -0
  13. package/dist/conversion/hub/format-adapters/responses-format-adapter.d.ts +2 -0
  14. package/dist/conversion/hub/format-adapters/responses-format-adapter.js +9 -0
  15. package/dist/conversion/hub/node-support.js +3 -1
  16. package/dist/conversion/hub/pipeline/hub-pipeline.js +41 -37
  17. package/dist/conversion/hub/process/chat-process.js +258 -41
  18. package/dist/conversion/hub/response/provider-response.js +9 -3
  19. package/dist/conversion/hub/response/response-mappers.js +1 -1
  20. package/dist/conversion/hub/response/response-runtime.js +109 -10
  21. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.js +70 -156
  22. package/dist/conversion/hub/semantic-mappers/chat-mapper.js +63 -52
  23. package/dist/conversion/hub/semantic-mappers/gemini-mapper.js +76 -143
  24. package/dist/conversion/hub/semantic-mappers/responses-mapper.js +40 -160
  25. package/dist/conversion/hub/standardized-bridge.js +3 -0
  26. package/dist/conversion/hub/tool-governance/engine.d.ts +16 -0
  27. package/dist/conversion/hub/tool-governance/engine.js +266 -0
  28. package/dist/conversion/hub/tool-governance/index.d.ts +3 -0
  29. package/dist/conversion/hub/tool-governance/index.js +2 -0
  30. package/dist/conversion/hub/tool-governance/rules.d.ts +2 -0
  31. package/dist/conversion/hub/tool-governance/rules.js +76 -0
  32. package/dist/conversion/hub/tool-governance/types.d.ts +38 -0
  33. package/dist/conversion/index.d.ts +6 -0
  34. package/dist/conversion/index.js +6 -0
  35. package/dist/conversion/pipeline/codecs/v2/anthropic-openai-pipeline.d.ts +12 -0
  36. package/dist/conversion/pipeline/codecs/v2/anthropic-openai-pipeline.js +100 -0
  37. package/dist/conversion/pipeline/codecs/v2/openai-openai-pipeline.d.ts +15 -0
  38. package/dist/conversion/pipeline/codecs/v2/openai-openai-pipeline.js +174 -0
  39. package/dist/conversion/pipeline/codecs/v2/responses-openai-pipeline.d.ts +14 -0
  40. package/dist/conversion/pipeline/codecs/v2/responses-openai-pipeline.js +166 -0
  41. package/dist/conversion/pipeline/codecs/v2/shared/openai-chat-helpers.d.ts +13 -0
  42. package/dist/conversion/pipeline/codecs/v2/shared/openai-chat-helpers.js +66 -0
  43. package/dist/conversion/pipeline/hooks/adapter-context.d.ts +7 -0
  44. package/dist/conversion/pipeline/hooks/adapter-context.js +18 -0
  45. package/dist/conversion/pipeline/hooks/protocol-hooks.d.ts +67 -0
  46. package/dist/conversion/pipeline/hooks/protocol-hooks.js +1 -0
  47. package/dist/conversion/pipeline/index.d.ts +35 -0
  48. package/dist/conversion/pipeline/index.js +103 -0
  49. package/dist/conversion/pipeline/meta/meta-bag.d.ts +20 -0
  50. package/dist/conversion/pipeline/meta/meta-bag.js +81 -0
  51. package/dist/conversion/pipeline/schema/canonical-chat.d.ts +18 -0
  52. package/dist/conversion/pipeline/schema/canonical-chat.js +1 -0
  53. package/dist/conversion/pipeline/schema/index.d.ts +1 -0
  54. package/dist/conversion/pipeline/schema/index.js +1 -0
  55. package/dist/conversion/responses/responses-openai-bridge.d.ts +11 -58
  56. package/dist/conversion/responses/responses-openai-bridge.js +157 -1144
  57. package/dist/conversion/shared/anthropic-message-utils.d.ts +12 -0
  58. package/dist/conversion/shared/anthropic-message-utils.js +587 -0
  59. package/dist/conversion/shared/bridge-actions.d.ts +39 -0
  60. package/dist/conversion/shared/bridge-actions.js +709 -0
  61. package/dist/conversion/shared/{responses-conversation-store.d.ts → bridge-conversation-store.d.ts} +7 -7
  62. package/dist/conversion/shared/bridge-conversation-store.js +279 -0
  63. package/dist/conversion/shared/bridge-id-utils.js +42 -0
  64. package/dist/conversion/shared/bridge-instructions.d.ts +1 -0
  65. package/dist/conversion/shared/bridge-instructions.js +113 -0
  66. package/dist/conversion/shared/bridge-message-types.d.ts +39 -0
  67. package/dist/conversion/shared/bridge-message-types.js +1 -0
  68. package/dist/conversion/shared/bridge-message-utils.d.ts +22 -0
  69. package/dist/conversion/shared/bridge-message-utils.js +473 -0
  70. package/dist/conversion/shared/bridge-metadata.d.ts +1 -0
  71. package/dist/conversion/shared/bridge-metadata.js +1 -0
  72. package/dist/conversion/shared/bridge-policies.d.ts +18 -0
  73. package/dist/conversion/shared/bridge-policies.js +276 -0
  74. package/dist/conversion/shared/bridge-request-adapter.d.ts +28 -0
  75. package/dist/conversion/shared/bridge-request-adapter.js +430 -0
  76. package/dist/conversion/shared/chat-output-normalizer.d.ts +4 -0
  77. package/dist/conversion/shared/chat-output-normalizer.js +56 -0
  78. package/dist/conversion/shared/chat-request-filters.js +24 -1
  79. package/dist/conversion/shared/gemini-tool-utils.d.ts +5 -0
  80. package/dist/conversion/shared/gemini-tool-utils.js +130 -0
  81. package/dist/conversion/shared/metadata-passthrough.d.ts +11 -0
  82. package/dist/conversion/shared/metadata-passthrough.js +57 -0
  83. package/dist/conversion/shared/output-content-normalizer.d.ts +12 -0
  84. package/dist/conversion/shared/output-content-normalizer.js +119 -0
  85. package/dist/conversion/shared/reasoning-normalizer.d.ts +21 -0
  86. package/dist/conversion/shared/reasoning-normalizer.js +368 -0
  87. package/dist/conversion/shared/reasoning-tool-normalizer.d.ts +12 -0
  88. package/dist/conversion/shared/reasoning-tool-normalizer.js +132 -0
  89. package/dist/conversion/shared/reasoning-tool-parser.d.ts +10 -0
  90. package/dist/conversion/shared/reasoning-tool-parser.js +95 -0
  91. package/dist/conversion/shared/reasoning-utils.d.ts +2 -0
  92. package/dist/conversion/shared/reasoning-utils.js +42 -0
  93. package/dist/conversion/shared/responses-conversation-store.js +5 -11
  94. package/dist/conversion/shared/responses-message-utils.d.ts +15 -0
  95. package/dist/conversion/shared/responses-message-utils.js +206 -0
  96. package/dist/conversion/shared/responses-output-builder.d.ts +15 -0
  97. package/dist/conversion/shared/responses-output-builder.js +179 -0
  98. package/dist/conversion/shared/responses-output-utils.d.ts +7 -0
  99. package/dist/conversion/shared/responses-output-utils.js +108 -0
  100. package/dist/conversion/shared/responses-request-adapter.d.ts +3 -41
  101. package/dist/conversion/shared/responses-request-adapter.js +9 -40
  102. package/dist/conversion/shared/responses-response-utils.d.ts +3 -0
  103. package/dist/conversion/shared/responses-response-utils.js +209 -0
  104. package/dist/conversion/shared/responses-tool-utils.d.ts +12 -0
  105. package/dist/conversion/shared/responses-tool-utils.js +90 -0
  106. package/dist/conversion/shared/responses-types.d.ts +33 -0
  107. package/dist/conversion/shared/responses-types.js +1 -0
  108. package/dist/conversion/shared/tool-call-utils.d.ts +11 -0
  109. package/dist/conversion/shared/tool-call-utils.js +56 -0
  110. package/dist/conversion/shared/tool-mapping.d.ts +9 -0
  111. package/dist/conversion/shared/tool-mapping.js +124 -0
  112. package/dist/conversion/shared/tool-normalizers.d.ts +4 -0
  113. package/dist/conversion/shared/tool-normalizers.js +84 -0
  114. package/dist/router/virtual-router/bootstrap.js +18 -3
  115. package/dist/router/virtual-router/provider-registry.js +4 -2
  116. package/dist/router/virtual-router/types.d.ts +6 -0
  117. package/dist/sse/index.d.ts +38 -2
  118. package/dist/sse/index.js +27 -0
  119. package/dist/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +12 -9
  120. package/dist/sse/json-to-sse/anthropic-json-to-sse-converter.js +106 -73
  121. package/dist/sse/json-to-sse/chat-json-to-sse-converter.js +6 -2
  122. package/dist/sse/json-to-sse/gemini-json-to-sse-converter.d.ts +14 -0
  123. package/dist/sse/json-to-sse/gemini-json-to-sse-converter.js +99 -0
  124. package/dist/sse/json-to-sse/index.d.ts +2 -1
  125. package/dist/sse/json-to-sse/index.js +2 -0
  126. package/dist/sse/json-to-sse/sequencers/anthropic-sequencer.d.ts +13 -0
  127. package/dist/sse/json-to-sse/sequencers/anthropic-sequencer.js +150 -0
  128. package/dist/sse/json-to-sse/sequencers/chat-sequencer.d.ts +3 -1
  129. package/dist/sse/json-to-sse/sequencers/chat-sequencer.js +49 -3
  130. package/dist/sse/json-to-sse/sequencers/gemini-sequencer.d.ts +10 -0
  131. package/dist/sse/json-to-sse/sequencers/gemini-sequencer.js +95 -0
  132. package/dist/sse/json-to-sse/sequencers/responses-sequencer.js +31 -5
  133. package/dist/sse/registry/sse-codec-registry.d.ts +1 -1
  134. package/dist/sse/registry/sse-codec-registry.js +30 -1
  135. package/dist/sse/shared/reasoning-dispatcher.d.ts +10 -0
  136. package/dist/sse/shared/reasoning-dispatcher.js +25 -0
  137. package/dist/sse/shared/responses-output-normalizer.d.ts +12 -0
  138. package/dist/sse/shared/responses-output-normalizer.js +45 -0
  139. package/dist/sse/shared/serializers/anthropic-event-serializer.d.ts +2 -0
  140. package/dist/sse/shared/serializers/anthropic-event-serializer.js +9 -0
  141. package/dist/sse/shared/serializers/gemini-event-serializer.d.ts +2 -0
  142. package/dist/sse/shared/serializers/gemini-event-serializer.js +5 -0
  143. package/dist/sse/shared/serializers/index.d.ts +2 -0
  144. package/dist/sse/shared/serializers/index.js +2 -0
  145. package/dist/sse/shared/writer.d.ts +17 -1
  146. package/dist/sse/shared/writer.js +37 -1
  147. package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +9 -11
  148. package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.js +92 -127
  149. package/dist/sse/sse-to-json/builders/anthropic-response-builder.d.ts +16 -0
  150. package/dist/sse/sse-to-json/builders/anthropic-response-builder.js +151 -0
  151. package/dist/sse/sse-to-json/builders/response-builder.d.ts +1 -1
  152. package/dist/sse/sse-to-json/builders/response-builder.js +29 -7
  153. package/dist/sse/sse-to-json/chat-sse-to-json-converter.d.ts +8 -0
  154. package/dist/sse/sse-to-json/chat-sse-to-json-converter.js +116 -26
  155. package/dist/sse/sse-to-json/gemini-sse-to-json-converter.d.ts +13 -0
  156. package/dist/sse/sse-to-json/gemini-sse-to-json-converter.js +160 -0
  157. package/dist/sse/sse-to-json/index.d.ts +2 -1
  158. package/dist/sse/sse-to-json/index.js +2 -0
  159. package/dist/sse/sse-to-json/parsers/sse-parser.js +73 -13
  160. package/dist/sse/sse-to-json/responses-sse-to-json-converter.d.ts +1 -0
  161. package/dist/sse/sse-to-json/responses-sse-to-json-converter.js +10 -8
  162. package/dist/sse/types/anthropic-types.d.ts +119 -36
  163. package/dist/sse/types/anthropic-types.js +8 -5
  164. package/dist/sse/types/chat-types.d.ts +19 -6
  165. package/dist/sse/types/chat-types.js +2 -1
  166. package/dist/sse/types/conversion-context.d.ts +14 -11
  167. package/dist/sse/types/core-interfaces.d.ts +7 -3
  168. package/dist/sse/types/gemini-types.d.ts +116 -0
  169. package/dist/sse/types/gemini-types.js +5 -0
  170. package/dist/sse/types/index.d.ts +5 -2
  171. package/dist/sse/types/index.js +2 -0
  172. package/dist/sse/types/responses-types.d.ts +20 -20
  173. package/dist/sse/types/sse-events.d.ts +4 -3
  174. package/dist/sse/types/stream-state.d.ts +34 -39
  175. package/dist/sse/types/utility-types.d.ts +47 -43
  176. package/dist/sse/types/utility-types.js +10 -13
  177. package/dist/tools/tool-registry.js +156 -98
  178. package/package.json +7 -7
  179. package/dist/api/index.d.ts +0 -10
  180. package/dist/api/index.js +0 -11
  181. package/dist/api/llmswitch-config.d.ts +0 -15
  182. package/dist/api/llmswitch-config.js +0 -415
  183. package/dist/api/llmswitch-types.d.ts +0 -412
  184. package/dist/api/llmswitch-types.js +0 -60
  185. package/dist/bridge/routecodex-adapter.d.ts +0 -74
  186. package/dist/config/index.d.ts +0 -3
  187. package/dist/config/index.js +0 -5
  188. package/dist/config-unified/enhanced-path-resolver.d.ts +0 -5
  189. package/dist/config-unified/unified-config.d.ts +0 -26
  190. package/dist/conversion/codec-registry.d.ts +0 -10
  191. package/dist/conversion/codecs/gemini-openai-codec.d.ts +0 -16
  192. package/dist/conversion/codecs/openai-openai-codec.d.ts +0 -12
  193. package/dist/conversion/codecs/responses-openai-codec.d.ts +0 -12
  194. package/dist/conversion/config/config-manager.d.ts +0 -212
  195. package/dist/conversion/conversion-v3/adapters/index.d.ts +0 -2
  196. package/dist/conversion/conversion-v3/adapters/index.js +0 -1
  197. package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.d.ts +0 -38
  198. package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.js +0 -55
  199. package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.d.ts +0 -22
  200. package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.js +0 -84
  201. package/dist/conversion/conversion-v3/compatibility/compatibility-stages.d.ts +0 -4
  202. package/dist/conversion/conversion-v3/compatibility/compatibility-stages.js +0 -285
  203. package/dist/conversion/conversion-v3/compatibility/index.d.ts +0 -3
  204. package/dist/conversion/conversion-v3/compatibility/index.js +0 -2
  205. package/dist/conversion/conversion-v3/config/default-configs.d.ts +0 -48
  206. package/dist/conversion/conversion-v3/config/default-configs.js +0 -1007
  207. package/dist/conversion/conversion-v3/config/index.d.ts +0 -5
  208. package/dist/conversion/conversion-v3/config/index.js +0 -5
  209. package/dist/conversion/conversion-v3/config/pipeline-config-manager.d.ts +0 -49
  210. package/dist/conversion/conversion-v3/config/pipeline-config-manager.js +0 -65
  211. package/dist/conversion/conversion-v3/index.d.ts +0 -11
  212. package/dist/conversion/conversion-v3/index.js +0 -17
  213. package/dist/conversion/conversion-v3/nodes/index.d.ts +0 -56
  214. package/dist/conversion/conversion-v3/nodes/index.js +0 -149
  215. package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.d.ts +0 -25
  216. package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.js +0 -56
  217. package/dist/conversion/conversion-v3/nodes/input/base-input-node.d.ts +0 -75
  218. package/dist/conversion/conversion-v3/nodes/input/base-input-node.js +0 -237
  219. package/dist/conversion/conversion-v3/nodes/input/chat-input-node.d.ts +0 -25
  220. package/dist/conversion/conversion-v3/nodes/input/chat-input-node.js +0 -56
  221. package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.d.ts +0 -4
  222. package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.js +0 -197
  223. package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.d.ts +0 -16
  224. package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.js +0 -125
  225. package/dist/conversion/conversion-v3/nodes/input/index.d.ts +0 -8
  226. package/dist/conversion/conversion-v3/nodes/input/index.js +0 -8
  227. package/dist/conversion/conversion-v3/nodes/input/input-decision.d.ts +0 -46
  228. package/dist/conversion/conversion-v3/nodes/input/input-decision.js +0 -125
  229. package/dist/conversion/conversion-v3/nodes/input/responses-input-node.d.ts +0 -20
  230. package/dist/conversion/conversion-v3/nodes/input/responses-input-node.js +0 -51
  231. package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.d.ts +0 -71
  232. package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.js +0 -320
  233. package/dist/conversion/conversion-v3/nodes/output/base-output-node.d.ts +0 -116
  234. package/dist/conversion/conversion-v3/nodes/output/base-output-node.js +0 -512
  235. package/dist/conversion/conversion-v3/nodes/output/index.d.ts +0 -7
  236. package/dist/conversion/conversion-v3/nodes/output/index.js +0 -7
  237. package/dist/conversion/conversion-v3/nodes/output/openai-output-node.d.ts +0 -71
  238. package/dist/conversion/conversion-v3/nodes/output/openai-output-node.js +0 -293
  239. package/dist/conversion/conversion-v3/nodes/output/output-decision.d.ts +0 -68
  240. package/dist/conversion/conversion-v3/nodes/output/output-decision.js +0 -161
  241. package/dist/conversion/conversion-v3/nodes/output/responses-output-node.d.ts +0 -64
  242. package/dist/conversion/conversion-v3/nodes/output/responses-output-node.js +0 -323
  243. package/dist/conversion/conversion-v3/nodes/process/base-process-node.d.ts +0 -72
  244. package/dist/conversion/conversion-v3/nodes/process/base-process-node.js +0 -246
  245. package/dist/conversion/conversion-v3/nodes/process/chat-process-node.d.ts +0 -135
  246. package/dist/conversion/conversion-v3/nodes/process/chat-process-node.js +0 -854
  247. package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.d.ts +0 -29
  248. package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.js +0 -181
  249. package/dist/conversion/conversion-v3/nodes/process/index.d.ts +0 -10
  250. package/dist/conversion/conversion-v3/nodes/process/index.js +0 -10
  251. package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.d.ts +0 -59
  252. package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.js +0 -243
  253. package/dist/conversion/conversion-v3/nodes/process/response-process-node.d.ts +0 -17
  254. package/dist/conversion/conversion-v3/nodes/process/response-process-node.js +0 -213
  255. package/dist/conversion/conversion-v3/nodes/process/tool-process-node.d.ts +0 -30
  256. package/dist/conversion/conversion-v3/nodes/process/tool-process-node.js +0 -360
  257. package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.d.ts +0 -40
  258. package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.js +0 -430
  259. package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.d.ts +0 -12
  260. package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.js +0 -129
  261. package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.d.ts +0 -15
  262. package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.js +0 -57
  263. package/dist/conversion/conversion-v3/nodes/response/index.d.ts +0 -4
  264. package/dist/conversion/conversion-v3/nodes/response/index.js +0 -4
  265. package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.d.ts +0 -15
  266. package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.js +0 -87
  267. package/dist/conversion/conversion-v3/nodes/response/response-utils.d.ts +0 -1
  268. package/dist/conversion/conversion-v3/nodes/response/response-utils.js +0 -1
  269. package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.d.ts +0 -12
  270. package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.js +0 -67
  271. package/dist/conversion/conversion-v3/nodes/sse/index.d.ts +0 -3
  272. package/dist/conversion/conversion-v3/nodes/sse/index.js +0 -3
  273. package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.d.ts +0 -27
  274. package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.js +0 -165
  275. package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.d.ts +0 -19
  276. package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.js +0 -267
  277. package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.d.ts +0 -18
  278. package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.js +0 -48
  279. package/dist/conversion/conversion-v3/pipelines/index.d.ts +0 -6
  280. package/dist/conversion/conversion-v3/pipelines/index.js +0 -6
  281. package/dist/conversion/conversion-v3/pipelines/super-pipeline.d.ts +0 -112
  282. package/dist/conversion/conversion-v3/pipelines/super-pipeline.js +0 -566
  283. package/dist/conversion/conversion-v3/response/provider-response-converter.d.ts +0 -28
  284. package/dist/conversion/conversion-v3/response/provider-response-converter.js +0 -249
  285. package/dist/conversion/conversion-v3/sse/index.d.ts +0 -140
  286. package/dist/conversion/conversion-v3/sse/index.js +0 -115
  287. package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +0 -11
  288. package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.js +0 -79
  289. package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.d.ts +0 -79
  290. package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.js +0 -296
  291. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.d.ts +0 -55
  292. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.js +0 -233
  293. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.d.ts +0 -99
  294. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.js +0 -599
  295. package/dist/conversion/conversion-v3/sse/json-to-sse/index.d.ts +0 -6
  296. package/dist/conversion/conversion-v3/sse/json-to-sse/index.js +0 -7
  297. package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.d.ts +0 -79
  298. package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.js +0 -322
  299. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.d.ts +0 -37
  300. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.js +0 -218
  301. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.d.ts +0 -40
  302. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.js +0 -263
  303. package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.d.ts +0 -32
  304. package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.js +0 -106
  305. package/dist/conversion/conversion-v3/sse/shared/chat-serializer.d.ts +0 -4
  306. package/dist/conversion/conversion-v3/sse/shared/chat-serializer.js +0 -40
  307. package/dist/conversion/conversion-v3/sse/shared/constants.d.ts +0 -272
  308. package/dist/conversion/conversion-v3/sse/shared/constants.js +0 -321
  309. package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.d.ts +0 -158
  310. package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.js +0 -210
  311. package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.d.ts +0 -82
  312. package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.js +0 -275
  313. package/dist/conversion/conversion-v3/sse/shared/serializers/index.d.ts +0 -39
  314. package/dist/conversion/conversion-v3/sse/shared/serializers/index.js +0 -54
  315. package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.d.ts +0 -123
  316. package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.js +0 -356
  317. package/dist/conversion/conversion-v3/sse/shared/serializers/types.d.ts +0 -51
  318. package/dist/conversion/conversion-v3/sse/shared/serializers/types.js +0 -4
  319. package/dist/conversion/conversion-v3/sse/shared/utils.d.ts +0 -254
  320. package/dist/conversion/conversion-v3/sse/shared/utils.js +0 -543
  321. package/dist/conversion/conversion-v3/sse/shared/writer.d.ts +0 -111
  322. package/dist/conversion/conversion-v3/sse/shared/writer.js +0 -268
  323. package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +0 -13
  324. package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.js +0 -139
  325. package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.d.ts +0 -165
  326. package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.js +0 -776
  327. package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.d.ts +0 -106
  328. package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.js +0 -540
  329. package/dist/conversion/conversion-v3/sse/sse-to-json/index.d.ts +0 -6
  330. package/dist/conversion/conversion-v3/sse/sse-to-json/index.js +0 -7
  331. package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.d.ts +0 -73
  332. package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.js +0 -332
  333. package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.d.ts +0 -59
  334. package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.js +0 -270
  335. package/dist/conversion/conversion-v3/sse/types/anthropic-types.d.ts +0 -87
  336. package/dist/conversion/conversion-v3/sse/types/anthropic-types.js +0 -5
  337. package/dist/conversion/conversion-v3/sse/types/chat-types.d.ts +0 -308
  338. package/dist/conversion/conversion-v3/sse/types/chat-types.js +0 -32
  339. package/dist/conversion/conversion-v3/sse/types/conversion-context.d.ts +0 -211
  340. package/dist/conversion/conversion-v3/sse/types/conversion-context.js +0 -20
  341. package/dist/conversion/conversion-v3/sse/types/core-interfaces.d.ts +0 -90
  342. package/dist/conversion/conversion-v3/sse/types/core-interfaces.js +0 -5
  343. package/dist/conversion/conversion-v3/sse/types/index.d.ts +0 -14
  344. package/dist/conversion/conversion-v3/sse/types/index.js +0 -7
  345. package/dist/conversion/conversion-v3/sse/types/responses-types.d.ts +0 -328
  346. package/dist/conversion/conversion-v3/sse/types/responses-types.js +0 -38
  347. package/dist/conversion/conversion-v3/sse/types/sse-events.d.ts +0 -180
  348. package/dist/conversion/conversion-v3/sse/types/sse-events.js +0 -150
  349. package/dist/conversion/conversion-v3/sse/types/stream-state.d.ts +0 -204
  350. package/dist/conversion/conversion-v3/sse/types/stream-state.js +0 -44
  351. package/dist/conversion/conversion-v3/sse/types/utility-types.d.ts +0 -230
  352. package/dist/conversion/conversion-v3/sse/types/utility-types.js +0 -49
  353. package/dist/conversion/conversion-v3/standards/context-adapter.d.ts +0 -146
  354. package/dist/conversion/conversion-v3/standards/context-adapter.js +0 -438
  355. package/dist/conversion/conversion-v3/standards/errors.d.ts +0 -38
  356. package/dist/conversion/conversion-v3/standards/errors.js +0 -27
  357. package/dist/conversion/conversion-v3/standards/index.d.ts +0 -15
  358. package/dist/conversion/conversion-v3/standards/index.js +0 -11
  359. package/dist/conversion/conversion-v3/standards/node-capabilities.d.ts +0 -123
  360. package/dist/conversion/conversion-v3/standards/node-capabilities.js +0 -330
  361. package/dist/conversion/conversion-v3/standards/pipeline-context.d.ts +0 -237
  362. package/dist/conversion/conversion-v3/standards/pipeline-context.js +0 -84
  363. package/dist/conversion/conversion-v3/standards/pipeline-node.d.ts +0 -196
  364. package/dist/conversion/conversion-v3/standards/pipeline-node.js +0 -316
  365. package/dist/conversion/conversion-v3/standards/snapshot-handles.d.ts +0 -24
  366. package/dist/conversion/conversion-v3/standards/snapshot-handles.js +0 -49
  367. package/dist/conversion/conversion-v3/types/config-types.d.ts +0 -242
  368. package/dist/conversion/conversion-v3/types/config-types.js +0 -13
  369. package/dist/conversion/conversion-v3/types/index.d.ts +0 -8
  370. package/dist/conversion/conversion-v3/types/index.js +0 -11
  371. package/dist/conversion/conversion-v3/types/node-types.d.ts +0 -211
  372. package/dist/conversion/conversion-v3/types/node-types.js +0 -20
  373. package/dist/conversion/conversion-v3/types/pipeline-types.d.ts +0 -246
  374. package/dist/conversion/conversion-v3/types/pipeline-types.js +0 -26
  375. package/dist/conversion/conversion-v3/types/request-types.d.ts +0 -293
  376. package/dist/conversion/conversion-v3/types/request-types.js +0 -26
  377. package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.d.ts +0 -10
  378. package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.js +0 -103
  379. package/dist/conversion/conversion-v3/validations/index.d.ts +0 -8
  380. package/dist/conversion/conversion-v3/validations/index.js +0 -7
  381. package/dist/conversion/conversion-v3/validations/node-graph-validator.d.ts +0 -116
  382. package/dist/conversion/conversion-v3/validations/node-graph-validator.js +0 -505
  383. package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.d.ts +0 -139
  384. package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.js +0 -338
  385. package/dist/conversion/hub/config/types.d.ts +0 -26
  386. package/dist/conversion/hub/core/detour-registry.d.ts +0 -9
  387. package/dist/conversion/hub/core/hub-context.d.ts +0 -21
  388. package/dist/conversion/hub/core/index.d.ts +0 -3
  389. package/dist/conversion/hub/core/stage-driver.d.ts +0 -30
  390. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.d.ts +0 -16
  391. package/dist/conversion/hub/format-adapters/chat-format-adapter.d.ts +0 -17
  392. package/dist/conversion/hub/format-adapters/gemini-format-adapter.d.ts +0 -16
  393. package/dist/conversion/hub/format-adapters/index.d.ts +0 -21
  394. package/dist/conversion/hub/hub-feature.d.ts +0 -1
  395. package/dist/conversion/hub/node-support.d.ts +0 -19
  396. package/dist/conversion/hub/pipeline/hub-pipeline.d.ts +0 -68
  397. package/dist/conversion/hub/pipelines/inbound.d.ts +0 -22
  398. package/dist/conversion/hub/pipelines/outbound.d.ts +0 -22
  399. package/dist/conversion/hub/process/chat-process.d.ts +0 -13
  400. package/dist/conversion/hub/registry.d.ts +0 -28
  401. package/dist/conversion/hub/response/chat-response-utils.d.ts +0 -6
  402. package/dist/conversion/hub/response/provider-response.d.ts +0 -20
  403. package/dist/conversion/hub/response/response-mappers.d.ts +0 -19
  404. package/dist/conversion/hub/response/response-runtime.d.ts +0 -3
  405. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +0 -7
  406. package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +0 -7
  407. package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +0 -7
  408. package/dist/conversion/hub/semantic-mappers/index.d.ts +0 -4
  409. package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +0 -21
  410. package/dist/conversion/hub/snapshot-recorder.d.ts +0 -12
  411. package/dist/conversion/hub/standardized-bridge.d.ts +0 -12
  412. package/dist/conversion/hub/types/chat-envelope.d.ts +0 -67
  413. package/dist/conversion/hub/types/chat-schema.d.ts +0 -112
  414. package/dist/conversion/hub/types/errors.d.ts +0 -5
  415. package/dist/conversion/hub/types/format-envelope.d.ts +0 -7
  416. package/dist/conversion/hub/types/index.d.ts +0 -6
  417. package/dist/conversion/hub/types/json.d.ts +0 -9
  418. package/dist/conversion/hub/types/node.d.ts +0 -31
  419. package/dist/conversion/hub/types/standardized.d.ts +0 -94
  420. package/dist/conversion/schema-validator.d.ts +0 -7
  421. package/dist/conversion/shared/args-mapping.d.ts +0 -18
  422. package/dist/conversion/shared/chat-request-filters.d.ts +0 -9
  423. package/dist/conversion/shared/jsonish.d.ts +0 -3
  424. package/dist/conversion/shared/mcp-injection.d.ts +0 -2
  425. package/dist/conversion/shared/media.d.ts +0 -1
  426. package/dist/conversion/shared/openai-finalizer.d.ts +0 -9
  427. package/dist/conversion/shared/openai-message-normalize.d.ts +0 -1
  428. package/dist/conversion/shared/payload-budget.d.ts +0 -13
  429. package/dist/conversion/shared/reasoning-mapping.d.ts +0 -5
  430. package/dist/conversion/shared/responses-instructions.d.ts +0 -1
  431. package/dist/conversion/shared/responses-metadata.d.ts +0 -1
  432. package/dist/conversion/shared/snapshot-hooks.d.ts +0 -12
  433. package/dist/conversion/shared/streaming-text-extractor.d.ts +0 -26
  434. package/dist/conversion/shared/text-markup-normalizer.d.ts +0 -9
  435. package/dist/conversion/shared/tool-canonicalizer.d.ts +0 -2
  436. package/dist/conversion/shared/tool-filter-pipeline.d.ts +0 -17
  437. package/dist/conversion/shared/tool-governor.d.ts +0 -27
  438. package/dist/conversion/shared/tool-harvester.d.ts +0 -31
  439. package/dist/conversion/shared/tooling.d.ts +0 -26
  440. package/dist/conversion/types.d.ts +0 -33
  441. package/dist/core/index.d.ts +0 -6
  442. package/dist/core/index.js +0 -9
  443. package/dist/core/llmswitch-engine-v2.d.ts +0 -132
  444. package/dist/core/llmswitch-engine-v2.js +0 -649
  445. package/dist/core/llmswitch-factory-v2.d.ts +0 -123
  446. package/dist/core/llmswitch-factory-v2.js +0 -521
  447. package/dist/endpoints/base-endpoint-handler.d.ts +0 -128
  448. package/dist/endpoints/base-endpoint-handler.js +0 -545
  449. package/dist/endpoints/chat-endpoint-handler.d.ts +0 -115
  450. package/dist/endpoints/chat-endpoint-handler.js +0 -218
  451. package/dist/endpoints/endpoint-router.d.ts +0 -127
  452. package/dist/endpoints/endpoint-router.js +0 -438
  453. package/dist/endpoints/index.d.ts +0 -13
  454. package/dist/endpoints/index.js +0 -11
  455. package/dist/endpoints/messages-endpoint-handler.d.ts +0 -171
  456. package/dist/endpoints/messages-endpoint-handler.js +0 -238
  457. package/dist/endpoints/responses-endpoint-handler.d.ts +0 -147
  458. package/dist/endpoints/responses-endpoint-handler.js +0 -233
  459. package/dist/filters/builtin/add-fields-filter.d.ts +0 -8
  460. package/dist/filters/builtin/blacklist-filter.d.ts +0 -8
  461. package/dist/filters/builtin/whitelist-filter.d.ts +0 -8
  462. package/dist/filters/engine.d.ts +0 -16
  463. package/dist/filters/index.d.ts +0 -19
  464. package/dist/filters/special/request-streaming-to-nonstreaming.d.ts +0 -12
  465. package/dist/filters/special/request-tool-choice-policy.d.ts +0 -11
  466. package/dist/filters/special/request-tool-list-filter.d.ts +0 -11
  467. package/dist/filters/special/request-toolcalls-stringify.d.ts +0 -10
  468. package/dist/filters/special/request-tools-normalize.d.ts +0 -12
  469. package/dist/filters/special/response-finish-invariants.d.ts +0 -11
  470. package/dist/filters/special/response-openai-to-responses-bridge.d.ts +0 -13
  471. package/dist/filters/special/response-tool-arguments-blacklist.d.ts +0 -12
  472. package/dist/filters/special/response-tool-arguments-schema-converge.d.ts +0 -13
  473. package/dist/filters/special/response-tool-arguments-stringify.d.ts +0 -9
  474. package/dist/filters/special/response-tool-arguments-toon-decode.d.ts +0 -10
  475. package/dist/filters/special/response-tool-arguments-whitelist.d.ts +0 -11
  476. package/dist/filters/special/response-tool-text-canonicalize.d.ts +0 -10
  477. package/dist/filters/special/tool-filter-hooks.d.ts +0 -19
  478. package/dist/filters/special/tool-post-constraints.d.ts +0 -31
  479. package/dist/filters/types.d.ts +0 -68
  480. package/dist/filters/utils/fieldmap-loader.d.ts +0 -2
  481. package/dist/filters/utils/snapshot-writer.d.ts +0 -10
  482. package/dist/guidance/index.d.ts +0 -3
  483. package/dist/hooks/hooks-integration.d.ts +0 -161
  484. package/dist/hooks/hooks-integration.js +0 -519
  485. package/dist/hooks/index.d.ts +0 -10
  486. package/dist/hooks/index.js +0 -13
  487. package/dist/html-to-markdown.d.ts +0 -5
  488. package/dist/html-to-markdown.js +0 -66
  489. package/dist/http/sse-response.d.ts +0 -22
  490. package/dist/router/virtual-router/bootstrap.d.ts +0 -6
  491. package/dist/router/virtual-router/classifier.d.ts +0 -10
  492. package/dist/router/virtual-router/engine.d.ts +0 -35
  493. package/dist/router/virtual-router/error-center.d.ts +0 -10
  494. package/dist/router/virtual-router/features.d.ts +0 -3
  495. package/dist/router/virtual-router/health-manager.d.ts +0 -18
  496. package/dist/router/virtual-router/load-balancer.d.ts +0 -18
  497. package/dist/router/virtual-router/provider-registry.d.ts +0 -11
  498. package/dist/sse/json-to-sse/chat-json-to-sse-converter.d.ts +0 -79
  499. package/dist/sse/json-to-sse/event-generators/chat.d.ts +0 -55
  500. package/dist/sse/json-to-sse/event-generators/responses.d.ts +0 -99
  501. package/dist/sse/json-to-sse/responses-json-to-sse-converter.d.ts +0 -79
  502. package/dist/sse/json-to-sse/sequencers/responses-sequencer.d.ts +0 -40
  503. package/dist/sse/shared/chat-serializer.d.ts +0 -4
  504. package/dist/sse/shared/constants.d.ts +0 -272
  505. package/dist/sse/shared/serializers/base-serializer.d.ts +0 -158
  506. package/dist/sse/shared/serializers/chat-event-serializer.d.ts +0 -82
  507. package/dist/sse/shared/serializers/responses-event-serializer.d.ts +0 -123
  508. package/dist/sse/shared/serializers/types.d.ts +0 -51
  509. package/dist/sse/shared/utils.d.ts +0 -254
  510. package/dist/sse/sse-to-json/parsers/sse-parser.d.ts +0 -73
  511. package/dist/tools/proxy/anthropic-tool-proxy.d.ts +0 -19
  512. package/dist/tools/proxy/anthropic-tool-proxy.js +0 -57
  513. package/dist/tools/proxy/executors/web-fetch.d.ts +0 -6
  514. package/dist/tools/proxy/executors/web-fetch.js +0 -39
  515. package/dist/tools/proxy/registry.d.ts +0 -8
  516. package/dist/tools/proxy/registry.js +0 -14
  517. package/dist/tools/proxy/types.d.ts +0 -29
  518. package/dist/tools/tool-registry.d.ts +0 -8
  519. package/dist/tools/web-fetch-html.d.ts +0 -15
  520. package/dist/tools/web-fetch-html.js +0 -83
  521. package/dist/utils/conversion-adapter.d.ts +0 -65
  522. package/dist/utils/conversion-adapter.js +0 -183
  523. package/dist/utils/error-factory.d.ts +0 -88
  524. package/dist/utils/error-factory.js +0 -138
  525. package/dist/utils/error-utils.d.ts +0 -334
  526. package/dist/utils/error-utils.js +0 -782
  527. package/dist/utils/index.d.ts +0 -8
  528. package/dist/utils/index.js +0 -13
  529. package/dist/utils/performance-utils.d.ts +0 -205
  530. package/dist/utils/performance-utils.js +0 -440
  531. package/dist/utils/profile-mapper.d.ts +0 -32
  532. package/dist/utils/profile-mapper.js +0 -269
  533. package/dist/utils/request-processor.d.ts +0 -52
  534. package/dist/utils/request-processor.js +0 -210
  535. package/dist/utils/request-utils.d.ts +0 -117
  536. package/dist/utils/request-utils.js +0 -333
  537. package/dist/utils/response-utils.d.ts +0 -127
  538. package/dist/utils/response-utils.js +0 -516
  539. package/dist/utils/token-counter.d.ts +0 -89
  540. package/dist/utils/token-counter.js +0 -541
  541. /package/dist/{tools/proxy → conversion/hub/tool-governance}/types.js +0 -0
  542. /package/dist/conversion/shared/{responses-id-utils.d.ts → bridge-id-utils.d.ts} +0 -0
@@ -0,0 +1,179 @@
1
+ import { normalizeFunctionCallId } from './bridge-id-utils.js';
2
+ import { normalizeContentPart } from './output-content-normalizer.js';
3
+ import { expandResponsesMessageItem } from '../../sse/shared/responses-output-normalizer.js';
4
+ export function buildResponsesOutputFromChat(options) {
5
+ const { response, message, requestId, sanitizeFunctionName } = options;
6
+ const outputItems = [];
7
+ const allocateOutputId = (prefix) => `${prefix}_${requestId ?? Date.now()}_${outputItems.length + 1}`;
8
+ const role = message?.role || 'assistant';
9
+ const content = message?.content;
10
+ const reasoningText = typeof message?.reasoning_content === 'string' && message.reasoning_content.trim().length
11
+ ? String(message.reasoning_content).trim()
12
+ : undefined;
13
+ const convertedContent = convertChatContentToResponses(content);
14
+ if (message || convertedContent.length > 0 || reasoningText) {
15
+ const responsesMessage = {
16
+ id: allocateOutputId('message'),
17
+ type: 'message',
18
+ status: 'completed',
19
+ role,
20
+ content: convertedContent.length > 0 ? convertedContent : []
21
+ };
22
+ const expandedItems = expandResponsesMessageItem(responsesMessage, {
23
+ requestId: requestId ?? 'responses_outbound',
24
+ outputIndex: outputItems.length,
25
+ extraReasoning: reasoningText
26
+ });
27
+ for (const expanded of expandedItems) {
28
+ outputItems.push(expanded);
29
+ }
30
+ }
31
+ let toolCalls = Array.isArray(message?.tool_calls) ? message.tool_calls : [];
32
+ const normalizedToolCalls = [];
33
+ try {
34
+ toolCalls = toolCalls.filter((it) => {
35
+ const nm = (it && typeof it === 'object') ? (it?.function?.name || it.name) : undefined;
36
+ return typeof nm === 'string' && nm.trim().length > 0 && nm.toLowerCase() !== 'tool';
37
+ });
38
+ }
39
+ catch {
40
+ /* ignore */
41
+ }
42
+ let toolFallbackCounter = 0;
43
+ for (const call of toolCalls) {
44
+ const outputEntry = buildFunctionCallOutput(call, allocateOutputId, sanitizeFunctionName, outputItems.length, ++toolFallbackCounter);
45
+ if (outputEntry) {
46
+ outputItems.push(outputEntry.output);
47
+ normalizedToolCalls.push({
48
+ id: outputEntry.call_id,
49
+ name: outputEntry.name,
50
+ args: outputEntry.arguments
51
+ });
52
+ }
53
+ }
54
+ const usage = normalizeUsage(response.usage);
55
+ const outputText = extractOutputText(convertedContent);
56
+ const hasToolCalls = toolCalls.length > 0;
57
+ if (hasToolCalls) {
58
+ for (const item of outputItems) {
59
+ if (item.type === 'message') {
60
+ item.status = 'in_progress';
61
+ }
62
+ }
63
+ }
64
+ const requiredAction = normalizedToolCalls.length
65
+ ? buildRequiredActionFromNormalized(normalizedToolCalls)
66
+ : undefined;
67
+ const status = hasToolCalls ? 'requires_action' : 'completed';
68
+ return {
69
+ outputItems,
70
+ outputText,
71
+ status,
72
+ requiredAction,
73
+ usage
74
+ };
75
+ }
76
+ function normalizeUsage(usageRaw) {
77
+ if (usageRaw && typeof usageRaw === 'object') {
78
+ const usage = { ...usageRaw };
79
+ if (usage.input_tokens != null && usage.prompt_tokens == null) {
80
+ usage.prompt_tokens = usage.input_tokens;
81
+ }
82
+ if (usage.output_tokens != null && usage.completion_tokens == null) {
83
+ usage.completion_tokens = usage.output_tokens;
84
+ }
85
+ if (usage.prompt_tokens != null && usage.completion_tokens != null && usage.total_tokens == null) {
86
+ const total = Number(usage.prompt_tokens) + Number(usage.completion_tokens);
87
+ if (!Number.isNaN(total))
88
+ usage.total_tokens = total;
89
+ }
90
+ try {
91
+ delete usage.input_tokens;
92
+ delete usage.output_tokens;
93
+ }
94
+ catch {
95
+ /* ignore */
96
+ }
97
+ return usage;
98
+ }
99
+ return usageRaw;
100
+ }
101
+ function buildFunctionCallOutput(call, allocateOutputId, sanitizeFunctionName, baseCount, offset) {
102
+ try {
103
+ const fn = call?.function || {};
104
+ const callName = typeof fn?.name === 'string' && fn.name.trim().length
105
+ ? fn.name
106
+ : (typeof call.name === 'string' ? call.name : 'tool');
107
+ const sanitized = sanitizeFunctionName(callName);
108
+ if (!sanitized || sanitized.toLowerCase() === 'tool')
109
+ return null;
110
+ const rawArgs = fn?.arguments ?? call.arguments ?? {};
111
+ const argsStr = typeof rawArgs === 'string'
112
+ ? rawArgs
113
+ : (() => {
114
+ try {
115
+ return JSON.stringify(rawArgs ?? {});
116
+ }
117
+ catch {
118
+ return '{}';
119
+ }
120
+ })();
121
+ const originalCallId = typeof call.id === 'string' && call.id.trim().length
122
+ ? String(call.id)
123
+ : (typeof call.call_id === 'string' && call.call_id.trim().length ? String(call.call_id) : undefined);
124
+ const callId = originalCallId && originalCallId.trim().length
125
+ ? originalCallId.trim()
126
+ : normalizeFunctionCallId({
127
+ callId: originalCallId,
128
+ fallback: `fc_call_${baseCount + offset}`
129
+ });
130
+ const output = {
131
+ id: allocateOutputId('function_call'),
132
+ type: 'function_call',
133
+ status: 'in_progress',
134
+ name: sanitized,
135
+ call_id: callId,
136
+ arguments: argsStr
137
+ };
138
+ return { output, call_id: callId, name: sanitized, arguments: argsStr };
139
+ }
140
+ catch {
141
+ return null;
142
+ }
143
+ }
144
+ function buildRequiredActionFromNormalized(calls) {
145
+ if (!calls.length)
146
+ return undefined;
147
+ const submitCalls = calls.map((entry) => ({
148
+ id: entry.id,
149
+ type: 'function',
150
+ function: {
151
+ name: entry.name,
152
+ arguments: entry.args
153
+ }
154
+ }));
155
+ return { type: 'submit_tool_outputs', submit_tool_outputs: { tool_calls: submitCalls } };
156
+ }
157
+ function convertChatContentToResponses(content) {
158
+ if (content == null)
159
+ return [];
160
+ if (Array.isArray(content)) {
161
+ return content
162
+ .map((part) => normalizeContentPart(part, []))
163
+ .filter((entry) => !!entry);
164
+ }
165
+ const normalized = normalizeContentPart(content, []);
166
+ return normalized ? [normalized] : [];
167
+ }
168
+ function extractOutputText(parts) {
169
+ if (!parts.length)
170
+ return '';
171
+ const reasoningCollector = [];
172
+ const normalizedTexts = parts
173
+ .map((part) => normalizeContentPart(part, reasoningCollector))
174
+ .filter((entry) => !!entry)
175
+ .map((entry) => (typeof entry.text === 'string' ? entry.text : ''))
176
+ .filter(Boolean);
177
+ const text = normalizedTexts.join('\n').trim();
178
+ return text.length ? text : '';
179
+ }
@@ -0,0 +1,7 @@
1
+ type UnknownRecord = Record<string, unknown>;
2
+ export declare function extractResponsesOutputSegments(response: UnknownRecord | undefined): {
3
+ textParts: string[];
4
+ reasoningParts: string[];
5
+ };
6
+ export declare function normalizeResponsesContentPart(part: unknown, reasoningCollector: string[]): UnknownRecord | null;
7
+ export {};
@@ -0,0 +1,108 @@
1
+ import { extractReasoningSegments, sanitizeReasoningTaggedText } from './reasoning-utils.js';
2
+ function collectMessageTexts(blocks, accumulator) {
3
+ const pushText = (value) => {
4
+ if (typeof value === 'string' && value.trim().length) {
5
+ const cleaned = extractReasoningSegments(value, accumulator.reasoningParts);
6
+ if (cleaned.length) {
7
+ accumulator.textParts.push(cleaned);
8
+ }
9
+ }
10
+ };
11
+ if (typeof blocks === 'string') {
12
+ pushText(blocks);
13
+ return;
14
+ }
15
+ if (!Array.isArray(blocks))
16
+ return;
17
+ for (const block of blocks) {
18
+ if (!block || typeof block !== 'object')
19
+ continue;
20
+ const type = typeof block.type === 'string' ? String(block.type).toLowerCase() : '';
21
+ if (type === 'text' || type === 'input_text' || type === 'output_text' || type === 'commentary') {
22
+ pushText(block.text ?? block.content);
23
+ continue;
24
+ }
25
+ if (Array.isArray(block.content)) {
26
+ collectMessageTexts(block.content, accumulator);
27
+ continue;
28
+ }
29
+ if (typeof block.text === 'string') {
30
+ pushText(block.text);
31
+ }
32
+ }
33
+ }
34
+ export function extractResponsesOutputSegments(response) {
35
+ if (!response || typeof response !== 'object') {
36
+ return { textParts: [], reasoningParts: [] };
37
+ }
38
+ const textParts = [];
39
+ const reasoningParts = [];
40
+ const outputItems = Array.isArray(response.output) ? response.output : [];
41
+ for (const item of outputItems) {
42
+ if (!item || typeof item !== 'object')
43
+ continue;
44
+ const type = typeof item.type === 'string' ? String(item.type).toLowerCase() : '';
45
+ if (type === 'message') {
46
+ const message = item.message && typeof item.message === 'object'
47
+ ? item.message
48
+ : item;
49
+ const content = Array.isArray(message.content) ? message.content : [];
50
+ collectMessageTexts(content, { textParts, reasoningParts });
51
+ continue;
52
+ }
53
+ if (type === 'output_text') {
54
+ if (typeof item.text === 'string') {
55
+ const cleaned = extractReasoningSegments(item.text, reasoningParts);
56
+ if (cleaned.length) {
57
+ textParts.push(cleaned);
58
+ }
59
+ }
60
+ continue;
61
+ }
62
+ if (type === 'reasoning') {
63
+ const content = Array.isArray(item.content) ? item.content : [];
64
+ for (const block of content) {
65
+ if (block && typeof block === 'object' && typeof block.text === 'string') {
66
+ const sanitized = sanitizeReasoningTaggedText(block.text);
67
+ if (sanitized.length)
68
+ reasoningParts.push(sanitized);
69
+ }
70
+ }
71
+ }
72
+ }
73
+ return { textParts, reasoningParts };
74
+ }
75
+ export function normalizeResponsesContentPart(part, reasoningCollector) {
76
+ if (part == null) {
77
+ return null;
78
+ }
79
+ if (typeof part === 'string') {
80
+ const cleaned = extractReasoningSegments(part, reasoningCollector);
81
+ return { type: 'output_text', text: cleaned };
82
+ }
83
+ if (typeof part !== 'object') {
84
+ return { type: 'output_text', text: sanitizeReasoningTaggedText(String(part)) };
85
+ }
86
+ const clone = { ...part };
87
+ delete clone._initialText;
88
+ delete clone._hasDelta;
89
+ if (typeof clone.text === 'string') {
90
+ clone.text = extractReasoningSegments(clone.text, reasoningCollector);
91
+ }
92
+ if (clone.output_text && typeof clone.output_text === 'object' && typeof clone.output_text.text === 'string') {
93
+ clone.output_text = {
94
+ ...clone.output_text,
95
+ text: extractReasoningSegments(clone.output_text.text, reasoningCollector)
96
+ };
97
+ }
98
+ if (typeof clone.content === 'string') {
99
+ clone.content = extractReasoningSegments(clone.content, reasoningCollector);
100
+ }
101
+ if (!clone.type) {
102
+ clone.type = 'output_text';
103
+ }
104
+ if (clone.type === 'output_text' && typeof clone.text !== 'string') {
105
+ clone.text = '';
106
+ }
107
+ return clone;
108
+ }
@@ -1,54 +1,16 @@
1
- export type ResponsesContentPart = {
2
- type: string;
3
- text?: string;
4
- content?: unknown;
5
- };
6
- export type ResponsesInputItem = {
7
- type: string;
8
- role?: string;
9
- content?: Array<ResponsesContentPart> | null;
10
- name?: string;
11
- arguments?: unknown;
12
- call_id?: string;
13
- output?: unknown;
14
- function?: {
15
- name?: string;
16
- arguments?: unknown;
17
- };
18
- message?: {
19
- role?: string;
20
- content?: Array<ResponsesContentPart>;
21
- };
22
- id?: string;
23
- tool_call_id?: string;
24
- tool_use_id?: string;
25
- text?: string;
26
- };
27
- export type ResponsesToolDefinition = {
28
- type: string;
29
- name?: string;
30
- description?: string;
31
- strict?: boolean;
32
- parameters?: unknown;
33
- function?: {
34
- name?: string;
35
- description?: string;
36
- strict?: boolean;
37
- parameters?: unknown;
38
- };
39
- };
1
+ import type { BridgeInputItem, BridgeToolDefinition } from './bridge-message-types.js';
40
2
  export interface ResponsesRequestContext {
41
3
  requestId?: string;
42
4
  instructions?: string;
43
5
  originalSystemMessages?: string[];
44
- input?: ResponsesInputItem[];
6
+ input?: BridgeInputItem[];
45
7
  include?: unknown;
46
8
  store?: unknown;
47
9
  toolChoice?: unknown;
48
10
  parallelToolCalls?: boolean;
49
11
  metadata?: Record<string, unknown>;
50
12
  responseFormat?: unknown;
51
- toolsRaw?: ResponsesToolDefinition[];
13
+ toolsRaw?: BridgeToolDefinition[];
52
14
  stream?: boolean;
53
15
  instructionsIsRaw?: boolean;
54
16
  isChatPayload?: boolean;
@@ -1,5 +1,6 @@
1
1
  import { normalizeFunctionCallId, normalizeFunctionCallOutputId } from './responses-id-utils.js';
2
2
  import { ensureResponsesInstructions } from './responses-instructions.js';
3
+ import { serializeToolArguments, coerceBridgeRole, serializeToolOutput } from './bridge-message-utils.js';
3
4
  export function captureResponsesContext(payload, dto) {
4
5
  ensureResponsesInstructions(payload);
5
6
  const context = {
@@ -197,7 +198,7 @@ function mapResponsesInputToChat(options) {
197
198
  if (typeof entry.content === 'string') {
198
199
  const directText = (entry.content || '').toString().trim();
199
200
  if (directText.length) {
200
- const normalizedRole = normalizeResponseRole(entry.role || 'user');
201
+ const normalizedRole = coerceBridgeRole(entry.role || 'user');
201
202
  messages.push({ role: normalizedRole, content: directText });
202
203
  continue;
203
204
  }
@@ -215,7 +216,7 @@ function mapResponsesInputToChat(options) {
215
216
  if (callIdRaw && callIdRaw !== callId) {
216
217
  toolCallIdAliases.set(callIdRaw, callId);
217
218
  }
218
- const serialized = normalizeArgumentsBySchema(parsedArgs, name, toolsNormalized).trim();
219
+ const serialized = serializeToolArguments(parsedArgs, name, toolsNormalized).trim();
219
220
  toolNameById.set(callId, name);
220
221
  messages.push({ role: 'assistant', tool_calls: [{ id: callId, type: 'function', function: { name, arguments: serialized } }] });
221
222
  lastToolCallId = callId;
@@ -233,7 +234,7 @@ function mapResponsesInputToChat(options) {
233
234
  }
234
235
  toolCallId = normalized;
235
236
  }
236
- const output = normalizeToolOutput(entry);
237
+ const output = serializeToolOutput(entry);
237
238
  if (toolCallId) {
238
239
  try {
239
240
  let contentStr = output != null ? String(output) : '';
@@ -266,7 +267,7 @@ function mapResponsesInputToChat(options) {
266
267
  messages.push({ role: 'assistant', tool_calls: toolCalls });
267
268
  for (const msg of toolMessages)
268
269
  messages.push(msg);
269
- const normalizedRole = normalizeResponseRole((explicit.role ?? entry.role) || 'user');
270
+ const normalizedRole = coerceBridgeRole((explicit.role ?? entry.role) || 'user');
270
271
  if (typeof text === 'string' && text.trim().length) {
271
272
  messages.push({ role: normalizedRole, content: text.trim() });
272
273
  }
@@ -279,7 +280,7 @@ function mapResponsesInputToChat(options) {
279
280
  messages.push({ role: 'assistant', tool_calls: toolCalls });
280
281
  for (const msg of toolMessages)
281
282
  messages.push(msg);
282
- const normalizedRole = normalizeResponseRole(entry.role || 'user');
283
+ const normalizedRole = coerceBridgeRole(entry.role || 'user');
283
284
  if (typeof text === 'string' && text.trim().length) {
284
285
  messages.push({ role: normalizedRole, content: text.trim() });
285
286
  }
@@ -288,7 +289,7 @@ function mapResponsesInputToChat(options) {
288
289
  try {
289
290
  const t = String(entry.type || '').toLowerCase();
290
291
  if ((t === 'input_text' || t === 'text' || t === 'output_text' || t === 'commentary') && typeof entry.text === 'string') {
291
- const normalizedRole = normalizeResponseRole(entry.role || 'user');
292
+ const normalizedRole = coerceBridgeRole(entry.role || 'user');
292
293
  const s = entry.text;
293
294
  if (s && s.length)
294
295
  messages.push({ role: normalizedRole, content: s });
@@ -339,7 +340,7 @@ function processMessageBlocks(blocks, toolsNormalized, toolNameById, toolCallIdA
339
340
  currentLastCall = null;
340
341
  continue;
341
342
  }
342
- const serialized = normalizeArgumentsBySchema(parsedArgs, name, toolsNormalized).trim();
343
+ const serialized = serializeToolArguments(parsedArgs, name, toolsNormalized).trim();
343
344
  toolNameById.set(callId, name);
344
345
  toolCalls.push({ id: callId, type: 'function', function: { name, arguments: serialized } });
345
346
  currentLastCall = callId;
@@ -357,7 +358,7 @@ function processMessageBlocks(blocks, toolsNormalized, toolNameById, toolCallIdA
357
358
  }
358
359
  toolCallId = normalized;
359
360
  }
360
- const output = normalizeToolOutput(block);
361
+ const output = serializeToolOutput(block);
361
362
  if (toolCallId) {
362
363
  try {
363
364
  let contentStr = output != null ? String(output) : '';
@@ -390,38 +391,6 @@ function processMessageBlocks(blocks, toolsNormalized, toolNameById, toolCallIdA
390
391
  lastCallId: currentLastCall
391
392
  };
392
393
  }
393
- function normalizeResponseRole(role) {
394
- if (typeof role === 'string') {
395
- const normalized = role.toLowerCase();
396
- if (normalized === 'system' || normalized === 'assistant' || normalized === 'user' || normalized === 'tool')
397
- return normalized;
398
- }
399
- return 'user';
400
- }
401
- function normalizeArgumentsBySchema(argsStringOrObj, _functionName, _tools) {
402
- if (typeof argsStringOrObj === 'string')
403
- return argsStringOrObj;
404
- try {
405
- return JSON.stringify(argsStringOrObj ?? {});
406
- }
407
- catch {
408
- return String(argsStringOrObj);
409
- }
410
- }
411
- function normalizeToolOutput(entry) {
412
- const out = entry?.output;
413
- if (typeof out === 'string')
414
- return out;
415
- if (out && typeof out === 'object') {
416
- try {
417
- return JSON.stringify(out);
418
- }
419
- catch {
420
- return String(out);
421
- }
422
- }
423
- return null;
424
- }
425
394
  function normalizeTools(tools) {
426
395
  const normalized = [];
427
396
  for (const tool of tools) {
@@ -0,0 +1,3 @@
1
+ export declare function collectToolCallsFromResponses(response: Record<string, unknown>): Array<Record<string, unknown>>;
2
+ export declare function resolveFinishReason(response: Record<string, unknown>, toolCalls: Array<Record<string, unknown>>): string;
3
+ export declare function buildChatResponseFromResponses(payload: unknown): Record<string, unknown> | unknown;
@@ -0,0 +1,209 @@
1
+ import { sanitizeResponsesFunctionName } from './responses-tool-utils.js';
2
+ import { normalizeFunctionCallId } from './bridge-id-utils.js';
3
+ import { extractOutputSegments } from './output-content-normalizer.js';
4
+ import { sanitizeReasoningTaggedText } from './reasoning-utils.js';
5
+ import { createBridgeActionState, runBridgeActionPipeline } from './bridge-actions.js';
6
+ import { resolveBridgePolicy, resolvePolicyActions } from './bridge-policies.js';
7
+ function selectCallId(entry) {
8
+ const candidates = [
9
+ entry?.call_id,
10
+ entry?.tool_call_id,
11
+ entry?.tool_use_id,
12
+ entry?.id
13
+ ];
14
+ for (const candidate of candidates) {
15
+ if (typeof candidate === 'string' && candidate.trim().length > 0) {
16
+ return candidate.trim();
17
+ }
18
+ }
19
+ return undefined;
20
+ }
21
+ function normalizeToolCall(entry, fallbackPrefix) {
22
+ if (!entry || typeof entry !== 'object')
23
+ return null;
24
+ const fn = entry.function || {};
25
+ const rawName = sanitizeResponsesFunctionName(fn.name ?? entry.name);
26
+ if (!rawName)
27
+ return null;
28
+ const argsRaw = fn.arguments ?? entry.arguments ?? {};
29
+ const argsStr = typeof argsRaw === 'string'
30
+ ? argsRaw
31
+ : (() => {
32
+ try {
33
+ return JSON.stringify(argsRaw ?? {});
34
+ }
35
+ catch {
36
+ return '{}';
37
+ }
38
+ })();
39
+ const callIdRaw = selectCallId(entry);
40
+ const callId = typeof callIdRaw === 'string' && callIdRaw.length
41
+ ? callIdRaw
42
+ : normalizeFunctionCallId({
43
+ callId: callIdRaw,
44
+ fallback: `${fallbackPrefix}_${Math.random().toString(36).slice(2, 10)}`
45
+ });
46
+ return {
47
+ id: callId,
48
+ type: 'function',
49
+ function: {
50
+ name: rawName,
51
+ arguments: argsStr
52
+ }
53
+ };
54
+ }
55
+ export function collectToolCallsFromResponses(response) {
56
+ const collected = [];
57
+ const seenIds = new Set();
58
+ const pushCall = (call, source) => {
59
+ if (!call)
60
+ return;
61
+ const key = typeof call.id === 'string' ? call.id : `${source}_${collected.length}`;
62
+ if (key && seenIds.has(key))
63
+ return;
64
+ if (key)
65
+ seenIds.add(key);
66
+ collected.push(call);
67
+ };
68
+ const required = response?.required_action?.submit_tool_outputs?.tool_calls;
69
+ if (Array.isArray(required)) {
70
+ for (const call of required) {
71
+ pushCall(normalizeToolCall(call, 'req_call'), 'req_call');
72
+ }
73
+ }
74
+ const outputItems = Array.isArray(response.output) ? response.output : [];
75
+ for (const item of outputItems) {
76
+ if (!item || typeof item !== 'object')
77
+ continue;
78
+ const type = typeof item.type === 'string' ? String(item.type).toLowerCase() : '';
79
+ if (type !== 'function_call')
80
+ continue;
81
+ pushCall(normalizeToolCall(item, 'output_call'), 'output_call');
82
+ }
83
+ return collected;
84
+ }
85
+ export function resolveFinishReason(response, toolCalls) {
86
+ const meta = response.metadata && typeof response.metadata === 'object'
87
+ ? response.metadata
88
+ : undefined;
89
+ if (meta && typeof meta.finish_reason === 'string') {
90
+ return meta.finish_reason;
91
+ }
92
+ if (toolCalls.length > 0) {
93
+ return 'tool_calls';
94
+ }
95
+ const status = typeof response.status === 'string' ? response.status.toLowerCase() : '';
96
+ if (status === 'requires_action')
97
+ return 'tool_calls';
98
+ if (status === 'in_progress' || status === 'streaming')
99
+ return 'length';
100
+ if (status === 'cancelled')
101
+ return 'cancelled';
102
+ if (status === 'failed')
103
+ return 'error';
104
+ return 'stop';
105
+ }
106
+ function unwrapResponsesResponse(payload) {
107
+ if (!payload || typeof payload !== 'object')
108
+ return undefined;
109
+ if (typeof payload.object === 'string' && payload.object === 'response') {
110
+ return payload;
111
+ }
112
+ if (Array.isArray(payload.output) ||
113
+ typeof payload.status === 'string' ||
114
+ payload.required_action) {
115
+ return payload;
116
+ }
117
+ let current = payload;
118
+ const visited = new Set();
119
+ while (current && typeof current === 'object' && !Array.isArray(current)) {
120
+ if (visited.has(current))
121
+ break;
122
+ visited.add(current);
123
+ if (typeof current.object === 'string' && current.object === 'response') {
124
+ return current;
125
+ }
126
+ if (current.response && typeof current.response === 'object') {
127
+ current = current.response;
128
+ continue;
129
+ }
130
+ if (current.data && typeof current.data === 'object') {
131
+ current = current.data;
132
+ continue;
133
+ }
134
+ break;
135
+ }
136
+ return undefined;
137
+ }
138
+ export function buildChatResponseFromResponses(payload) {
139
+ if (!payload || typeof payload !== 'object')
140
+ return payload;
141
+ const response = unwrapResponsesResponse(payload);
142
+ if (!response) {
143
+ if (Array.isArray(payload.choices))
144
+ return payload;
145
+ return payload;
146
+ }
147
+ const id = typeof response.id === 'string' ? response.id : `resp_${Date.now()}`;
148
+ const model = response.model;
149
+ const created = typeof response.created_at === 'number'
150
+ ? response.created_at
151
+ : (response.created ?? Math.floor(Date.now() / 1000));
152
+ const usage = response.usage;
153
+ const toolCalls = collectToolCallsFromResponses(response);
154
+ const { textParts, reasoningParts } = extractOutputSegments(response);
155
+ const explicitOutput = typeof response.output_text === 'string' && response.output_text.trim().length
156
+ ? sanitizeReasoningTaggedText(response.output_text)
157
+ : undefined;
158
+ const messageContentText = explicitOutput || textParts.join('\n').trim();
159
+ const messageContent = messageContentText || '';
160
+ const message = {
161
+ role: 'assistant',
162
+ content: messageContent
163
+ };
164
+ try {
165
+ const bridgePolicy = resolveBridgePolicy({ protocol: 'openai-responses', moduleType: 'openai-responses' });
166
+ const policyActions = resolvePolicyActions(bridgePolicy, 'response_inbound');
167
+ if (policyActions?.length) {
168
+ const actionState = createBridgeActionState({
169
+ messages: [message],
170
+ rawResponse: response
171
+ });
172
+ runBridgeActionPipeline({
173
+ stage: 'response_inbound',
174
+ actions: policyActions,
175
+ protocol: bridgePolicy?.protocol ?? 'openai-responses',
176
+ moduleType: bridgePolicy?.moduleType ?? 'openai-responses',
177
+ requestId: typeof response?.id === 'string' ? response.id : undefined,
178
+ state: actionState
179
+ });
180
+ }
181
+ }
182
+ catch {
183
+ // Ignore policy errors
184
+ }
185
+ if (toolCalls.length) {
186
+ message.tool_calls = toolCalls;
187
+ }
188
+ if (reasoningParts.length) {
189
+ message.reasoning_content = reasoningParts.join('\n');
190
+ }
191
+ const finishReason = resolveFinishReason(response, toolCalls);
192
+ const chat = {
193
+ id,
194
+ object: 'chat.completion',
195
+ created,
196
+ model,
197
+ choices: [
198
+ {
199
+ index: 0,
200
+ finish_reason: finishReason,
201
+ message
202
+ }
203
+ ]
204
+ };
205
+ if (usage !== undefined) {
206
+ chat.usage = usage;
207
+ }
208
+ return chat;
209
+ }