@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
package/dist/sse/index.js CHANGED
@@ -8,12 +8,17 @@ import { ResponsesJsonToSseConverter as ResponsesJsonToSseConverterCtor } from '
8
8
  import { ResponsesSseToJsonConverter as ResponsesSseToJsonConverterCtor } from './sse-to-json/index.js';
9
9
  import { AnthropicJsonToSseConverter as AnthropicJsonToSseConverterCtor } from './json-to-sse/anthropic-json-to-sse-converter.js';
10
10
  import { AnthropicSseToJsonConverter as AnthropicSseToJsonConverterCtor } from './sse-to-json/anthropic-sse-to-json-converter.js';
11
+ import { GeminiJsonToSseConverter as GeminiJsonToSseConverterCtor } from './json-to-sse/gemini-json-to-sse-converter.js';
12
+ import { GeminiSseToJsonConverter as GeminiSseToJsonConverterCtor } from './sse-to-json/gemini-sse-to-json-converter.js';
11
13
  // Chat协议转换器
12
14
  export { ChatJsonToSseConverter } from './json-to-sse/index.js';
13
15
  export { ChatSseToJsonConverter } from './sse-to-json/index.js';
14
16
  // Responses协议转换器
15
17
  export { ResponsesJsonToSseConverter } from './json-to-sse/index.js';
16
18
  export { ResponsesSseToJsonConverter } from './sse-to-json/index.js';
19
+ // Gemini协议转换器
20
+ export { GeminiJsonToSseConverter } from './json-to-sse/index.js';
21
+ export { GeminiSseToJsonConverter } from './sse-to-json/index.js';
17
22
  // 共享工具导出
18
23
  export * from './shared/utils.js';
19
24
  // 序列化器暂时禁用以专注核心SSE转换功能
@@ -74,6 +79,22 @@ export function createAnthropicConverters() {
74
79
  }
75
80
  };
76
81
  }
82
+ /**
83
+ * 工厂函数:创建Gemini协议转换器
84
+ */
85
+ export function createGeminiConverters() {
86
+ const jsonToSse = new GeminiJsonToSseConverterCtor();
87
+ const sseToJson = new GeminiSseToJsonConverterCtor();
88
+ return {
89
+ jsonToSse,
90
+ sseToJson,
91
+ async roundTrip(input, options) {
92
+ const sseStream = await jsonToSse.convertResponseToJsonToSse(input, options);
93
+ const result = await sseToJson.convertSseToJson(sseStream, options);
94
+ return result;
95
+ }
96
+ };
97
+ }
77
98
  /**
78
99
  * 工厂函数:创建完整的双向转换器(支持Chat和Responses协议)
79
100
  */
@@ -81,10 +102,12 @@ export function createBidirectionalConverters() {
81
102
  const chat = createChatConverters();
82
103
  const responses = createResponsesConverters();
83
104
  const anthropic = createAnthropicConverters();
105
+ const gemini = createGeminiConverters();
84
106
  return {
85
107
  chat,
86
108
  responses,
87
109
  anthropic,
110
+ gemini,
88
111
  /**
89
112
  * 自动检测协议类型并执行转换
90
113
  */
@@ -99,6 +122,9 @@ export function createBidirectionalConverters() {
99
122
  else if (input.type === 'message') {
100
123
  return await anthropic.roundTrip(input, options);
101
124
  }
125
+ else if (Array.isArray(input?.candidates)) {
126
+ return await gemini.roundTrip(input, options);
127
+ }
102
128
  else {
103
129
  throw new Error(`无法识别的协议类型: ${input.object}`);
104
130
  }
@@ -112,4 +138,5 @@ export const chatConverters = createChatConverters();
112
138
  export const responsesConverters = createResponsesConverters();
113
139
  export const bidirectionalConverters = createBidirectionalConverters();
114
140
  export const anthropicConverters = createAnthropicConverters();
141
+ export const geminiConverters = createGeminiConverters();
115
142
  export { defaultSseCodecRegistry, SseCodecRegistry } from './registry/sse-codec-registry.js';
@@ -1,11 +1,14 @@
1
- import type { AnthropicMessageResponse, AnthropicJsonToSseOptions } from '../types/anthropic-types.js';
2
- /**
3
- * Minimal Anthropic JSON → SSE converter (v3)
4
- * - Emits a compact but spec-aligned event sequence for text content.
5
- * - Tool use blocks: emits content_block_start (tool_use), input_json_delta (whole), content_block_stop.
6
- *
7
- * NOTE: This converter purposely avoids any tool governance. It only maps shapes/fields.
8
- */
1
+ import { PassThrough } from 'node:stream';
2
+ import { AnthropicMessageResponse, AnthropicJsonToSseOptions, DEFAULT_ANTHROPIC_CONVERSION_CONFIG } from '../types/index.js';
9
3
  export declare class AnthropicJsonToSseConverter {
10
- convertResponseToJsonToSse(payload: AnthropicMessageResponse, options: AnthropicJsonToSseOptions): Promise<import('node:stream').Readable>;
4
+ private config;
5
+ private contexts;
6
+ constructor(config?: Partial<typeof DEFAULT_ANTHROPIC_CONVERSION_CONFIG>);
7
+ convertResponseToJsonToSse(response: AnthropicMessageResponse, options: AnthropicJsonToSseOptions): Promise<PassThrough>;
8
+ private createContext;
9
+ private processResponse;
10
+ private updateStats;
11
+ private validateResponse;
12
+ private handleStreamError;
13
+ private wrapError;
11
14
  }
@@ -1,79 +1,112 @@
1
1
  import { PassThrough } from 'node:stream';
2
- /**
3
- * Minimal Anthropic JSON → SSE converter (v3)
4
- * - Emits a compact but spec-aligned event sequence for text content.
5
- * - Tool use blocks: emits content_block_start (tool_use), input_json_delta (whole), content_block_stop.
6
- *
7
- * NOTE: This converter purposely avoids any tool governance. It only maps shapes/fields.
8
- */
2
+ import { DEFAULT_ANTHROPIC_CONVERSION_CONFIG } from '../types/index.js';
3
+ import { ErrorUtils } from '../shared/utils.js';
4
+ import { createAnthropicSequencer } from './sequencers/anthropic-sequencer.js';
5
+ import { createAnthropicStreamWriter } from '../shared/writer.js';
9
6
  export class AnthropicJsonToSseConverter {
10
- async convertResponseToJsonToSse(payload, options) {
11
- const stream = new PassThrough();
12
- const write = (event, data) => {
13
- stream.write(`event: ${event}\n`);
14
- stream.write(`data: ${JSON.stringify(data)}\n\n`);
15
- };
16
- const messageId = payload.id || `msg_${Date.now()}`;
17
- const model = payload.model || options.model || 'unknown';
18
- // 1) message_start
19
- write('message_start', {
20
- type: 'message_start',
21
- message: { id: messageId, type: 'message', role: 'assistant', model }
7
+ config = DEFAULT_ANTHROPIC_CONVERSION_CONFIG;
8
+ contexts = new Map();
9
+ constructor(config) {
10
+ if (config) {
11
+ this.config = { ...this.config, ...config };
12
+ }
13
+ }
14
+ async convertResponseToJsonToSse(response, options) {
15
+ const context = this.createContext(response, options);
16
+ this.contexts.set(options.requestId, context);
17
+ const stream = new PassThrough({ objectMode: true });
18
+ const writer = createAnthropicStreamWriter(stream, {
19
+ onEvent: (event) => this.updateStats(context, event),
20
+ onError: (error) => this.handleStreamError(context, error, stream)
21
+ });
22
+ this.processResponse(response, context, writer, stream).catch((error) => {
23
+ this.handleStreamError(context, error, stream);
24
+ });
25
+ return Object.assign(stream, {
26
+ protocol: 'anthropic-messages',
27
+ direction: 'json_to_sse',
28
+ requestId: options.requestId,
29
+ getStats: () => context.eventStats,
30
+ complete: () => writer.complete(),
31
+ abort: (error) => writer.abort(error)
22
32
  });
23
- // 2) Iterate content blocks
24
- let index = 0;
25
- for (const block of payload.content || []) {
26
- if (!block || typeof block !== 'object')
27
- continue;
28
- const type = block.type;
29
- if (type === 'text') {
30
- write('content_block_start', {
31
- type: 'content_block_start',
32
- index,
33
- content_block: { type: 'text' }
34
- });
35
- const text = String(block.text || '');
36
- if (text) {
37
- write('content_block_delta', {
38
- type: 'content_block_delta',
39
- index,
40
- delta: { type: 'text_delta', text }
41
- });
42
- }
43
- write('content_block_stop', { type: 'content_block_stop', index });
44
- index += 1;
45
- }
46
- else if (type === 'tool_use') {
47
- const id = String(block.id || `call_${Math.random().toString(36).slice(2, 10)}`);
48
- const name = String(block.name || 'unknown_tool');
49
- const input = block.input ?? {};
50
- write('content_block_start', {
51
- type: 'content_block_start',
52
- index,
53
- content_block: { type: 'tool_use', id, name }
54
- });
55
- try {
56
- const partial_json = JSON.stringify(input);
57
- write('content_block_delta', {
58
- type: 'content_block_delta',
59
- index,
60
- delta: { type: 'input_json_delta', partial_json }
61
- });
62
- }
63
- catch {
64
- // best-effort: skip delta on stringify error
65
- }
66
- write('content_block_stop', { type: 'content_block_stop', index });
67
- index += 1;
68
- }
33
+ }
34
+ createContext(response, options) {
35
+ const stats = {
36
+ totalEvents: 0,
37
+ contentBlocks: 0,
38
+ toolUseBlocks: 0,
39
+ thinkingBlocks: 0,
40
+ textBlocks: 0,
41
+ errors: 0,
42
+ startTime: Date.now()
43
+ };
44
+ return {
45
+ requestId: options.requestId,
46
+ model: options.model,
47
+ response,
48
+ options,
49
+ startTime: Date.now(),
50
+ eventStats: stats
51
+ };
52
+ }
53
+ async processResponse(response, context, writer, stream) {
54
+ try {
55
+ this.validateResponse(response);
56
+ const sequencer = createAnthropicSequencer({
57
+ chunkSize: context.options.chunkSize ?? this.config.defaultChunkSize,
58
+ chunkDelayMs: context.options.chunkDelayMs ?? this.config.defaultDelayMs,
59
+ enableDelay: Boolean(context.options.chunkDelayMs),
60
+ reasoningMode: context.options.reasoningMode ?? this.config.reasoningMode,
61
+ reasoningTextPrefix: context.options.reasoningTextPrefix ?? this.config.reasoningTextPrefix
62
+ });
63
+ const events = sequencer.sequenceResponse(response, context.requestId);
64
+ await writer.writeAnthropicEvents(events);
65
+ writer.complete();
66
+ }
67
+ catch (error) {
68
+ writer.abort(error);
69
+ throw this.wrapError('ANTHROPIC_JSON_TO_SSE_FAILED', error, context.requestId);
69
70
  }
70
- // 3) message_delta (stop_reason hint)
71
- const stop_reason = payload.stop_reason || 'end_turn';
72
- write('message_delta', { type: 'message_delta', delta: { stop_reason } });
73
- // 4) message_stop
74
- write('message_stop', { type: 'message_stop' });
75
- // DONE
76
- stream.end();
77
- return stream;
71
+ finally {
72
+ this.contexts.delete(context.requestId);
73
+ stream.end();
74
+ }
75
+ }
76
+ updateStats(context, event) {
77
+ context.eventStats.totalEvents += 1;
78
+ if (!event || typeof event !== 'object')
79
+ return;
80
+ const type = event.type;
81
+ if (type === 'content_block_start') {
82
+ context.eventStats.contentBlocks += 1;
83
+ const blockType = event.data?.content_block?.type;
84
+ if (blockType === 'tool_use')
85
+ context.eventStats.toolUseBlocks += 1;
86
+ if (blockType === 'thinking')
87
+ context.eventStats.thinkingBlocks += 1;
88
+ if (blockType === 'text')
89
+ context.eventStats.textBlocks += 1;
90
+ }
91
+ }
92
+ validateResponse(response) {
93
+ if (!response || typeof response !== 'object') {
94
+ throw new Error('Invalid Anthropic response payload');
95
+ }
96
+ if (!Array.isArray(response.content)) {
97
+ throw new Error('Anthropic response content must be an array');
98
+ }
99
+ }
100
+ handleStreamError(context, error, stream) {
101
+ context.eventStats.errors += 1;
102
+ try {
103
+ stream.destroy(error);
104
+ }
105
+ catch {
106
+ /* noop */
107
+ }
108
+ }
109
+ wrapError(code, error, requestId) {
110
+ return ErrorUtils.createError(error.message, code, { requestId });
78
111
  }
79
112
  }
@@ -85,7 +85,9 @@ export class ChatJsonToSseConverterRefactored {
85
85
  const sequencer = createChatSequencer({
86
86
  chunkSize: context.options.maxTokensPerChunk || this.config.maxTokensPerChunk,
87
87
  chunkDelayMs: context.options.chunkDelayMs || this.config.defaultChunkDelayMs,
88
- enableDelay: !!context.options.chunkDelayMs
88
+ enableDelay: !!context.options.chunkDelayMs,
89
+ reasoningMode: context.options.reasoningMode || this.config.reasoningMode,
90
+ reasoningTextPrefix: context.options.reasoningTextPrefix ?? this.config.reasoningTextPrefix
89
91
  });
90
92
  // 4. 生成事件序列并写入流
91
93
  const eventStream = sequencer.sequenceRequest(request, context.model, context.requestId);
@@ -113,7 +115,9 @@ export class ChatJsonToSseConverterRefactored {
113
115
  const sequencer = createChatSequencer({
114
116
  chunkSize: context.options.maxTokensPerChunk || this.config.maxTokensPerChunk,
115
117
  chunkDelayMs: context.options.chunkDelayMs || this.config.defaultChunkDelayMs,
116
- enableDelay: !!context.options.chunkDelayMs
118
+ enableDelay: !!context.options.chunkDelayMs,
119
+ reasoningMode: context.options.reasoningMode || this.config.reasoningMode,
120
+ reasoningTextPrefix: context.options.reasoningTextPrefix ?? this.config.reasoningTextPrefix
117
121
  });
118
122
  // 4. 生成事件序列并写入流
119
123
  const eventStream = sequencer.sequenceResponse(response, context.model, context.requestId);
@@ -0,0 +1,14 @@
1
+ import { PassThrough } from 'node:stream';
2
+ import { GeminiResponse, GeminiJsonToSseOptions, DEFAULT_GEMINI_CONVERSION_CONFIG } from '../types/index.js';
3
+ export declare class GeminiJsonToSseConverter {
4
+ private config;
5
+ private contexts;
6
+ constructor(config?: Partial<typeof DEFAULT_GEMINI_CONVERSION_CONFIG>);
7
+ convertResponseToJsonToSse(response: GeminiResponse, options: GeminiJsonToSseOptions): Promise<PassThrough>;
8
+ private createContext;
9
+ private processResponse;
10
+ private validateResponse;
11
+ private updateStats;
12
+ private handleStreamError;
13
+ private wrapError;
14
+ }
@@ -0,0 +1,99 @@
1
+ import { PassThrough } from 'node:stream';
2
+ import { DEFAULT_GEMINI_CONVERSION_CONFIG } from '../types/index.js';
3
+ import { ErrorUtils } from '../shared/utils.js';
4
+ import { createGeminiSequencer } from './sequencers/gemini-sequencer.js';
5
+ import { createGeminiStreamWriter } from '../shared/writer.js';
6
+ export class GeminiJsonToSseConverter {
7
+ config = DEFAULT_GEMINI_CONVERSION_CONFIG;
8
+ contexts = new Map();
9
+ constructor(config) {
10
+ if (config) {
11
+ this.config = { ...this.config, ...config };
12
+ }
13
+ }
14
+ async convertResponseToJsonToSse(response, options) {
15
+ const context = this.createContext(response, options);
16
+ this.contexts.set(options.requestId, context);
17
+ const stream = new PassThrough({ objectMode: true });
18
+ const writer = createGeminiStreamWriter(stream, {
19
+ onEvent: () => this.updateStats(context, 'chunk'),
20
+ onError: (error) => this.handleStreamError(context, error, stream)
21
+ });
22
+ this.processResponse(response, context, writer, stream).catch((error) => {
23
+ this.handleStreamError(context, error, stream);
24
+ });
25
+ return Object.assign(stream, {
26
+ protocol: 'gemini-chat',
27
+ direction: 'json_to_sse',
28
+ requestId: options.requestId,
29
+ getStats: () => context.eventStats,
30
+ complete: () => writer.complete(),
31
+ abort: (error) => writer.abort(error)
32
+ });
33
+ }
34
+ createContext(response, options) {
35
+ const stats = {
36
+ totalEvents: 0,
37
+ chunkEvents: 0,
38
+ doneEvents: 0,
39
+ errors: 0,
40
+ startTime: Date.now()
41
+ };
42
+ return {
43
+ requestId: options.requestId,
44
+ model: options.model,
45
+ response,
46
+ options,
47
+ startTime: Date.now(),
48
+ eventStats: stats
49
+ };
50
+ }
51
+ async processResponse(response, context, writer, stream) {
52
+ try {
53
+ this.validateResponse(response);
54
+ const sequencer = createGeminiSequencer({
55
+ chunkDelayMs: context.options.chunkDelayMs ?? this.config.chunkDelayMs,
56
+ reasoningMode: context.options.reasoningMode ?? this.config.reasoningMode,
57
+ reasoningTextPrefix: context.options.reasoningTextPrefix ?? this.config.reasoningTextPrefix
58
+ });
59
+ const events = sequencer.sequenceResponse(response);
60
+ await writer.writeGeminiEvents(events);
61
+ this.updateStats(context, 'done');
62
+ writer.complete();
63
+ }
64
+ catch (error) {
65
+ writer.abort(error);
66
+ throw this.wrapError('GEMINI_JSON_TO_SSE_FAILED', error, context.requestId);
67
+ }
68
+ finally {
69
+ this.contexts.delete(context.requestId);
70
+ stream.end();
71
+ }
72
+ }
73
+ validateResponse(response) {
74
+ if (!response || typeof response !== 'object') {
75
+ throw new Error('Invalid Gemini response payload');
76
+ }
77
+ }
78
+ updateStats(context, kind) {
79
+ context.eventStats.totalEvents += 1;
80
+ if (kind === 'chunk') {
81
+ context.eventStats.chunkEvents += 1;
82
+ }
83
+ else {
84
+ context.eventStats.doneEvents += 1;
85
+ }
86
+ }
87
+ handleStreamError(context, error, stream) {
88
+ context.eventStats.errors += 1;
89
+ try {
90
+ stream.destroy(error);
91
+ }
92
+ catch {
93
+ /* ignore */
94
+ }
95
+ }
96
+ wrapError(code, error, requestId) {
97
+ return ErrorUtils.createError(error.message, code, { requestId });
98
+ }
99
+ }
@@ -3,4 +3,5 @@
3
3
  */
4
4
  export { ChatJsonToSseConverter } from './chat-json-to-sse-converter.js';
5
5
  export { ResponsesJsonToSseConverter } from './responses-json-to-sse-converter.js';
6
- export type { ChatJsonToSseOptions, ChatJsonToSseContext, ChatEventStats, ResponsesJsonToSseOptions, ResponsesJsonToSseContext, ResponsesEventStats } from '../types/index.js';
6
+ export { GeminiJsonToSseConverter } from './gemini-json-to-sse-converter.js';
7
+ export type { ChatJsonToSseOptions, ChatJsonToSseContext, ChatEventStats, ResponsesJsonToSseOptions, ResponsesJsonToSseContext, ResponsesEventStats, GeminiJsonToSseOptions, GeminiJsonToSseContext, GeminiEventStats } from '../types/index.js';
@@ -5,3 +5,5 @@
5
5
  export { ChatJsonToSseConverter } from './chat-json-to-sse-converter.js';
6
6
  // Responses协议转换器(重构版本)
7
7
  export { ResponsesJsonToSseConverter } from './responses-json-to-sse-converter.js';
8
+ // Gemini协议转换器
9
+ export { GeminiJsonToSseConverter } from './gemini-json-to-sse-converter.js';
@@ -0,0 +1,13 @@
1
+ import { AnthropicMessageResponse, AnthropicSseEvent } from '../../types/index.js';
2
+ import type { ChatReasoningMode } from '../../types/chat-types.js';
3
+ export interface AnthropicSequencerConfig {
4
+ chunkSize: number;
5
+ chunkDelayMs: number;
6
+ enableDelay: boolean;
7
+ reasoningMode?: ChatReasoningMode;
8
+ reasoningTextPrefix?: string;
9
+ }
10
+ export declare const DEFAULT_ANTHROPIC_SEQUENCER_CONFIG: AnthropicSequencerConfig;
11
+ export declare function createAnthropicSequencer(config?: Partial<AnthropicSequencerConfig>): {
12
+ sequenceResponse(response: AnthropicMessageResponse, requestId: string): AsyncGenerator<AnthropicSseEvent>;
13
+ };
@@ -0,0 +1,150 @@
1
+ import { dispatchReasoning } from '../../shared/reasoning-dispatcher.js';
2
+ export const DEFAULT_ANTHROPIC_SEQUENCER_CONFIG = {
3
+ chunkSize: 1024,
4
+ chunkDelayMs: 0,
5
+ enableDelay: false,
6
+ reasoningMode: 'channel',
7
+ reasoningTextPrefix: undefined
8
+ };
9
+ function createEvent(type, data) {
10
+ return {
11
+ type,
12
+ event: type,
13
+ timestamp: Date.now(),
14
+ protocol: 'anthropic-messages',
15
+ direction: 'json_to_sse',
16
+ data: { type, ...data }
17
+ };
18
+ }
19
+ async function maybeDelay(config) {
20
+ if (!config.enableDelay || !config.chunkDelayMs)
21
+ return;
22
+ await new Promise(resolve => setTimeout(resolve, config.chunkDelayMs));
23
+ }
24
+ function chunkText(input, size) {
25
+ if (!input || size <= 0)
26
+ return [input];
27
+ const chunks = [];
28
+ for (let i = 0; i < input.length; i += size) {
29
+ chunks.push(input.slice(i, i + size));
30
+ }
31
+ return chunks.length ? chunks : [''];
32
+ }
33
+ function normalizeToolInput(input) {
34
+ if (typeof input === 'string') {
35
+ return input;
36
+ }
37
+ try {
38
+ return JSON.stringify(input ?? {});
39
+ }
40
+ catch {
41
+ return String(input ?? '');
42
+ }
43
+ }
44
+ export function createAnthropicSequencer(config) {
45
+ const finalConfig = {
46
+ ...DEFAULT_ANTHROPIC_SEQUENCER_CONFIG,
47
+ ...config
48
+ };
49
+ return {
50
+ async *sequenceResponse(response, requestId) {
51
+ yield createEvent('message_start', {
52
+ message: {
53
+ id: response.id || `msg_${requestId}`,
54
+ type: 'message',
55
+ role: response.role || 'assistant',
56
+ model: response.model
57
+ }
58
+ });
59
+ let index = 0;
60
+ for (const block of response.content || []) {
61
+ if (!block || typeof block !== 'object')
62
+ continue;
63
+ if (block.type === 'text') {
64
+ yield createEvent('content_block_start', { index, content_block: { type: 'text' } });
65
+ for (const chunk of chunkText(block.text ?? '', finalConfig.chunkSize)) {
66
+ if (!chunk)
67
+ continue;
68
+ yield createEvent('content_block_delta', {
69
+ index,
70
+ delta: { type: 'text_delta', text: chunk }
71
+ });
72
+ await maybeDelay(finalConfig);
73
+ }
74
+ yield createEvent('content_block_stop', { index });
75
+ index += 1;
76
+ }
77
+ else if (block.type === 'thinking') {
78
+ const decision = dispatchReasoning(block.text, {
79
+ mode: finalConfig.reasoningMode,
80
+ prefix: finalConfig.reasoningTextPrefix
81
+ });
82
+ if (decision.appendToContent) {
83
+ yield createEvent('content_block_start', { index, content_block: { type: 'text' } });
84
+ for (const chunk of chunkText(decision.appendToContent, finalConfig.chunkSize)) {
85
+ if (!chunk)
86
+ continue;
87
+ yield createEvent('content_block_delta', {
88
+ index,
89
+ delta: { type: 'text_delta', text: chunk }
90
+ });
91
+ await maybeDelay(finalConfig);
92
+ }
93
+ yield createEvent('content_block_stop', { index });
94
+ index += 1;
95
+ }
96
+ if (decision.channel) {
97
+ yield createEvent('content_block_start', { index, content_block: { type: 'thinking' } });
98
+ for (const chunk of chunkText(decision.channel, finalConfig.chunkSize)) {
99
+ if (!chunk)
100
+ continue;
101
+ yield createEvent('content_block_delta', {
102
+ index,
103
+ delta: { type: 'thinking_delta', text: chunk }
104
+ });
105
+ await maybeDelay(finalConfig);
106
+ }
107
+ yield createEvent('content_block_stop', { index });
108
+ index += 1;
109
+ }
110
+ }
111
+ else if (block.type === 'tool_use') {
112
+ const id = block.id || `call_${requestId}_${index}`;
113
+ yield createEvent('content_block_start', {
114
+ index,
115
+ content_block: { type: 'tool_use', id, name: block.name, input: block.input }
116
+ });
117
+ const payload = normalizeToolInput(block.input ?? {});
118
+ if (payload) {
119
+ yield createEvent('content_block_delta', {
120
+ index,
121
+ delta: { type: 'input_json_delta', partial_json: payload }
122
+ });
123
+ }
124
+ yield createEvent('content_block_stop', { index });
125
+ index += 1;
126
+ }
127
+ else if (block.type === 'tool_result') {
128
+ yield createEvent('content_block_start', {
129
+ index,
130
+ content_block: {
131
+ type: 'tool_result',
132
+ tool_use_id: block.tool_use_id,
133
+ content: block.content,
134
+ is_error: block.is_error
135
+ }
136
+ });
137
+ yield createEvent('content_block_stop', { index });
138
+ index += 1;
139
+ }
140
+ }
141
+ yield createEvent('message_delta', {
142
+ delta: {
143
+ stop_reason: response.stop_reason ?? 'end_turn',
144
+ usage: response.usage
145
+ }
146
+ });
147
+ yield createEvent('message_stop', {});
148
+ }
149
+ };
150
+ }
@@ -2,12 +2,14 @@
2
2
  * Chat协议事件编排器
3
3
  * 负责严格的事件时序组合:role → content OR tool_calls(name → args.delta*) → finish_reason → done
4
4
  */
5
- import { ChatCompletionResponse, ChatSseEvent } from '../../types/index.js';
5
+ import { ChatCompletionResponse, ChatReasoningMode, ChatSseEvent } from '../../types/index.js';
6
6
  import { ChatEventGeneratorContext, ChatEventGeneratorConfig } from '../event-generators/chat.js';
7
7
  export interface ChatSequencerConfig extends ChatEventGeneratorConfig {
8
8
  includeSequenceNumbers: boolean;
9
9
  enableDelay: boolean;
10
10
  validateOrder: boolean;
11
+ reasoningMode?: ChatReasoningMode;
12
+ reasoningTextPrefix?: string;
11
13
  }
12
14
  export declare const DEFAULT_CHAT_SEQUENCER_CONFIG: ChatSequencerConfig;
13
15
  /**