@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,106 +0,0 @@
1
- /**
2
- * Chat SSE → JSON转换器
3
- * 将SSE事件流聚合为ChatCompletion响应
4
- */
5
- import { ChatCompletionResponse, ChatSseEvent, SseToChatJsonOptions, ChatEventStats, DEFAULT_CHAT_CONVERSION_CONFIG } from '../types/index.js';
6
- /**
7
- * Chat SSE到JSON转换器
8
- */
9
- export declare class ChatSseToJsonConverter {
10
- private config;
11
- private contexts;
12
- constructor(config?: Partial<typeof DEFAULT_CHAT_CONVERSION_CONFIG>);
13
- /**
14
- * 将SSE流转换为Chat Completion响应
15
- */
16
- convertSseToJson(sseStream: AsyncIterable<ChatSseEvent> | AsyncIterable<string | Buffer>, options: SseToChatJsonOptions): Promise<ChatCompletionResponse>;
17
- /**
18
- * 将SSE流转换为流式响应
19
- */
20
- aggregateSseStream(sseStream: AsyncIterable<ChatSseEvent> | AsyncIterable<string | Buffer>, options: SseToChatJsonOptions): AsyncGenerator<ChatCompletionResponse>;
21
- /**
22
- * 确保输入流转换为 ChatSseEvent 流
23
- */
24
- private ensureEventStream;
25
- /**
26
- * 将SSE文本块解析为Chat事件
27
- */
28
- private parseSseChunk;
29
- /**
30
- * 创建转换上下文
31
- */
32
- private createContext;
33
- /**
34
- * 处理SSE事件
35
- */
36
- private processSseEvent;
37
- /**
38
- * 处理chat_chunk事件
39
- */
40
- private processChatChunk;
41
- /**
42
- * 处理choice
43
- */
44
- private processChoice;
45
- /**
46
- * 创建choice构建器
47
- */
48
- private createChoiceBuilder;
49
- /**
50
- * 处理delta
51
- */
52
- private processDelta;
53
- /**
54
- * 处理tool_call delta
55
- */
56
- private processToolCallDelta;
57
- /**
58
- * 更新响应中的choice
59
- */
60
- private updateResponseChoice;
61
- /**
62
- * 处理done事件
63
- */
64
- private processDoneEvent;
65
- /**
66
- * 处理error事件
67
- */
68
- private processErrorEvent;
69
- /**
70
- * 构建部分响应
71
- */
72
- private buildPartialResponse;
73
- /**
74
- * 完成响应构建
75
- */
76
- private finalizeResponse;
77
- /**
78
- * 构建使用量信息
79
- */
80
- private buildUsageInfo;
81
- /**
82
- * 验证SSE事件
83
- */
84
- private validateSseEvent;
85
- /**
86
- * 验证Chat chunk
87
- */
88
- private validateChatChunk;
89
- /**
90
- * 更新统计信息
91
- */
92
- private updateStats;
93
- /**
94
- * 获取转换统计
95
- */
96
- getStats(requestId: string): ChatEventStats | undefined;
97
- /**
98
- * 清理上下文
99
- */
100
- cleanup(requestId: string): void;
101
- /**
102
- * 清理所有上下文
103
- */
104
- cleanupAll(): void;
105
- }
106
- export declare const defaultChatSseToJsonConverter: ChatSseToJsonConverter;
@@ -1,540 +0,0 @@
1
- /**
2
- * Chat SSE → JSON转换器
3
- * 将SSE事件流聚合为ChatCompletion响应
4
- */
5
- import { DEFAULT_CHAT_CONVERSION_CONFIG, CHAT_CONVERSION_ERROR_CODES } from '../types/index.js';
6
- import { TimeUtils, ErrorUtils } from '../shared/utils.js';
7
- /**
8
- * Chat SSE到JSON转换器
9
- */
10
- export class ChatSseToJsonConverter {
11
- config = DEFAULT_CHAT_CONVERSION_CONFIG;
12
- contexts = new Map();
13
- constructor(config) {
14
- if (config) {
15
- this.config = { ...this.config, ...config };
16
- }
17
- }
18
- /**
19
- * 将SSE流转换为Chat Completion响应
20
- */
21
- async convertSseToJson(sseStream, options) {
22
- const context = this.createContext(options);
23
- this.contexts.set(options.requestId, context);
24
- try {
25
- // 处理SSE流
26
- for await (const event of this.ensureEventStream(sseStream)) {
27
- await this.processSseEvent(event, context);
28
- }
29
- // 验证并返回最终响应
30
- return this.finalizeResponse(context);
31
- }
32
- catch (error) {
33
- context.eventStats.errorCount++;
34
- options.onError?.(error);
35
- throw ErrorUtils.wrapError(error, 'SSE to JSON conversion failed');
36
- }
37
- finally {
38
- this.cleanup(options.requestId);
39
- }
40
- }
41
- /**
42
- * 将SSE流转换为流式响应
43
- */
44
- async *aggregateSseStream(sseStream, options) {
45
- const context = this.createContext(options);
46
- this.contexts.set(options.requestId, context);
47
- try {
48
- for await (const event of this.ensureEventStream(sseStream)) {
49
- await this.processSseEvent(event, context);
50
- // 每处理完一个chunk就生成部分响应
51
- const partialResponse = this.buildPartialResponse(context);
52
- if (partialResponse) {
53
- options.onPartialResponse?.(partialResponse);
54
- yield partialResponse;
55
- }
56
- }
57
- // 返回最终响应
58
- const finalResponse = this.finalizeResponse(context);
59
- options.onCompletion?.(finalResponse);
60
- yield finalResponse;
61
- }
62
- catch (error) {
63
- context.eventStats.errorCount++;
64
- options.onError?.(error);
65
- throw ErrorUtils.wrapError(error, 'SSE stream aggregation failed');
66
- }
67
- finally {
68
- this.cleanup(options.requestId);
69
- }
70
- }
71
- /**
72
- * 确保输入流转换为 ChatSseEvent 流
73
- */
74
- async *ensureEventStream(source) {
75
- let textBuffer = '';
76
- for await (const chunk of source) {
77
- if (typeof chunk === 'string' || Buffer.isBuffer(chunk)) {
78
- const normalizedChunk = (typeof chunk === 'string' ? chunk : chunk.toString())
79
- .replace(/\r\n/g, '\n');
80
- textBuffer += normalizedChunk;
81
- let delimiterIndex = textBuffer.indexOf('\n\n');
82
- while (delimiterIndex !== -1) {
83
- const rawEvent = textBuffer.slice(0, delimiterIndex);
84
- textBuffer = textBuffer.slice(delimiterIndex + 2);
85
- const trimmed = rawEvent.trim();
86
- if (trimmed) {
87
- yield this.parseSseChunk(trimmed);
88
- }
89
- delimiterIndex = textBuffer.indexOf('\n\n');
90
- }
91
- }
92
- else if (chunk?.event) {
93
- yield chunk;
94
- }
95
- else {
96
- throw ErrorUtils.createError('Unsupported SSE chunk format', CHAT_CONVERSION_ERROR_CODES.PARSE_ERROR, { chunk });
97
- }
98
- }
99
- const trailing = textBuffer.trim();
100
- if (trailing) {
101
- yield this.parseSseChunk(trailing);
102
- }
103
- }
104
- /**
105
- * 将SSE文本块解析为Chat事件
106
- */
107
- parseSseChunk(chunk) {
108
- const lines = chunk.trim().split('\n');
109
- let eventType;
110
- let dataValue = '';
111
- for (const line of lines) {
112
- if (line.startsWith('event:')) {
113
- eventType = line.substring(6).trim();
114
- }
115
- else if (line.startsWith('data:')) {
116
- dataValue = line.substring(5).trim();
117
- }
118
- }
119
- if (!eventType) {
120
- throw ErrorUtils.createError('SSE event type is required', CHAT_CONVERSION_ERROR_CODES.VALIDATION_ERROR, { chunk });
121
- }
122
- return {
123
- event: eventType,
124
- type: eventType,
125
- timestamp: TimeUtils.now(),
126
- data: dataValue,
127
- protocol: 'chat',
128
- direction: 'sse_to_json'
129
- };
130
- }
131
- /**
132
- * 创建转换上下文
133
- */
134
- createContext(options) {
135
- return {
136
- requestId: options.requestId,
137
- model: options.model,
138
- options: { ...DEFAULT_CHAT_CONVERSION_CONFIG, ...options },
139
- startTime: TimeUtils.now(),
140
- aggregatedChunks: [],
141
- currentResponse: {
142
- id: '',
143
- object: 'chat.completion',
144
- created: 0,
145
- model: options.model,
146
- choices: []
147
- },
148
- choiceIndexMap: new Map(),
149
- toolCallIndexMap: new Map(),
150
- eventStats: {
151
- totalChunks: 0,
152
- totalTokens: 0,
153
- totalChoices: 0,
154
- totalToolCalls: 0,
155
- startTime: TimeUtils.now(),
156
- tokenRate: 0,
157
- chunkRate: 0,
158
- errorCount: 0,
159
- retryCount: 0
160
- },
161
- isCompleted: false
162
- };
163
- }
164
- /**
165
- * 处理SSE事件
166
- */
167
- async processSseEvent(event, context) {
168
- try {
169
- // 验证事件格式
170
- if (context.options.validateChunks) {
171
- this.validateSseEvent(event);
172
- }
173
- context.eventStats.totalChunks++;
174
- context.options.onEvent?.(event);
175
- switch (event.event) {
176
- case 'chat_chunk':
177
- await this.processChatChunk(event, context);
178
- break;
179
- case 'chat.done':
180
- await this.processDoneEvent(event, context);
181
- break;
182
- case 'error':
183
- await this.processErrorEvent(event, context);
184
- break;
185
- case 'ping':
186
- // 心跳事件,忽略处理
187
- break;
188
- default:
189
- throw ErrorUtils.createError(`Unknown SSE event type: ${event.event}`, CHAT_CONVERSION_ERROR_CODES.PARSE_ERROR, { event });
190
- }
191
- // 更新统计
192
- this.updateStats(context);
193
- }
194
- catch (error) {
195
- context.eventStats.errorCount++;
196
- throw ErrorUtils.wrapError(error, `Failed to process SSE event: ${event.event}`);
197
- }
198
- }
199
- /**
200
- * 处理chat_chunk事件
201
- */
202
- async processChatChunk(event, context) {
203
- try {
204
- const chunk = JSON.parse(event.data);
205
- // 验证chunk格式
206
- if (context.options.validateChunks) {
207
- this.validateChatChunk(chunk);
208
- }
209
- context.aggregatedChunks.push(chunk);
210
- // 初始化响应结构(如果是第一个chunk)
211
- if (!context.currentResponse.id && chunk.id) {
212
- context.currentResponse.id = chunk.id;
213
- context.currentResponse.object = 'chat.completion';
214
- context.currentResponse.created = chunk.created;
215
- context.currentResponse.model = chunk.model;
216
- }
217
- // 处理choices
218
- if (chunk.choices && Array.isArray(chunk.choices)) {
219
- for (const choice of chunk.choices) {
220
- await this.processChoice(choice, context);
221
- }
222
- }
223
- }
224
- catch (error) {
225
- throw ErrorUtils.wrapError(error, 'Failed to parse chat_chunk');
226
- }
227
- }
228
- /**
229
- * 处理choice
230
- */
231
- async processChoice(choice, context) {
232
- const choiceIndex = choice.index || 0;
233
- // 获取或创建choice构建器
234
- let choiceBuilder = context.choiceIndexMap.get(choiceIndex);
235
- if (!choiceBuilder) {
236
- choiceBuilder = this.createChoiceBuilder(choiceIndex);
237
- context.choiceIndexMap.set(choiceIndex, choiceBuilder);
238
- context.currentResponse.choices?.push({
239
- index: choiceIndex,
240
- message: {},
241
- finish_reason: null,
242
- logprobs: choice.logprobs
243
- });
244
- }
245
- // 处理delta
246
- if (choice.delta) {
247
- await this.processDelta(choice.delta, choiceBuilder, context);
248
- }
249
- // 处理finish_reason
250
- if (choice.finish_reason) {
251
- choiceBuilder.finishReason = choice.finish_reason;
252
- choiceBuilder.isCompleted = true;
253
- }
254
- // 更新响应中的choice
255
- this.updateResponseChoice(choiceIndex, choiceBuilder, context);
256
- }
257
- /**
258
- * 创建choice构建器
259
- */
260
- createChoiceBuilder(index) {
261
- return {
262
- index,
263
- delta: {},
264
- finishReason: null,
265
- logprobs: null,
266
- messageBuilder: {
267
- role: undefined,
268
- content: '',
269
- name: undefined,
270
- functionCall: undefined,
271
- toolCalls: [],
272
- toolCallId: undefined,
273
- isCompleted: false
274
- },
275
- isCompleted: false,
276
- accumulatedContent: '',
277
- toolCallBuilders: new Map()
278
- };
279
- }
280
- /**
281
- * 处理delta
282
- */
283
- async processDelta(delta, choiceBuilder, context) {
284
- const messageBuilder = choiceBuilder.messageBuilder;
285
- // 处理role
286
- if (delta.role) {
287
- messageBuilder.role = delta.role;
288
- }
289
- // 处理reasoning
290
- if (delta.reasoning) {
291
- messageBuilder.content += delta.reasoning;
292
- choiceBuilder.accumulatedContent += delta.reasoning;
293
- }
294
- // 处理content
295
- if (delta.content) {
296
- messageBuilder.content += delta.content;
297
- choiceBuilder.accumulatedContent += delta.content;
298
- }
299
- // 处理function_call
300
- if (delta.function_call) {
301
- if (delta.function_call.name) {
302
- messageBuilder.functionCall = {
303
- ...messageBuilder.functionCall,
304
- name: delta.function_call.name
305
- };
306
- }
307
- if (delta.function_call.arguments) {
308
- messageBuilder.functionCall = {
309
- ...messageBuilder.functionCall,
310
- arguments: (messageBuilder.functionCall?.arguments || '') + delta.function_call.arguments
311
- };
312
- }
313
- }
314
- // 处理tool_calls
315
- if (delta.tool_calls && Array.isArray(delta.tool_calls)) {
316
- for (const toolCallDelta of delta.tool_calls) {
317
- await this.processToolCallDelta(toolCallDelta, choiceBuilder, context);
318
- }
319
- }
320
- // 合并delta到choiceBuilder
321
- choiceBuilder.delta = { ...choiceBuilder.delta, ...delta };
322
- }
323
- /**
324
- * 处理tool_call delta
325
- */
326
- async processToolCallDelta(toolCallDelta, choiceBuilder, context) {
327
- const toolCallIndex = toolCallDelta.index;
328
- // 获取或创建tool_call构建器
329
- let toolCallBuilder = choiceBuilder.toolCallBuilders.get(toolCallIndex);
330
- if (!toolCallBuilder) {
331
- toolCallBuilder = {
332
- index: toolCallIndex,
333
- id: '',
334
- type: 'function',
335
- function: {
336
- name: '',
337
- arguments: ''
338
- },
339
- isCompleted: false,
340
- accumulatedArguments: ''
341
- };
342
- choiceBuilder.toolCallBuilders.set(toolCallIndex, toolCallBuilder);
343
- }
344
- // 更新tool_call构建器
345
- if (toolCallDelta.id) {
346
- toolCallBuilder.id = toolCallDelta.id;
347
- }
348
- if (toolCallDelta.type) {
349
- toolCallBuilder.type = toolCallDelta.type;
350
- }
351
- if (toolCallDelta.function) {
352
- if (toolCallDelta.function.name) {
353
- toolCallBuilder.function.name = toolCallDelta.function.name;
354
- }
355
- if (toolCallDelta.function.arguments) {
356
- toolCallBuilder.function.arguments += toolCallDelta.function.arguments;
357
- toolCallBuilder.accumulatedArguments += toolCallDelta.function.arguments;
358
- }
359
- }
360
- // 标记完成(当arguments不为空且id存在时)
361
- if (toolCallBuilder.id && toolCallBuilder.function.arguments) {
362
- toolCallBuilder.isCompleted = true;
363
- }
364
- }
365
- /**
366
- * 更新响应中的choice
367
- */
368
- updateResponseChoice(choiceIndex, choiceBuilder, context) {
369
- const responseChoice = context.currentResponse.choices?.[choiceIndex];
370
- if (!responseChoice)
371
- return;
372
- const messageBuilder = choiceBuilder.messageBuilder;
373
- // 构建message
374
- const message = {
375
- role: messageBuilder.role || 'assistant'
376
- };
377
- if (messageBuilder.content) {
378
- message.content = messageBuilder.content;
379
- }
380
- if (messageBuilder.functionCall) {
381
- message.function_call = messageBuilder.functionCall;
382
- }
383
- // 构建tool_calls
384
- const toolCalls = [];
385
- for (const [_, toolCallBuilder] of choiceBuilder.toolCallBuilders) {
386
- if (toolCallBuilder.id) {
387
- toolCalls.push({
388
- id: toolCallBuilder.id,
389
- type: toolCallBuilder.type || 'function',
390
- function: toolCallBuilder.function
391
- });
392
- }
393
- }
394
- if (toolCalls.length > 0) {
395
- message.tool_calls = toolCalls;
396
- }
397
- responseChoice.message = message;
398
- responseChoice.finish_reason = choiceBuilder.finishReason;
399
- context.eventStats.totalToolCalls += toolCalls.length;
400
- }
401
- /**
402
- * 处理done事件
403
- */
404
- async processDoneEvent(event, context) {
405
- context.isCompleted = true;
406
- // 解析done事件数据(如果有的话)
407
- try {
408
- const doneData = JSON.parse(event.data);
409
- if (doneData.totalTokens) {
410
- context.eventStats.totalTokens = doneData.totalTokens;
411
- }
412
- }
413
- catch (e) {
414
- // 忽略解析错误
415
- }
416
- }
417
- /**
418
- * 处理error事件
419
- */
420
- async processErrorEvent(event, context) {
421
- try {
422
- const errorData = JSON.parse(event.data);
423
- const error = new Error(errorData.error || 'Unknown SSE error');
424
- error.code = errorData.code || 'SSE_ERROR';
425
- throw ErrorUtils.createError(error.message, CHAT_CONVERSION_ERROR_CODES.STREAM_ERROR, { errorData, event });
426
- }
427
- catch (parseError) {
428
- throw ErrorUtils.createError(`SSE error event: ${event.data}`, CHAT_CONVERSION_ERROR_CODES.STREAM_ERROR, { event });
429
- }
430
- }
431
- /**
432
- * 构建部分响应
433
- */
434
- buildPartialResponse(context) {
435
- const choices = context.currentResponse.choices || [];
436
- if (choices.length === 0)
437
- return null;
438
- return {
439
- id: context.currentResponse.id || '',
440
- object: 'chat.completion',
441
- created: context.currentResponse.created || 0,
442
- model: context.currentResponse.model,
443
- choices: choices.map(choice => ({
444
- ...choice,
445
- // 确保message对象存在
446
- message: choice.message || { role: 'assistant', content: '' }
447
- }))
448
- };
449
- }
450
- /**
451
- * 完成响应构建
452
- */
453
- finalizeResponse(context) {
454
- const choices = context.currentResponse.choices || [];
455
- // 确保所有choices都已完成
456
- for (const choice of choices) {
457
- if (!choice.finish_reason) {
458
- choice.finish_reason = 'stop';
459
- }
460
- }
461
- // 构建usage信息
462
- const usage = this.buildUsageInfo(context);
463
- context.eventStats.totalChoices = choices.length;
464
- context.eventStats.endTime = TimeUtils.now();
465
- context.eventStats.duration = (context.eventStats.endTime - context.eventStats.startTime) / 1000;
466
- return {
467
- id: context.currentResponse.id || `chat_${context.requestId}`,
468
- object: 'chat.completion',
469
- created: context.currentResponse.created || Math.floor(Date.now() / 1000),
470
- model: context.currentResponse.model,
471
- choices,
472
- usage: usage || undefined
473
- };
474
- }
475
- /**
476
- * 构建使用量信息
477
- */
478
- buildUsageInfo(context) {
479
- // 这里可以基于token计数来计算usage
480
- // 暂时返回null,后续可以实现更精确的token计数
481
- return null;
482
- }
483
- /**
484
- * 验证SSE事件
485
- */
486
- validateSseEvent(event) {
487
- if (!event.event) {
488
- throw ErrorUtils.createError('SSE event type is required', CHAT_CONVERSION_ERROR_CODES.VALIDATION_ERROR, { event });
489
- }
490
- if (!event.data) {
491
- throw ErrorUtils.createError('SSE event data is required', CHAT_CONVERSION_ERROR_CODES.VALIDATION_ERROR, { event });
492
- }
493
- const validEvents = ['chat_chunk', 'chat.done', 'error', 'ping'];
494
- if (!validEvents.includes(event.event)) {
495
- throw ErrorUtils.createError(`Invalid SSE event type: ${event.event}`, CHAT_CONVERSION_ERROR_CODES.VALIDATION_ERROR, { event });
496
- }
497
- }
498
- /**
499
- * 验证Chat chunk
500
- */
501
- validateChatChunk(chunk) {
502
- if (!chunk.object || chunk.object !== 'chat.completion.chunk') {
503
- throw ErrorUtils.createError('Invalid chat completion chunk object', CHAT_CONVERSION_ERROR_CODES.PARSE_ERROR, { chunk });
504
- }
505
- if (!Array.isArray(chunk.choices)) {
506
- throw ErrorUtils.createError('Chunk choices must be an array', CHAT_CONVERSION_ERROR_CODES.PARSE_ERROR, { chunk });
507
- }
508
- }
509
- /**
510
- * 更新统计信息
511
- */
512
- updateStats(context) {
513
- const now = TimeUtils.now();
514
- const duration = (now - context.eventStats.startTime) / 1000;
515
- context.eventStats.duration = duration;
516
- context.eventStats.chunkRate = context.eventStats.totalChunks / duration;
517
- context.eventStats.tokenRate = context.eventStats.totalTokens / duration;
518
- }
519
- /**
520
- * 获取转换统计
521
- */
522
- getStats(requestId) {
523
- const context = this.contexts.get(requestId);
524
- return context?.eventStats;
525
- }
526
- /**
527
- * 清理上下文
528
- */
529
- cleanup(requestId) {
530
- this.contexts.delete(requestId);
531
- }
532
- /**
533
- * 清理所有上下文
534
- */
535
- cleanupAll() {
536
- this.contexts.clear();
537
- }
538
- }
539
- // 创建默认转换器实例
540
- export const defaultChatSseToJsonConverter = new ChatSseToJsonConverter();
@@ -1,6 +0,0 @@
1
- /**
2
- * SSE→JSON转换模块导出
3
- */
4
- export { ChatSseToJsonConverter, defaultChatSseToJsonConverter } from './chat-sse-to-json-converter.js';
5
- export { ResponsesSseToJsonConverterRefactored as ResponsesSseToJsonConverter } from './responses-sse-to-json-converter.js';
6
- export type { SseToChatJsonOptions, SseToChatJsonContext, ChatEventStats, SseToResponsesJsonOptions, SseToResponsesJsonContext, ResponsesEventStats } from '../types/index.js';
@@ -1,7 +0,0 @@
1
- /**
2
- * SSE→JSON转换模块导出
3
- */
4
- // Chat协议转换器
5
- export { ChatSseToJsonConverter, defaultChatSseToJsonConverter } from './chat-sse-to-json-converter.js';
6
- // Responses协议转换器(重构版本)
7
- export { ResponsesSseToJsonConverterRefactored as ResponsesSseToJsonConverter } from './responses-sse-to-json-converter.js';