@jsonstudio/llms 0.4.3 → 0.4.4

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