@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,782 +0,0 @@
1
- /**
2
- * 错误处理工具函数
3
- */
4
- /**
5
- * LLMSwitch错误类型
6
- */
7
- export var LLMSwitchErrorType;
8
- (function (LLMSwitchErrorType) {
9
- // 请求相关错误
10
- LLMSwitchErrorType["VALIDATION_ERROR"] = "validation_error";
11
- LLMSwitchErrorType["INVALID_REQUEST_FORMAT"] = "invalid_request_format";
12
- LLMSwitchErrorType["MISSING_REQUIRED_FIELD"] = "missing_required_field";
13
- // 处理相关错误
14
- LLMSwitchErrorType["PROCESSING_ERROR"] = "processing_error";
15
- LLMSwitchErrorType["HOOK_EXECUTION_ERROR"] = "hook_execution_error";
16
- LLMSwitchErrorType["TRANSFORMATION_ERROR"] = "transformation_error";
17
- // 网络相关错误
18
- LLMSwitchErrorType["NETWORK_ERROR"] = "network_error";
19
- LLMSwitchErrorType["TIMEOUT_ERROR"] = "timeout_error";
20
- LLMSwitchErrorType["CONNECTION_ERROR"] = "connection_error";
21
- // 端点相关错误
22
- LLMSwitchErrorType["ENDPOINT_NOT_FOUND"] = "endpoint_not_found";
23
- LLMSwitchErrorType["ENDPOINT_UNAVAILABLE"] = "endpoint_unavailable";
24
- LLMSwitchErrorType["UNSUPPORTED_PROTOCOL"] = "unsupported_protocol";
25
- // 系统相关错误
26
- LLMSwitchErrorType["MEMORY_ERROR"] = "memory_error";
27
- LLMSwitchErrorType["CONFIGURATION_ERROR"] = "configuration_error";
28
- LLMSwitchErrorType["INTERNAL_ERROR"] = "internal_error";
29
- // 流式相关错误
30
- LLMSwitchErrorType["STREAM_ERROR"] = "stream_error";
31
- LLMSwitchErrorType["SSE_ERROR"] = "sse_error";
32
- })(LLMSwitchErrorType || (LLMSwitchErrorType = {}));
33
- /**
34
- * 错误严重程度
35
- */
36
- export var ErrorSeverity;
37
- (function (ErrorSeverity) {
38
- ErrorSeverity["LOW"] = "low";
39
- ErrorSeverity["MEDIUM"] = "medium";
40
- ErrorSeverity["HIGH"] = "high";
41
- ErrorSeverity["CRITICAL"] = "critical";
42
- })(ErrorSeverity || (ErrorSeverity = {}));
43
- /**
44
- * 错误类型配置映射
45
- */
46
- export const ERROR_TYPE_CONFIG = new Map([
47
- // 请求相关错误 - 客户端问题
48
- [LLMSwitchErrorType.VALIDATION_ERROR, {
49
- severity: ErrorSeverity.LOW,
50
- httpStatus: 400,
51
- isRetryable: false,
52
- defaultMessage: 'Invalid request data'
53
- }],
54
- [LLMSwitchErrorType.INVALID_REQUEST_FORMAT, {
55
- severity: ErrorSeverity.LOW,
56
- httpStatus: 400,
57
- isRetryable: false,
58
- defaultMessage: 'Invalid request format'
59
- }],
60
- [LLMSwitchErrorType.MISSING_REQUIRED_FIELD, {
61
- severity: ErrorSeverity.LOW,
62
- httpStatus: 400,
63
- isRetryable: false,
64
- defaultMessage: 'Missing required field'
65
- }],
66
- // 处理相关错误 - 服务端问题
67
- [LLMSwitchErrorType.PROCESSING_ERROR, {
68
- severity: ErrorSeverity.HIGH,
69
- httpStatus: 500,
70
- isRetryable: true,
71
- defaultMessage: 'Request processing failed'
72
- }],
73
- [LLMSwitchErrorType.HOOK_EXECUTION_ERROR, {
74
- severity: ErrorSeverity.MEDIUM,
75
- httpStatus: 500,
76
- isRetryable: true,
77
- defaultMessage: 'Hook execution failed'
78
- }],
79
- [LLMSwitchErrorType.TRANSFORMATION_ERROR, {
80
- severity: ErrorSeverity.HIGH,
81
- httpStatus: 500,
82
- isRetryable: true,
83
- defaultMessage: 'Data transformation failed'
84
- }],
85
- // 网络相关错误 - 可能重试
86
- [LLMSwitchErrorType.NETWORK_ERROR, {
87
- severity: ErrorSeverity.MEDIUM,
88
- httpStatus: 503,
89
- isRetryable: true,
90
- defaultMessage: 'Network connection failed'
91
- }],
92
- [LLMSwitchErrorType.TIMEOUT_ERROR, {
93
- severity: ErrorSeverity.MEDIUM,
94
- httpStatus: 408,
95
- isRetryable: true,
96
- defaultMessage: 'Request timeout'
97
- }],
98
- [LLMSwitchErrorType.CONNECTION_ERROR, {
99
- severity: ErrorSeverity.MEDIUM,
100
- httpStatus: 503,
101
- isRetryable: true,
102
- defaultMessage: 'Connection failed'
103
- }],
104
- // 端点相关错误
105
- [LLMSwitchErrorType.ENDPOINT_NOT_FOUND, {
106
- severity: ErrorSeverity.MEDIUM,
107
- httpStatus: 404,
108
- isRetryable: false,
109
- defaultMessage: 'Endpoint not found'
110
- }],
111
- [LLMSwitchErrorType.ENDPOINT_UNAVAILABLE, {
112
- severity: ErrorSeverity.HIGH,
113
- httpStatus: 503,
114
- isRetryable: true,
115
- defaultMessage: 'Endpoint unavailable'
116
- }],
117
- [LLMSwitchErrorType.UNSUPPORTED_PROTOCOL, {
118
- severity: ErrorSeverity.LOW,
119
- httpStatus: 400,
120
- isRetryable: false,
121
- defaultMessage: 'Unsupported protocol'
122
- }],
123
- // 系统相关错误 - 严重问题
124
- [LLMSwitchErrorType.MEMORY_ERROR, {
125
- severity: ErrorSeverity.CRITICAL,
126
- httpStatus: 503,
127
- isRetryable: true,
128
- defaultMessage: 'Insufficient memory'
129
- }],
130
- [LLMSwitchErrorType.CONFIGURATION_ERROR, {
131
- severity: ErrorSeverity.CRITICAL,
132
- httpStatus: 500,
133
- isRetryable: false,
134
- defaultMessage: 'Configuration error'
135
- }],
136
- [LLMSwitchErrorType.INTERNAL_ERROR, {
137
- severity: ErrorSeverity.CRITICAL,
138
- httpStatus: 500,
139
- isRetryable: true,
140
- defaultMessage: 'Internal server error'
141
- }],
142
- // 流式相关错误
143
- [LLMSwitchErrorType.STREAM_ERROR, {
144
- severity: ErrorSeverity.HIGH,
145
- httpStatus: 500,
146
- isRetryable: true,
147
- defaultMessage: 'Stream processing error'
148
- }],
149
- [LLMSwitchErrorType.SSE_ERROR, {
150
- severity: ErrorSeverity.MEDIUM,
151
- httpStatus: 500,
152
- isRetryable: true,
153
- defaultMessage: 'Server-sent events error'
154
- }]
155
- ]);
156
- /**
157
- * LLMSwitch自定义错误类
158
- */
159
- export class LLMSwitchError extends Error {
160
- type;
161
- code;
162
- requestId;
163
- endpoint;
164
- stage;
165
- originalError;
166
- context;
167
- timestamp;
168
- severity;
169
- httpStatus;
170
- isRetryable;
171
- constructor(type, message, options = {}) {
172
- super(message);
173
- this.name = 'LLMSwitchError';
174
- this.type = type;
175
- this.code = options.code || type;
176
- this.requestId = options.requestId;
177
- this.endpoint = options.endpoint;
178
- this.stage = options.stage;
179
- this.originalError = options.originalError;
180
- this.context = options.context;
181
- this.timestamp = Date.now();
182
- // 从配置映射获取错误属性
183
- const config = ERROR_TYPE_CONFIG.get(type);
184
- if (config) {
185
- this.severity = config.severity;
186
- this.httpStatus = config.httpStatus;
187
- this.isRetryable = config.isRetryable;
188
- }
189
- else {
190
- // 默认配置
191
- this.severity = ErrorSeverity.MEDIUM;
192
- this.httpStatus = 500;
193
- this.isRetryable = false;
194
- }
195
- // 保持堆栈跟踪
196
- if (Error.captureStackTrace) {
197
- Error.captureStackTrace(this, LLMSwitchError);
198
- }
199
- }
200
- /**
201
- * 转换为JSON格式
202
- */
203
- toJSON() {
204
- return {
205
- name: this.name,
206
- type: this.type,
207
- code: this.code,
208
- message: this.message,
209
- requestId: this.requestId,
210
- endpoint: this.endpoint,
211
- stage: this.stage,
212
- context: this.context,
213
- timestamp: this.timestamp,
214
- severity: this.severity,
215
- httpStatus: this.httpStatus,
216
- isRetryable: this.isRetryable,
217
- stack: this.stack,
218
- originalError: this.originalError ? {
219
- name: this.originalError.name,
220
- message: this.originalError.message,
221
- stack: this.originalError.stack
222
- } : undefined
223
- };
224
- }
225
- /**
226
- * 转换为标准HTTP错误响应格式
227
- */
228
- toErrorResponse() {
229
- return {
230
- success: false,
231
- error: {
232
- type: this.type,
233
- code: this.code,
234
- message: this.message,
235
- severity: this.severity,
236
- requestId: this.requestId,
237
- endpoint: this.endpoint,
238
- stage: this.stage,
239
- timestamp: this.timestamp,
240
- context: this.context
241
- }
242
- };
243
- }
244
- /**
245
- * 转换为API错误响应格式(兼容旧版本)
246
- */
247
- toAPIResponse() {
248
- return this.toErrorResponse();
249
- }
250
- }
251
- /**
252
- * 错误工厂类
253
- */
254
- export class ErrorFactory {
255
- /**
256
- * 创建验证错误
257
- */
258
- static validationError(message, field, context) {
259
- return new LLMSwitchError(LLMSwitchErrorType.VALIDATION_ERROR, message, {
260
- code: 'validation_failed',
261
- context: { field, ...context }
262
- });
263
- }
264
- /**
265
- * 创建请求格式错误
266
- */
267
- static invalidRequestFormat(message, context) {
268
- return new LLMSwitchError(LLMSwitchErrorType.INVALID_REQUEST_FORMAT, message, {
269
- code: 'invalid_format',
270
- context
271
- });
272
- }
273
- /**
274
- * 创建缺失字段错误
275
- */
276
- static missingRequiredField(field, context) {
277
- return new LLMSwitchError(LLMSwitchErrorType.MISSING_REQUIRED_FIELD, `Missing required field: ${field}`, {
278
- code: 'missing_field',
279
- context: { field, ...context }
280
- });
281
- }
282
- /**
283
- * 创建处理错误
284
- */
285
- static processingError(message, originalError, context) {
286
- return new LLMSwitchError(LLMSwitchErrorType.PROCESSING_ERROR, message, {
287
- code: 'processing_failed',
288
- originalError,
289
- context
290
- });
291
- }
292
- /**
293
- * 创建Hook执行错误
294
- */
295
- static hookExecutionError(stage, message, originalError, context) {
296
- return new LLMSwitchError(LLMSwitchErrorType.HOOK_EXECUTION_ERROR, `Hook execution failed at ${stage}: ${message}`, {
297
- code: 'hook_failed',
298
- stage,
299
- originalError,
300
- context
301
- });
302
- }
303
- /**
304
- * 创建转换错误
305
- */
306
- static transformationError(message, fromProtocol, toProtocol, context) {
307
- return new LLMSwitchError(LLMSwitchErrorType.TRANSFORMATION_ERROR, message, {
308
- code: 'transformation_failed',
309
- context: { fromProtocol, toProtocol, ...context }
310
- });
311
- }
312
- /**
313
- * 创建网络错误
314
- */
315
- static networkError(message, url, statusCode, context) {
316
- return new LLMSwitchError(LLMSwitchErrorType.NETWORK_ERROR, message, {
317
- code: 'network_failed',
318
- context: { url, statusCode, ...context }
319
- });
320
- }
321
- /**
322
- * 创建超时错误
323
- */
324
- static timeoutError(operation, timeout, context) {
325
- return new LLMSwitchError(LLMSwitchErrorType.TIMEOUT_ERROR, `Operation ${operation} timed out after ${timeout}ms`, {
326
- code: 'timeout',
327
- context: { operation, timeout, ...context }
328
- });
329
- }
330
- /**
331
- * 创建连接错误
332
- */
333
- static connectionError(message, endpoint, context) {
334
- return new LLMSwitchError(LLMSwitchErrorType.CONNECTION_ERROR, message, {
335
- code: 'connection_failed',
336
- context: { endpoint, ...context }
337
- });
338
- }
339
- /**
340
- * 创建端点未找到错误
341
- */
342
- static endpointNotFound(endpoint, context) {
343
- return new LLMSwitchError(LLMSwitchErrorType.ENDPOINT_NOT_FOUND, `Endpoint not found: ${endpoint}`, {
344
- code: 'endpoint_not_found',
345
- context: { endpoint, ...context }
346
- });
347
- }
348
- /**
349
- * 创建端点不可用错误
350
- */
351
- static endpointUnavailable(endpoint, reason, context) {
352
- return new LLMSwitchError(LLMSwitchErrorType.ENDPOINT_UNAVAILABLE, `Endpoint ${endpoint} unavailable${reason ? `: ${reason}` : ''}`, {
353
- code: 'endpoint_unavailable',
354
- context: { endpoint, reason, ...context }
355
- });
356
- }
357
- /**
358
- * 创建不支持的协议错误
359
- */
360
- static unsupportedProtocol(protocol, supportedProtocols, context) {
361
- return new LLMSwitchError(LLMSwitchErrorType.UNSUPPORTED_PROTOCOL, `Unsupported protocol: ${protocol}`, {
362
- code: 'unsupported_protocol',
363
- context: { protocol, supportedProtocols, ...context }
364
- });
365
- }
366
- /**
367
- * 创建内存错误
368
- */
369
- static memoryError(message, usage, context) {
370
- return new LLMSwitchError(LLMSwitchErrorType.MEMORY_ERROR, message, {
371
- code: 'memory_error',
372
- context: { usage, ...context }
373
- });
374
- }
375
- /**
376
- * 创建配置错误
377
- */
378
- static configurationError(message, configPath, context) {
379
- return new LLMSwitchError(LLMSwitchErrorType.CONFIGURATION_ERROR, message, {
380
- code: 'configuration_error',
381
- context: { configPath, ...context }
382
- });
383
- }
384
- /**
385
- * 创建内部错误
386
- */
387
- static internalError(message, originalError, context) {
388
- return new LLMSwitchError(LLMSwitchErrorType.INTERNAL_ERROR, `Internal error: ${message}`, {
389
- code: 'internal_error',
390
- originalError,
391
- context
392
- });
393
- }
394
- /**
395
- * 创建流式错误
396
- */
397
- static streamError(message, context) {
398
- return new LLMSwitchError(LLMSwitchErrorType.STREAM_ERROR, message, {
399
- code: 'stream_failed',
400
- context
401
- });
402
- }
403
- /**
404
- * 创建SSE错误
405
- */
406
- static sseError(message, context) {
407
- return new LLMSwitchError(LLMSwitchErrorType.SSE_ERROR, message, {
408
- code: 'sse_failed',
409
- context
410
- });
411
- }
412
- }
413
- /**
414
- * 错误处理器
415
- */
416
- export class ErrorHandler {
417
- static errorHandlers = new Map();
418
- static errorLog = [];
419
- /**
420
- * 注册错误处理器
421
- */
422
- static registerHandler(errorType, handler) {
423
- this.errorHandlers.set(errorType, handler);
424
- }
425
- /**
426
- * 处理错误
427
- */
428
- static handle(error, context) {
429
- let llmswitchError;
430
- if (error instanceof LLMSwitchError) {
431
- llmswitchError = error;
432
- }
433
- else {
434
- // 转换普通错误为LLMSwitchError
435
- llmswitchError = new LLMSwitchError(LLMSwitchErrorType.INTERNAL_ERROR, error.message, {
436
- originalError: error,
437
- ...context
438
- });
439
- }
440
- // 添加上下文信息
441
- if (context) {
442
- if (context.requestId && !llmswitchError.requestId) {
443
- llmswitchError.requestId = context.requestId;
444
- }
445
- if (context.endpoint && !llmswitchError.endpoint) {
446
- llmswitchError.endpoint = context.endpoint;
447
- }
448
- if (context.stage && !llmswitchError.stage) {
449
- llmswitchError.stage = context.stage;
450
- }
451
- }
452
- // 记录错误
453
- this.logError(llmswitchError);
454
- // 执行注册的错误处理器
455
- const handler = this.errorHandlers.get(llmswitchError.type);
456
- if (handler) {
457
- try {
458
- handler(llmswitchError);
459
- }
460
- catch (handlerError) {
461
- console.error('Error handler failed:', handlerError);
462
- }
463
- }
464
- return llmswitchError;
465
- }
466
- /**
467
- * 记录错误
468
- */
469
- static logError(error) {
470
- this.errorLog.push({
471
- error,
472
- timestamp: Date.now()
473
- });
474
- // 保持最近1000个错误记录
475
- if (this.errorLog.length > 1000) {
476
- this.errorLog = this.errorLog.slice(-1000);
477
- }
478
- // 输出到控制台
479
- console.error(`[${new Date().toISOString()}] LLMSwitchError:`, {
480
- type: error.type,
481
- code: error.code,
482
- message: error.message,
483
- requestId: error.requestId,
484
- endpoint: error.endpoint,
485
- stage: error.stage,
486
- context: error.context
487
- });
488
- }
489
- /**
490
- * 获取错误日志
491
- */
492
- static getErrorLog(filter) {
493
- let log = this.errorLog;
494
- if (filter) {
495
- if (filter.errorType) {
496
- log = log.filter(entry => entry.error.type === filter.errorType);
497
- }
498
- if (filter.since) {
499
- log = log.filter(entry => entry.timestamp >= filter.since);
500
- }
501
- if (filter.requestId) {
502
- log = log.filter(entry => entry.error.requestId === filter.requestId);
503
- }
504
- if (filter.endpoint) {
505
- log = log.filter(entry => entry.error.endpoint === filter.endpoint);
506
- }
507
- }
508
- return log;
509
- }
510
- /**
511
- * 获取错误统计
512
- */
513
- static getErrorStats() {
514
- const byType = {};
515
- const byEndpoint = {};
516
- const byStage = {};
517
- for (const entry of this.errorLog) {
518
- // 按类型统计
519
- byType[entry.error.type] = (byType[entry.error.type] || 0) + 1;
520
- // 按端点统计
521
- if (entry.error.endpoint) {
522
- byEndpoint[entry.error.endpoint] = (byEndpoint[entry.error.endpoint] || 0) + 1;
523
- }
524
- // 按阶段统计
525
- if (entry.error.stage) {
526
- byStage[entry.error.stage] = (byStage[entry.error.stage] || 0) + 1;
527
- }
528
- }
529
- return {
530
- total: this.errorLog.length,
531
- byType,
532
- byEndpoint,
533
- byStage,
534
- recentErrors: this.errorLog.slice(-10) // 最近10个错误
535
- };
536
- }
537
- /**
538
- * 清理错误日志
539
- */
540
- static clearErrorLog() {
541
- this.errorLog = [];
542
- }
543
- /**
544
- * 清理过期错误记录
545
- */
546
- static cleanup(maxAge = 3600000) {
547
- const cutoff = Date.now() - maxAge;
548
- this.errorLog = this.errorLog.filter(entry => entry.timestamp >= cutoff);
549
- }
550
- }
551
- /**
552
- * 错误恢复工具
553
- */
554
- export class ErrorRecovery {
555
- static recoveryStrategies = new Map();
556
- /**
557
- * 注册恢复策略
558
- */
559
- static registerStrategy(errorType, strategy) {
560
- this.recoveryStrategies.set(errorType, strategy);
561
- }
562
- /**
563
- * 尝试错误恢复
564
- */
565
- static async attemptRecovery(error, context) {
566
- const strategy = this.recoveryStrategies.get(error.type);
567
- if (!strategy) {
568
- return { success: false, action: 'no_strategy' };
569
- }
570
- try {
571
- return await strategy.recover(error, context);
572
- }
573
- catch (recoveryError) {
574
- return {
575
- success: false,
576
- action: 'recovery_failed',
577
- error: recoveryError instanceof Error ? recoveryError : new Error('Unknown recovery error')
578
- };
579
- }
580
- }
581
- /**
582
- * 获取所有恢复策略
583
- */
584
- static getStrategies() {
585
- return new Map(this.recoveryStrategies);
586
- }
587
- }
588
- /**
589
- * 默认恢复策略
590
- */
591
- export class DefaultRecoveryStrategies {
592
- /**
593
- * 网络错误恢复策略
594
- */
595
- static networkErrorStrategy = {
596
- maxAttempts: 3,
597
- canRecover: (error) => error.type === LLMSwitchErrorType.NETWORK_ERROR,
598
- recover: async (error, context) => {
599
- const attempt = context?.attempt || 1;
600
- if (attempt > 3) {
601
- return { success: false, action: 'max_attempts_reached' };
602
- }
603
- // 等待一段时间后重试
604
- await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 1000));
605
- return {
606
- success: true,
607
- action: 'retry',
608
- data: { attempt: attempt + 1 }
609
- };
610
- }
611
- };
612
- /**
613
- * 超时错误恢复策略
614
- */
615
- static timeoutErrorStrategy = {
616
- maxAttempts: 2,
617
- canRecover: (error) => error.type === LLMSwitchErrorType.TIMEOUT_ERROR,
618
- recover: async (error, context) => {
619
- const attempt = context?.attempt || 1;
620
- if (attempt > 2) {
621
- return { success: false, action: 'max_attempts_reached' };
622
- }
623
- // 增加超时时间后重试
624
- const newTimeout = (context?.timeout || 30000) * 1.5;
625
- return {
626
- success: true,
627
- action: 'retry_with_timeout',
628
- data: { attempt: attempt + 1, timeout: newTimeout }
629
- };
630
- }
631
- };
632
- /**
633
- * 内存错误恢复策略
634
- */
635
- static memoryErrorStrategy = {
636
- canRecover: (error) => error.type === LLMSwitchErrorType.MEMORY_ERROR,
637
- recover: async (error, context) => {
638
- // 强制垃圾回收
639
- if (global.gc) {
640
- global.gc();
641
- }
642
- // 等待一段时间让内存释放
643
- await new Promise(resolve => setTimeout(resolve, 1000));
644
- return {
645
- success: true,
646
- action: 'garbage_collection'
647
- };
648
- }
649
- };
650
- /**
651
- * 注册所有默认策略
652
- */
653
- static registerAll() {
654
- ErrorRecovery.registerStrategy(LLMSwitchErrorType.NETWORK_ERROR, this.networkErrorStrategy);
655
- ErrorRecovery.registerStrategy(LLMSwitchErrorType.TIMEOUT_ERROR, this.timeoutErrorStrategy);
656
- ErrorRecovery.registerStrategy(LLMSwitchErrorType.MEMORY_ERROR, this.memoryErrorStrategy);
657
- }
658
- }
659
- // 注册默认恢复策略
660
- DefaultRecoveryStrategies.registerAll();
661
- /**
662
- * 全局错误响应助手类
663
- */
664
- export class ErrorMapper {
665
- /**
666
- * 将错误转换为标准HTTP响应
667
- */
668
- static toHTTPResponse(error, requestId) {
669
- let llmswitchError;
670
- if (error instanceof LLMSwitchError) {
671
- llmswitchError = error;
672
- }
673
- else {
674
- llmswitchError = ErrorHandler.handle(error, { requestId });
675
- }
676
- const errorResponse = llmswitchError.toErrorResponse();
677
- return {
678
- statusCode: llmswitchError.httpStatus,
679
- body: errorResponse,
680
- headers: {
681
- 'Content-Type': 'application/json',
682
- 'X-Error-Type': llmswitchError.type,
683
- 'X-Error-Severity': llmswitchError.severity,
684
- 'X-Request-ID': llmswitchError.requestId || requestId || 'unknown'
685
- }
686
- };
687
- }
688
- /**
689
- * 发送HTTP错误响应
690
- */
691
- static sendErrorResponse(res, error, requestId) {
692
- const { statusCode, body, headers } = this.toHTTPResponse(error, requestId);
693
- // 设置响应头
694
- Object.entries(headers).forEach(([key, value]) => {
695
- res.setHeader(key, value);
696
- });
697
- res.writeHead(statusCode);
698
- res.end(JSON.stringify(body));
699
- }
700
- }
701
- /**
702
- * 流式错误处理助手
703
- */
704
- export class StreamErrorHandler {
705
- /**
706
- * 处理流式过程中的错误
707
- */
708
- static handleStreamError(error, stream, context) {
709
- const llmswitchError = ErrorHandler.handle(error, context);
710
- // 尝试写入错误事件到流
711
- try {
712
- if (stream && !stream.destroyed) {
713
- const errorEvent = {
714
- type: 'error',
715
- error: llmswitchError.toErrorResponse().error
716
- };
717
- stream.write(`data: ${JSON.stringify(errorEvent)}\n\n`);
718
- // 关闭流
719
- stream.end();
720
- }
721
- }
722
- catch (writeError) {
723
- console.error('Failed to write error to stream:', writeError);
724
- }
725
- // 记录错误
726
- console.error(`Stream error [${context.requestId}]:`, {
727
- error: llmswitchError,
728
- context
729
- });
730
- }
731
- /**
732
- * 安全地包装流式操作
733
- */
734
- static async wrapStreamOperation(operation, stream, context) {
735
- try {
736
- return await operation();
737
- }
738
- catch (error) {
739
- this.handleStreamError(error, stream, context);
740
- throw error; // 重新抛出以供上层处理
741
- }
742
- }
743
- }
744
- /**
745
- * 安全JSON解析助手
746
- */
747
- export class SafeJSONParser {
748
- /**
749
- * 安全解析JSON,失败时抛出结构化错误
750
- */
751
- static parse(jsonString, context) {
752
- try {
753
- return JSON.parse(jsonString);
754
- }
755
- catch (error) {
756
- const errorMessage = context.field
757
- ? `Invalid JSON in field '${context.field}': ${error.message}`
758
- : `Invalid JSON: ${error.message}`;
759
- throw ErrorHandler.handle(error, {
760
- requestId: context.requestId,
761
- stage: context.stage || 'json_parsing'
762
- });
763
- }
764
- }
765
- /**
766
- * 安全字符串化JSON,失败时抛出结构化错误
767
- */
768
- static stringify(obj, context) {
769
- try {
770
- return JSON.stringify(obj);
771
- }
772
- catch (error) {
773
- const errorMessage = context.field
774
- ? `Failed to serialize field '${context.field}': ${error.message}`
775
- : `Failed to serialize object: ${error.message}`;
776
- throw ErrorHandler.handle(error, {
777
- requestId: context.requestId,
778
- stage: context.stage || 'json_stringification'
779
- });
780
- }
781
- }
782
- }