@jsonstudio/llms 0.4.2 → 0.4.4

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