@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,649 +0,0 @@
1
- /**
2
- * LLMSwitch V2 引擎
3
- *
4
- * 基于现有Hooks系统的多端点转换引擎,支持Chat、Responses、Messages三个端点
5
- * 每个转换节点前后都有Hooks支持,并提供基于入口端点的路径隔离快照系统
6
- */
7
- import { LLMSwitchHookStage } from '../api/llmswitch-types.js';
8
- import { createHooksIntegration } from '../hooks/hooks-integration.js';
9
- import { EndpointRouter } from '../endpoints/endpoint-router.js';
10
- /**
11
- * LLMSwitch V2 引擎状态
12
- */
13
- var EngineState;
14
- (function (EngineState) {
15
- EngineState["UNINITIALIZED"] = "uninitialized";
16
- EngineState["INITIALIZING"] = "initializing";
17
- EngineState["INITIALIZED"] = "initialized";
18
- EngineState["RUNNING"] = "running";
19
- EngineState["PAUSED"] = "paused";
20
- EngineState["STOPPING"] = "stopping";
21
- EngineState["STOPPED"] = "stopped";
22
- EngineState["ERROR"] = "error";
23
- })(EngineState || (EngineState = {}));
24
- /**
25
- * LLMSwitch V2 引擎核心实现
26
- */
27
- export class LLMSwitchEngineV2 {
28
- config;
29
- state = EngineState.UNINITIALIZED;
30
- hooksAdapter;
31
- endpointRouter;
32
- metrics;
33
- startTime = 0;
34
- hookHandlers = new Map();
35
- constructor(config) {
36
- this.config = config;
37
- this.metrics = this.initializeMetrics();
38
- this.hooksAdapter = this.createHooksAdapter();
39
- this.endpointRouter = this.createEndpointRouter();
40
- }
41
- /**
42
- * 初始化引擎
43
- */
44
- async initialize() {
45
- if (this.state !== EngineState.UNINITIALIZED) {
46
- throw new Error(`Cannot initialize from state: ${this.state}`);
47
- }
48
- this.state = EngineState.INITIALIZING;
49
- try {
50
- // 验证配置
51
- this.validateConfig();
52
- // 初始化Hooks适配器
53
- await this.hooksAdapter.initialize?.();
54
- // 初始化端点路由器
55
- await this.endpointRouter.initialize?.();
56
- // 注册默认工具治理Hooks
57
- this.registerDefaultToolHooks();
58
- this.state = EngineState.INITIALIZED;
59
- console.log('LLMSwitch V2 engine initialized successfully');
60
- }
61
- catch (error) {
62
- this.state = EngineState.ERROR;
63
- throw error;
64
- }
65
- }
66
- /**
67
- * 启动引擎
68
- */
69
- async start() {
70
- if (this.state !== EngineState.INITIALIZED) {
71
- throw new Error(`Cannot start from state: ${this.state}`);
72
- }
73
- this.state = EngineState.RUNNING;
74
- this.startTime = Date.now();
75
- // 启动Hooks适配器
76
- await this.hooksAdapter.start?.();
77
- // 启动端点路由器
78
- await this.endpointRouter.start?.();
79
- console.log('LLMSwitch V2 engine started');
80
- }
81
- /**
82
- * 停止引擎
83
- */
84
- async stop() {
85
- if (this.state !== EngineState.RUNNING) {
86
- return;
87
- }
88
- this.state = EngineState.STOPPING;
89
- // 停止端点路由器
90
- await this.endpointRouter.stop?.();
91
- // 停止Hooks适配器
92
- await this.hooksAdapter.stop?.();
93
- this.state = EngineState.STOPPED;
94
- console.log('LLMSwitch V2 engine stopped');
95
- }
96
- /**
97
- * 关闭引擎
98
- */
99
- async shutdown() {
100
- await this.stop();
101
- // 销毁组件
102
- await this.hooksAdapter.destroy?.();
103
- await this.endpointRouter.destroy?.();
104
- this.state = EngineState.UNINITIALIZED;
105
- console.log('LLMSwitch V2 engine shutdown complete');
106
- }
107
- /**
108
- * 处理请求
109
- */
110
- async processRequest(request, endpoint = 'chat', context) {
111
- if (this.state !== EngineState.RUNNING) {
112
- throw new Error('Engine is not running');
113
- }
114
- const startTime = Date.now();
115
- const requestId = context?.requestId || this.generateRequestId();
116
- const pathIdentifier = context?.pathIdentifier || this.generatePathIdentifier(request, endpoint);
117
- try {
118
- // 更新指标
119
- this.metrics.totalRequests++;
120
- // 构建完整的Hook上下文
121
- const hookContext = {
122
- executionId: this.generateExecutionId(),
123
- stage: LLMSwitchHookStage.REQUEST_1_VALIDATION_PRE,
124
- startTime,
125
- requestId,
126
- moduleId: `llmswitch-${endpoint}`,
127
- metadata: context?.metadata,
128
- endpoint,
129
- originalProtocol: this.config.endpoints[endpoint]?.protocol || 'openai-chat',
130
- targetProtocol: this.config.defaultProtocol,
131
- pathIdentifier,
132
- processingMode: this.detectProcessingMode(request),
133
- hookSequence: 1,
134
- totalHooks: 16 // 8个请求Hook + 8个响应Hook
135
- };
136
- // 执行请求处理流程
137
- const result = await this.executeRequestFlow(request, hookContext);
138
- if (result.success) {
139
- this.metrics.successfulRequests++;
140
- }
141
- else {
142
- this.metrics.failedRequests++;
143
- }
144
- return result;
145
- }
146
- catch (error) {
147
- this.metrics.failedRequests++;
148
- return {
149
- success: false,
150
- error: error,
151
- executionTime: Date.now() - startTime,
152
- metadata: {
153
- endpoint,
154
- originalProtocol: this.config.endpoints[endpoint]?.protocol || 'openai-chat',
155
- targetProtocol: this.config.defaultProtocol,
156
- processingMode: 'non-streaming',
157
- stage: 'error'
158
- }
159
- };
160
- }
161
- }
162
- /**
163
- * 处理响应
164
- */
165
- async processResponse(response, originalEndpoint, context) {
166
- const startTime = Date.now();
167
- try {
168
- // 构建响应Hook上下文
169
- const responseContext = {
170
- ...context,
171
- stage: LLMSwitchHookStage.RESPONSE_1_RECEIVE_PRE,
172
- startTime,
173
- hookSequence: 9, // 响应Hook从9开始
174
- totalHooks: 16
175
- };
176
- // 执行响应处理流程
177
- return await this.executeResponseFlow(response, responseContext);
178
- }
179
- catch (error) {
180
- return {
181
- success: false,
182
- error: error,
183
- executionTime: Date.now() - startTime,
184
- metadata: {
185
- endpoint: originalEndpoint,
186
- originalProtocol: context.originalProtocol,
187
- targetProtocol: context.targetProtocol,
188
- processingMode: context.processingMode,
189
- stage: 'response_error'
190
- }
191
- };
192
- }
193
- }
194
- /**
195
- * 流式请求处理
196
- */
197
- async processStreamingRequest(request, endpoint = 'chat', context) {
198
- if (this.state !== EngineState.RUNNING) {
199
- throw new Error('Engine is not running');
200
- }
201
- const requestId = context?.requestId || this.generateRequestId();
202
- const pathIdentifier = context?.pathIdentifier || this.generatePathIdentifier(request, endpoint);
203
- // 构建Hook上下文
204
- const hookContext = {
205
- executionId: this.generateExecutionId(),
206
- stage: LLMSwitchHookStage.REQUEST_5_SSE_PRE,
207
- startTime: Date.now(),
208
- requestId,
209
- moduleId: `llmswitch-${endpoint}`,
210
- metadata: context?.metadata,
211
- endpoint,
212
- originalProtocol: this.config.endpoints[endpoint]?.protocol || 'openai-chat',
213
- targetProtocol: this.config.defaultProtocol,
214
- pathIdentifier,
215
- processingMode: 'streaming',
216
- hookSequence: 1,
217
- totalHooks: 16
218
- };
219
- // 委托给端点路由器处理
220
- return this.endpointRouter.routeStreamingRequest(this.getEndpointPath(endpoint), 'POST', request, { 'x-request-id': requestId });
221
- }
222
- /**
223
- * 配置管理
224
- */
225
- async configure(config) {
226
- this.config = config;
227
- }
228
- async updateConfig(updates) {
229
- this.config = { ...this.config, ...updates };
230
- }
231
- /**
232
- * 健康检查
233
- */
234
- async healthCheck() {
235
- const components = {
236
- endpoints: await this.endpointRouter.healthCheck(),
237
- hooks: true, // TODO: 实际检查hooks状态
238
- snapshot: this.config.hooks.snapshot.enabled,
239
- protocols: {
240
- 'openai-chat': this.config.endpoints.chat?.enabled || false,
241
- 'openai-responses': this.config.endpoints.responses?.enabled || false,
242
- 'anthropic-messages': this.config.endpoints.messages?.enabled || false
243
- }
244
- };
245
- const issues = [];
246
- if (this.state !== EngineState.RUNNING) {
247
- issues.push(`Engine is not running (state: ${this.state})`);
248
- }
249
- return {
250
- healthy: issues.length === 0,
251
- version: this.config.version,
252
- uptime: this.state === EngineState.RUNNING ? Date.now() - this.startTime : 0,
253
- components,
254
- issues,
255
- metrics: this.metrics
256
- };
257
- }
258
- // 兼容方法(保留对既有调用方的兼容入口)
259
- async convertRequest(payload, profile, context) {
260
- // 检测端点类型
261
- const endpoint = this.detectEndpointFromPayload(payload);
262
- return this.processRequest(payload, endpoint, {
263
- requestId: context.requestId,
264
- metadata: { profile }
265
- });
266
- }
267
- async convertResponse(payload, profile, context) {
268
- const endpoint = context.endpoint || 'chat';
269
- return this.processResponse(payload, endpoint, context);
270
- }
271
- // 私有方法
272
- async executeRequestFlow(request, context) {
273
- // 执行请求Hook流程 (request_1_* - request_8_*)
274
- const requestStages = [
275
- LLMSwitchHookStage.REQUEST_1_VALIDATION_PRE,
276
- LLMSwitchHookStage.REQUEST_1_VALIDATION_POST,
277
- LLMSwitchHookStage.REQUEST_2_ROUTING_PRE,
278
- LLMSwitchHookStage.REQUEST_2_ROUTING_POST,
279
- LLMSwitchHookStage.REQUEST_3_CONVERSION_PRE,
280
- LLMSwitchHookStage.REQUEST_3_CONVERSION_POST,
281
- LLMSwitchHookStage.REQUEST_4_TOOLS_PRE,
282
- LLMSwitchHookStage.REQUEST_4_TOOLS_POST,
283
- LLMSwitchHookStage.REQUEST_5_SSE_PRE,
284
- LLMSwitchHookStage.REQUEST_5_SSE_POST,
285
- LLMSwitchHookStage.REQUEST_6_SNAPSHOT_PRE,
286
- LLMSwitchHookStage.REQUEST_6_SNAPSHOT_POST,
287
- LLMSwitchHookStage.REQUEST_7_MONITORING_PRE,
288
- LLMSwitchHookStage.REQUEST_7_MONITORING_POST,
289
- LLMSwitchHookStage.REQUEST_8_VALIDATION_PRE,
290
- LLMSwitchHookStage.REQUEST_8_VALIDATION_POST
291
- ];
292
- let currentData = request;
293
- const results = [];
294
- for (let i = 0; i < requestStages.length; i++) {
295
- const stage = requestStages[i];
296
- const hookContext = { ...context, stage, hookSequence: i + 1 };
297
- const result = await this.hooksAdapter.executeHook(stage, hookContext, currentData);
298
- if (!result.success) {
299
- throw result.error || new Error(`Hook stage ${stage} failed`);
300
- }
301
- currentData = result.data;
302
- results.push(result.metadata?.hookResults || []);
303
- }
304
- // 委托给端点路由器进行实际处理
305
- const path = this.getEndpointPath(context.endpoint);
306
- const endpointResult = await this.endpointRouter.routeRequest(path, 'POST', currentData);
307
- return {
308
- success: true,
309
- data: endpointResult.data,
310
- executionTime: Date.now() - context.startTime,
311
- metadata: {
312
- endpoint: context.endpoint,
313
- originalProtocol: context.originalProtocol,
314
- targetProtocol: context.targetProtocol,
315
- processingMode: context.processingMode,
316
- stage: 'request_completed',
317
- hookResults: results.flat()
318
- }
319
- };
320
- }
321
- async executeResponseFlow(response, context) {
322
- // 执行响应Hook流程 (response_1_* - response_8_*)
323
- const responseStages = [
324
- LLMSwitchHookStage.RESPONSE_1_RECEIVE_PRE,
325
- LLMSwitchHookStage.RESPONSE_1_RECEIVE_POST,
326
- LLMSwitchHookStage.RESPONSE_2_CONVERSION_PRE,
327
- LLMSwitchHookStage.RESPONSE_2_CONVERSION_POST,
328
- LLMSwitchHookStage.RESPONSE_3_TOOLS_PRE,
329
- LLMSwitchHookStage.RESPONSE_3_TOOLS_POST,
330
- LLMSwitchHookStage.RESPONSE_4_SSE_PRE,
331
- LLMSwitchHookStage.RESPONSE_4_SSE_POST,
332
- LLMSwitchHookStage.RESPONSE_5_FORMATTING_PRE,
333
- LLMSwitchHookStage.RESPONSE_5_FORMATTING_POST,
334
- LLMSwitchHookStage.RESPONSE_6_SNAPSHOT_PRE,
335
- LLMSwitchHookStage.RESPONSE_6_SNAPSHOT_POST,
336
- LLMSwitchHookStage.RESPONSE_7_QUALITY_PRE,
337
- LLMSwitchHookStage.RESPONSE_7_QUALITY_POST,
338
- LLMSwitchHookStage.RESPONSE_8_MONITORING_PRE,
339
- LLMSwitchHookStage.RESPONSE_8_MONITORING_POST
340
- ];
341
- let currentData = response;
342
- const results = [];
343
- for (let i = 0; i < responseStages.length; i++) {
344
- const stage = responseStages[i];
345
- const hookContext = { ...context, stage, hookSequence: i + 9 };
346
- const result = await this.hooksAdapter.executeHook(stage, hookContext, currentData);
347
- if (!result.success) {
348
- throw result.error || new Error(`Hook stage ${stage} failed`);
349
- }
350
- currentData = result.data;
351
- results.push(result.metadata?.hookResults || []);
352
- }
353
- return {
354
- success: true,
355
- data: currentData,
356
- executionTime: Date.now() - context.startTime,
357
- metadata: {
358
- endpoint: context.endpoint,
359
- originalProtocol: context.originalProtocol,
360
- targetProtocol: context.targetProtocol,
361
- processingMode: context.processingMode,
362
- stage: 'response_completed',
363
- hookResults: results.flat()
364
- }
365
- };
366
- }
367
- createHooksAdapter() {
368
- const adapterConfig = {
369
- enabled: this.config.hooks.enabled,
370
- timeout: 5000,
371
- retryAttempts: 2,
372
- parallel: false,
373
- snapshot: {
374
- enabled: this.config.hooks.snapshot.enabled,
375
- level: this.config.hooks.snapshot.level || 'normal',
376
- basePath: this.config.hooks.snapshot.basePath,
377
- endpointIsolation: {
378
- enabled: this.config.hooks.snapshot.endpointIsolation.enabled,
379
- pathStructure: this.config.hooks.snapshot.endpointIsolation.pathStructure
380
- }
381
- }
382
- };
383
- return createHooksIntegration(adapterConfig);
384
- }
385
- createEndpointRouter() {
386
- const defaultEndpoint = this.config.defaultProtocol === 'openai-chat'
387
- ? 'chat'
388
- : this.config.defaultProtocol === 'openai-responses'
389
- ? 'responses'
390
- : 'messages';
391
- const routerConfig = {
392
- defaultEndpoint,
393
- endpointConfigs: this.config.endpoints,
394
- autoDetect: true,
395
- fallbackEnabled: false // 零fallback原则
396
- };
397
- return new EndpointRouter(this.hooksAdapter, routerConfig);
398
- }
399
- /**
400
- * 注册默认的工具治理 Hooks:
401
- * - request_4_tools_pre: 请求侧仅做 augment + 指引注入(不做文本→工具)
402
- * - response_3_tools_pre: 响应侧做文本→工具;Responses 非流追加 required_action
403
- *
404
- * DISABLED: Tool governance is now handled exclusively in ChatProcessNode (conversion-v3)
405
- * to avoid duplicate processing and interference with TOON decoding.
406
- */
407
- registerDefaultToolHooks() {
408
- // Tool governance is now centralized in conversion-v3/ChatProcessNode
409
- // These hooks are disabled to prevent duplicate processing
410
- return;
411
- /* DISABLED - DO NOT RE-ENABLE WITHOUT UPDATING ChatProcessNode
412
- try {
413
- const h: any = this.hooksAdapter as any;
414
- if (!h || typeof h.registerHookHandler !== 'function') return;
415
-
416
- // 请求侧 Hooks
417
- h.registerHookHandler('request_4_tools_pre', async (params: any) => {
418
- try {
419
- const mod = await import('../conversion/shared/tool-governor.js');
420
- const { governTools } = mod as any;
421
- const out = governTools(params.data, {
422
- phase: 'request',
423
- endpoint: params?.context?.endpoint || 'chat',
424
- requestId: params?.context?.requestId,
425
- snapshot: { enabled: true, endpoint: params?.context?.endpoint || 'chat', requestId: params?.context?.requestId }
426
- });
427
- return { success: true, data: out };
428
- } catch (e) {
429
- return { success: true, data: params.data };
430
- }
431
- });
432
-
433
- // 响应侧 Hooks
434
- h.registerHookHandler('response_3_tools_pre', async (params: any) => {
435
- try {
436
- const mod = await import('../conversion/shared/tool-governor.js');
437
- const { governTools } = mod as any;
438
- const ep = params?.context?.endpoint || 'chat';
439
- const out = governTools(params.data, {
440
- phase: 'response',
441
- endpoint: ep,
442
- stream: params?.context?.processingMode === 'streaming',
443
- // 在 tools_pre 阶段仅做 canonicalize,不合成 required_action
444
- produceRequiredAction: false,
445
- requestId: params?.context?.requestId
446
- });
447
- return { success: true, data: out };
448
- } catch (e) {
449
- return { success: true, data: params.data };
450
- }
451
- });
452
-
453
- // Responses 非流的 required_action 生成在 formatting_post 阶段进行
454
- h.registerHookHandler('response_5_formatting_post', async (params: any) => {
455
- try {
456
- const mod = await import('../conversion/shared/tool-governor.js');
457
- const { governTools } = mod as any;
458
- const ep = params?.context?.endpoint || 'chat';
459
- const out = governTools(params.data, {
460
- phase: 'response',
461
- endpoint: ep,
462
- stream: params?.context?.processingMode === 'streaming',
463
- produceRequiredAction: (ep === 'responses'),
464
- requestId: params?.context?.requestId
465
- });
466
- return { success: true, data: out };
467
- } catch (e) {
468
- return { success: true, data: params.data };
469
- }
470
- });
471
- } catch { }
472
- */
473
- }
474
- validateConfig() {
475
- if (!this.config.version) {
476
- throw new Error('Version is required');
477
- }
478
- if (!this.config.endpoints || Object.keys(this.config.endpoints).length === 0) {
479
- throw new Error('At least one endpoint must be configured');
480
- }
481
- }
482
- detectProcessingMode(request) {
483
- return request.stream === true ? 'streaming' : 'non-streaming';
484
- }
485
- detectEndpointFromPayload(payload) {
486
- // 基于payload内容检测端点类型
487
- if (payload.messages) {
488
- return 'chat';
489
- }
490
- if (payload.input) {
491
- return 'responses';
492
- }
493
- return 'messages';
494
- }
495
- generateRequestId() {
496
- return `req-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
497
- }
498
- generateExecutionId() {
499
- return `exec-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
500
- }
501
- generatePathIdentifier(request, endpoint) {
502
- return `${endpoint}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
503
- }
504
- getEndpointPath(endpoint) {
505
- switch (endpoint) {
506
- case 'chat':
507
- return '/v1/chat/completions';
508
- case 'responses':
509
- return '/v1/responses';
510
- case 'messages':
511
- return '/v1/messages';
512
- default:
513
- return '/v1/chat/completions';
514
- }
515
- }
516
- initializeMetrics() {
517
- return {
518
- totalRequests: 0,
519
- successfulRequests: 0,
520
- failedRequests: 0,
521
- averageProcessingTime: 0,
522
- endpointMetrics: {
523
- chat: { requestCount: 0, averageTime: 0, errorRate: 0 },
524
- responses: { requestCount: 0, averageTime: 0, errorRate: 0 },
525
- messages: { requestCount: 0, averageTime: 0, errorRate: 0 }
526
- },
527
- protocolMetrics: {
528
- 'openai-chat': { conversionCount: 0, successRate: 0, averageTime: 0 },
529
- 'openai-responses': { conversionCount: 0, successRate: 0, averageTime: 0 },
530
- 'anthropic-messages': { conversionCount: 0, successRate: 0, averageTime: 0 }
531
- },
532
- hookMetrics: {}
533
- };
534
- }
535
- // Hook管理方法实现
536
- registerHookHandler(stage, handler) {
537
- this.hookHandlers.set(stage, handler);
538
- }
539
- unregisterHookHandler(stage) {
540
- this.hookHandlers.delete(stage);
541
- }
542
- getHookStats() {
543
- return {
544
- registeredHandlers: this.hookHandlers.size,
545
- stages: Array.from(this.hookHandlers.keys())
546
- };
547
- }
548
- // ===== V2 新增接口方法实现 =====
549
- /**
550
- * V2 核心功能:请求预处理(为workflow准备)
551
- */
552
- async preprocessRequest(request, endpoint, context) {
553
- return this.processRequest(request, endpoint, context);
554
- }
555
- /**
556
- * V2 核心功能:响应后处理(从workflow接收)
557
- */
558
- async postprocessResponse(response, originalEndpoint, context) {
559
- return this.processResponse(response, originalEndpoint, context);
560
- }
561
- /**
562
- * 协议转换到统一格式(为workflow准备)
563
- */
564
- async convertToUnifiedProtocol(request, sourceProtocol) {
565
- // 简化实现,实际应该根据sourceProtocol进行相应转换
566
- return {
567
- sourceProtocol,
568
- targetProtocol: this.config.defaultProtocol,
569
- payload: request,
570
- conversionTime: Date.now()
571
- };
572
- }
573
- /**
574
- * 统一工具处理(三端工具调用的唯一入口)
575
- */
576
- async processToolCalls(request, endpoint) {
577
- return {
578
- tools: request.tools || [],
579
- toolCalls: request.tool_calls || [],
580
- executionMode: request.stream ? 'streaming' : 'non-streaming',
581
- requestId: this.generateRequestId(),
582
- processingTime: 0,
583
- endpoint
584
- };
585
- }
586
- /**
587
- * 系统工具指引注入
588
- */
589
- async injectSystemToolGuidance(request, tools) {
590
- // 简化实现,实际应该注入系统工具指引
591
- return {
592
- ...request,
593
- systemToolGuidance: {
594
- tools,
595
- injectedAt: Date.now()
596
- }
597
- };
598
- }
599
- /**
600
- * 流式请求预处理
601
- */
602
- async preprocessStreamingRequest(request, endpoint, context) {
603
- return this.processStreamingRequest(request, endpoint, context);
604
- }
605
- /**
606
- * 流式响应后处理
607
- */
608
- async postprocessStreamingResponse(events, originalEndpoint, context) {
609
- // 简化实现,直接返回原事件流
610
- return events;
611
- }
612
- /**
613
- * 获取配置
614
- */
615
- getConfig() {
616
- return { ...this.config };
617
- }
618
- /**
619
- * 获取指标
620
- */
621
- getMetrics() {
622
- return { ...this.metrics };
623
- }
624
- // ===== 缺失的Hook管理方法 =====
625
- /**
626
- * 执行Hooks
627
- */
628
- async executeHooks(stage, context, data) {
629
- const handler = this.hookHandlers.get(stage);
630
- if (handler) {
631
- return await handler(context, data);
632
- }
633
- return { success: true, data };
634
- }
635
- /**
636
- * 捕获快照
637
- */
638
- async captureSnapshot(stage, context, data) {
639
- // 简化实现,实际应该调用SnapshotService
640
- console.log(`Capturing snapshot for stage: ${stage}`);
641
- }
642
- /**
643
- * 获取快照路径
644
- */
645
- getSnapshotPath(stage, context) {
646
- // 简化实现,实际应该生成基于端点的路径
647
- return `snapshots/${context.endpoint}/${stage}/${context.requestId}`;
648
- }
649
- }