@jsonstudio/llms 0.4.3 → 0.4.4

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 (416) 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 +4 -2
  6. package/dist/conversion/hub/pipeline/hub-pipeline.js +4 -5
  7. package/dist/conversion/hub/process/chat-process.js +258 -41
  8. package/dist/conversion/hub/response/provider-response.js +8 -2
  9. package/dist/conversion/hub/tool-governance/engine.d.ts +16 -0
  10. package/dist/conversion/hub/tool-governance/engine.js +266 -0
  11. package/dist/conversion/hub/tool-governance/index.d.ts +3 -0
  12. package/dist/conversion/hub/tool-governance/index.js +2 -0
  13. package/dist/conversion/hub/tool-governance/rules.d.ts +2 -0
  14. package/dist/conversion/hub/tool-governance/rules.js +76 -0
  15. package/dist/conversion/hub/tool-governance/types.d.ts +38 -0
  16. package/dist/conversion/index.d.ts +1 -0
  17. package/dist/conversion/index.js +1 -0
  18. package/dist/conversion/responses/responses-openai-bridge.js +5 -3
  19. package/dist/sse/sse-to-json/builders/response-builder.js +2 -1
  20. package/dist/sse/sse-to-json/chat-sse-to-json-converter.js +37 -23
  21. package/dist/sse/sse-to-json/parsers/sse-parser.js +20 -12
  22. package/dist/sse/sse-to-json/responses-sse-to-json-converter.d.ts +1 -0
  23. package/dist/sse/sse-to-json/responses-sse-to-json-converter.js +10 -8
  24. package/dist/sse/types/chat-types.d.ts +9 -6
  25. package/dist/sse/types/conversion-context.d.ts +14 -11
  26. package/dist/sse/types/core-interfaces.d.ts +6 -2
  27. package/dist/sse/types/index.d.ts +1 -1
  28. package/dist/sse/types/responses-types.d.ts +20 -20
  29. package/dist/sse/types/sse-events.d.ts +4 -3
  30. package/dist/sse/types/stream-state.d.ts +34 -39
  31. package/dist/sse/types/utility-types.d.ts +47 -43
  32. package/dist/sse/types/utility-types.js +10 -13
  33. package/dist/tools/tool-registry.js +156 -98
  34. package/package.json +7 -7
  35. package/dist/api/index.d.ts +0 -10
  36. package/dist/api/index.js +0 -11
  37. package/dist/api/llmswitch-config.d.ts +0 -15
  38. package/dist/api/llmswitch-config.js +0 -415
  39. package/dist/api/llmswitch-types.d.ts +0 -412
  40. package/dist/api/llmswitch-types.js +0 -60
  41. package/dist/bridge/routecodex-adapter.d.ts +0 -74
  42. package/dist/config/index.d.ts +0 -3
  43. package/dist/config/index.js +0 -5
  44. package/dist/config-unified/enhanced-path-resolver.d.ts +0 -5
  45. package/dist/config-unified/unified-config.d.ts +0 -26
  46. package/dist/conversion/codec-registry.d.ts +0 -10
  47. package/dist/conversion/codecs/anthropic-openai-codec.d.ts +0 -23
  48. package/dist/conversion/codecs/gemini-openai-codec.d.ts +0 -16
  49. package/dist/conversion/codecs/openai-openai-codec.d.ts +0 -12
  50. package/dist/conversion/codecs/responses-openai-codec.d.ts +0 -12
  51. package/dist/conversion/config/config-manager.d.ts +0 -212
  52. package/dist/conversion/conversion-v3/adapters/index.d.ts +0 -2
  53. package/dist/conversion/conversion-v3/adapters/index.js +0 -1
  54. package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.d.ts +0 -38
  55. package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.js +0 -55
  56. package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.d.ts +0 -22
  57. package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.js +0 -84
  58. package/dist/conversion/conversion-v3/compatibility/compatibility-stages.d.ts +0 -4
  59. package/dist/conversion/conversion-v3/compatibility/compatibility-stages.js +0 -285
  60. package/dist/conversion/conversion-v3/compatibility/index.d.ts +0 -3
  61. package/dist/conversion/conversion-v3/compatibility/index.js +0 -2
  62. package/dist/conversion/conversion-v3/config/default-configs.d.ts +0 -48
  63. package/dist/conversion/conversion-v3/config/default-configs.js +0 -1007
  64. package/dist/conversion/conversion-v3/config/index.d.ts +0 -5
  65. package/dist/conversion/conversion-v3/config/index.js +0 -5
  66. package/dist/conversion/conversion-v3/config/pipeline-config-manager.d.ts +0 -49
  67. package/dist/conversion/conversion-v3/config/pipeline-config-manager.js +0 -65
  68. package/dist/conversion/conversion-v3/index.d.ts +0 -11
  69. package/dist/conversion/conversion-v3/index.js +0 -17
  70. package/dist/conversion/conversion-v3/nodes/index.d.ts +0 -56
  71. package/dist/conversion/conversion-v3/nodes/index.js +0 -149
  72. package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.d.ts +0 -25
  73. package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.js +0 -56
  74. package/dist/conversion/conversion-v3/nodes/input/base-input-node.d.ts +0 -75
  75. package/dist/conversion/conversion-v3/nodes/input/base-input-node.js +0 -237
  76. package/dist/conversion/conversion-v3/nodes/input/chat-input-node.d.ts +0 -25
  77. package/dist/conversion/conversion-v3/nodes/input/chat-input-node.js +0 -56
  78. package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.d.ts +0 -4
  79. package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.js +0 -197
  80. package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.d.ts +0 -16
  81. package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.js +0 -125
  82. package/dist/conversion/conversion-v3/nodes/input/index.d.ts +0 -8
  83. package/dist/conversion/conversion-v3/nodes/input/index.js +0 -8
  84. package/dist/conversion/conversion-v3/nodes/input/input-decision.d.ts +0 -46
  85. package/dist/conversion/conversion-v3/nodes/input/input-decision.js +0 -125
  86. package/dist/conversion/conversion-v3/nodes/input/responses-input-node.d.ts +0 -20
  87. package/dist/conversion/conversion-v3/nodes/input/responses-input-node.js +0 -51
  88. package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.d.ts +0 -71
  89. package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.js +0 -320
  90. package/dist/conversion/conversion-v3/nodes/output/base-output-node.d.ts +0 -116
  91. package/dist/conversion/conversion-v3/nodes/output/base-output-node.js +0 -512
  92. package/dist/conversion/conversion-v3/nodes/output/index.d.ts +0 -7
  93. package/dist/conversion/conversion-v3/nodes/output/index.js +0 -7
  94. package/dist/conversion/conversion-v3/nodes/output/openai-output-node.d.ts +0 -71
  95. package/dist/conversion/conversion-v3/nodes/output/openai-output-node.js +0 -293
  96. package/dist/conversion/conversion-v3/nodes/output/output-decision.d.ts +0 -68
  97. package/dist/conversion/conversion-v3/nodes/output/output-decision.js +0 -161
  98. package/dist/conversion/conversion-v3/nodes/output/responses-output-node.d.ts +0 -64
  99. package/dist/conversion/conversion-v3/nodes/output/responses-output-node.js +0 -323
  100. package/dist/conversion/conversion-v3/nodes/process/base-process-node.d.ts +0 -72
  101. package/dist/conversion/conversion-v3/nodes/process/base-process-node.js +0 -246
  102. package/dist/conversion/conversion-v3/nodes/process/chat-process-node.d.ts +0 -135
  103. package/dist/conversion/conversion-v3/nodes/process/chat-process-node.js +0 -854
  104. package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.d.ts +0 -29
  105. package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.js +0 -181
  106. package/dist/conversion/conversion-v3/nodes/process/index.d.ts +0 -10
  107. package/dist/conversion/conversion-v3/nodes/process/index.js +0 -10
  108. package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.d.ts +0 -59
  109. package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.js +0 -243
  110. package/dist/conversion/conversion-v3/nodes/process/response-process-node.d.ts +0 -17
  111. package/dist/conversion/conversion-v3/nodes/process/response-process-node.js +0 -213
  112. package/dist/conversion/conversion-v3/nodes/process/tool-process-node.d.ts +0 -30
  113. package/dist/conversion/conversion-v3/nodes/process/tool-process-node.js +0 -360
  114. package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.d.ts +0 -40
  115. package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.js +0 -430
  116. package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.d.ts +0 -12
  117. package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.js +0 -129
  118. package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.d.ts +0 -15
  119. package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.js +0 -57
  120. package/dist/conversion/conversion-v3/nodes/response/index.d.ts +0 -4
  121. package/dist/conversion/conversion-v3/nodes/response/index.js +0 -4
  122. package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.d.ts +0 -15
  123. package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.js +0 -87
  124. package/dist/conversion/conversion-v3/nodes/response/response-utils.d.ts +0 -1
  125. package/dist/conversion/conversion-v3/nodes/response/response-utils.js +0 -1
  126. package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.d.ts +0 -12
  127. package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.js +0 -67
  128. package/dist/conversion/conversion-v3/nodes/sse/index.d.ts +0 -3
  129. package/dist/conversion/conversion-v3/nodes/sse/index.js +0 -3
  130. package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.d.ts +0 -27
  131. package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.js +0 -165
  132. package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.d.ts +0 -19
  133. package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.js +0 -267
  134. package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.d.ts +0 -18
  135. package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.js +0 -48
  136. package/dist/conversion/conversion-v3/pipelines/index.d.ts +0 -6
  137. package/dist/conversion/conversion-v3/pipelines/index.js +0 -6
  138. package/dist/conversion/conversion-v3/pipelines/super-pipeline.d.ts +0 -112
  139. package/dist/conversion/conversion-v3/pipelines/super-pipeline.js +0 -566
  140. package/dist/conversion/conversion-v3/response/provider-response-converter.d.ts +0 -28
  141. package/dist/conversion/conversion-v3/response/provider-response-converter.js +0 -249
  142. package/dist/conversion/conversion-v3/sse/index.d.ts +0 -140
  143. package/dist/conversion/conversion-v3/sse/index.js +0 -115
  144. package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +0 -11
  145. package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.js +0 -79
  146. package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.d.ts +0 -79
  147. package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.js +0 -296
  148. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.d.ts +0 -55
  149. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.js +0 -233
  150. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.d.ts +0 -99
  151. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.js +0 -599
  152. package/dist/conversion/conversion-v3/sse/json-to-sse/index.d.ts +0 -6
  153. package/dist/conversion/conversion-v3/sse/json-to-sse/index.js +0 -7
  154. package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.d.ts +0 -79
  155. package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.js +0 -322
  156. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.d.ts +0 -37
  157. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.js +0 -218
  158. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.d.ts +0 -40
  159. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.js +0 -263
  160. package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.d.ts +0 -32
  161. package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.js +0 -106
  162. package/dist/conversion/conversion-v3/sse/shared/chat-serializer.d.ts +0 -4
  163. package/dist/conversion/conversion-v3/sse/shared/chat-serializer.js +0 -40
  164. package/dist/conversion/conversion-v3/sse/shared/constants.d.ts +0 -272
  165. package/dist/conversion/conversion-v3/sse/shared/constants.js +0 -321
  166. package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.d.ts +0 -158
  167. package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.js +0 -210
  168. package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.d.ts +0 -82
  169. package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.js +0 -275
  170. package/dist/conversion/conversion-v3/sse/shared/serializers/index.d.ts +0 -39
  171. package/dist/conversion/conversion-v3/sse/shared/serializers/index.js +0 -54
  172. package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.d.ts +0 -123
  173. package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.js +0 -356
  174. package/dist/conversion/conversion-v3/sse/shared/serializers/types.d.ts +0 -51
  175. package/dist/conversion/conversion-v3/sse/shared/serializers/types.js +0 -4
  176. package/dist/conversion/conversion-v3/sse/shared/utils.d.ts +0 -254
  177. package/dist/conversion/conversion-v3/sse/shared/utils.js +0 -543
  178. package/dist/conversion/conversion-v3/sse/shared/writer.d.ts +0 -111
  179. package/dist/conversion/conversion-v3/sse/shared/writer.js +0 -268
  180. package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +0 -13
  181. package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.js +0 -139
  182. package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.d.ts +0 -165
  183. package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.js +0 -776
  184. package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.d.ts +0 -106
  185. package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.js +0 -540
  186. package/dist/conversion/conversion-v3/sse/sse-to-json/index.d.ts +0 -6
  187. package/dist/conversion/conversion-v3/sse/sse-to-json/index.js +0 -7
  188. package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.d.ts +0 -73
  189. package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.js +0 -332
  190. package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.d.ts +0 -59
  191. package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.js +0 -270
  192. package/dist/conversion/conversion-v3/sse/types/anthropic-types.d.ts +0 -87
  193. package/dist/conversion/conversion-v3/sse/types/anthropic-types.js +0 -5
  194. package/dist/conversion/conversion-v3/sse/types/chat-types.d.ts +0 -308
  195. package/dist/conversion/conversion-v3/sse/types/chat-types.js +0 -32
  196. package/dist/conversion/conversion-v3/sse/types/conversion-context.d.ts +0 -211
  197. package/dist/conversion/conversion-v3/sse/types/conversion-context.js +0 -20
  198. package/dist/conversion/conversion-v3/sse/types/core-interfaces.d.ts +0 -90
  199. package/dist/conversion/conversion-v3/sse/types/core-interfaces.js +0 -5
  200. package/dist/conversion/conversion-v3/sse/types/index.d.ts +0 -14
  201. package/dist/conversion/conversion-v3/sse/types/index.js +0 -7
  202. package/dist/conversion/conversion-v3/sse/types/responses-types.d.ts +0 -328
  203. package/dist/conversion/conversion-v3/sse/types/responses-types.js +0 -38
  204. package/dist/conversion/conversion-v3/sse/types/sse-events.d.ts +0 -180
  205. package/dist/conversion/conversion-v3/sse/types/sse-events.js +0 -150
  206. package/dist/conversion/conversion-v3/sse/types/stream-state.d.ts +0 -204
  207. package/dist/conversion/conversion-v3/sse/types/stream-state.js +0 -44
  208. package/dist/conversion/conversion-v3/sse/types/utility-types.d.ts +0 -230
  209. package/dist/conversion/conversion-v3/sse/types/utility-types.js +0 -49
  210. package/dist/conversion/conversion-v3/standards/context-adapter.d.ts +0 -146
  211. package/dist/conversion/conversion-v3/standards/context-adapter.js +0 -438
  212. package/dist/conversion/conversion-v3/standards/errors.d.ts +0 -38
  213. package/dist/conversion/conversion-v3/standards/errors.js +0 -27
  214. package/dist/conversion/conversion-v3/standards/index.d.ts +0 -15
  215. package/dist/conversion/conversion-v3/standards/index.js +0 -11
  216. package/dist/conversion/conversion-v3/standards/node-capabilities.d.ts +0 -123
  217. package/dist/conversion/conversion-v3/standards/node-capabilities.js +0 -330
  218. package/dist/conversion/conversion-v3/standards/pipeline-context.d.ts +0 -237
  219. package/dist/conversion/conversion-v3/standards/pipeline-context.js +0 -84
  220. package/dist/conversion/conversion-v3/standards/pipeline-node.d.ts +0 -196
  221. package/dist/conversion/conversion-v3/standards/pipeline-node.js +0 -316
  222. package/dist/conversion/conversion-v3/standards/snapshot-handles.d.ts +0 -24
  223. package/dist/conversion/conversion-v3/standards/snapshot-handles.js +0 -49
  224. package/dist/conversion/conversion-v3/types/config-types.d.ts +0 -242
  225. package/dist/conversion/conversion-v3/types/config-types.js +0 -13
  226. package/dist/conversion/conversion-v3/types/index.d.ts +0 -8
  227. package/dist/conversion/conversion-v3/types/index.js +0 -11
  228. package/dist/conversion/conversion-v3/types/node-types.d.ts +0 -211
  229. package/dist/conversion/conversion-v3/types/node-types.js +0 -20
  230. package/dist/conversion/conversion-v3/types/pipeline-types.d.ts +0 -246
  231. package/dist/conversion/conversion-v3/types/pipeline-types.js +0 -26
  232. package/dist/conversion/conversion-v3/types/request-types.d.ts +0 -293
  233. package/dist/conversion/conversion-v3/types/request-types.js +0 -26
  234. package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.d.ts +0 -10
  235. package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.js +0 -103
  236. package/dist/conversion/conversion-v3/validations/index.d.ts +0 -8
  237. package/dist/conversion/conversion-v3/validations/index.js +0 -7
  238. package/dist/conversion/conversion-v3/validations/node-graph-validator.d.ts +0 -116
  239. package/dist/conversion/conversion-v3/validations/node-graph-validator.js +0 -505
  240. package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.d.ts +0 -139
  241. package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.js +0 -338
  242. package/dist/conversion/hub/config/types.d.ts +0 -26
  243. package/dist/conversion/hub/core/detour-registry.d.ts +0 -9
  244. package/dist/conversion/hub/core/hub-context.d.ts +0 -21
  245. package/dist/conversion/hub/core/index.d.ts +0 -3
  246. package/dist/conversion/hub/core/stage-driver.d.ts +0 -30
  247. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.d.ts +0 -16
  248. package/dist/conversion/hub/format-adapters/chat-format-adapter.d.ts +0 -17
  249. package/dist/conversion/hub/format-adapters/gemini-format-adapter.d.ts +0 -16
  250. package/dist/conversion/hub/format-adapters/index.d.ts +0 -21
  251. package/dist/conversion/hub/format-adapters/responses-format-adapter.d.ts +0 -17
  252. package/dist/conversion/hub/hub-feature.d.ts +0 -1
  253. package/dist/conversion/hub/node-support.d.ts +0 -19
  254. package/dist/conversion/hub/pipeline/hub-pipeline.d.ts +0 -68
  255. package/dist/conversion/hub/pipelines/inbound.d.ts +0 -22
  256. package/dist/conversion/hub/pipelines/outbound.d.ts +0 -22
  257. package/dist/conversion/hub/process/chat-process.d.ts +0 -13
  258. package/dist/conversion/hub/registry.d.ts +0 -28
  259. package/dist/conversion/hub/response/chat-response-utils.d.ts +0 -6
  260. package/dist/conversion/hub/response/provider-response.d.ts +0 -20
  261. package/dist/conversion/hub/response/response-mappers.d.ts +0 -19
  262. package/dist/conversion/hub/response/response-runtime.d.ts +0 -3
  263. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +0 -7
  264. package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +0 -7
  265. package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +0 -7
  266. package/dist/conversion/hub/semantic-mappers/index.d.ts +0 -4
  267. package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +0 -21
  268. package/dist/conversion/hub/snapshot-recorder.d.ts +0 -12
  269. package/dist/conversion/hub/standardized-bridge.d.ts +0 -12
  270. package/dist/conversion/hub/types/chat-envelope.d.ts +0 -67
  271. package/dist/conversion/hub/types/chat-schema.d.ts +0 -112
  272. package/dist/conversion/hub/types/errors.d.ts +0 -5
  273. package/dist/conversion/hub/types/format-envelope.d.ts +0 -7
  274. package/dist/conversion/hub/types/index.d.ts +0 -6
  275. package/dist/conversion/hub/types/json.d.ts +0 -9
  276. package/dist/conversion/hub/types/node.d.ts +0 -31
  277. package/dist/conversion/hub/types/standardized.d.ts +0 -94
  278. package/dist/conversion/responses/responses-openai-bridge.d.ts +0 -95
  279. package/dist/conversion/schema-validator.d.ts +0 -7
  280. package/dist/conversion/shared/args-mapping.d.ts +0 -18
  281. package/dist/conversion/shared/chat-request-filters.d.ts +0 -9
  282. package/dist/conversion/shared/jsonish.d.ts +0 -3
  283. package/dist/conversion/shared/mcp-injection.d.ts +0 -2
  284. package/dist/conversion/shared/media.d.ts +0 -1
  285. package/dist/conversion/shared/openai-finalizer.d.ts +0 -9
  286. package/dist/conversion/shared/openai-message-normalize.d.ts +0 -1
  287. package/dist/conversion/shared/payload-budget.d.ts +0 -13
  288. package/dist/conversion/shared/reasoning-mapping.d.ts +0 -5
  289. package/dist/conversion/shared/responses-conversation-store.d.ts +0 -41
  290. package/dist/conversion/shared/responses-id-utils.d.ts +0 -7
  291. package/dist/conversion/shared/responses-instructions.d.ts +0 -1
  292. package/dist/conversion/shared/responses-metadata.d.ts +0 -1
  293. package/dist/conversion/shared/responses-request-adapter.d.ts +0 -66
  294. package/dist/conversion/shared/snapshot-hooks.d.ts +0 -12
  295. package/dist/conversion/shared/streaming-text-extractor.d.ts +0 -26
  296. package/dist/conversion/shared/text-markup-normalizer.d.ts +0 -9
  297. package/dist/conversion/shared/tool-canonicalizer.d.ts +0 -2
  298. package/dist/conversion/shared/tool-filter-pipeline.d.ts +0 -17
  299. package/dist/conversion/shared/tool-governor.d.ts +0 -27
  300. package/dist/conversion/shared/tool-harvester.d.ts +0 -31
  301. package/dist/conversion/shared/tool-mapping.d.ts +0 -10
  302. package/dist/conversion/shared/tooling.d.ts +0 -26
  303. package/dist/conversion/types.d.ts +0 -33
  304. package/dist/core/index.d.ts +0 -6
  305. package/dist/core/index.js +0 -9
  306. package/dist/core/llmswitch-engine-v2.d.ts +0 -132
  307. package/dist/core/llmswitch-engine-v2.js +0 -649
  308. package/dist/core/llmswitch-factory-v2.d.ts +0 -123
  309. package/dist/core/llmswitch-factory-v2.js +0 -521
  310. package/dist/endpoints/base-endpoint-handler.d.ts +0 -128
  311. package/dist/endpoints/base-endpoint-handler.js +0 -545
  312. package/dist/endpoints/chat-endpoint-handler.d.ts +0 -115
  313. package/dist/endpoints/chat-endpoint-handler.js +0 -218
  314. package/dist/endpoints/endpoint-router.d.ts +0 -127
  315. package/dist/endpoints/endpoint-router.js +0 -438
  316. package/dist/endpoints/index.d.ts +0 -13
  317. package/dist/endpoints/index.js +0 -11
  318. package/dist/endpoints/messages-endpoint-handler.d.ts +0 -171
  319. package/dist/endpoints/messages-endpoint-handler.js +0 -238
  320. package/dist/endpoints/responses-endpoint-handler.d.ts +0 -147
  321. package/dist/endpoints/responses-endpoint-handler.js +0 -233
  322. package/dist/filters/builtin/add-fields-filter.d.ts +0 -8
  323. package/dist/filters/builtin/blacklist-filter.d.ts +0 -8
  324. package/dist/filters/builtin/whitelist-filter.d.ts +0 -8
  325. package/dist/filters/engine.d.ts +0 -16
  326. package/dist/filters/index.d.ts +0 -19
  327. package/dist/filters/special/request-streaming-to-nonstreaming.d.ts +0 -12
  328. package/dist/filters/special/request-tool-choice-policy.d.ts +0 -11
  329. package/dist/filters/special/request-tool-list-filter.d.ts +0 -11
  330. package/dist/filters/special/request-toolcalls-stringify.d.ts +0 -10
  331. package/dist/filters/special/request-tools-normalize.d.ts +0 -12
  332. package/dist/filters/special/response-finish-invariants.d.ts +0 -11
  333. package/dist/filters/special/response-openai-to-responses-bridge.d.ts +0 -13
  334. package/dist/filters/special/response-tool-arguments-blacklist.d.ts +0 -12
  335. package/dist/filters/special/response-tool-arguments-schema-converge.d.ts +0 -13
  336. package/dist/filters/special/response-tool-arguments-stringify.d.ts +0 -9
  337. package/dist/filters/special/response-tool-arguments-toon-decode.d.ts +0 -10
  338. package/dist/filters/special/response-tool-arguments-whitelist.d.ts +0 -11
  339. package/dist/filters/special/response-tool-text-canonicalize.d.ts +0 -10
  340. package/dist/filters/special/tool-filter-hooks.d.ts +0 -19
  341. package/dist/filters/special/tool-post-constraints.d.ts +0 -31
  342. package/dist/filters/types.d.ts +0 -68
  343. package/dist/filters/utils/fieldmap-loader.d.ts +0 -2
  344. package/dist/filters/utils/snapshot-writer.d.ts +0 -10
  345. package/dist/guidance/index.d.ts +0 -3
  346. package/dist/hooks/hooks-integration.d.ts +0 -161
  347. package/dist/hooks/hooks-integration.js +0 -519
  348. package/dist/hooks/index.d.ts +0 -10
  349. package/dist/hooks/index.js +0 -13
  350. package/dist/html-to-markdown.d.ts +0 -5
  351. package/dist/html-to-markdown.js +0 -66
  352. package/dist/http/sse-response.d.ts +0 -22
  353. package/dist/router/virtual-router/bootstrap.d.ts +0 -6
  354. package/dist/router/virtual-router/classifier.d.ts +0 -10
  355. package/dist/router/virtual-router/engine.d.ts +0 -35
  356. package/dist/router/virtual-router/error-center.d.ts +0 -10
  357. package/dist/router/virtual-router/features.d.ts +0 -3
  358. package/dist/router/virtual-router/health-manager.d.ts +0 -18
  359. package/dist/router/virtual-router/load-balancer.d.ts +0 -18
  360. package/dist/router/virtual-router/provider-registry.d.ts +0 -11
  361. package/dist/router/virtual-router/types.d.ts +0 -206
  362. package/dist/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +0 -11
  363. package/dist/sse/json-to-sse/chat-json-to-sse-converter.d.ts +0 -79
  364. package/dist/sse/json-to-sse/event-generators/chat.d.ts +0 -55
  365. package/dist/sse/json-to-sse/event-generators/responses.d.ts +0 -99
  366. package/dist/sse/json-to-sse/index.d.ts +0 -6
  367. package/dist/sse/json-to-sse/responses-json-to-sse-converter.d.ts +0 -79
  368. package/dist/sse/json-to-sse/sequencers/chat-sequencer.d.ts +0 -37
  369. package/dist/sse/json-to-sse/sequencers/responses-sequencer.d.ts +0 -40
  370. package/dist/sse/registry/sse-codec-registry.d.ts +0 -32
  371. package/dist/sse/shared/chat-serializer.d.ts +0 -4
  372. package/dist/sse/shared/constants.d.ts +0 -272
  373. package/dist/sse/shared/serializers/base-serializer.d.ts +0 -158
  374. package/dist/sse/shared/serializers/chat-event-serializer.d.ts +0 -82
  375. package/dist/sse/shared/serializers/index.d.ts +0 -39
  376. package/dist/sse/shared/serializers/responses-event-serializer.d.ts +0 -123
  377. package/dist/sse/shared/serializers/types.d.ts +0 -51
  378. package/dist/sse/shared/utils.d.ts +0 -254
  379. package/dist/sse/shared/writer.d.ts +0 -111
  380. package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +0 -13
  381. package/dist/sse/sse-to-json/builders/response-builder.d.ts +0 -165
  382. package/dist/sse/sse-to-json/chat-sse-to-json-converter.d.ts +0 -106
  383. package/dist/sse/sse-to-json/index.d.ts +0 -6
  384. package/dist/sse/sse-to-json/parsers/sse-parser.d.ts +0 -73
  385. package/dist/sse/types/anthropic-types.d.ts +0 -87
  386. package/dist/tools/proxy/anthropic-tool-proxy.d.ts +0 -19
  387. package/dist/tools/proxy/anthropic-tool-proxy.js +0 -57
  388. package/dist/tools/proxy/executors/web-fetch.d.ts +0 -6
  389. package/dist/tools/proxy/executors/web-fetch.js +0 -39
  390. package/dist/tools/proxy/registry.d.ts +0 -8
  391. package/dist/tools/proxy/registry.js +0 -14
  392. package/dist/tools/proxy/types.d.ts +0 -29
  393. package/dist/tools/tool-registry.d.ts +0 -8
  394. package/dist/tools/web-fetch-html.d.ts +0 -15
  395. package/dist/tools/web-fetch-html.js +0 -83
  396. package/dist/utils/conversion-adapter.d.ts +0 -65
  397. package/dist/utils/conversion-adapter.js +0 -183
  398. package/dist/utils/error-factory.d.ts +0 -88
  399. package/dist/utils/error-factory.js +0 -138
  400. package/dist/utils/error-utils.d.ts +0 -334
  401. package/dist/utils/error-utils.js +0 -782
  402. package/dist/utils/index.d.ts +0 -8
  403. package/dist/utils/index.js +0 -13
  404. package/dist/utils/performance-utils.d.ts +0 -205
  405. package/dist/utils/performance-utils.js +0 -440
  406. package/dist/utils/profile-mapper.d.ts +0 -32
  407. package/dist/utils/profile-mapper.js +0 -269
  408. package/dist/utils/request-processor.d.ts +0 -52
  409. package/dist/utils/request-processor.js +0 -210
  410. package/dist/utils/request-utils.d.ts +0 -117
  411. package/dist/utils/request-utils.js +0 -333
  412. package/dist/utils/response-utils.d.ts +0 -127
  413. package/dist/utils/response-utils.js +0 -516
  414. package/dist/utils/token-counter.d.ts +0 -89
  415. package/dist/utils/token-counter.js +0 -541
  416. /package/dist/{tools/proxy → conversion/hub/tool-governance}/types.js +0 -0
@@ -1,322 +0,0 @@
1
- /**
2
- * Responses JSON → SSE转换器(重构版本)
3
- * 使用函数化架构:事件生成 + 序列化 + 写入分离
4
- */
5
- import { PassThrough } from 'stream';
6
- import { DEFAULT_RESPONSES_CONVERSION_CONFIG } from '../types/index.js';
7
- import { ErrorUtils } from '../shared/utils.js';
8
- import { createResponsesSequencer } from './sequencers/responses-sequencer.js';
9
- import { createResponsesStreamWriter } from '../shared/writer.js';
10
- /**
11
- * 重构后的Responses JSON到SSE转换器
12
- * 采用函数化架构,专注于编排而非具体业务逻辑
13
- */
14
- export class ResponsesJsonToSseConverterRefactored {
15
- config = DEFAULT_RESPONSES_CONVERSION_CONFIG;
16
- contexts = new Map();
17
- constructor(config) {
18
- if (config) {
19
- this.config = { ...this.config, ...config };
20
- }
21
- }
22
- /**
23
- * 将Responses请求转换为SSE流
24
- */
25
- async convertRequestToJsonToSse(request, options) {
26
- // 1. 创建上下文
27
- const context = this.createRequestContext(request, options);
28
- this.contexts.set(options.requestId, context);
29
- // 2. 创建底层流
30
- const stream = new PassThrough({ objectMode: true });
31
- // 3. 创建SSE事件流接口
32
- const sseStream = Object.assign(stream, {
33
- protocol: 'responses',
34
- direction: 'json_to_sse',
35
- requestId: options.requestId,
36
- getStats: () => context.eventStats,
37
- getConfig: () => this.config,
38
- complete: () => this.completeStream(context, stream),
39
- abort: (error) => this.abortStream(context, stream, error)
40
- });
41
- // 4. 启动异步转换过程(使用函数化架构)
42
- this.processRequestToSseWithFunctions(request, context, stream).catch(error => {
43
- this.handleStreamError(context, error, stream);
44
- });
45
- return sseStream;
46
- }
47
- /**
48
- * 将Responses响应转换为SSE流
49
- */
50
- async convertResponseToJsonToSse(response, options) {
51
- // 1. 创建上下文
52
- const context = this.createResponseContext(response, options);
53
- this.contexts.set(options.requestId, context);
54
- // 2. 创建底层流
55
- const stream = new PassThrough({ objectMode: true });
56
- // 3. 创建SSE事件流接口
57
- const sseStream = Object.assign(stream, {
58
- protocol: 'responses',
59
- direction: 'json_to_sse',
60
- requestId: options.requestId,
61
- getStats: () => context.eventStats,
62
- getConfig: () => this.config,
63
- complete: () => this.completeStream(context, stream),
64
- abort: (error) => this.abortStream(context, stream, error)
65
- });
66
- // 4. 启动异步转换过程(使用函数化架构)
67
- this.processResponseToSseWithFunctions(response, context, stream).catch(error => {
68
- this.handleStreamError(context, error, stream);
69
- });
70
- return sseStream;
71
- }
72
- /**
73
- * 使用函数化架构处理请求转换
74
- */
75
- async processRequestToSseWithFunctions(request, context, stream) {
76
- try {
77
- // 1. 验证请求
78
- this.validateRequest(request);
79
- // 2. 创建流写入器
80
- const writer = createResponsesStreamWriter(stream, {
81
- onEvent: (event) => this.updateStats(context, event),
82
- onError: (error) => this.handleStreamError(context, error, stream)
83
- });
84
- // 3. 创建事件序列化器
85
- const sequencer = createResponsesSequencer({
86
- chunkSize: context.options.chunkSize || this.config.defaultChunkSize,
87
- chunkDelayMs: context.options.delayMs || this.config.defaultDelayMs,
88
- enableDelay: !!context.options.delayMs,
89
- enableValidation: this.config.enableEventValidation,
90
- enableRecovery: this.config.strictMode,
91
- submittedToolOutputs: context.options.resumeToolOutputs
92
- });
93
- // 4. 生成事件序列并写入流
94
- const eventStream = sequencer.sequenceRequest(request, context.requestId);
95
- await writer.writeResponsesEvents(eventStream);
96
- // 5. 完成流
97
- writer.complete();
98
- }
99
- catch (error) {
100
- throw this.wrapError('REQUEST_CONVERSION_ERROR', error, context.requestId);
101
- }
102
- }
103
- /**
104
- * 使用函数化架构处理响应转换
105
- */
106
- async processResponseToSseWithFunctions(response, context, stream) {
107
- try {
108
- // 1. 验证响应
109
- this.validateResponse(response);
110
- // 2. 创建流写入器
111
- const writer = createResponsesStreamWriter(stream, {
112
- onEvent: (event) => this.updateStats(context, event),
113
- onError: (error) => this.handleStreamError(context, error, stream)
114
- });
115
- // 3. 创建事件序列化器
116
- const sequencer = createResponsesSequencer({
117
- chunkSize: context.options.chunkSize || this.config.defaultChunkSize,
118
- chunkDelayMs: context.options.delayMs || this.config.defaultDelayMs,
119
- enableDelay: !!context.options.delayMs,
120
- enableValidation: this.config.enableEventValidation,
121
- enableRecovery: this.config.strictMode
122
- });
123
- // 4. 生成事件序列并写入流
124
- const eventStream = sequencer.sequenceResponse(response, context.requestId);
125
- await writer.writeResponsesEvents(eventStream);
126
- // 5. 完成流
127
- writer.complete();
128
- }
129
- catch (error) {
130
- throw this.wrapError('RESPONSE_CONVERSION_ERROR', error, context.requestId);
131
- }
132
- }
133
- /**
134
- * 验证请求格式
135
- */
136
- validateRequest(request) {
137
- if (!request.model || !request.input) {
138
- throw new Error('Invalid ResponsesRequest: missing required fields');
139
- }
140
- if (!Array.isArray(request.input)) {
141
- throw new Error('Invalid ResponsesRequest: input must be an array');
142
- }
143
- }
144
- /**
145
- * 验证响应格式
146
- */
147
- validateResponse(response) {
148
- if (!response.id || !response.model || !response.object) {
149
- throw new Error('Invalid ResponsesResponse: missing required fields');
150
- }
151
- if (response.object !== 'response') {
152
- throw new Error('Invalid ResponsesResponse: object must be "response"');
153
- }
154
- if (!Array.isArray(response.output)) {
155
- throw new Error('Invalid ResponsesResponse: output must be an array');
156
- }
157
- }
158
- /**
159
- * 更新统计信息
160
- */
161
- updateStats(context, event) {
162
- context.eventStats.totalEvents++;
163
- context.eventStats.eventTypes[event.type] = (context.eventStats.eventTypes[event.type] || 0) + 1;
164
- // 根据事件类型更新特定统计
165
- switch (event.type) {
166
- case 'response.created':
167
- case 'response.in_progress':
168
- case 'response.completed':
169
- case 'response.required_action':
170
- case 'response.done':
171
- context.eventStats.messageEventsCount++;
172
- break;
173
- case 'response.output_item.added':
174
- case 'response.output_item.done':
175
- context.eventStats.outputItemsCount++;
176
- break;
177
- case 'response.content_part.added':
178
- case 'response.content_part.done':
179
- context.eventStats.contentPartsCount++;
180
- break;
181
- case 'response.output_text.delta':
182
- case 'response.output_text.done':
183
- context.eventStats.deltaEventsCount++;
184
- break;
185
- case 'response.reasoning_text.delta':
186
- case 'response.reasoning_text.done':
187
- context.eventStats.reasoningEventsCount++;
188
- break;
189
- case 'response.function_call_arguments.delta':
190
- case 'response.function_call_arguments.done':
191
- context.eventStats.functionCallEventsCount++;
192
- break;
193
- case 'response.error':
194
- context.eventStats.errorCount++;
195
- break;
196
- }
197
- // 更新时间戳
198
- context.eventStats.lastEventTime = event.timestamp;
199
- }
200
- /**
201
- * 包装错误
202
- */
203
- wrapError(code, originalError, requestId) {
204
- return ErrorUtils.createError(`${code}: ${originalError.message}`, code, { requestId, originalError });
205
- }
206
- /**
207
- * 处理流错误
208
- */
209
- handleStreamError(context, error, stream) {
210
- context.eventStats.errorCount++;
211
- const wrappedError = this.wrapError('STREAM_ERROR', error, context.requestId);
212
- if (stream.writable) {
213
- stream.destroy(wrappedError);
214
- }
215
- }
216
- /**
217
- * 完成流
218
- */
219
- completeStream(context, stream) {
220
- context.eventStats.endTime = Date.now();
221
- context.eventStats.duration = context.eventStats.endTime - context.eventStats.startTime;
222
- if (stream.writable) {
223
- stream.end();
224
- }
225
- }
226
- /**
227
- * 中止流
228
- */
229
- abortStream(context, stream, error) {
230
- context.eventStats.endTime = Date.now();
231
- context.eventStats.duration = context.eventStats.endTime - context.eventStats.startTime;
232
- if (error) {
233
- context.eventStats.errorCount++;
234
- }
235
- if (stream.writable) {
236
- stream.destroy(error);
237
- }
238
- }
239
- /**
240
- * 创建请求上下文
241
- */
242
- createRequestContext(request, options) {
243
- const eventStats = {
244
- totalEvents: 0,
245
- eventTypes: {},
246
- startTime: Date.now(),
247
- outputItemsCount: 0,
248
- contentPartsCount: 0,
249
- deltaEventsCount: 0,
250
- reasoningEventsCount: 0,
251
- functionCallEventsCount: 0,
252
- messageEventsCount: 0,
253
- errorCount: 0
254
- };
255
- return {
256
- requestId: options.requestId,
257
- model: request.model,
258
- responsesRequest: request,
259
- options,
260
- startTime: Date.now(),
261
- sequenceCounter: 0,
262
- outputIndexCounter: 0,
263
- contentIndexCounter: new Map(),
264
- isStreaming: true,
265
- currentResponse: {},
266
- eventStats,
267
- outputItemStates: new Map()
268
- };
269
- }
270
- /**
271
- * 创建响应上下文
272
- */
273
- createResponseContext(response, options) {
274
- const eventStats = {
275
- totalEvents: 0,
276
- eventTypes: {},
277
- startTime: Date.now(),
278
- outputItemsCount: 0,
279
- contentPartsCount: 0,
280
- deltaEventsCount: 0,
281
- reasoningEventsCount: 0,
282
- functionCallEventsCount: 0,
283
- messageEventsCount: 0,
284
- errorCount: 0
285
- };
286
- return {
287
- requestId: options.requestId,
288
- model: response.model,
289
- responsesRequest: {}, // 空请求,因为是从响应转换
290
- responsesResponse: response,
291
- options,
292
- startTime: Date.now(),
293
- sequenceCounter: 0,
294
- outputIndexCounter: 0,
295
- contentIndexCounter: new Map(),
296
- isStreaming: true,
297
- currentResponse: response,
298
- eventStats,
299
- outputItemStates: new Map()
300
- };
301
- }
302
- /**
303
- * 获取上下文
304
- */
305
- getContext(requestId) {
306
- return this.contexts.get(requestId);
307
- }
308
- /**
309
- * 清理上下文
310
- */
311
- clearContext(requestId) {
312
- this.contexts.delete(requestId);
313
- }
314
- /**
315
- * 获取所有活跃的上下文
316
- */
317
- getActiveContexts() {
318
- return new Map(this.contexts);
319
- }
320
- }
321
- // 为了向后兼容,导出原有名称
322
- export const ResponsesJsonToSseConverter = ResponsesJsonToSseConverterRefactored;
@@ -1,37 +0,0 @@
1
- /**
2
- * Chat协议事件编排器
3
- * 负责严格的事件时序组合:role → content OR tool_calls(name → args.delta*) → finish_reason → done
4
- */
5
- import { ChatCompletionResponse, ChatSseEvent } from '../../types/index.js';
6
- import { ChatEventGeneratorContext, ChatEventGeneratorConfig } from '../event-generators/chat.js';
7
- export interface ChatSequencerConfig extends ChatEventGeneratorConfig {
8
- includeSequenceNumbers: boolean;
9
- enableDelay: boolean;
10
- validateOrder: boolean;
11
- }
12
- export declare const DEFAULT_CHAT_SEQUENCER_CONFIG: ChatSequencerConfig;
13
- /**
14
- * 主编排器:将Chat响应转换为有序的SSE事件流
15
- */
16
- export declare function sequenceChatResponse(response: ChatCompletionResponse, context: ChatEventGeneratorContext, config?: ChatSequencerConfig): AsyncGenerator<ChatSseEvent>;
17
- /**
18
- * 序列化Chat请求(用于请求→SSE转换)
19
- */
20
- export declare function sequenceChatRequest(request: any, context: ChatEventGeneratorContext, config?: ChatSequencerConfig): AsyncGenerator<ChatSseEvent>;
21
- /**
22
- * 创建Chat事件序列化器工厂
23
- */
24
- export declare function createChatSequencer(config?: Partial<ChatSequencerConfig>): {
25
- /**
26
- * 序列化响应
27
- */
28
- sequenceResponse(response: ChatCompletionResponse, model: string, requestId: string): AsyncGenerator<ChatSseEvent, void, any>;
29
- /**
30
- * 序列化请求
31
- */
32
- sequenceRequest(request: any, model: string, requestId: string): AsyncGenerator<ChatSseEvent, void, any>;
33
- /**
34
- * 获取当前配置
35
- */
36
- getConfig(): ChatSequencerConfig;
37
- };
@@ -1,218 +0,0 @@
1
- /**
2
- * Chat协议事件编排器
3
- * 负责严格的事件时序组合:role → content OR tool_calls(name → args.delta*) → finish_reason → done
4
- */
5
- import { buildRoleDelta, buildReasoningDeltas, buildContentDeltas, buildToolCallStart, buildToolCallArgsDeltas, buildFinishEvent, buildDoneEvent, buildErrorEvent, DEFAULT_CHAT_EVENT_GENERATOR_CONFIG, createDefaultContext } from '../event-generators/chat.js';
6
- // 默认配置
7
- export const DEFAULT_CHAT_SEQUENCER_CONFIG = {
8
- ...DEFAULT_CHAT_EVENT_GENERATOR_CONFIG,
9
- includeSequenceNumbers: true,
10
- enableDelay: false,
11
- validateOrder: true
12
- };
13
- /**
14
- * 验证消息顺序的合法性
15
- */
16
- function validateMessageSequence(message, previousMessage) {
17
- // 基本字段
18
- if (!message || typeof message.role !== 'string')
19
- return false;
20
- // 允许两种有效形态:
21
- // 1) content 存在(字符串/数组/对象)
22
- // 2) 仅工具调用(content 为空,但存在 tool_calls[] 且 finish_reason=tool_calls)
23
- const hasContent = hasMeaningfulContent(message.content);
24
- const hasToolCalls = Array.isArray(message.tool_calls) && message.tool_calls.length > 0;
25
- if (!hasContent && !hasToolCalls)
26
- return false;
27
- // 不允许 assistant 之后出现 user 倒序
28
- if (previousMessage?.role === 'assistant' && message.role === 'user')
29
- return false;
30
- return true;
31
- }
32
- function hasMeaningfulContent(content) {
33
- if (content == null)
34
- return false;
35
- if (typeof content === 'string')
36
- return content.trim().length > 0;
37
- if (Array.isArray(content))
38
- return content.length > 0;
39
- if (typeof content === 'object')
40
- return Object.keys(content).length > 0;
41
- return false;
42
- }
43
- /**
44
- * 异步生成器:为事件添加序列号和延迟
45
- */
46
- async function* withSequencing(events, config, startSequence = 0) {
47
- let sequenceNumber = startSequence;
48
- for await (const event of events) {
49
- if (config.includeSequenceNumbers)
50
- event.sequenceNumber = sequenceNumber++;
51
- yield event;
52
- if (config.enableDelay && config.chunkDelayMs > 0) {
53
- await new Promise(resolve => setTimeout(resolve, config.chunkDelayMs));
54
- }
55
- }
56
- }
57
- /**
58
- * 序列化单个消息的内容和工具调用
59
- */
60
- async function* sequenceMessageContent(message, context, config) {
61
- // 1. 发送role delta
62
- for (const roleEvent of buildRoleDelta(message.role, context, config)) {
63
- yield roleEvent;
64
- }
65
- // 2. 处理reasoning(如果有)
66
- if (message.reasoning) {
67
- yield* withSequencing(buildReasoningDeltas(message.reasoning, context, config), config);
68
- }
69
- // 3. 处理content和tool_calls
70
- if (hasMeaningfulContent(message.content)) {
71
- yield* withSequencing(buildContentDeltas(message.content, context, config), config);
72
- }
73
- if (message.tool_calls && message.tool_calls.length > 0) {
74
- for (let i = 0; i < message.tool_calls.length; i++) {
75
- const toolCall = message.tool_calls[i];
76
- const toolCallIndex = context.toolCallIndexCounter + i;
77
- yield buildToolCallStart(toolCall, toolCallIndex, context, config);
78
- if (toolCall.function?.arguments) {
79
- yield* withSequencing(buildToolCallArgsDeltas(toolCall.function.arguments, toolCallIndex, context, config), config);
80
- }
81
- }
82
- }
83
- }
84
- /**
85
- * 主编排器:将Chat响应转换为有序的SSE事件流
86
- */
87
- export async function* sequenceChatResponse(response, context, config = DEFAULT_CHAT_SEQUENCER_CONFIG) {
88
- try {
89
- // 验证响应格式
90
- if (!response.choices || response.choices.length === 0) {
91
- throw new Error('Invalid ChatCompletionResponse: missing choices');
92
- }
93
- const choice = response.choices[0];
94
- let message = choice?.message;
95
- // 兼容上游给到的 chunk 形态(choices[0].delta)
96
- if (!message && choice && typeof choice === 'object' && choice.delta) {
97
- const d = choice.delta;
98
- message = {
99
- role: typeof d.role === 'string' ? d.role : 'assistant',
100
- content: typeof d.content !== 'undefined' ? d.content : null,
101
- tool_calls: Array.isArray(d.tool_calls) ? d.tool_calls : undefined
102
- };
103
- // 为了下游 finish 事件合理性,缺省 finish_reason:若存在工具调用则用 tool_calls,否则 stop
104
- if (!('finish_reason' in choice)) {
105
- choice.finish_reason = message.tool_calls ? 'tool_calls' : 'stop';
106
- }
107
- }
108
- message = normalizeFunctionCall(message);
109
- // 验证消息顺序(如果启用)
110
- if (config.validateOrder) {
111
- // 这里可以添加更多的顺序验证逻辑
112
- if (!validateMessageSequence(message)) {
113
- const roleSafe = message && typeof message.role === 'string' ? message.role : 'unknown';
114
- throw new Error(`Invalid message sequence for role: ${roleSafe}`);
115
- }
116
- }
117
- // 序列化消息内容
118
- yield* sequenceMessageContent(message, context, config);
119
- // 发送finish_reason事件(若未提供则根据消息推断)
120
- yield buildFinishEvent(choice.finish_reason || (message?.tool_calls ? 'tool_calls' : 'stop'), context, config);
121
- // 发送done事件
122
- yield buildDoneEvent(context, config);
123
- }
124
- catch (error) {
125
- // 发送错误事件
126
- yield buildErrorEvent(error, context, config);
127
- }
128
- }
129
- function normalizeFunctionCall(message) {
130
- if (!message || typeof message !== 'object')
131
- return message;
132
- if ((message.tool_calls && message.tool_calls.length) || !message.function_call) {
133
- return message;
134
- }
135
- const fc = message.function_call;
136
- const name = typeof fc?.name === 'string' ? fc.name : 'function';
137
- let args = '';
138
- if (typeof fc?.arguments === 'string') {
139
- args = fc.arguments;
140
- }
141
- else {
142
- try {
143
- args = JSON.stringify(fc?.arguments ?? {});
144
- }
145
- catch {
146
- args = '{}';
147
- }
148
- }
149
- message.tool_calls = [
150
- {
151
- id: typeof fc?.id === 'string' ? fc.id : `call_${Math.random().toString(36).slice(2, 10)}`,
152
- type: 'function',
153
- function: { name, arguments: args }
154
- }
155
- ];
156
- return message;
157
- }
158
- /**
159
- * 序列化Chat请求(用于请求→SSE转换)
160
- */
161
- export async function* sequenceChatRequest(request, context, config = DEFAULT_CHAT_SEQUENCER_CONFIG) {
162
- try {
163
- // 验证请求格式
164
- if (!request.messages || !Array.isArray(request.messages)) {
165
- throw new Error('Invalid ChatCompletionRequest: missing messages');
166
- }
167
- // 为每个消息生成事件(主要用于流式回显)
168
- for (let messageIndex = 0; messageIndex < request.messages.length; messageIndex++) {
169
- const message = request.messages[messageIndex];
170
- // 为每条消息创建新的上下文
171
- const messageContext = {
172
- ...context,
173
- choiceIndex: messageIndex,
174
- toolCallIndexCounter: 0,
175
- contentIndexCounter: new Map()
176
- };
177
- // 序列化消息
178
- yield* sequenceMessageContent(message, messageContext, config);
179
- // 消息间添加小延迟(如果启用)
180
- if (config.enableDelay && config.chunkDelayMs > 0 && messageIndex < request.messages.length - 1) {
181
- await new Promise(resolve => setTimeout(resolve, config.chunkDelayMs * 2));
182
- }
183
- }
184
- // 请求结束时发送done事件
185
- yield buildDoneEvent(context, config);
186
- }
187
- catch (error) {
188
- yield buildErrorEvent(error, context, config);
189
- }
190
- }
191
- /**
192
- * 创建Chat事件序列化器工厂
193
- */
194
- export function createChatSequencer(config) {
195
- const finalConfig = { ...DEFAULT_CHAT_SEQUENCER_CONFIG, ...config };
196
- return {
197
- /**
198
- * 序列化响应
199
- */
200
- async *sequenceResponse(response, model, requestId) {
201
- const context = createDefaultContext(model, requestId);
202
- yield* sequenceChatResponse(response, context, finalConfig);
203
- },
204
- /**
205
- * 序列化请求
206
- */
207
- async *sequenceRequest(request, model, requestId) {
208
- const context = createDefaultContext(model, requestId);
209
- yield* sequenceChatRequest(request, context, finalConfig);
210
- },
211
- /**
212
- * 获取当前配置
213
- */
214
- getConfig() {
215
- return { ...finalConfig };
216
- }
217
- };
218
- }
@@ -1,40 +0,0 @@
1
- /**
2
- * Responses协议事件编排器
3
- * 负责将Responses响应数据转换为有序的SSE事件流
4
- */
5
- import { ResponsesResponse, ResponsesFunctionCallOutputItem, ResponsesSseEvent } from '../../types/index.js';
6
- import { ResponsesEventGeneratorContext, ResponsesEventGeneratorConfig } from '../event-generators/responses.js';
7
- export interface ResponsesSequencerConfig extends ResponsesEventGeneratorConfig {
8
- enableValidation: boolean;
9
- enableRecovery: boolean;
10
- enableDelay: boolean;
11
- maxOutputItems: number;
12
- maxContentParts: number;
13
- submittedToolOutputs?: ResponsesFunctionCallOutputItem[];
14
- }
15
- export declare const DEFAULT_RESPONSES_SEQUENCER_CONFIG: ResponsesSequencerConfig;
16
- /**
17
- * 主编排器:将Responses响应转换为有序的SSE事件流
18
- */
19
- export declare function sequenceResponse(response: ResponsesResponse, context: ResponsesEventGeneratorContext, config?: ResponsesSequencerConfig): AsyncGenerator<ResponsesSseEvent>;
20
- /**
21
- * 序列化Responses请求(用于请求→SSE转换)
22
- */
23
- export declare function sequenceRequest(request: any, context: ResponsesEventGeneratorContext, config?: ResponsesSequencerConfig): AsyncGenerator<ResponsesSseEvent>;
24
- /**
25
- * 创建Responses事件序列化器工厂
26
- */
27
- export declare function createResponsesSequencer(config?: Partial<ResponsesSequencerConfig>): {
28
- /**
29
- * 序列化响应
30
- */
31
- sequenceResponse(response: ResponsesResponse, requestId: string): AsyncGenerator<ResponsesSseEvent, void, any>;
32
- /**
33
- * 序列化请求
34
- */
35
- sequenceRequest(request: any, requestId: string): AsyncGenerator<ResponsesSseEvent, void, any>;
36
- /**
37
- * 获取当前配置
38
- */
39
- getConfig(): ResponsesSequencerConfig;
40
- };