@jsonstudio/llms 0.4.2 → 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 (417) 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/conversion/shared/responses-id-utils.js +18 -5
  20. package/dist/sse/sse-to-json/builders/response-builder.js +2 -1
  21. package/dist/sse/sse-to-json/chat-sse-to-json-converter.js +37 -23
  22. package/dist/sse/sse-to-json/parsers/sse-parser.js +20 -12
  23. package/dist/sse/sse-to-json/responses-sse-to-json-converter.d.ts +1 -0
  24. package/dist/sse/sse-to-json/responses-sse-to-json-converter.js +10 -8
  25. package/dist/sse/types/chat-types.d.ts +9 -6
  26. package/dist/sse/types/conversion-context.d.ts +14 -11
  27. package/dist/sse/types/core-interfaces.d.ts +6 -2
  28. package/dist/sse/types/index.d.ts +1 -1
  29. package/dist/sse/types/responses-types.d.ts +20 -20
  30. package/dist/sse/types/sse-events.d.ts +4 -3
  31. package/dist/sse/types/stream-state.d.ts +34 -39
  32. package/dist/sse/types/utility-types.d.ts +47 -43
  33. package/dist/sse/types/utility-types.js +10 -13
  34. package/dist/tools/tool-registry.js +156 -98
  35. package/package.json +6 -6
  36. package/dist/api/index.d.ts +0 -10
  37. package/dist/api/index.js +0 -11
  38. package/dist/api/llmswitch-config.d.ts +0 -15
  39. package/dist/api/llmswitch-config.js +0 -415
  40. package/dist/api/llmswitch-types.d.ts +0 -412
  41. package/dist/api/llmswitch-types.js +0 -60
  42. package/dist/bridge/routecodex-adapter.d.ts +0 -74
  43. package/dist/config/index.d.ts +0 -3
  44. package/dist/config/index.js +0 -5
  45. package/dist/config-unified/enhanced-path-resolver.d.ts +0 -5
  46. package/dist/config-unified/unified-config.d.ts +0 -26
  47. package/dist/conversion/codec-registry.d.ts +0 -10
  48. package/dist/conversion/codecs/anthropic-openai-codec.d.ts +0 -23
  49. package/dist/conversion/codecs/gemini-openai-codec.d.ts +0 -16
  50. package/dist/conversion/codecs/openai-openai-codec.d.ts +0 -12
  51. package/dist/conversion/codecs/responses-openai-codec.d.ts +0 -12
  52. package/dist/conversion/config/config-manager.d.ts +0 -212
  53. package/dist/conversion/conversion-v3/adapters/index.d.ts +0 -2
  54. package/dist/conversion/conversion-v3/adapters/index.js +0 -1
  55. package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.d.ts +0 -38
  56. package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.js +0 -55
  57. package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.d.ts +0 -22
  58. package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.js +0 -84
  59. package/dist/conversion/conversion-v3/compatibility/compatibility-stages.d.ts +0 -4
  60. package/dist/conversion/conversion-v3/compatibility/compatibility-stages.js +0 -285
  61. package/dist/conversion/conversion-v3/compatibility/index.d.ts +0 -3
  62. package/dist/conversion/conversion-v3/compatibility/index.js +0 -2
  63. package/dist/conversion/conversion-v3/config/default-configs.d.ts +0 -48
  64. package/dist/conversion/conversion-v3/config/default-configs.js +0 -1083
  65. package/dist/conversion/conversion-v3/config/index.d.ts +0 -5
  66. package/dist/conversion/conversion-v3/config/index.js +0 -5
  67. package/dist/conversion/conversion-v3/config/pipeline-config-manager.d.ts +0 -49
  68. package/dist/conversion/conversion-v3/config/pipeline-config-manager.js +0 -65
  69. package/dist/conversion/conversion-v3/index.d.ts +0 -11
  70. package/dist/conversion/conversion-v3/index.js +0 -17
  71. package/dist/conversion/conversion-v3/nodes/index.d.ts +0 -56
  72. package/dist/conversion/conversion-v3/nodes/index.js +0 -149
  73. package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.d.ts +0 -25
  74. package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.js +0 -56
  75. package/dist/conversion/conversion-v3/nodes/input/base-input-node.d.ts +0 -75
  76. package/dist/conversion/conversion-v3/nodes/input/base-input-node.js +0 -237
  77. package/dist/conversion/conversion-v3/nodes/input/chat-input-node.d.ts +0 -25
  78. package/dist/conversion/conversion-v3/nodes/input/chat-input-node.js +0 -56
  79. package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.d.ts +0 -4
  80. package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.js +0 -197
  81. package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.d.ts +0 -16
  82. package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.js +0 -125
  83. package/dist/conversion/conversion-v3/nodes/input/index.d.ts +0 -8
  84. package/dist/conversion/conversion-v3/nodes/input/index.js +0 -8
  85. package/dist/conversion/conversion-v3/nodes/input/input-decision.d.ts +0 -46
  86. package/dist/conversion/conversion-v3/nodes/input/input-decision.js +0 -125
  87. package/dist/conversion/conversion-v3/nodes/input/responses-input-node.d.ts +0 -20
  88. package/dist/conversion/conversion-v3/nodes/input/responses-input-node.js +0 -51
  89. package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.d.ts +0 -71
  90. package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.js +0 -320
  91. package/dist/conversion/conversion-v3/nodes/output/base-output-node.d.ts +0 -116
  92. package/dist/conversion/conversion-v3/nodes/output/base-output-node.js +0 -512
  93. package/dist/conversion/conversion-v3/nodes/output/index.d.ts +0 -7
  94. package/dist/conversion/conversion-v3/nodes/output/index.js +0 -7
  95. package/dist/conversion/conversion-v3/nodes/output/openai-output-node.d.ts +0 -71
  96. package/dist/conversion/conversion-v3/nodes/output/openai-output-node.js +0 -293
  97. package/dist/conversion/conversion-v3/nodes/output/output-decision.d.ts +0 -68
  98. package/dist/conversion/conversion-v3/nodes/output/output-decision.js +0 -161
  99. package/dist/conversion/conversion-v3/nodes/output/responses-output-node.d.ts +0 -64
  100. package/dist/conversion/conversion-v3/nodes/output/responses-output-node.js +0 -323
  101. package/dist/conversion/conversion-v3/nodes/process/base-process-node.d.ts +0 -72
  102. package/dist/conversion/conversion-v3/nodes/process/base-process-node.js +0 -246
  103. package/dist/conversion/conversion-v3/nodes/process/chat-process-node.d.ts +0 -135
  104. package/dist/conversion/conversion-v3/nodes/process/chat-process-node.js +0 -854
  105. package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.d.ts +0 -29
  106. package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.js +0 -181
  107. package/dist/conversion/conversion-v3/nodes/process/index.d.ts +0 -10
  108. package/dist/conversion/conversion-v3/nodes/process/index.js +0 -10
  109. package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.d.ts +0 -59
  110. package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.js +0 -243
  111. package/dist/conversion/conversion-v3/nodes/process/response-process-node.d.ts +0 -17
  112. package/dist/conversion/conversion-v3/nodes/process/response-process-node.js +0 -213
  113. package/dist/conversion/conversion-v3/nodes/process/tool-process-node.d.ts +0 -26
  114. package/dist/conversion/conversion-v3/nodes/process/tool-process-node.js +0 -299
  115. package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.d.ts +0 -40
  116. package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.js +0 -430
  117. package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.d.ts +0 -12
  118. package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.js +0 -129
  119. package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.d.ts +0 -15
  120. package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.js +0 -57
  121. package/dist/conversion/conversion-v3/nodes/response/index.d.ts +0 -4
  122. package/dist/conversion/conversion-v3/nodes/response/index.js +0 -4
  123. package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.d.ts +0 -15
  124. package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.js +0 -87
  125. package/dist/conversion/conversion-v3/nodes/response/response-utils.d.ts +0 -1
  126. package/dist/conversion/conversion-v3/nodes/response/response-utils.js +0 -1
  127. package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.d.ts +0 -12
  128. package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.js +0 -67
  129. package/dist/conversion/conversion-v3/nodes/sse/index.d.ts +0 -3
  130. package/dist/conversion/conversion-v3/nodes/sse/index.js +0 -3
  131. package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.d.ts +0 -27
  132. package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.js +0 -165
  133. package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.d.ts +0 -19
  134. package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.js +0 -267
  135. package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.d.ts +0 -18
  136. package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.js +0 -48
  137. package/dist/conversion/conversion-v3/pipelines/index.d.ts +0 -6
  138. package/dist/conversion/conversion-v3/pipelines/index.js +0 -6
  139. package/dist/conversion/conversion-v3/pipelines/super-pipeline.d.ts +0 -112
  140. package/dist/conversion/conversion-v3/pipelines/super-pipeline.js +0 -566
  141. package/dist/conversion/conversion-v3/response/provider-response-converter.d.ts +0 -28
  142. package/dist/conversion/conversion-v3/response/provider-response-converter.js +0 -249
  143. package/dist/conversion/conversion-v3/sse/index.d.ts +0 -140
  144. package/dist/conversion/conversion-v3/sse/index.js +0 -115
  145. package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +0 -11
  146. package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.js +0 -79
  147. package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.d.ts +0 -79
  148. package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.js +0 -296
  149. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.d.ts +0 -55
  150. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.js +0 -233
  151. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.d.ts +0 -99
  152. package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.js +0 -599
  153. package/dist/conversion/conversion-v3/sse/json-to-sse/index.d.ts +0 -6
  154. package/dist/conversion/conversion-v3/sse/json-to-sse/index.js +0 -7
  155. package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.d.ts +0 -79
  156. package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.js +0 -322
  157. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.d.ts +0 -37
  158. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.js +0 -218
  159. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.d.ts +0 -40
  160. package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.js +0 -263
  161. package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.d.ts +0 -32
  162. package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.js +0 -106
  163. package/dist/conversion/conversion-v3/sse/shared/chat-serializer.d.ts +0 -4
  164. package/dist/conversion/conversion-v3/sse/shared/chat-serializer.js +0 -40
  165. package/dist/conversion/conversion-v3/sse/shared/constants.d.ts +0 -272
  166. package/dist/conversion/conversion-v3/sse/shared/constants.js +0 -321
  167. package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.d.ts +0 -158
  168. package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.js +0 -210
  169. package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.d.ts +0 -82
  170. package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.js +0 -275
  171. package/dist/conversion/conversion-v3/sse/shared/serializers/index.d.ts +0 -39
  172. package/dist/conversion/conversion-v3/sse/shared/serializers/index.js +0 -54
  173. package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.d.ts +0 -123
  174. package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.js +0 -356
  175. package/dist/conversion/conversion-v3/sse/shared/serializers/types.d.ts +0 -51
  176. package/dist/conversion/conversion-v3/sse/shared/serializers/types.js +0 -4
  177. package/dist/conversion/conversion-v3/sse/shared/utils.d.ts +0 -254
  178. package/dist/conversion/conversion-v3/sse/shared/utils.js +0 -543
  179. package/dist/conversion/conversion-v3/sse/shared/writer.d.ts +0 -111
  180. package/dist/conversion/conversion-v3/sse/shared/writer.js +0 -268
  181. package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +0 -13
  182. package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.js +0 -139
  183. package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.d.ts +0 -165
  184. package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.js +0 -776
  185. package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.d.ts +0 -106
  186. package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.js +0 -540
  187. package/dist/conversion/conversion-v3/sse/sse-to-json/index.d.ts +0 -6
  188. package/dist/conversion/conversion-v3/sse/sse-to-json/index.js +0 -7
  189. package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.d.ts +0 -73
  190. package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.js +0 -332
  191. package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.d.ts +0 -59
  192. package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.js +0 -270
  193. package/dist/conversion/conversion-v3/sse/types/anthropic-types.d.ts +0 -87
  194. package/dist/conversion/conversion-v3/sse/types/anthropic-types.js +0 -5
  195. package/dist/conversion/conversion-v3/sse/types/chat-types.d.ts +0 -308
  196. package/dist/conversion/conversion-v3/sse/types/chat-types.js +0 -32
  197. package/dist/conversion/conversion-v3/sse/types/conversion-context.d.ts +0 -211
  198. package/dist/conversion/conversion-v3/sse/types/conversion-context.js +0 -20
  199. package/dist/conversion/conversion-v3/sse/types/core-interfaces.d.ts +0 -90
  200. package/dist/conversion/conversion-v3/sse/types/core-interfaces.js +0 -5
  201. package/dist/conversion/conversion-v3/sse/types/index.d.ts +0 -14
  202. package/dist/conversion/conversion-v3/sse/types/index.js +0 -7
  203. package/dist/conversion/conversion-v3/sse/types/responses-types.d.ts +0 -328
  204. package/dist/conversion/conversion-v3/sse/types/responses-types.js +0 -38
  205. package/dist/conversion/conversion-v3/sse/types/sse-events.d.ts +0 -180
  206. package/dist/conversion/conversion-v3/sse/types/sse-events.js +0 -150
  207. package/dist/conversion/conversion-v3/sse/types/stream-state.d.ts +0 -204
  208. package/dist/conversion/conversion-v3/sse/types/stream-state.js +0 -44
  209. package/dist/conversion/conversion-v3/sse/types/utility-types.d.ts +0 -230
  210. package/dist/conversion/conversion-v3/sse/types/utility-types.js +0 -49
  211. package/dist/conversion/conversion-v3/standards/context-adapter.d.ts +0 -146
  212. package/dist/conversion/conversion-v3/standards/context-adapter.js +0 -438
  213. package/dist/conversion/conversion-v3/standards/errors.d.ts +0 -38
  214. package/dist/conversion/conversion-v3/standards/errors.js +0 -27
  215. package/dist/conversion/conversion-v3/standards/index.d.ts +0 -15
  216. package/dist/conversion/conversion-v3/standards/index.js +0 -11
  217. package/dist/conversion/conversion-v3/standards/node-capabilities.d.ts +0 -123
  218. package/dist/conversion/conversion-v3/standards/node-capabilities.js +0 -330
  219. package/dist/conversion/conversion-v3/standards/pipeline-context.d.ts +0 -237
  220. package/dist/conversion/conversion-v3/standards/pipeline-context.js +0 -84
  221. package/dist/conversion/conversion-v3/standards/pipeline-node.d.ts +0 -196
  222. package/dist/conversion/conversion-v3/standards/pipeline-node.js +0 -316
  223. package/dist/conversion/conversion-v3/standards/snapshot-handles.d.ts +0 -24
  224. package/dist/conversion/conversion-v3/standards/snapshot-handles.js +0 -49
  225. package/dist/conversion/conversion-v3/types/config-types.d.ts +0 -242
  226. package/dist/conversion/conversion-v3/types/config-types.js +0 -13
  227. package/dist/conversion/conversion-v3/types/index.d.ts +0 -8
  228. package/dist/conversion/conversion-v3/types/index.js +0 -11
  229. package/dist/conversion/conversion-v3/types/node-types.d.ts +0 -211
  230. package/dist/conversion/conversion-v3/types/node-types.js +0 -20
  231. package/dist/conversion/conversion-v3/types/pipeline-types.d.ts +0 -246
  232. package/dist/conversion/conversion-v3/types/pipeline-types.js +0 -26
  233. package/dist/conversion/conversion-v3/types/request-types.d.ts +0 -293
  234. package/dist/conversion/conversion-v3/types/request-types.js +0 -26
  235. package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.d.ts +0 -10
  236. package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.js +0 -103
  237. package/dist/conversion/conversion-v3/validations/index.d.ts +0 -8
  238. package/dist/conversion/conversion-v3/validations/index.js +0 -7
  239. package/dist/conversion/conversion-v3/validations/node-graph-validator.d.ts +0 -116
  240. package/dist/conversion/conversion-v3/validations/node-graph-validator.js +0 -505
  241. package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.d.ts +0 -139
  242. package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.js +0 -338
  243. package/dist/conversion/hub/config/types.d.ts +0 -26
  244. package/dist/conversion/hub/core/detour-registry.d.ts +0 -9
  245. package/dist/conversion/hub/core/hub-context.d.ts +0 -21
  246. package/dist/conversion/hub/core/index.d.ts +0 -3
  247. package/dist/conversion/hub/core/stage-driver.d.ts +0 -30
  248. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.d.ts +0 -16
  249. package/dist/conversion/hub/format-adapters/chat-format-adapter.d.ts +0 -17
  250. package/dist/conversion/hub/format-adapters/gemini-format-adapter.d.ts +0 -16
  251. package/dist/conversion/hub/format-adapters/index.d.ts +0 -21
  252. package/dist/conversion/hub/format-adapters/responses-format-adapter.d.ts +0 -17
  253. package/dist/conversion/hub/hub-feature.d.ts +0 -1
  254. package/dist/conversion/hub/node-support.d.ts +0 -19
  255. package/dist/conversion/hub/pipeline/hub-pipeline.d.ts +0 -68
  256. package/dist/conversion/hub/pipelines/inbound.d.ts +0 -22
  257. package/dist/conversion/hub/pipelines/outbound.d.ts +0 -22
  258. package/dist/conversion/hub/process/chat-process.d.ts +0 -13
  259. package/dist/conversion/hub/registry.d.ts +0 -28
  260. package/dist/conversion/hub/response/chat-response-utils.d.ts +0 -6
  261. package/dist/conversion/hub/response/provider-response.d.ts +0 -20
  262. package/dist/conversion/hub/response/response-mappers.d.ts +0 -19
  263. package/dist/conversion/hub/response/response-runtime.d.ts +0 -3
  264. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +0 -7
  265. package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +0 -7
  266. package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +0 -7
  267. package/dist/conversion/hub/semantic-mappers/index.d.ts +0 -4
  268. package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +0 -21
  269. package/dist/conversion/hub/snapshot-recorder.d.ts +0 -12
  270. package/dist/conversion/hub/standardized-bridge.d.ts +0 -12
  271. package/dist/conversion/hub/types/chat-envelope.d.ts +0 -67
  272. package/dist/conversion/hub/types/chat-schema.d.ts +0 -112
  273. package/dist/conversion/hub/types/errors.d.ts +0 -5
  274. package/dist/conversion/hub/types/format-envelope.d.ts +0 -7
  275. package/dist/conversion/hub/types/index.d.ts +0 -6
  276. package/dist/conversion/hub/types/json.d.ts +0 -9
  277. package/dist/conversion/hub/types/node.d.ts +0 -31
  278. package/dist/conversion/hub/types/standardized.d.ts +0 -94
  279. package/dist/conversion/responses/responses-openai-bridge.d.ts +0 -95
  280. package/dist/conversion/schema-validator.d.ts +0 -7
  281. package/dist/conversion/shared/args-mapping.d.ts +0 -18
  282. package/dist/conversion/shared/chat-request-filters.d.ts +0 -9
  283. package/dist/conversion/shared/jsonish.d.ts +0 -3
  284. package/dist/conversion/shared/mcp-injection.d.ts +0 -2
  285. package/dist/conversion/shared/media.d.ts +0 -1
  286. package/dist/conversion/shared/openai-finalizer.d.ts +0 -9
  287. package/dist/conversion/shared/openai-message-normalize.d.ts +0 -1
  288. package/dist/conversion/shared/payload-budget.d.ts +0 -13
  289. package/dist/conversion/shared/reasoning-mapping.d.ts +0 -5
  290. package/dist/conversion/shared/responses-conversation-store.d.ts +0 -41
  291. package/dist/conversion/shared/responses-id-utils.d.ts +0 -7
  292. package/dist/conversion/shared/responses-instructions.d.ts +0 -1
  293. package/dist/conversion/shared/responses-metadata.d.ts +0 -1
  294. package/dist/conversion/shared/responses-request-adapter.d.ts +0 -66
  295. package/dist/conversion/shared/snapshot-hooks.d.ts +0 -12
  296. package/dist/conversion/shared/streaming-text-extractor.d.ts +0 -26
  297. package/dist/conversion/shared/text-markup-normalizer.d.ts +0 -9
  298. package/dist/conversion/shared/tool-canonicalizer.d.ts +0 -2
  299. package/dist/conversion/shared/tool-filter-pipeline.d.ts +0 -17
  300. package/dist/conversion/shared/tool-governor.d.ts +0 -27
  301. package/dist/conversion/shared/tool-harvester.d.ts +0 -31
  302. package/dist/conversion/shared/tool-mapping.d.ts +0 -10
  303. package/dist/conversion/shared/tooling.d.ts +0 -26
  304. package/dist/conversion/types.d.ts +0 -33
  305. package/dist/core/index.d.ts +0 -6
  306. package/dist/core/index.js +0 -9
  307. package/dist/core/llmswitch-engine-v2.d.ts +0 -132
  308. package/dist/core/llmswitch-engine-v2.js +0 -649
  309. package/dist/core/llmswitch-factory-v2.d.ts +0 -123
  310. package/dist/core/llmswitch-factory-v2.js +0 -521
  311. package/dist/endpoints/base-endpoint-handler.d.ts +0 -128
  312. package/dist/endpoints/base-endpoint-handler.js +0 -545
  313. package/dist/endpoints/chat-endpoint-handler.d.ts +0 -115
  314. package/dist/endpoints/chat-endpoint-handler.js +0 -218
  315. package/dist/endpoints/endpoint-router.d.ts +0 -127
  316. package/dist/endpoints/endpoint-router.js +0 -438
  317. package/dist/endpoints/index.d.ts +0 -13
  318. package/dist/endpoints/index.js +0 -11
  319. package/dist/endpoints/messages-endpoint-handler.d.ts +0 -171
  320. package/dist/endpoints/messages-endpoint-handler.js +0 -238
  321. package/dist/endpoints/responses-endpoint-handler.d.ts +0 -147
  322. package/dist/endpoints/responses-endpoint-handler.js +0 -233
  323. package/dist/filters/builtin/add-fields-filter.d.ts +0 -8
  324. package/dist/filters/builtin/blacklist-filter.d.ts +0 -8
  325. package/dist/filters/builtin/whitelist-filter.d.ts +0 -8
  326. package/dist/filters/engine.d.ts +0 -16
  327. package/dist/filters/index.d.ts +0 -19
  328. package/dist/filters/special/request-streaming-to-nonstreaming.d.ts +0 -12
  329. package/dist/filters/special/request-tool-choice-policy.d.ts +0 -11
  330. package/dist/filters/special/request-tool-list-filter.d.ts +0 -11
  331. package/dist/filters/special/request-toolcalls-stringify.d.ts +0 -10
  332. package/dist/filters/special/request-tools-normalize.d.ts +0 -12
  333. package/dist/filters/special/response-finish-invariants.d.ts +0 -11
  334. package/dist/filters/special/response-openai-to-responses-bridge.d.ts +0 -13
  335. package/dist/filters/special/response-tool-arguments-blacklist.d.ts +0 -12
  336. package/dist/filters/special/response-tool-arguments-schema-converge.d.ts +0 -13
  337. package/dist/filters/special/response-tool-arguments-stringify.d.ts +0 -9
  338. package/dist/filters/special/response-tool-arguments-toon-decode.d.ts +0 -10
  339. package/dist/filters/special/response-tool-arguments-whitelist.d.ts +0 -11
  340. package/dist/filters/special/response-tool-text-canonicalize.d.ts +0 -10
  341. package/dist/filters/special/tool-filter-hooks.d.ts +0 -19
  342. package/dist/filters/special/tool-post-constraints.d.ts +0 -31
  343. package/dist/filters/types.d.ts +0 -68
  344. package/dist/filters/utils/fieldmap-loader.d.ts +0 -2
  345. package/dist/filters/utils/snapshot-writer.d.ts +0 -10
  346. package/dist/guidance/index.d.ts +0 -3
  347. package/dist/hooks/hooks-integration.d.ts +0 -161
  348. package/dist/hooks/hooks-integration.js +0 -519
  349. package/dist/hooks/index.d.ts +0 -10
  350. package/dist/hooks/index.js +0 -13
  351. package/dist/html-to-markdown.d.ts +0 -5
  352. package/dist/html-to-markdown.js +0 -66
  353. package/dist/http/sse-response.d.ts +0 -22
  354. package/dist/router/virtual-router/bootstrap.d.ts +0 -6
  355. package/dist/router/virtual-router/classifier.d.ts +0 -10
  356. package/dist/router/virtual-router/engine.d.ts +0 -35
  357. package/dist/router/virtual-router/error-center.d.ts +0 -10
  358. package/dist/router/virtual-router/features.d.ts +0 -3
  359. package/dist/router/virtual-router/health-manager.d.ts +0 -18
  360. package/dist/router/virtual-router/load-balancer.d.ts +0 -18
  361. package/dist/router/virtual-router/provider-registry.d.ts +0 -11
  362. package/dist/router/virtual-router/types.d.ts +0 -206
  363. package/dist/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +0 -11
  364. package/dist/sse/json-to-sse/chat-json-to-sse-converter.d.ts +0 -79
  365. package/dist/sse/json-to-sse/event-generators/chat.d.ts +0 -55
  366. package/dist/sse/json-to-sse/event-generators/responses.d.ts +0 -99
  367. package/dist/sse/json-to-sse/index.d.ts +0 -6
  368. package/dist/sse/json-to-sse/responses-json-to-sse-converter.d.ts +0 -79
  369. package/dist/sse/json-to-sse/sequencers/chat-sequencer.d.ts +0 -37
  370. package/dist/sse/json-to-sse/sequencers/responses-sequencer.d.ts +0 -40
  371. package/dist/sse/registry/sse-codec-registry.d.ts +0 -32
  372. package/dist/sse/shared/chat-serializer.d.ts +0 -4
  373. package/dist/sse/shared/constants.d.ts +0 -272
  374. package/dist/sse/shared/serializers/base-serializer.d.ts +0 -158
  375. package/dist/sse/shared/serializers/chat-event-serializer.d.ts +0 -82
  376. package/dist/sse/shared/serializers/index.d.ts +0 -39
  377. package/dist/sse/shared/serializers/responses-event-serializer.d.ts +0 -123
  378. package/dist/sse/shared/serializers/types.d.ts +0 -51
  379. package/dist/sse/shared/utils.d.ts +0 -254
  380. package/dist/sse/shared/writer.d.ts +0 -111
  381. package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +0 -13
  382. package/dist/sse/sse-to-json/builders/response-builder.d.ts +0 -165
  383. package/dist/sse/sse-to-json/chat-sse-to-json-converter.d.ts +0 -106
  384. package/dist/sse/sse-to-json/index.d.ts +0 -6
  385. package/dist/sse/sse-to-json/parsers/sse-parser.d.ts +0 -73
  386. package/dist/sse/types/anthropic-types.d.ts +0 -87
  387. package/dist/tools/proxy/anthropic-tool-proxy.d.ts +0 -19
  388. package/dist/tools/proxy/anthropic-tool-proxy.js +0 -57
  389. package/dist/tools/proxy/executors/web-fetch.d.ts +0 -6
  390. package/dist/tools/proxy/executors/web-fetch.js +0 -39
  391. package/dist/tools/proxy/registry.d.ts +0 -8
  392. package/dist/tools/proxy/registry.js +0 -14
  393. package/dist/tools/proxy/types.d.ts +0 -29
  394. package/dist/tools/tool-registry.d.ts +0 -8
  395. package/dist/tools/web-fetch-html.d.ts +0 -15
  396. package/dist/tools/web-fetch-html.js +0 -83
  397. package/dist/utils/conversion-adapter.d.ts +0 -65
  398. package/dist/utils/conversion-adapter.js +0 -183
  399. package/dist/utils/error-factory.d.ts +0 -88
  400. package/dist/utils/error-factory.js +0 -138
  401. package/dist/utils/error-utils.d.ts +0 -334
  402. package/dist/utils/error-utils.js +0 -782
  403. package/dist/utils/index.d.ts +0 -8
  404. package/dist/utils/index.js +0 -13
  405. package/dist/utils/performance-utils.d.ts +0 -205
  406. package/dist/utils/performance-utils.js +0 -440
  407. package/dist/utils/profile-mapper.d.ts +0 -32
  408. package/dist/utils/profile-mapper.js +0 -269
  409. package/dist/utils/request-processor.d.ts +0 -52
  410. package/dist/utils/request-processor.js +0 -210
  411. package/dist/utils/request-utils.d.ts +0 -117
  412. package/dist/utils/request-utils.js +0 -333
  413. package/dist/utils/response-utils.d.ts +0 -127
  414. package/dist/utils/response-utils.js +0 -516
  415. package/dist/utils/token-counter.d.ts +0 -89
  416. package/dist/utils/token-counter.js +0 -541
  417. /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
- };