@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
@@ -1,470 +1,8 @@
1
1
  import { runStandardChatRequestFilters } from '../index.js';
2
2
  import { FilterEngine, ResponseToolTextCanonicalizeFilter, ResponseToolArgumentsStringifyFilter, ResponseFinishInvariantsFilter } from '../../filters/index.js';
3
- function isObject(v) { return !!v && typeof v === 'object' && !Array.isArray(v); }
4
- export function mapAnthropicToolsToOpenAI(tools) {
5
- const out = [];
6
- for (const t of (Array.isArray(tools) ? tools : [])) {
7
- try {
8
- const name = typeof t?.name === 'string' ? String(t.name) : undefined;
9
- const description = typeof t?.description === 'string' ? String(t.description) : undefined;
10
- const params = t?.input_schema && isObject(t.input_schema) ? t.input_schema : { type: 'object', properties: {}, additionalProperties: true };
11
- if (name) {
12
- out.push({ type: 'function', function: { name, ...(description ? { description } : {}), parameters: params } });
13
- }
14
- }
15
- catch { /* ignore invalid tool */ }
16
- }
17
- return out;
18
- }
19
- function safeJson(v) { try {
20
- return JSON.stringify(v ?? {});
21
- }
22
- catch {
23
- return '{}';
24
- } }
25
- function flattenAnthropicText(content) {
26
- if (content == null)
27
- return '';
28
- if (typeof content === 'string')
29
- return content;
30
- if (Array.isArray(content))
31
- return content.map(flattenAnthropicText).join('');
32
- if (typeof content === 'object') {
33
- const t = String(content.type || '').toLowerCase();
34
- if (t === 'text' && typeof content.text === 'string')
35
- return String(content.text);
36
- if (Array.isArray(content.content))
37
- return content.content.map(flattenAnthropicText).join('');
38
- if (typeof content.content === 'string')
39
- return String(content.content);
40
- }
41
- return '';
42
- }
43
- export function buildOpenAIChatFromAnthropic(payload) {
44
- const newMessages = [];
45
- // 支持 string 或 Anthropic content blocks 数组两种 system 形状
46
- const systemField = payload?.system;
47
- const systemBlocks = Array.isArray(systemField)
48
- ? systemField
49
- : (systemField !== undefined && systemField !== null ? [systemField] : []);
50
- for (const block of systemBlocks) {
51
- const text = flattenAnthropicText(block).trim();
52
- if (text) {
53
- newMessages.push({ role: 'system', content: text });
54
- }
55
- }
56
- const msgs = Array.isArray(payload?.messages) ? payload.messages : [];
57
- for (const m of msgs) {
58
- if (!m || typeof m !== 'object')
59
- continue;
60
- const role = typeof m.role === 'string' ? String(m.role) : 'user';
61
- const content = m.content;
62
- if (!Array.isArray(content)) {
63
- const text = flattenAnthropicText(content);
64
- if (text)
65
- newMessages.push({ role, content: text });
66
- continue;
67
- }
68
- const textParts = [];
69
- const toolCalls = [];
70
- const toolResults = [];
71
- for (const block of content) {
72
- if (!block || typeof block !== 'object')
73
- continue;
74
- const t = String(block.type || '').toLowerCase();
75
- if (t === 'text' && typeof block.text === 'string') {
76
- const s = block.text.trim();
77
- if (s)
78
- textParts.push(s);
79
- }
80
- else if (t === 'tool_use') {
81
- const name = typeof block.name === 'string' ? String(block.name) : undefined;
82
- const id = typeof block.id === 'string' ? String(block.id) : undefined;
83
- const input = block.input ?? {};
84
- if (name) {
85
- const args = safeJson(input);
86
- toolCalls.push({ id, type: 'function', function: { name, arguments: args } });
87
- }
88
- }
89
- else if (t === 'tool_result') {
90
- const callId = block.tool_call_id
91
- || block.call_id
92
- || block.tool_use_id
93
- || block.id
94
- || undefined;
95
- let contentStr = '';
96
- const c = block.content;
97
- if (typeof c === 'string')
98
- contentStr = c;
99
- else if (c != null) {
100
- try {
101
- contentStr = JSON.stringify(c);
102
- }
103
- catch {
104
- contentStr = String(c);
105
- }
106
- }
107
- toolResults.push({ role: 'tool', tool_call_id: callId, content: contentStr });
108
- }
109
- }
110
- if (textParts.length > 0 || toolCalls.length > 0) {
111
- const msg = { role, content: textParts.join('\n') };
112
- if (toolCalls.length)
113
- msg.tool_calls = toolCalls;
114
- newMessages.push(msg);
115
- }
116
- for (const tr of toolResults)
117
- newMessages.push(tr);
118
- }
119
- const request = { messages: newMessages };
120
- if (payload && typeof payload === 'object') {
121
- if (typeof payload.model === 'string')
122
- request.model = payload.model;
123
- if (typeof payload.max_tokens === 'number')
124
- request.max_tokens = payload.max_tokens;
125
- if (typeof payload.temperature === 'number')
126
- request.temperature = payload.temperature;
127
- if (typeof payload.top_p === 'number')
128
- request.top_p = payload.top_p;
129
- if (typeof payload.stream === 'boolean')
130
- request.stream = payload.stream;
131
- if (payload.tool_choice !== undefined)
132
- request.tool_choice = payload.tool_choice;
133
- if (Array.isArray(payload.tools)) {
134
- request.tools = mapAnthropicToolsToOpenAI(payload.tools);
135
- }
136
- }
137
- return request;
138
- }
139
- function buildAnthropicFromOpenAIChat(oa) {
140
- // 将 OpenAI finish_reason 映射为 Anthropic stop_reason
141
- const mapFinishReason = (reason) => {
142
- const r = (reason || '').toString();
143
- const mapping = {
144
- stop: 'end_turn',
145
- length: 'max_tokens',
146
- tool_calls: 'tool_use',
147
- content_filter: 'stop_sequence',
148
- function_call: 'tool_use'
149
- };
150
- return mapping[r] || 'end_turn';
151
- };
152
- const choices = Array.isArray(oa?.choices) ? oa.choices : [];
153
- const primary = (choices[0] && typeof choices[0] === 'object') ? choices[0] : {};
154
- const msg = primary?.message || {};
155
- const role = String(msg?.role || 'assistant');
156
- const blocks = [];
157
- const content = msg?.content;
158
- // 保持与请求侧对称:即便 content 为空字符串也显式生成 text block,
159
- // 这样 AnthropicMessage → Chat → AnthropicMessage 闭环时,空文本块不会被静默丢弃
160
- // (例如 provider 返回的 [{type:'text',text:''},{type:'tool_use',...}] 应在闭环后保持同样结构)。
161
- if (typeof content === 'string') {
162
- blocks.push({ type: 'text', text: content });
163
- }
164
- if (Array.isArray(content)) {
165
- const text = content.map((p) => (typeof p?.text === 'string' ? p.text : (typeof p === 'string' ? p : ''))).filter(Boolean).join('');
166
- if (text)
167
- blocks.push({ type: 'text', text: text });
168
- }
169
- const tool_calls = Array.isArray(msg?.tool_calls) ? msg.tool_calls : [];
170
- for (const tc of tool_calls) {
171
- try {
172
- const id = String(tc?.id || `call_${Math.random().toString(36).slice(2, 10)}`);
173
- const fn = tc?.function || {};
174
- const name = String(fn?.name || 'tool');
175
- const argsRaw = fn?.arguments;
176
- let input;
177
- if (typeof argsRaw === 'string') {
178
- try {
179
- input = JSON.parse(argsRaw);
180
- }
181
- catch {
182
- input = { _raw: argsRaw };
183
- }
184
- }
185
- else {
186
- input = (argsRaw ?? {});
187
- }
188
- blocks.push({ type: 'tool_use', id, name, input });
189
- }
190
- catch { /* ignore */ }
191
- }
192
- const u = (oa?.usage ?? {});
193
- const input_tokens = Number(u.prompt_tokens ?? u.input_tokens ?? 0);
194
- const output_tokens = Number(u.completion_tokens ?? u.output_tokens ?? 0);
195
- let stop_reason = mapFinishReason(oa?.choices?.[0]?.finish_reason);
196
- // 对于“仅选择工具”的响应,即便 Chat finish_reason 被归一到 'stop',
197
- // 只要存在 tool_calls,就应在 Anthropic 侧显式标记为 tool_use,
198
- // 与 Responses 路径保持一致(Responses 会在 required_action 中保留 tool 调用)。
199
- if (tool_calls.length > 0 && stop_reason === 'end_turn') {
200
- stop_reason = 'tool_use';
201
- }
202
- return {
203
- id: `resp_${Date.now()}`,
204
- type: 'message',
205
- role,
206
- model: String(oa?.model || 'unknown'),
207
- created: Math.floor(Date.now() / 1000),
208
- content: blocks,
209
- usage: (input_tokens || output_tokens) ? { input_tokens, output_tokens } : undefined,
210
- stop_reason
211
- };
212
- }
213
- /**
214
- * ChatRequest → AnthropicRequest 编码器(请求侧)
215
- *
216
- * 用于在 v3 管线中,将 canonical Chat 请求编码为 Anthropic /v1/messages wire 形状:
217
- * - messages: Chat messages → Anthropic content blocks(仅 text,工具调用由 tools 列表承载)
218
- * - tools: Chat tools[].function → Anthropic { name, description, input_schema }
219
- * - 参数:max_tokens/temperature/top_p/stop → Anthropic 对应字段
220
- */
221
- export function buildAnthropicRequestFromOpenAIChat(chatReq) {
222
- const model = String(chatReq?.model || 'unknown');
223
- const messages = [];
224
- const collectText = (val) => {
225
- if (!val)
226
- return '';
227
- if (typeof val === 'string')
228
- return val;
229
- if (Array.isArray(val))
230
- return val.map(collectText).join('');
231
- if (typeof val === 'object') {
232
- if (typeof val.text === 'string')
233
- return String(val.text);
234
- if (Array.isArray(val.content))
235
- return collectText(val.content);
236
- }
237
- return '';
238
- };
239
- const msgs = Array.isArray(chatReq?.messages) ? chatReq.messages : [];
240
- // 预扫描 Chat 历史中的 tool_calls,只有存在配对的 tool_use/id 时,
241
- // 才允许在后续请求里生成对应的 tool_result 块,避免“凭空”制造
242
- // 未配对的 tool_result(上一轮未执行工具却发送 tool_result)。
243
- const knownToolCallIds = new Set();
244
- for (const m of msgs) {
245
- if (!m || typeof m !== 'object')
246
- continue;
247
- const role = String(m.role || 'user');
248
- if (role !== 'assistant')
249
- continue;
250
- const toolCalls = m.tool_calls;
251
- if (!Array.isArray(toolCalls))
252
- continue;
253
- for (const tc of toolCalls) {
254
- if (!tc || typeof tc !== 'object')
255
- continue;
256
- const id = tc.id;
257
- if (typeof id === 'string' && id) {
258
- knownToolCallIds.add(id);
259
- }
260
- }
261
- }
262
- // 兼容已有 Anthropic 形状:如果顶层已经存在 system[],优先保留其文本,
263
- // 后续再追加来自 Chat system 消息的文本,避免信息丢失。
264
- const systemBlocks = [];
265
- const pushSystemBlock = (text) => {
266
- const trimmed = text.trim();
267
- if (trimmed)
268
- systemBlocks.push({ type: 'text', text: trimmed });
269
- };
270
- try {
271
- const sys = chatReq?.system;
272
- const ingestSystem = (val) => {
273
- if (!val)
274
- return;
275
- if (typeof val === 'string') {
276
- pushSystemBlock(val);
277
- return;
278
- }
279
- if (Array.isArray(val)) {
280
- for (const entry of val)
281
- ingestSystem(entry);
282
- return;
283
- }
284
- if (typeof val === 'object') {
285
- if (typeof val.text === 'string') {
286
- pushSystemBlock(String(val.text));
287
- return;
288
- }
289
- if (Array.isArray(val.content)) {
290
- ingestSystem(val.content);
291
- return;
292
- }
293
- }
294
- };
295
- ingestSystem(sys);
296
- }
297
- catch {
298
- // ignore system pre-scan errors
299
- }
300
- for (const m of msgs) {
301
- if (!m || typeof m !== 'object')
302
- continue;
303
- const role = String(m.role || 'user');
304
- const text = collectText(m.content).trim();
305
- // Chat 中的 system 消息应折叠到顶层 system[],而不是作为 messages[0].role='system' 发送,
306
- // 以满足 GLM Anthropic 兼容端“messages[*].role 只能是 user/assistant”的约束。
307
- if (role === 'system') {
308
- if (text)
309
- pushSystemBlock(text);
310
- continue;
311
- }
312
- // Chat 中的 role:'tool' 消息在 Anthropic 中表示为 user 侧的 tool_result block。
313
- // 为避免出现 role:'tool' 的顶层消息(会触发 422),在这里专门映射:
314
- if (role === 'tool') {
315
- const rawToolCallId = m.tool_call_id ||
316
- m.call_id ||
317
- m.tool_use_id ||
318
- m.id ||
319
- undefined;
320
- const toolCallId = rawToolCallId ? String(rawToolCallId) : undefined;
321
- const hasPair = toolCallId ? knownToolCallIds.has(toolCallId) : false;
322
- // 如果当前请求历史中不存在匹配的 tool_use/id,则视为未配对的
323
- // tool_result —— 不再编码为 Anthropic 的 tool_result,而是退化为
324
- // 普通 user 文本,避免向上游发送“凭空”的工具结果。
325
- if (!hasPair) {
326
- if (text) {
327
- messages.push({
328
- role: 'user',
329
- content: [{ type: 'text', text }]
330
- });
331
- }
332
- continue;
333
- }
334
- const block = {
335
- type: 'tool_result',
336
- content: text
337
- };
338
- if (toolCallId) {
339
- block.tool_use_id = toolCallId;
340
- }
341
- messages.push({
342
- role: 'user',
343
- content: [block]
344
- });
345
- continue;
346
- }
347
- const blocks = [];
348
- if (text) {
349
- blocks.push({ type: 'text', text });
350
- }
351
- // 将 Chat 段中的 tool_calls 映射回 Anthropic 的 tool_use block,保持
352
- // Anthropic→Chat→Anthropic 闭环时 tool_use 的数量和分组不变:
353
- // - role 保持为 assistant;
354
- // - 每个 tool_call 生成一个 {type:'tool_use', id,name,input} block。
355
- const toolCalls = Array.isArray(m.tool_calls) ? m.tool_calls : [];
356
- for (const tc of toolCalls) {
357
- if (!tc || typeof tc !== 'object')
358
- continue;
359
- const id = String(tc.id || `call_${Math.random().toString(36).slice(2, 10)}`);
360
- const fn = tc.function || {};
361
- const name = typeof fn.name === 'string' ? String(fn.name) : 'tool';
362
- const argsRaw = fn.arguments;
363
- let input;
364
- if (typeof argsRaw === 'string') {
365
- try {
366
- input = JSON.parse(argsRaw);
367
- }
368
- catch {
369
- input = { _raw: argsRaw };
370
- }
371
- }
372
- else {
373
- input = (argsRaw ?? {});
374
- }
375
- blocks.push({ type: 'tool_use', id, name, input });
376
- }
377
- if (blocks.length > 0) {
378
- messages.push({ role, content: blocks });
379
- }
380
- }
381
- const toolsArr = [];
382
- const tools = Array.isArray(chatReq?.tools) ? chatReq.tools : [];
383
- for (const t of tools) {
384
- if (!t || typeof t !== 'object')
385
- continue;
386
- const fn = t.function || {};
387
- const chatName = typeof fn.name === 'string' ? fn.name : undefined;
388
- const anthName = !chatName && typeof t.name === 'string' ? String(t.name) : undefined;
389
- // Chat 形状:tools[].function.parameters
390
- if (chatName) {
391
- const description = typeof fn.description === 'string' ? fn.description : undefined;
392
- const params = fn.parameters || {};
393
- const input_schema = {
394
- type: 'object',
395
- properties: params.properties || {}
396
- };
397
- if (Array.isArray(params.required)) {
398
- input_schema.required = params.required;
399
- }
400
- if (typeof params.additionalProperties === 'boolean') {
401
- input_schema.additionalProperties = params.additionalProperties;
402
- }
403
- const toolDef = { name: chatName, input_schema };
404
- if (description)
405
- toolDef.description = description;
406
- toolsArr.push(toolDef);
407
- continue;
408
- }
409
- // 已是 Anthropic 形状:{ name, input_schema }
410
- if (anthName) {
411
- const description = typeof t.description === 'string' ? String(t.description) : undefined;
412
- const schemaSrc = t.input_schema;
413
- let input_schema;
414
- if (schemaSrc && typeof schemaSrc === 'object') {
415
- try {
416
- input_schema = JSON.parse(JSON.stringify(schemaSrc));
417
- }
418
- catch {
419
- input_schema = schemaSrc;
420
- }
421
- }
422
- else {
423
- input_schema = { type: 'object', properties: {}, additionalProperties: true };
424
- }
425
- const toolDef = { name: anthName, input_schema };
426
- if (description)
427
- toolDef.description = description;
428
- toolsArr.push(toolDef);
429
- }
430
- }
431
- const out = { model };
432
- // 从 ChatRequest 中恢复 Anthropic system[](某些 Anthropic 兼容端要求 messages[*].role 只能是 user/assistant)
433
- if (systemBlocks.length) {
434
- out.system = systemBlocks;
435
- }
436
- out.messages = messages;
437
- if (toolsArr.length > 0) {
438
- out.tools = toolsArr;
439
- }
440
- // 透传 metadata(如果存在),避免上游诊断/路由信息丢失
441
- try {
442
- if (chatReq && typeof chatReq === 'object' && chatReq.metadata && typeof chatReq.metadata === 'object') {
443
- out.metadata = JSON.parse(JSON.stringify(chatReq.metadata));
444
- }
445
- }
446
- catch {
447
- // best-effort
448
- }
449
- // 参数映射:尽量保持与 AnthropicInputNode.extractParameters 对称
450
- const mt = Number(chatReq?.max_tokens ?? chatReq?.maxTokens ?? NaN);
451
- if (Number.isFinite(mt) && mt > 0)
452
- out.max_tokens = mt;
453
- if (typeof chatReq?.temperature === 'number')
454
- out.temperature = chatReq.temperature;
455
- if (typeof chatReq?.top_p === 'number')
456
- out.top_p = chatReq.top_p;
457
- if (typeof chatReq?.stream === 'boolean')
458
- out.stream = chatReq.stream;
459
- const stop = chatReq?.stop;
460
- if (typeof stop === 'string' && stop.trim()) {
461
- out.stop_sequences = [stop.trim()];
462
- }
463
- else if (Array.isArray(stop) && stop.length > 0) {
464
- out.stop_sequences = stop.map((s) => String(s)).filter(Boolean);
465
- }
466
- return out;
467
- }
3
+ import { buildAnthropicFromOpenAIChat, buildOpenAIChatFromAnthropic, mapAnthropicToolsToChat } from '../shared/anthropic-message-utils.js';
4
+ export { buildAnthropicFromOpenAIChat, buildOpenAIChatFromAnthropic };
5
+ export { buildAnthropicRequestFromOpenAIChat } from '../shared/anthropic-message-utils.js';
468
6
  export class AnthropicOpenAIConversionCodec {
469
7
  _dependencies;
470
8
  id = 'anthropic-openai';
@@ -475,26 +13,32 @@ export class AnthropicOpenAIConversionCodec {
475
13
  }
476
14
  async initialize() { this.initialized = true; }
477
15
  async convertRequest(payload, _profile, context) {
478
- if (!this.initialized)
16
+ if (!this.initialized) {
479
17
  await this.initialize();
18
+ }
480
19
  const model = String(payload?.model || 'unknown');
481
20
  const { messages } = buildOpenAIChatFromAnthropic(payload);
482
21
  const out = { model, messages };
483
22
  // 最小必要的形状转换:Anthropic tools → OpenAI Chat function 工具
484
23
  try {
485
- if (Array.isArray(payload?.tools)) {
486
- out.tools = mapAnthropicToolsToOpenAI(payload.tools);
24
+ const normalizedTools = mapAnthropicToolsToChat(payload?.tools);
25
+ if (normalizedTools) {
26
+ out.tools = normalizedTools;
487
27
  }
488
28
  }
489
29
  catch { /* keep tools undefined on failure */ }
490
- if (Array.isArray(payload?.stop_sequences))
30
+ if (Array.isArray(payload?.stop_sequences)) {
491
31
  out.stop = payload.stop_sequences;
492
- if (typeof payload?.temperature === 'number')
32
+ }
33
+ if (typeof payload?.temperature === 'number') {
493
34
  out.temperature = payload.temperature;
494
- if (typeof payload?.top_p === 'number')
35
+ }
36
+ if (typeof payload?.top_p === 'number') {
495
37
  out.top_p = payload.top_p;
496
- if (typeof payload?.max_tokens === 'number')
38
+ }
39
+ if (typeof payload?.max_tokens === 'number') {
497
40
  out.max_tokens = payload.max_tokens;
41
+ }
498
42
  // 不设置默认 tool_choice;统一由 Chat 后半段治理
499
43
  // 统一流控:非流式由核心过滤器处理;此处不设置 stream
500
44
  // 统一走 Chat 请求过滤链路,使 /v1/messages 与 /v1/chat 在工具治理上保持一致
@@ -507,8 +51,9 @@ export class AnthropicOpenAIConversionCodec {
507
51
  return runStandardChatRequestFilters(out, _profile, ctxForFilters);
508
52
  }
509
53
  async convertResponse(payload, _profile, context) {
510
- if (!this.initialized)
54
+ if (!this.initialized) {
511
55
  await this.initialize();
56
+ }
512
57
  // 如果是 /v1/messages 且请求端声明了流式(或需要伪流式),合成 Anthropic SSE 流并透传给上层
513
58
  // 对非流式 JSON 响应,先在 OpenAI Chat canonical 上运行统一的响应工具治理,
514
59
  // 再映射回 Anthropic Messages 形状,保证与 /v1/chat 路径的行为一致。