@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.
- package/README.md +3 -1
- package/dist/bridge/routecodex-adapter.js +6 -3
- package/dist/config-unified/enhanced-path-resolver.js +14 -6
- package/dist/config-unified/unified-config.js +103 -59
- package/dist/conversion/codec-registry.js +4 -2
- package/dist/conversion/hub/pipeline/hub-pipeline.js +4 -5
- package/dist/conversion/hub/process/chat-process.js +258 -41
- package/dist/conversion/hub/response/provider-response.js +8 -2
- package/dist/conversion/hub/tool-governance/engine.d.ts +16 -0
- package/dist/conversion/hub/tool-governance/engine.js +266 -0
- package/dist/conversion/hub/tool-governance/index.d.ts +3 -0
- package/dist/conversion/hub/tool-governance/index.js +2 -0
- package/dist/conversion/hub/tool-governance/rules.d.ts +2 -0
- package/dist/conversion/hub/tool-governance/rules.js +76 -0
- package/dist/conversion/hub/tool-governance/types.d.ts +38 -0
- package/dist/conversion/index.d.ts +1 -0
- package/dist/conversion/index.js +1 -0
- package/dist/conversion/responses/responses-openai-bridge.js +5 -3
- package/dist/conversion/shared/responses-id-utils.js +18 -5
- package/dist/sse/sse-to-json/builders/response-builder.js +2 -1
- package/dist/sse/sse-to-json/chat-sse-to-json-converter.js +37 -23
- package/dist/sse/sse-to-json/parsers/sse-parser.js +20 -12
- package/dist/sse/sse-to-json/responses-sse-to-json-converter.d.ts +1 -0
- package/dist/sse/sse-to-json/responses-sse-to-json-converter.js +10 -8
- package/dist/sse/types/chat-types.d.ts +9 -6
- package/dist/sse/types/conversion-context.d.ts +14 -11
- package/dist/sse/types/core-interfaces.d.ts +6 -2
- package/dist/sse/types/index.d.ts +1 -1
- package/dist/sse/types/responses-types.d.ts +20 -20
- package/dist/sse/types/sse-events.d.ts +4 -3
- package/dist/sse/types/stream-state.d.ts +34 -39
- package/dist/sse/types/utility-types.d.ts +47 -43
- package/dist/sse/types/utility-types.js +10 -13
- package/dist/tools/tool-registry.js +156 -98
- package/package.json +6 -6
- package/dist/api/index.d.ts +0 -10
- package/dist/api/index.js +0 -11
- package/dist/api/llmswitch-config.d.ts +0 -15
- package/dist/api/llmswitch-config.js +0 -415
- package/dist/api/llmswitch-types.d.ts +0 -412
- package/dist/api/llmswitch-types.js +0 -60
- package/dist/bridge/routecodex-adapter.d.ts +0 -74
- package/dist/config/index.d.ts +0 -3
- package/dist/config/index.js +0 -5
- package/dist/config-unified/enhanced-path-resolver.d.ts +0 -5
- package/dist/config-unified/unified-config.d.ts +0 -26
- package/dist/conversion/codec-registry.d.ts +0 -10
- package/dist/conversion/codecs/anthropic-openai-codec.d.ts +0 -23
- package/dist/conversion/codecs/gemini-openai-codec.d.ts +0 -16
- package/dist/conversion/codecs/openai-openai-codec.d.ts +0 -12
- package/dist/conversion/codecs/responses-openai-codec.d.ts +0 -12
- package/dist/conversion/config/config-manager.d.ts +0 -212
- package/dist/conversion/conversion-v3/adapters/index.d.ts +0 -2
- package/dist/conversion/conversion-v3/adapters/index.js +0 -1
- package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.d.ts +0 -38
- package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.js +0 -55
- package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.d.ts +0 -22
- package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.js +0 -84
- package/dist/conversion/conversion-v3/compatibility/compatibility-stages.d.ts +0 -4
- package/dist/conversion/conversion-v3/compatibility/compatibility-stages.js +0 -285
- package/dist/conversion/conversion-v3/compatibility/index.d.ts +0 -3
- package/dist/conversion/conversion-v3/compatibility/index.js +0 -2
- package/dist/conversion/conversion-v3/config/default-configs.d.ts +0 -48
- package/dist/conversion/conversion-v3/config/default-configs.js +0 -1083
- package/dist/conversion/conversion-v3/config/index.d.ts +0 -5
- package/dist/conversion/conversion-v3/config/index.js +0 -5
- package/dist/conversion/conversion-v3/config/pipeline-config-manager.d.ts +0 -49
- package/dist/conversion/conversion-v3/config/pipeline-config-manager.js +0 -65
- package/dist/conversion/conversion-v3/index.d.ts +0 -11
- package/dist/conversion/conversion-v3/index.js +0 -17
- package/dist/conversion/conversion-v3/nodes/index.d.ts +0 -56
- package/dist/conversion/conversion-v3/nodes/index.js +0 -149
- package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.d.ts +0 -25
- package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.js +0 -56
- package/dist/conversion/conversion-v3/nodes/input/base-input-node.d.ts +0 -75
- package/dist/conversion/conversion-v3/nodes/input/base-input-node.js +0 -237
- package/dist/conversion/conversion-v3/nodes/input/chat-input-node.d.ts +0 -25
- package/dist/conversion/conversion-v3/nodes/input/chat-input-node.js +0 -56
- package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.d.ts +0 -4
- package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.js +0 -197
- package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.d.ts +0 -16
- package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.js +0 -125
- package/dist/conversion/conversion-v3/nodes/input/index.d.ts +0 -8
- package/dist/conversion/conversion-v3/nodes/input/index.js +0 -8
- package/dist/conversion/conversion-v3/nodes/input/input-decision.d.ts +0 -46
- package/dist/conversion/conversion-v3/nodes/input/input-decision.js +0 -125
- package/dist/conversion/conversion-v3/nodes/input/responses-input-node.d.ts +0 -20
- package/dist/conversion/conversion-v3/nodes/input/responses-input-node.js +0 -51
- package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.d.ts +0 -71
- package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.js +0 -320
- package/dist/conversion/conversion-v3/nodes/output/base-output-node.d.ts +0 -116
- package/dist/conversion/conversion-v3/nodes/output/base-output-node.js +0 -512
- package/dist/conversion/conversion-v3/nodes/output/index.d.ts +0 -7
- package/dist/conversion/conversion-v3/nodes/output/index.js +0 -7
- package/dist/conversion/conversion-v3/nodes/output/openai-output-node.d.ts +0 -71
- package/dist/conversion/conversion-v3/nodes/output/openai-output-node.js +0 -293
- package/dist/conversion/conversion-v3/nodes/output/output-decision.d.ts +0 -68
- package/dist/conversion/conversion-v3/nodes/output/output-decision.js +0 -161
- package/dist/conversion/conversion-v3/nodes/output/responses-output-node.d.ts +0 -64
- package/dist/conversion/conversion-v3/nodes/output/responses-output-node.js +0 -323
- package/dist/conversion/conversion-v3/nodes/process/base-process-node.d.ts +0 -72
- package/dist/conversion/conversion-v3/nodes/process/base-process-node.js +0 -246
- package/dist/conversion/conversion-v3/nodes/process/chat-process-node.d.ts +0 -135
- package/dist/conversion/conversion-v3/nodes/process/chat-process-node.js +0 -854
- package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.d.ts +0 -29
- package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.js +0 -181
- package/dist/conversion/conversion-v3/nodes/process/index.d.ts +0 -10
- package/dist/conversion/conversion-v3/nodes/process/index.js +0 -10
- package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.d.ts +0 -59
- package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.js +0 -243
- package/dist/conversion/conversion-v3/nodes/process/response-process-node.d.ts +0 -17
- package/dist/conversion/conversion-v3/nodes/process/response-process-node.js +0 -213
- package/dist/conversion/conversion-v3/nodes/process/tool-process-node.d.ts +0 -26
- package/dist/conversion/conversion-v3/nodes/process/tool-process-node.js +0 -299
- package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.d.ts +0 -40
- package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.js +0 -430
- package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.d.ts +0 -12
- package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.js +0 -129
- package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.d.ts +0 -15
- package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.js +0 -57
- package/dist/conversion/conversion-v3/nodes/response/index.d.ts +0 -4
- package/dist/conversion/conversion-v3/nodes/response/index.js +0 -4
- package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.d.ts +0 -15
- package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.js +0 -87
- package/dist/conversion/conversion-v3/nodes/response/response-utils.d.ts +0 -1
- package/dist/conversion/conversion-v3/nodes/response/response-utils.js +0 -1
- package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.d.ts +0 -12
- package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.js +0 -67
- package/dist/conversion/conversion-v3/nodes/sse/index.d.ts +0 -3
- package/dist/conversion/conversion-v3/nodes/sse/index.js +0 -3
- package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.d.ts +0 -27
- package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.js +0 -165
- package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.d.ts +0 -19
- package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.js +0 -267
- package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.d.ts +0 -18
- package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.js +0 -48
- package/dist/conversion/conversion-v3/pipelines/index.d.ts +0 -6
- package/dist/conversion/conversion-v3/pipelines/index.js +0 -6
- package/dist/conversion/conversion-v3/pipelines/super-pipeline.d.ts +0 -112
- package/dist/conversion/conversion-v3/pipelines/super-pipeline.js +0 -566
- package/dist/conversion/conversion-v3/response/provider-response-converter.d.ts +0 -28
- package/dist/conversion/conversion-v3/response/provider-response-converter.js +0 -249
- package/dist/conversion/conversion-v3/sse/index.d.ts +0 -140
- package/dist/conversion/conversion-v3/sse/index.js +0 -115
- package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +0 -11
- package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.js +0 -79
- package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.d.ts +0 -79
- package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.js +0 -296
- package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.d.ts +0 -55
- package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.js +0 -233
- package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.d.ts +0 -99
- package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.js +0 -599
- package/dist/conversion/conversion-v3/sse/json-to-sse/index.d.ts +0 -6
- package/dist/conversion/conversion-v3/sse/json-to-sse/index.js +0 -7
- package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.d.ts +0 -79
- package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.js +0 -322
- package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.d.ts +0 -37
- package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.js +0 -218
- package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.d.ts +0 -40
- package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.js +0 -263
- package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.d.ts +0 -32
- package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.js +0 -106
- package/dist/conversion/conversion-v3/sse/shared/chat-serializer.d.ts +0 -4
- package/dist/conversion/conversion-v3/sse/shared/chat-serializer.js +0 -40
- package/dist/conversion/conversion-v3/sse/shared/constants.d.ts +0 -272
- package/dist/conversion/conversion-v3/sse/shared/constants.js +0 -321
- package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.d.ts +0 -158
- package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.js +0 -210
- package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.d.ts +0 -82
- package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.js +0 -275
- package/dist/conversion/conversion-v3/sse/shared/serializers/index.d.ts +0 -39
- package/dist/conversion/conversion-v3/sse/shared/serializers/index.js +0 -54
- package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.d.ts +0 -123
- package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.js +0 -356
- package/dist/conversion/conversion-v3/sse/shared/serializers/types.d.ts +0 -51
- package/dist/conversion/conversion-v3/sse/shared/serializers/types.js +0 -4
- package/dist/conversion/conversion-v3/sse/shared/utils.d.ts +0 -254
- package/dist/conversion/conversion-v3/sse/shared/utils.js +0 -543
- package/dist/conversion/conversion-v3/sse/shared/writer.d.ts +0 -111
- package/dist/conversion/conversion-v3/sse/shared/writer.js +0 -268
- package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +0 -13
- package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.js +0 -139
- package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.d.ts +0 -165
- package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.js +0 -776
- package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.d.ts +0 -106
- package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.js +0 -540
- package/dist/conversion/conversion-v3/sse/sse-to-json/index.d.ts +0 -6
- package/dist/conversion/conversion-v3/sse/sse-to-json/index.js +0 -7
- package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.d.ts +0 -73
- package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.js +0 -332
- package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.d.ts +0 -59
- package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.js +0 -270
- package/dist/conversion/conversion-v3/sse/types/anthropic-types.d.ts +0 -87
- package/dist/conversion/conversion-v3/sse/types/anthropic-types.js +0 -5
- package/dist/conversion/conversion-v3/sse/types/chat-types.d.ts +0 -308
- package/dist/conversion/conversion-v3/sse/types/chat-types.js +0 -32
- package/dist/conversion/conversion-v3/sse/types/conversion-context.d.ts +0 -211
- package/dist/conversion/conversion-v3/sse/types/conversion-context.js +0 -20
- package/dist/conversion/conversion-v3/sse/types/core-interfaces.d.ts +0 -90
- package/dist/conversion/conversion-v3/sse/types/core-interfaces.js +0 -5
- package/dist/conversion/conversion-v3/sse/types/index.d.ts +0 -14
- package/dist/conversion/conversion-v3/sse/types/index.js +0 -7
- package/dist/conversion/conversion-v3/sse/types/responses-types.d.ts +0 -328
- package/dist/conversion/conversion-v3/sse/types/responses-types.js +0 -38
- package/dist/conversion/conversion-v3/sse/types/sse-events.d.ts +0 -180
- package/dist/conversion/conversion-v3/sse/types/sse-events.js +0 -150
- package/dist/conversion/conversion-v3/sse/types/stream-state.d.ts +0 -204
- package/dist/conversion/conversion-v3/sse/types/stream-state.js +0 -44
- package/dist/conversion/conversion-v3/sse/types/utility-types.d.ts +0 -230
- package/dist/conversion/conversion-v3/sse/types/utility-types.js +0 -49
- package/dist/conversion/conversion-v3/standards/context-adapter.d.ts +0 -146
- package/dist/conversion/conversion-v3/standards/context-adapter.js +0 -438
- package/dist/conversion/conversion-v3/standards/errors.d.ts +0 -38
- package/dist/conversion/conversion-v3/standards/errors.js +0 -27
- package/dist/conversion/conversion-v3/standards/index.d.ts +0 -15
- package/dist/conversion/conversion-v3/standards/index.js +0 -11
- package/dist/conversion/conversion-v3/standards/node-capabilities.d.ts +0 -123
- package/dist/conversion/conversion-v3/standards/node-capabilities.js +0 -330
- package/dist/conversion/conversion-v3/standards/pipeline-context.d.ts +0 -237
- package/dist/conversion/conversion-v3/standards/pipeline-context.js +0 -84
- package/dist/conversion/conversion-v3/standards/pipeline-node.d.ts +0 -196
- package/dist/conversion/conversion-v3/standards/pipeline-node.js +0 -316
- package/dist/conversion/conversion-v3/standards/snapshot-handles.d.ts +0 -24
- package/dist/conversion/conversion-v3/standards/snapshot-handles.js +0 -49
- package/dist/conversion/conversion-v3/types/config-types.d.ts +0 -242
- package/dist/conversion/conversion-v3/types/config-types.js +0 -13
- package/dist/conversion/conversion-v3/types/index.d.ts +0 -8
- package/dist/conversion/conversion-v3/types/index.js +0 -11
- package/dist/conversion/conversion-v3/types/node-types.d.ts +0 -211
- package/dist/conversion/conversion-v3/types/node-types.js +0 -20
- package/dist/conversion/conversion-v3/types/pipeline-types.d.ts +0 -246
- package/dist/conversion/conversion-v3/types/pipeline-types.js +0 -26
- package/dist/conversion/conversion-v3/types/request-types.d.ts +0 -293
- package/dist/conversion/conversion-v3/types/request-types.js +0 -26
- package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.d.ts +0 -10
- package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.js +0 -103
- package/dist/conversion/conversion-v3/validations/index.d.ts +0 -8
- package/dist/conversion/conversion-v3/validations/index.js +0 -7
- package/dist/conversion/conversion-v3/validations/node-graph-validator.d.ts +0 -116
- package/dist/conversion/conversion-v3/validations/node-graph-validator.js +0 -505
- package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.d.ts +0 -139
- package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.js +0 -338
- package/dist/conversion/hub/config/types.d.ts +0 -26
- package/dist/conversion/hub/core/detour-registry.d.ts +0 -9
- package/dist/conversion/hub/core/hub-context.d.ts +0 -21
- package/dist/conversion/hub/core/index.d.ts +0 -3
- package/dist/conversion/hub/core/stage-driver.d.ts +0 -30
- package/dist/conversion/hub/format-adapters/anthropic-format-adapter.d.ts +0 -16
- package/dist/conversion/hub/format-adapters/chat-format-adapter.d.ts +0 -17
- package/dist/conversion/hub/format-adapters/gemini-format-adapter.d.ts +0 -16
- package/dist/conversion/hub/format-adapters/index.d.ts +0 -21
- package/dist/conversion/hub/format-adapters/responses-format-adapter.d.ts +0 -17
- package/dist/conversion/hub/hub-feature.d.ts +0 -1
- package/dist/conversion/hub/node-support.d.ts +0 -19
- package/dist/conversion/hub/pipeline/hub-pipeline.d.ts +0 -68
- package/dist/conversion/hub/pipelines/inbound.d.ts +0 -22
- package/dist/conversion/hub/pipelines/outbound.d.ts +0 -22
- package/dist/conversion/hub/process/chat-process.d.ts +0 -13
- package/dist/conversion/hub/registry.d.ts +0 -28
- package/dist/conversion/hub/response/chat-response-utils.d.ts +0 -6
- package/dist/conversion/hub/response/provider-response.d.ts +0 -20
- package/dist/conversion/hub/response/response-mappers.d.ts +0 -19
- package/dist/conversion/hub/response/response-runtime.d.ts +0 -3
- package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +0 -7
- package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +0 -7
- package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +0 -7
- package/dist/conversion/hub/semantic-mappers/index.d.ts +0 -4
- package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +0 -21
- package/dist/conversion/hub/snapshot-recorder.d.ts +0 -12
- package/dist/conversion/hub/standardized-bridge.d.ts +0 -12
- package/dist/conversion/hub/types/chat-envelope.d.ts +0 -67
- package/dist/conversion/hub/types/chat-schema.d.ts +0 -112
- package/dist/conversion/hub/types/errors.d.ts +0 -5
- package/dist/conversion/hub/types/format-envelope.d.ts +0 -7
- package/dist/conversion/hub/types/index.d.ts +0 -6
- package/dist/conversion/hub/types/json.d.ts +0 -9
- package/dist/conversion/hub/types/node.d.ts +0 -31
- package/dist/conversion/hub/types/standardized.d.ts +0 -94
- package/dist/conversion/responses/responses-openai-bridge.d.ts +0 -95
- package/dist/conversion/schema-validator.d.ts +0 -7
- package/dist/conversion/shared/args-mapping.d.ts +0 -18
- package/dist/conversion/shared/chat-request-filters.d.ts +0 -9
- package/dist/conversion/shared/jsonish.d.ts +0 -3
- package/dist/conversion/shared/mcp-injection.d.ts +0 -2
- package/dist/conversion/shared/media.d.ts +0 -1
- package/dist/conversion/shared/openai-finalizer.d.ts +0 -9
- package/dist/conversion/shared/openai-message-normalize.d.ts +0 -1
- package/dist/conversion/shared/payload-budget.d.ts +0 -13
- package/dist/conversion/shared/reasoning-mapping.d.ts +0 -5
- package/dist/conversion/shared/responses-conversation-store.d.ts +0 -41
- package/dist/conversion/shared/responses-id-utils.d.ts +0 -7
- package/dist/conversion/shared/responses-instructions.d.ts +0 -1
- package/dist/conversion/shared/responses-metadata.d.ts +0 -1
- package/dist/conversion/shared/responses-request-adapter.d.ts +0 -66
- package/dist/conversion/shared/snapshot-hooks.d.ts +0 -12
- package/dist/conversion/shared/streaming-text-extractor.d.ts +0 -26
- package/dist/conversion/shared/text-markup-normalizer.d.ts +0 -9
- package/dist/conversion/shared/tool-canonicalizer.d.ts +0 -2
- package/dist/conversion/shared/tool-filter-pipeline.d.ts +0 -17
- package/dist/conversion/shared/tool-governor.d.ts +0 -27
- package/dist/conversion/shared/tool-harvester.d.ts +0 -31
- package/dist/conversion/shared/tool-mapping.d.ts +0 -10
- package/dist/conversion/shared/tooling.d.ts +0 -26
- package/dist/conversion/types.d.ts +0 -33
- package/dist/core/index.d.ts +0 -6
- package/dist/core/index.js +0 -9
- package/dist/core/llmswitch-engine-v2.d.ts +0 -132
- package/dist/core/llmswitch-engine-v2.js +0 -649
- package/dist/core/llmswitch-factory-v2.d.ts +0 -123
- package/dist/core/llmswitch-factory-v2.js +0 -521
- package/dist/endpoints/base-endpoint-handler.d.ts +0 -128
- package/dist/endpoints/base-endpoint-handler.js +0 -545
- package/dist/endpoints/chat-endpoint-handler.d.ts +0 -115
- package/dist/endpoints/chat-endpoint-handler.js +0 -218
- package/dist/endpoints/endpoint-router.d.ts +0 -127
- package/dist/endpoints/endpoint-router.js +0 -438
- package/dist/endpoints/index.d.ts +0 -13
- package/dist/endpoints/index.js +0 -11
- package/dist/endpoints/messages-endpoint-handler.d.ts +0 -171
- package/dist/endpoints/messages-endpoint-handler.js +0 -238
- package/dist/endpoints/responses-endpoint-handler.d.ts +0 -147
- package/dist/endpoints/responses-endpoint-handler.js +0 -233
- package/dist/filters/builtin/add-fields-filter.d.ts +0 -8
- package/dist/filters/builtin/blacklist-filter.d.ts +0 -8
- package/dist/filters/builtin/whitelist-filter.d.ts +0 -8
- package/dist/filters/engine.d.ts +0 -16
- package/dist/filters/index.d.ts +0 -19
- package/dist/filters/special/request-streaming-to-nonstreaming.d.ts +0 -12
- package/dist/filters/special/request-tool-choice-policy.d.ts +0 -11
- package/dist/filters/special/request-tool-list-filter.d.ts +0 -11
- package/dist/filters/special/request-toolcalls-stringify.d.ts +0 -10
- package/dist/filters/special/request-tools-normalize.d.ts +0 -12
- package/dist/filters/special/response-finish-invariants.d.ts +0 -11
- package/dist/filters/special/response-openai-to-responses-bridge.d.ts +0 -13
- package/dist/filters/special/response-tool-arguments-blacklist.d.ts +0 -12
- package/dist/filters/special/response-tool-arguments-schema-converge.d.ts +0 -13
- package/dist/filters/special/response-tool-arguments-stringify.d.ts +0 -9
- package/dist/filters/special/response-tool-arguments-toon-decode.d.ts +0 -10
- package/dist/filters/special/response-tool-arguments-whitelist.d.ts +0 -11
- package/dist/filters/special/response-tool-text-canonicalize.d.ts +0 -10
- package/dist/filters/special/tool-filter-hooks.d.ts +0 -19
- package/dist/filters/special/tool-post-constraints.d.ts +0 -31
- package/dist/filters/types.d.ts +0 -68
- package/dist/filters/utils/fieldmap-loader.d.ts +0 -2
- package/dist/filters/utils/snapshot-writer.d.ts +0 -10
- package/dist/guidance/index.d.ts +0 -3
- package/dist/hooks/hooks-integration.d.ts +0 -161
- package/dist/hooks/hooks-integration.js +0 -519
- package/dist/hooks/index.d.ts +0 -10
- package/dist/hooks/index.js +0 -13
- package/dist/html-to-markdown.d.ts +0 -5
- package/dist/html-to-markdown.js +0 -66
- package/dist/http/sse-response.d.ts +0 -22
- package/dist/router/virtual-router/bootstrap.d.ts +0 -6
- package/dist/router/virtual-router/classifier.d.ts +0 -10
- package/dist/router/virtual-router/engine.d.ts +0 -35
- package/dist/router/virtual-router/error-center.d.ts +0 -10
- package/dist/router/virtual-router/features.d.ts +0 -3
- package/dist/router/virtual-router/health-manager.d.ts +0 -18
- package/dist/router/virtual-router/load-balancer.d.ts +0 -18
- package/dist/router/virtual-router/provider-registry.d.ts +0 -11
- package/dist/router/virtual-router/types.d.ts +0 -206
- package/dist/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +0 -11
- package/dist/sse/json-to-sse/chat-json-to-sse-converter.d.ts +0 -79
- package/dist/sse/json-to-sse/event-generators/chat.d.ts +0 -55
- package/dist/sse/json-to-sse/event-generators/responses.d.ts +0 -99
- package/dist/sse/json-to-sse/index.d.ts +0 -6
- package/dist/sse/json-to-sse/responses-json-to-sse-converter.d.ts +0 -79
- package/dist/sse/json-to-sse/sequencers/chat-sequencer.d.ts +0 -37
- package/dist/sse/json-to-sse/sequencers/responses-sequencer.d.ts +0 -40
- package/dist/sse/registry/sse-codec-registry.d.ts +0 -32
- package/dist/sse/shared/chat-serializer.d.ts +0 -4
- package/dist/sse/shared/constants.d.ts +0 -272
- package/dist/sse/shared/serializers/base-serializer.d.ts +0 -158
- package/dist/sse/shared/serializers/chat-event-serializer.d.ts +0 -82
- package/dist/sse/shared/serializers/index.d.ts +0 -39
- package/dist/sse/shared/serializers/responses-event-serializer.d.ts +0 -123
- package/dist/sse/shared/serializers/types.d.ts +0 -51
- package/dist/sse/shared/utils.d.ts +0 -254
- package/dist/sse/shared/writer.d.ts +0 -111
- package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +0 -13
- package/dist/sse/sse-to-json/builders/response-builder.d.ts +0 -165
- package/dist/sse/sse-to-json/chat-sse-to-json-converter.d.ts +0 -106
- package/dist/sse/sse-to-json/index.d.ts +0 -6
- package/dist/sse/sse-to-json/parsers/sse-parser.d.ts +0 -73
- package/dist/sse/types/anthropic-types.d.ts +0 -87
- package/dist/tools/proxy/anthropic-tool-proxy.d.ts +0 -19
- package/dist/tools/proxy/anthropic-tool-proxy.js +0 -57
- package/dist/tools/proxy/executors/web-fetch.d.ts +0 -6
- package/dist/tools/proxy/executors/web-fetch.js +0 -39
- package/dist/tools/proxy/registry.d.ts +0 -8
- package/dist/tools/proxy/registry.js +0 -14
- package/dist/tools/proxy/types.d.ts +0 -29
- package/dist/tools/tool-registry.d.ts +0 -8
- package/dist/tools/web-fetch-html.d.ts +0 -15
- package/dist/tools/web-fetch-html.js +0 -83
- package/dist/utils/conversion-adapter.d.ts +0 -65
- package/dist/utils/conversion-adapter.js +0 -183
- package/dist/utils/error-factory.d.ts +0 -88
- package/dist/utils/error-factory.js +0 -138
- package/dist/utils/error-utils.d.ts +0 -334
- package/dist/utils/error-utils.js +0 -782
- package/dist/utils/index.d.ts +0 -8
- package/dist/utils/index.js +0 -13
- package/dist/utils/performance-utils.d.ts +0 -205
- package/dist/utils/performance-utils.js +0 -440
- package/dist/utils/profile-mapper.d.ts +0 -32
- package/dist/utils/profile-mapper.js +0 -269
- package/dist/utils/request-processor.d.ts +0 -52
- package/dist/utils/request-processor.js +0 -210
- package/dist/utils/request-utils.d.ts +0 -117
- package/dist/utils/request-utils.js +0 -333
- package/dist/utils/response-utils.d.ts +0 -127
- package/dist/utils/response-utils.js +0 -516
- package/dist/utils/token-counter.d.ts +0 -89
- package/dist/utils/token-counter.js +0 -541
- /package/dist/{tools/proxy → conversion/hub/tool-governance}/types.js +0 -0
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { NodeType, NodeStatus } from '../../types/index.js';
|
|
2
|
-
function unwrapOpenAIResponse(payload) {
|
|
3
|
-
let current = payload;
|
|
4
|
-
const seen = new Set();
|
|
5
|
-
while (current && typeof current === 'object' && !Array.isArray(current) && !seen.has(current)) {
|
|
6
|
-
seen.add(current);
|
|
7
|
-
if ('choices' in current || 'id' in current || 'object' in current)
|
|
8
|
-
break;
|
|
9
|
-
if ('data' in current && current.data && typeof current.data === 'object') {
|
|
10
|
-
current = current.data;
|
|
11
|
-
continue;
|
|
12
|
-
}
|
|
13
|
-
break;
|
|
14
|
-
}
|
|
15
|
-
return current;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* OpenAI provider response → canonical chat response输入节点
|
|
19
|
-
*/
|
|
20
|
-
export class OpenAIResponseInputNode {
|
|
21
|
-
id;
|
|
22
|
-
config;
|
|
23
|
-
type = NodeType.INPUT;
|
|
24
|
-
status = NodeStatus.IDLE;
|
|
25
|
-
name;
|
|
26
|
-
constructor(id, config) {
|
|
27
|
-
this.id = id;
|
|
28
|
-
this.config = config;
|
|
29
|
-
this.name = config.name || 'OpenAI Response Input Node';
|
|
30
|
-
}
|
|
31
|
-
async execute(context) {
|
|
32
|
-
const start = Date.now();
|
|
33
|
-
this.status = NodeStatus.RUNNING;
|
|
34
|
-
try {
|
|
35
|
-
const payload = context.data?.payload ?? context.data ?? context.request.payload;
|
|
36
|
-
const chatShape = unwrapOpenAIResponse(payload);
|
|
37
|
-
const responseContext = {
|
|
38
|
-
toolContext: {
|
|
39
|
-
originalRequest: context.request.context?.metadata?.originalRequest,
|
|
40
|
-
requestId: context.request.id,
|
|
41
|
-
entryEndpoint: context.request.context?.entryEndpoint || context.request.endpoint
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
this.status = NodeStatus.COMPLETED;
|
|
45
|
-
return {
|
|
46
|
-
success: true,
|
|
47
|
-
data: {
|
|
48
|
-
responsePayload: chatShape,
|
|
49
|
-
responseContext
|
|
50
|
-
},
|
|
51
|
-
metadata: {
|
|
52
|
-
node: this.id,
|
|
53
|
-
executionTime: Date.now() - start,
|
|
54
|
-
startTime: start,
|
|
55
|
-
endTime: Date.now()
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
catch (error) {
|
|
60
|
-
this.status = NodeStatus.FAILED;
|
|
61
|
-
return {
|
|
62
|
-
success: false,
|
|
63
|
-
error: {
|
|
64
|
-
code: 'OPENAI_RESPONSE_INPUT_ERROR',
|
|
65
|
-
message: error instanceof Error ? error.message : 'Failed to normalize OpenAI response',
|
|
66
|
-
cause: error instanceof Error ? error : undefined
|
|
67
|
-
},
|
|
68
|
-
metadata: {
|
|
69
|
-
node: this.id,
|
|
70
|
-
executionTime: Date.now() - start,
|
|
71
|
-
startTime: start,
|
|
72
|
-
endTime: Date.now()
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
validate() {
|
|
78
|
-
return {
|
|
79
|
-
valid: true,
|
|
80
|
-
errors: [],
|
|
81
|
-
warnings: []
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
async cleanup() {
|
|
85
|
-
this.status = NodeStatus.IDLE;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { buildProcessedRequestFromChatResponse } from '../../../hub/response/chat-response-utils.js';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { buildProcessedRequestFromChatResponse } from '../../../hub/response/chat-response-utils.js';
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { NodeType, NodeStatus, type NodeConfig, type NodeContext, type NodeResult, type PipelineNode, type ValidationResult } from '../../types/index.js';
|
|
2
|
-
export declare class ResponsesResponseInputNode implements PipelineNode {
|
|
3
|
-
readonly id: string;
|
|
4
|
-
readonly config: NodeConfig;
|
|
5
|
-
readonly type = NodeType.INPUT;
|
|
6
|
-
status: NodeStatus;
|
|
7
|
-
readonly name: string;
|
|
8
|
-
constructor(id: string, config: NodeConfig);
|
|
9
|
-
execute(context: NodeContext): Promise<NodeResult>;
|
|
10
|
-
validate(): ValidationResult;
|
|
11
|
-
cleanup(): Promise<void>;
|
|
12
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { NodeType, NodeStatus } from '../../types/index.js';
|
|
2
|
-
import { buildChatResponseFromResponses } from '../../../responses/responses-openai-bridge.js';
|
|
3
|
-
export class ResponsesResponseInputNode {
|
|
4
|
-
id;
|
|
5
|
-
config;
|
|
6
|
-
type = NodeType.INPUT;
|
|
7
|
-
status = NodeStatus.IDLE;
|
|
8
|
-
name;
|
|
9
|
-
constructor(id, config) {
|
|
10
|
-
this.id = id;
|
|
11
|
-
this.config = config;
|
|
12
|
-
this.name = config.name || 'Responses Response Input Node';
|
|
13
|
-
}
|
|
14
|
-
async execute(context) {
|
|
15
|
-
const start = Date.now();
|
|
16
|
-
this.status = NodeStatus.RUNNING;
|
|
17
|
-
try {
|
|
18
|
-
const payload = context.data?.payload ?? context.data ?? context.request.payload;
|
|
19
|
-
const chatShape = buildChatResponseFromResponses(payload);
|
|
20
|
-
const responseContext = {
|
|
21
|
-
toolContext: {
|
|
22
|
-
originalRequest: context.request.context?.metadata?.originalRequest,
|
|
23
|
-
requestId: context.request.id,
|
|
24
|
-
entryEndpoint: context.request.context?.entryEndpoint || context.request.endpoint
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
this.status = NodeStatus.COMPLETED;
|
|
28
|
-
return {
|
|
29
|
-
success: true,
|
|
30
|
-
data: {
|
|
31
|
-
responsePayload: chatShape,
|
|
32
|
-
rawResponsesPayload: payload,
|
|
33
|
-
responseContext
|
|
34
|
-
},
|
|
35
|
-
metadata: {
|
|
36
|
-
node: this.id,
|
|
37
|
-
executionTime: Date.now() - start,
|
|
38
|
-
startTime: start,
|
|
39
|
-
endTime: Date.now()
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
this.status = NodeStatus.FAILED;
|
|
45
|
-
return {
|
|
46
|
-
success: false,
|
|
47
|
-
error: {
|
|
48
|
-
code: 'RESPONSES_RESPONSE_INPUT_ERROR',
|
|
49
|
-
message: error instanceof Error ? error.message : 'Failed to normalize OpenAI Responses payload',
|
|
50
|
-
cause: error instanceof Error ? error : undefined
|
|
51
|
-
},
|
|
52
|
-
metadata: {
|
|
53
|
-
node: this.id,
|
|
54
|
-
executionTime: Date.now() - start,
|
|
55
|
-
startTime: start,
|
|
56
|
-
endTime: Date.now()
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
validate() {
|
|
62
|
-
return { valid: true, errors: [], warnings: [] };
|
|
63
|
-
}
|
|
64
|
-
async cleanup() {
|
|
65
|
-
this.status = NodeStatus.IDLE;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { NodeType, NodeStatus, type NodeConfig, type NodeContext, type NodeResult, type PipelineNode, type ValidationResult } from '../../types/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* SSE 输入节点(重构版本)
|
|
4
|
-
*
|
|
5
|
-
* 将上游 SSE 请求上下文转换为标准 JSON 载荷。
|
|
6
|
-
* 基于配置驱动的轻量级编排器,使用标准化的 codec registry。
|
|
7
|
-
*/
|
|
8
|
-
export declare class SSEInputNode implements PipelineNode {
|
|
9
|
-
readonly id: string;
|
|
10
|
-
readonly config: NodeConfig;
|
|
11
|
-
readonly type = NodeType.INPUT;
|
|
12
|
-
status: NodeStatus;
|
|
13
|
-
readonly name: string;
|
|
14
|
-
constructor(id: string, config: NodeConfig);
|
|
15
|
-
execute(context: NodeContext): Promise<NodeResult>;
|
|
16
|
-
private getParserConfig;
|
|
17
|
-
private resolveSseProtocol;
|
|
18
|
-
private applyCompatibilityFilters;
|
|
19
|
-
private detectInputFormat;
|
|
20
|
-
private convertSSEToJson;
|
|
21
|
-
private createSseEventStream;
|
|
22
|
-
private unwrapReadable;
|
|
23
|
-
private passThroughJson;
|
|
24
|
-
private wrapError;
|
|
25
|
-
validate(): ValidationResult;
|
|
26
|
-
cleanup(): Promise<void>;
|
|
27
|
-
}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
import { Readable } from 'stream';
|
|
2
|
-
import { NodeType, NodeStatus, ConversionError } from '../../types/index.js';
|
|
3
|
-
import { defaultSseCodecRegistry } from '../../../../sse/index.js';
|
|
4
|
-
/**
|
|
5
|
-
* SSE 输入节点(重构版本)
|
|
6
|
-
*
|
|
7
|
-
* 将上游 SSE 请求上下文转换为标准 JSON 载荷。
|
|
8
|
-
* 基于配置驱动的轻量级编排器,使用标准化的 codec registry。
|
|
9
|
-
*/
|
|
10
|
-
export class SSEInputNode {
|
|
11
|
-
id;
|
|
12
|
-
config;
|
|
13
|
-
type = NodeType.INPUT;
|
|
14
|
-
status = NodeStatus.IDLE;
|
|
15
|
-
name;
|
|
16
|
-
constructor(id, config) {
|
|
17
|
-
this.id = id;
|
|
18
|
-
this.config = config;
|
|
19
|
-
this.name = config.name || 'SSE Input Node';
|
|
20
|
-
}
|
|
21
|
-
async execute(context) {
|
|
22
|
-
const start = Date.now();
|
|
23
|
-
this.status = NodeStatus.RUNNING;
|
|
24
|
-
try {
|
|
25
|
-
const parserConfig = this.getParserConfig(context);
|
|
26
|
-
const filteredConfig = await this.applyCompatibilityFilters(parserConfig, context);
|
|
27
|
-
const inputFormat = this.detectInputFormat(context);
|
|
28
|
-
if (inputFormat === 'sse-stream') {
|
|
29
|
-
const result = await this.convertSSEToJson(context, filteredConfig);
|
|
30
|
-
this.status = NodeStatus.COMPLETED;
|
|
31
|
-
return {
|
|
32
|
-
success: true,
|
|
33
|
-
data: result,
|
|
34
|
-
metadata: {
|
|
35
|
-
node: this.id,
|
|
36
|
-
executionTime: Date.now() - start,
|
|
37
|
-
startTime: start,
|
|
38
|
-
endTime: Date.now()
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
return this.passThroughJson(context, start);
|
|
43
|
-
}
|
|
44
|
-
catch (error) {
|
|
45
|
-
this.status = NodeStatus.FAILED;
|
|
46
|
-
throw this.wrapError(error);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
getParserConfig(context) {
|
|
50
|
-
const requestContext = context.request.context;
|
|
51
|
-
const nestedMetadata = requestContext?.metadata;
|
|
52
|
-
const metadataSource = nestedMetadata ?? requestContext;
|
|
53
|
-
const provider = metadataSource?.provider ?? requestContext?.provider;
|
|
54
|
-
const profile = provider?.profile;
|
|
55
|
-
const providedModel = typeof metadataSource?.model === 'string' ? metadataSource.model : undefined;
|
|
56
|
-
const providerProtocol = typeof metadataSource?.providerProtocol === 'string'
|
|
57
|
-
? metadataSource.providerProtocol
|
|
58
|
-
: undefined;
|
|
59
|
-
const entryEndpoint = typeof metadataSource?.entryEndpoint === 'string'
|
|
60
|
-
? metadataSource.entryEndpoint
|
|
61
|
-
: context.request.endpoint;
|
|
62
|
-
return {
|
|
63
|
-
protocol: this.resolveSseProtocol(profile, providerProtocol, entryEndpoint),
|
|
64
|
-
model: providedModel
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
resolveSseProtocol(profile, providerProtocol, entryEndpoint) {
|
|
68
|
-
const candidates = [
|
|
69
|
-
profile,
|
|
70
|
-
providerProtocol,
|
|
71
|
-
entryEndpoint
|
|
72
|
-
].filter((value) => typeof value === 'string');
|
|
73
|
-
for (const value of candidates) {
|
|
74
|
-
const lowered = value.toLowerCase();
|
|
75
|
-
if (lowered.includes('responses')) {
|
|
76
|
-
return 'openai-responses';
|
|
77
|
-
}
|
|
78
|
-
if (lowered.includes('messages') || lowered.includes('anthropic')) {
|
|
79
|
-
return 'anthropic-messages';
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return 'openai-chat';
|
|
83
|
-
}
|
|
84
|
-
async applyCompatibilityFilters(config, _context) {
|
|
85
|
-
return config;
|
|
86
|
-
}
|
|
87
|
-
detectInputFormat(context) {
|
|
88
|
-
const payload = context.request.payload;
|
|
89
|
-
if (payload && typeof payload === 'object' && 'readable' in payload) {
|
|
90
|
-
return 'sse-stream';
|
|
91
|
-
}
|
|
92
|
-
if (payload && typeof payload === 'object') {
|
|
93
|
-
return 'json-object';
|
|
94
|
-
}
|
|
95
|
-
return 'json-object';
|
|
96
|
-
}
|
|
97
|
-
async convertSSEToJson(context, config) {
|
|
98
|
-
const readable = this.unwrapReadable(context.request.payload);
|
|
99
|
-
const codec = defaultSseCodecRegistry.get(config.protocol);
|
|
100
|
-
try {
|
|
101
|
-
const result = await codec.convertSseToJson(this.createSseEventStream(readable), {
|
|
102
|
-
requestId: context.request.id,
|
|
103
|
-
model: config.model,
|
|
104
|
-
direction: 'request'
|
|
105
|
-
});
|
|
106
|
-
if (!result || typeof result !== 'object') {
|
|
107
|
-
throw new ConversionError('SSE converter returned empty payload', this.id);
|
|
108
|
-
}
|
|
109
|
-
return result;
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
throw new ConversionError(`${config.protocol} SSE conversion failed: ${error.message}`, this.id);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
createSseEventStream(sseStream) {
|
|
116
|
-
const iterator = async function* () {
|
|
117
|
-
for await (const chunk of sseStream) {
|
|
118
|
-
yield typeof chunk === 'string' ? chunk : chunk.toString();
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
return iterator();
|
|
122
|
-
}
|
|
123
|
-
unwrapReadable(payload) {
|
|
124
|
-
if (payload && typeof payload === 'object' && 'readable' in payload) {
|
|
125
|
-
const candidate = payload.readable;
|
|
126
|
-
if (candidate instanceof Readable) {
|
|
127
|
-
return candidate;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
return payload;
|
|
131
|
-
}
|
|
132
|
-
passThroughJson(context, startTime) {
|
|
133
|
-
const payload = context.request.payload;
|
|
134
|
-
if (!payload || typeof payload !== 'object') {
|
|
135
|
-
throw new ConversionError('JSON payload must be an object', this.id);
|
|
136
|
-
}
|
|
137
|
-
this.status = NodeStatus.COMPLETED;
|
|
138
|
-
return {
|
|
139
|
-
success: true,
|
|
140
|
-
data: payload,
|
|
141
|
-
metadata: {
|
|
142
|
-
node: this.id,
|
|
143
|
-
executionTime: Date.now() - startTime,
|
|
144
|
-
startTime,
|
|
145
|
-
endTime: Date.now()
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
wrapError(error) {
|
|
150
|
-
if (error instanceof ConversionError) {
|
|
151
|
-
return error;
|
|
152
|
-
}
|
|
153
|
-
return new ConversionError(`SSE input conversion failed: ${error.message}`, this.id);
|
|
154
|
-
}
|
|
155
|
-
validate() {
|
|
156
|
-
return {
|
|
157
|
-
valid: true,
|
|
158
|
-
errors: [],
|
|
159
|
-
warnings: []
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
async cleanup() {
|
|
163
|
-
this.status = NodeStatus.IDLE;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { NodeStatus, NodeType, type NodeConfig, type NodeContext, type NodeResult, type PipelineNode, type ValidationResult } from '../../types/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* SSE 输出节点
|
|
4
|
-
*
|
|
5
|
-
* 将转换后的响应根据是否流式输出为 JSON 或 Readable SSE 流。
|
|
6
|
-
*/
|
|
7
|
-
export declare class SSEOutputNode implements PipelineNode {
|
|
8
|
-
readonly id: string;
|
|
9
|
-
readonly config: NodeConfig;
|
|
10
|
-
readonly type = NodeType.OUTPUT;
|
|
11
|
-
status: NodeStatus;
|
|
12
|
-
readonly name: string;
|
|
13
|
-
constructor(id: string, config: NodeConfig);
|
|
14
|
-
execute(context: NodeContext): Promise<NodeResult>;
|
|
15
|
-
validate(): ValidationResult;
|
|
16
|
-
cleanup(): Promise<void>;
|
|
17
|
-
private createStreamingResponse;
|
|
18
|
-
private resolveModelId;
|
|
19
|
-
}
|
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
import { PassThrough } from 'node:stream';
|
|
2
|
-
import { NodeStatus, NodeType } from '../../types/index.js';
|
|
3
|
-
import { defaultSseCodecRegistry } from '../../../../sse/index.js';
|
|
4
|
-
function getPipelineDirection(context) {
|
|
5
|
-
const metadata = context.request.context?.metadata;
|
|
6
|
-
const direction = typeof metadata?.direction === 'string' ? metadata.direction.toLowerCase() : '';
|
|
7
|
-
return direction === 'response' ? 'response' : 'request';
|
|
8
|
-
}
|
|
9
|
-
function mapResumeToolOutputs(meta) {
|
|
10
|
-
if (!Array.isArray(meta))
|
|
11
|
-
return [];
|
|
12
|
-
const mapped = [];
|
|
13
|
-
meta.forEach((entry, index) => {
|
|
14
|
-
if (!entry || typeof entry !== 'object')
|
|
15
|
-
return;
|
|
16
|
-
const rec = entry;
|
|
17
|
-
const originalId = typeof rec.originalId === 'string' && rec.originalId.trim()
|
|
18
|
-
? rec.originalId.trim()
|
|
19
|
-
: undefined;
|
|
20
|
-
const callIdRaw = typeof rec.callId === 'string' && rec.callId.trim()
|
|
21
|
-
? rec.callId.trim()
|
|
22
|
-
: undefined;
|
|
23
|
-
const callId = callIdRaw || (originalId ? (originalId.startsWith('fc_') ? originalId : `fc_${originalId}`) : `fc_resume_${index}`);
|
|
24
|
-
const outputText = typeof rec.outputText === 'string' ? rec.outputText : '';
|
|
25
|
-
mapped.push({
|
|
26
|
-
id: callId,
|
|
27
|
-
type: 'function_call_output',
|
|
28
|
-
call_id: callId,
|
|
29
|
-
tool_call_id: originalId,
|
|
30
|
-
output: outputText
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
return mapped;
|
|
34
|
-
}
|
|
35
|
-
function resolveMetadata(context) {
|
|
36
|
-
const ctx = context.request.context?.metadata;
|
|
37
|
-
return (ctx && typeof ctx === 'object') ? ctx : {};
|
|
38
|
-
}
|
|
39
|
-
function getOriginalRequest(metadata) {
|
|
40
|
-
const original = metadata?.originalRequest;
|
|
41
|
-
return original && typeof original === 'object' ? original : undefined;
|
|
42
|
-
}
|
|
43
|
-
function normalizeStreamingFlag(value) {
|
|
44
|
-
if (typeof value === 'boolean')
|
|
45
|
-
return value;
|
|
46
|
-
if (typeof value === 'string') {
|
|
47
|
-
const lowered = value.trim().toLowerCase();
|
|
48
|
-
if (['true', '1', 'yes', 'always'].includes(lowered))
|
|
49
|
-
return true;
|
|
50
|
-
if (['false', '0', 'no', 'never'].includes(lowered))
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
return undefined;
|
|
54
|
-
}
|
|
55
|
-
function metadataRequestsStreaming(meta) {
|
|
56
|
-
if (!meta)
|
|
57
|
-
return false;
|
|
58
|
-
const inboundFlag = normalizeStreamingFlag(meta.inboundStream);
|
|
59
|
-
if (inboundFlag)
|
|
60
|
-
return true;
|
|
61
|
-
const directFlag = normalizeStreamingFlag(meta.stream);
|
|
62
|
-
if (directFlag)
|
|
63
|
-
return true;
|
|
64
|
-
const clientFlag = normalizeStreamingFlag(meta.clientStream);
|
|
65
|
-
if (clientFlag)
|
|
66
|
-
return true;
|
|
67
|
-
if (typeof meta.streaming === 'string') {
|
|
68
|
-
const lowered = meta.streaming.toLowerCase();
|
|
69
|
-
if (lowered === 'always')
|
|
70
|
-
return true;
|
|
71
|
-
if (lowered === 'auto' && clientFlag)
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
function shouldStreamResponse(context, conversionResponse) {
|
|
77
|
-
const metadata = resolveMetadata(context);
|
|
78
|
-
if (metadataRequestsStreaming(metadata))
|
|
79
|
-
return true;
|
|
80
|
-
const orig = getOriginalRequest(metadata);
|
|
81
|
-
if (orig) {
|
|
82
|
-
const origStream = normalizeStreamingFlag(orig.stream);
|
|
83
|
-
if (origStream === true)
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
if (conversionResponse?.metadata && conversionResponse.metadata?.streaming === true)
|
|
87
|
-
return true;
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
function fallbackSSE(payload, requestId) {
|
|
91
|
-
const stream = new PassThrough();
|
|
92
|
-
try {
|
|
93
|
-
stream.write(`data: ${JSON.stringify({ error: payload, requestId })}\n\n`);
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
stream.write('data: {"error":{"message":"sse_fallback"}}\n\n');
|
|
97
|
-
}
|
|
98
|
-
stream.write('data: [DONE]\n\n');
|
|
99
|
-
stream.end();
|
|
100
|
-
return stream;
|
|
101
|
-
}
|
|
102
|
-
function resolveFormat(contextData) {
|
|
103
|
-
const conversionResponse = contextData?.conversionResponse;
|
|
104
|
-
const explicit = typeof conversionResponse?.format === 'string' ? conversionResponse.format : undefined;
|
|
105
|
-
if (explicit)
|
|
106
|
-
return explicit;
|
|
107
|
-
const outputFormat = contextData?.outputFormat;
|
|
108
|
-
return typeof outputFormat === 'string' ? outputFormat : '';
|
|
109
|
-
}
|
|
110
|
-
function normalizeFormatToProtocol(format) {
|
|
111
|
-
if (!format) {
|
|
112
|
-
return 'openai-chat';
|
|
113
|
-
}
|
|
114
|
-
const lowered = format.toLowerCase();
|
|
115
|
-
if (lowered === 'openai-chat' || lowered === 'processed-chat') {
|
|
116
|
-
return 'openai-chat';
|
|
117
|
-
}
|
|
118
|
-
if (lowered === 'openai-responses') {
|
|
119
|
-
return 'openai-responses';
|
|
120
|
-
}
|
|
121
|
-
if (lowered === 'anthropic-messages' || lowered === 'anthropic') {
|
|
122
|
-
return 'anthropic-messages';
|
|
123
|
-
}
|
|
124
|
-
return null;
|
|
125
|
-
}
|
|
126
|
-
function resolveResponsePayload(contextData) {
|
|
127
|
-
const conversionResponse = contextData?.conversionResponse;
|
|
128
|
-
if (conversionResponse?.data && typeof conversionResponse.data === 'object') {
|
|
129
|
-
return conversionResponse.data;
|
|
130
|
-
}
|
|
131
|
-
const outputData = contextData?.outputData;
|
|
132
|
-
if (outputData && typeof outputData === 'object') {
|
|
133
|
-
return outputData;
|
|
134
|
-
}
|
|
135
|
-
return undefined;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* SSE 输出节点
|
|
139
|
-
*
|
|
140
|
-
* 将转换后的响应根据是否流式输出为 JSON 或 Readable SSE 流。
|
|
141
|
-
*/
|
|
142
|
-
export class SSEOutputNode {
|
|
143
|
-
id;
|
|
144
|
-
config;
|
|
145
|
-
type = NodeType.OUTPUT;
|
|
146
|
-
status = NodeStatus.IDLE;
|
|
147
|
-
name;
|
|
148
|
-
constructor(id, config) {
|
|
149
|
-
this.id = id;
|
|
150
|
-
this.config = config;
|
|
151
|
-
this.name = config.name || 'SSE Output Node';
|
|
152
|
-
}
|
|
153
|
-
async execute(context) {
|
|
154
|
-
const start = Date.now();
|
|
155
|
-
this.status = NodeStatus.RUNNING;
|
|
156
|
-
const direction = getPipelineDirection(context);
|
|
157
|
-
if (direction !== 'response') {
|
|
158
|
-
this.status = NodeStatus.COMPLETED;
|
|
159
|
-
return {
|
|
160
|
-
success: true,
|
|
161
|
-
data: context.data ?? {},
|
|
162
|
-
metadata: {
|
|
163
|
-
node: this.id,
|
|
164
|
-
executionTime: Date.now() - start,
|
|
165
|
-
startTime: start,
|
|
166
|
-
endTime: Date.now()
|
|
167
|
-
}
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
const data = context.data;
|
|
171
|
-
const conversionResponse = data?.conversionResponse;
|
|
172
|
-
const responsePayload = resolveResponsePayload(data ?? {});
|
|
173
|
-
const format = resolveFormat(data ?? {});
|
|
174
|
-
const wantsStream = shouldStreamResponse(context, conversionResponse);
|
|
175
|
-
const metadata = resolveMetadata(context);
|
|
176
|
-
if (wantsStream) {
|
|
177
|
-
const stream = await this.createStreamingResponse(format, responsePayload, context.request.id, metadata);
|
|
178
|
-
this.status = NodeStatus.COMPLETED;
|
|
179
|
-
return {
|
|
180
|
-
success: true,
|
|
181
|
-
data: {
|
|
182
|
-
__sse_responses: stream,
|
|
183
|
-
passthrough: context.pipeline.isPassthrough,
|
|
184
|
-
format
|
|
185
|
-
},
|
|
186
|
-
metadata: {
|
|
187
|
-
node: this.id,
|
|
188
|
-
executionTime: Date.now() - start,
|
|
189
|
-
startTime: start,
|
|
190
|
-
endTime: Date.now()
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
// 非流式路径:
|
|
195
|
-
// - Responses 输出:返回标准 Responses JSON(response 节点),并保留 sseStream 供快照/调试。
|
|
196
|
-
// - 其他输出:保持原有 sseStream 形状,避免干扰 Chat / Anthropic 等路径。
|
|
197
|
-
this.status = NodeStatus.COMPLETED;
|
|
198
|
-
const responsePayloadData = conversionResponse?.data ?? responsePayload;
|
|
199
|
-
const includeResponsePayload = typeof format === 'string' && format.toLowerCase() === 'openai-responses';
|
|
200
|
-
return {
|
|
201
|
-
success: true,
|
|
202
|
-
data: {
|
|
203
|
-
...(includeResponsePayload ? {
|
|
204
|
-
response: responsePayloadData,
|
|
205
|
-
responseMetadata: conversionResponse?.metadata
|
|
206
|
-
} : {}),
|
|
207
|
-
sseStream: conversionResponse ?? responsePayload,
|
|
208
|
-
passthrough: context.pipeline.isPassthrough,
|
|
209
|
-
format
|
|
210
|
-
},
|
|
211
|
-
metadata: {
|
|
212
|
-
node: this.id,
|
|
213
|
-
executionTime: Date.now() - start,
|
|
214
|
-
startTime: start,
|
|
215
|
-
endTime: Date.now()
|
|
216
|
-
}
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
validate() {
|
|
220
|
-
return {
|
|
221
|
-
valid: true,
|
|
222
|
-
errors: [],
|
|
223
|
-
warnings: []
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
async cleanup() {
|
|
227
|
-
this.status = NodeStatus.IDLE;
|
|
228
|
-
}
|
|
229
|
-
async createStreamingResponse(format, payload, requestId, metadata) {
|
|
230
|
-
if (!payload) {
|
|
231
|
-
return fallbackSSE({ message: 'sse_not_available', format }, requestId);
|
|
232
|
-
}
|
|
233
|
-
const protocol = normalizeFormatToProtocol(format);
|
|
234
|
-
if (!protocol) {
|
|
235
|
-
return fallbackSSE({ message: 'sse_protocol_unsupported', format }, requestId);
|
|
236
|
-
}
|
|
237
|
-
try {
|
|
238
|
-
const codec = defaultSseCodecRegistry.get(protocol);
|
|
239
|
-
const resumeItems = mapResumeToolOutputs(metadata?.responsesResume?.toolOutputsDetailed);
|
|
240
|
-
const stream = await codec.convertJsonToSse(payload, {
|
|
241
|
-
requestId,
|
|
242
|
-
model: this.resolveModelId(payload),
|
|
243
|
-
direction: 'response',
|
|
244
|
-
resumeToolOutputs: resumeItems.length ? resumeItems : undefined
|
|
245
|
-
});
|
|
246
|
-
return stream;
|
|
247
|
-
}
|
|
248
|
-
catch (error) {
|
|
249
|
-
console.error('[SSEOutputNode] Error creating streaming response:', error);
|
|
250
|
-
return fallbackSSE({
|
|
251
|
-
error: 'sse_conversion_failed',
|
|
252
|
-
message: error instanceof Error ? error.message : 'Unknown error',
|
|
253
|
-
format,
|
|
254
|
-
protocol
|
|
255
|
-
}, requestId);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
resolveModelId(payload) {
|
|
259
|
-
if ('model' in payload && typeof payload.model === 'string') {
|
|
260
|
-
return payload.model;
|
|
261
|
-
}
|
|
262
|
-
if ('response' in payload && payload.response && typeof payload.response.model === 'string') {
|
|
263
|
-
return payload.response.model;
|
|
264
|
-
}
|
|
265
|
-
return 'unknown';
|
|
266
|
-
}
|
|
267
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { NodeStatus, NodeType, type NodeConfig, type NodeContext, type NodeResult, type PipelineNode, type ValidationResult } from '../../types/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* SSE 直通节点
|
|
4
|
-
*
|
|
5
|
-
* 在需要保持 SSE 原样透传时使用。
|
|
6
|
-
* 仅做元数据记录,不改变数据内容。
|
|
7
|
-
*/
|
|
8
|
-
export declare class SSEPassthroughNode implements PipelineNode {
|
|
9
|
-
readonly id: string;
|
|
10
|
-
readonly config: NodeConfig;
|
|
11
|
-
readonly type = NodeType.PROCESS;
|
|
12
|
-
status: NodeStatus;
|
|
13
|
-
readonly name: string;
|
|
14
|
-
constructor(id: string, config: NodeConfig);
|
|
15
|
-
execute(context: NodeContext): Promise<NodeResult>;
|
|
16
|
-
validate(): ValidationResult;
|
|
17
|
-
cleanup(): Promise<void>;
|
|
18
|
-
}
|