@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
|
@@ -201,7 +201,8 @@ export class ChatSseToJsonConverter {
|
|
|
201
201
|
*/
|
|
202
202
|
async processChatChunk(event, context) {
|
|
203
203
|
try {
|
|
204
|
-
const
|
|
204
|
+
const payload = typeof event.data === 'string' ? event.data : JSON.stringify(event.data ?? {});
|
|
205
|
+
const chunk = JSON.parse(payload);
|
|
205
206
|
// 验证chunk格式
|
|
206
207
|
if (context.options.validateChunks) {
|
|
207
208
|
this.validateChatChunk(chunk);
|
|
@@ -237,8 +238,11 @@ export class ChatSseToJsonConverter {
|
|
|
237
238
|
context.choiceIndexMap.set(choiceIndex, choiceBuilder);
|
|
238
239
|
context.currentResponse.choices?.push({
|
|
239
240
|
index: choiceIndex,
|
|
240
|
-
message: {
|
|
241
|
-
|
|
241
|
+
message: {
|
|
242
|
+
role: 'assistant',
|
|
243
|
+
content: ''
|
|
244
|
+
},
|
|
245
|
+
finish_reason: 'stop',
|
|
242
246
|
logprobs: choice.logprobs
|
|
243
247
|
});
|
|
244
248
|
}
|
|
@@ -261,8 +265,8 @@ export class ChatSseToJsonConverter {
|
|
|
261
265
|
return {
|
|
262
266
|
index,
|
|
263
267
|
delta: {},
|
|
264
|
-
finishReason:
|
|
265
|
-
logprobs:
|
|
268
|
+
finishReason: undefined,
|
|
269
|
+
logprobs: undefined,
|
|
266
270
|
messageBuilder: {
|
|
267
271
|
role: undefined,
|
|
268
272
|
content: '',
|
|
@@ -280,7 +284,7 @@ export class ChatSseToJsonConverter {
|
|
|
280
284
|
/**
|
|
281
285
|
* 处理delta
|
|
282
286
|
*/
|
|
283
|
-
async processDelta(delta, choiceBuilder,
|
|
287
|
+
async processDelta(delta, choiceBuilder, _context) {
|
|
284
288
|
const messageBuilder = choiceBuilder.messageBuilder;
|
|
285
289
|
// 处理role
|
|
286
290
|
if (delta.role) {
|
|
@@ -314,7 +318,7 @@ export class ChatSseToJsonConverter {
|
|
|
314
318
|
// 处理tool_calls
|
|
315
319
|
if (delta.tool_calls && Array.isArray(delta.tool_calls)) {
|
|
316
320
|
for (const toolCallDelta of delta.tool_calls) {
|
|
317
|
-
await this.processToolCallDelta(toolCallDelta, choiceBuilder
|
|
321
|
+
await this.processToolCallDelta(toolCallDelta, choiceBuilder);
|
|
318
322
|
}
|
|
319
323
|
}
|
|
320
324
|
// 合并delta到choiceBuilder
|
|
@@ -323,7 +327,7 @@ export class ChatSseToJsonConverter {
|
|
|
323
327
|
/**
|
|
324
328
|
* 处理tool_call delta
|
|
325
329
|
*/
|
|
326
|
-
async processToolCallDelta(toolCallDelta, choiceBuilder
|
|
330
|
+
async processToolCallDelta(toolCallDelta, choiceBuilder) {
|
|
327
331
|
const toolCallIndex = toolCallDelta.index;
|
|
328
332
|
// 获取或创建tool_call构建器
|
|
329
333
|
let toolCallBuilder = choiceBuilder.toolCallBuilders.get(toolCallIndex);
|
|
@@ -367,8 +371,9 @@ export class ChatSseToJsonConverter {
|
|
|
367
371
|
*/
|
|
368
372
|
updateResponseChoice(choiceIndex, choiceBuilder, context) {
|
|
369
373
|
const responseChoice = context.currentResponse.choices?.[choiceIndex];
|
|
370
|
-
if (!responseChoice)
|
|
374
|
+
if (!responseChoice) {
|
|
371
375
|
return;
|
|
376
|
+
}
|
|
372
377
|
const messageBuilder = choiceBuilder.messageBuilder;
|
|
373
378
|
// 构建message
|
|
374
379
|
const message = {
|
|
@@ -382,12 +387,15 @@ export class ChatSseToJsonConverter {
|
|
|
382
387
|
}
|
|
383
388
|
// 构建tool_calls
|
|
384
389
|
const toolCalls = [];
|
|
385
|
-
for (const
|
|
386
|
-
if (toolCallBuilder.id) {
|
|
390
|
+
for (const toolCallBuilder of choiceBuilder.toolCallBuilders.values()) {
|
|
391
|
+
if (toolCallBuilder.id && toolCallBuilder.function) {
|
|
387
392
|
toolCalls.push({
|
|
388
393
|
id: toolCallBuilder.id,
|
|
389
394
|
type: toolCallBuilder.type || 'function',
|
|
390
|
-
function:
|
|
395
|
+
function: {
|
|
396
|
+
name: toolCallBuilder.function.name ?? '',
|
|
397
|
+
arguments: toolCallBuilder.function.arguments ?? ''
|
|
398
|
+
}
|
|
391
399
|
});
|
|
392
400
|
}
|
|
393
401
|
}
|
|
@@ -395,7 +403,7 @@ export class ChatSseToJsonConverter {
|
|
|
395
403
|
message.tool_calls = toolCalls;
|
|
396
404
|
}
|
|
397
405
|
responseChoice.message = message;
|
|
398
|
-
responseChoice.finish_reason = choiceBuilder.finishReason;
|
|
406
|
+
responseChoice.finish_reason = choiceBuilder.finishReason ?? responseChoice.finish_reason;
|
|
399
407
|
context.eventStats.totalToolCalls += toolCalls.length;
|
|
400
408
|
}
|
|
401
409
|
/**
|
|
@@ -405,9 +413,11 @@ export class ChatSseToJsonConverter {
|
|
|
405
413
|
context.isCompleted = true;
|
|
406
414
|
// 解析done事件数据(如果有的话)
|
|
407
415
|
try {
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
416
|
+
if (typeof event.data === 'string') {
|
|
417
|
+
const doneData = JSON.parse(event.data);
|
|
418
|
+
if (typeof doneData.totalTokens === 'number') {
|
|
419
|
+
context.eventStats.totalTokens = doneData.totalTokens;
|
|
420
|
+
}
|
|
411
421
|
}
|
|
412
422
|
}
|
|
413
423
|
catch (e) {
|
|
@@ -417,12 +427,15 @@ export class ChatSseToJsonConverter {
|
|
|
417
427
|
/**
|
|
418
428
|
* 处理error事件
|
|
419
429
|
*/
|
|
420
|
-
async processErrorEvent(event,
|
|
430
|
+
async processErrorEvent(event, _context) {
|
|
421
431
|
try {
|
|
422
|
-
const
|
|
423
|
-
const
|
|
424
|
-
|
|
425
|
-
|
|
432
|
+
const rawPayload = typeof event.data === 'string' ? event.data : JSON.stringify(event.data ?? {});
|
|
433
|
+
const errorData = JSON.parse(rawPayload);
|
|
434
|
+
const errorMessage = typeof errorData.error === 'string' ? errorData.error : 'Unknown SSE error';
|
|
435
|
+
const code = typeof errorData.code === 'string' ? errorData.code : 'SSE_ERROR';
|
|
436
|
+
const typedError = new Error(errorMessage);
|
|
437
|
+
typedError.code = code;
|
|
438
|
+
throw ErrorUtils.createError(typedError.message, CHAT_CONVERSION_ERROR_CODES.STREAM_ERROR, { errorData, event });
|
|
426
439
|
}
|
|
427
440
|
catch (parseError) {
|
|
428
441
|
throw ErrorUtils.createError(`SSE error event: ${event.data}`, CHAT_CONVERSION_ERROR_CODES.STREAM_ERROR, { event });
|
|
@@ -433,8 +446,9 @@ export class ChatSseToJsonConverter {
|
|
|
433
446
|
*/
|
|
434
447
|
buildPartialResponse(context) {
|
|
435
448
|
const choices = context.currentResponse.choices || [];
|
|
436
|
-
if (choices.length === 0)
|
|
449
|
+
if (choices.length === 0) {
|
|
437
450
|
return null;
|
|
451
|
+
}
|
|
438
452
|
return {
|
|
439
453
|
id: context.currentResponse.id || '',
|
|
440
454
|
object: 'chat.completion',
|
|
@@ -475,7 +489,7 @@ export class ChatSseToJsonConverter {
|
|
|
475
489
|
/**
|
|
476
490
|
* 构建使用量信息
|
|
477
491
|
*/
|
|
478
|
-
buildUsageInfo(
|
|
492
|
+
buildUsageInfo(_context) {
|
|
479
493
|
// 这里可以基于token计数来计算usage
|
|
480
494
|
// 暂时返回null,后续可以实现更精确的token计数
|
|
481
495
|
return null;
|
|
@@ -76,16 +76,18 @@ function parseSseLine(line) {
|
|
|
76
76
|
* 将原始SSE行组装为事件
|
|
77
77
|
*/
|
|
78
78
|
export function assembleSseEvent(lines) {
|
|
79
|
-
if (lines.length === 0)
|
|
79
|
+
if (lines.length === 0) {
|
|
80
80
|
return null;
|
|
81
|
+
}
|
|
81
82
|
const event = {
|
|
82
83
|
event: 'message', // 默认事件类型
|
|
83
84
|
data: ''
|
|
84
85
|
};
|
|
85
86
|
for (const line of lines) {
|
|
86
87
|
const { field, value } = parseSseLine(line);
|
|
87
|
-
if (!field)
|
|
88
|
+
if (!field) {
|
|
88
89
|
continue;
|
|
90
|
+
}
|
|
89
91
|
switch (field) {
|
|
90
92
|
case 'id':
|
|
91
93
|
event.id = value;
|
|
@@ -94,7 +96,7 @@ export function assembleSseEvent(lines) {
|
|
|
94
96
|
event.event = value;
|
|
95
97
|
break;
|
|
96
98
|
case 'data':
|
|
97
|
-
event.data = event.data ? event.data
|
|
99
|
+
event.data = event.data ? `${event.data}\n${value}` : value;
|
|
98
100
|
break;
|
|
99
101
|
case 'retry':
|
|
100
102
|
event.retry = value;
|
|
@@ -119,7 +121,8 @@ function safeJsonParse(data) {
|
|
|
119
121
|
return JSON.parse(data);
|
|
120
122
|
}
|
|
121
123
|
catch (error) {
|
|
122
|
-
|
|
124
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
125
|
+
throw new Error(`Invalid JSON data: ${message}`);
|
|
123
126
|
}
|
|
124
127
|
}
|
|
125
128
|
/**
|
|
@@ -134,19 +137,23 @@ function validateEventType(eventType, config) {
|
|
|
134
137
|
/**
|
|
135
138
|
* 创建基础事件对象
|
|
136
139
|
*/
|
|
137
|
-
function createBaseEvent(rawEvent, config,
|
|
140
|
+
function createBaseEvent(rawEvent, config, _rawData) {
|
|
138
141
|
const baseEvent = {
|
|
139
142
|
type: rawEvent.event,
|
|
140
|
-
timestamp: rawEvent.timestamp
|
|
143
|
+
timestamp: rawEvent.timestamp ?? Date.now(),
|
|
141
144
|
data: null,
|
|
142
145
|
sequenceNumber: typeof rawEvent.id === 'string' ? Number(rawEvent.id) : 0
|
|
143
146
|
};
|
|
144
147
|
// 解析数据字段
|
|
145
148
|
try {
|
|
146
149
|
if (rawEvent.data) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
+
const parsedData = safeJsonParse(rawEvent.data);
|
|
151
|
+
baseEvent.data = parsedData;
|
|
152
|
+
if (parsedData &&
|
|
153
|
+
typeof parsedData === 'object' &&
|
|
154
|
+
'sequence_number' in parsedData &&
|
|
155
|
+
typeof parsedData.sequence_number === 'number') {
|
|
156
|
+
baseEvent.sequenceNumber = parsedData.sequence_number;
|
|
150
157
|
}
|
|
151
158
|
}
|
|
152
159
|
}
|
|
@@ -156,7 +163,7 @@ function createBaseEvent(rawEvent, config, rawData) {
|
|
|
156
163
|
baseEvent.type = 'error';
|
|
157
164
|
}
|
|
158
165
|
else {
|
|
159
|
-
throw error;
|
|
166
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
160
167
|
}
|
|
161
168
|
}
|
|
162
169
|
return baseEvent;
|
|
@@ -249,7 +256,7 @@ export function parseSseEvent(sseText, config = DEFAULT_SSE_PARSER_CONFIG) {
|
|
|
249
256
|
result.success = true;
|
|
250
257
|
}
|
|
251
258
|
catch (error) {
|
|
252
|
-
result.error = error.message;
|
|
259
|
+
result.error = error instanceof Error ? error.message : String(error);
|
|
253
260
|
}
|
|
254
261
|
return result;
|
|
255
262
|
}
|
|
@@ -276,8 +283,9 @@ export async function* parseSseStreamAsync(asyncSseData, config = DEFAULT_SSE_PA
|
|
|
276
283
|
// 查找完整的事件边界
|
|
277
284
|
while (true) {
|
|
278
285
|
const eventEnd = buffer.indexOf('\n\n');
|
|
279
|
-
if (eventEnd === -1)
|
|
286
|
+
if (eventEnd === -1) {
|
|
280
287
|
break;
|
|
288
|
+
}
|
|
281
289
|
const eventData = buffer.substring(0, eventEnd);
|
|
282
290
|
buffer = buffer.substring(eventEnd + 2);
|
|
283
291
|
const result = parseSseEvent(eventData, config);
|
|
@@ -48,14 +48,10 @@ export class ResponsesSseToJsonConverterRefactored {
|
|
|
48
48
|
const readableStream = this.createReadableStream(sseStream);
|
|
49
49
|
// 5. 流式处理SSE数据(按增量缓冲解析,避免跨 chunk 的事件被截断)
|
|
50
50
|
// 注意:不要对每个 chunk 独立 parse;必须使用一个持续的 async 解析器维持缓冲区。
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
yield typeof chunk === 'string' ? chunk : chunk.toString();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
for await (const parseResult of parser.parseStreamAsync(chunkStrings(readableStream))) {
|
|
57
|
-
if (context.isCompleted)
|
|
51
|
+
for await (const parseResult of parser.parseStreamAsync(this.chunkStrings(readableStream))) {
|
|
52
|
+
if (context.isCompleted) {
|
|
58
53
|
break;
|
|
54
|
+
}
|
|
59
55
|
if (parseResult.success && parseResult.event) {
|
|
60
56
|
const event = parseResult.event;
|
|
61
57
|
// 验证序列号
|
|
@@ -150,8 +146,14 @@ export class ResponsesSseToJsonConverterRefactored {
|
|
|
150
146
|
* 将事件对象序列化为SSE格式(简单实现)
|
|
151
147
|
*/
|
|
152
148
|
serializeEventToSSE(event) {
|
|
149
|
+
const type = typeof event.type === 'string' ? event.type : 'data';
|
|
153
150
|
const data = event.data ? JSON.stringify(event.data) : '';
|
|
154
|
-
return `event: ${
|
|
151
|
+
return `event: ${type}\ndata: ${data}\n\n`;
|
|
152
|
+
}
|
|
153
|
+
async *chunkStrings(stream) {
|
|
154
|
+
for await (const chunk of stream) {
|
|
155
|
+
yield typeof chunk === 'string' ? chunk : chunk.toString();
|
|
156
|
+
}
|
|
155
157
|
}
|
|
156
158
|
/**
|
|
157
159
|
* 验证序列号
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 支持OpenAI Chat Completions的JSON↔SSE双向转换
|
|
4
4
|
*/
|
|
5
5
|
import { BaseSseEvent, StreamDirection } from './core-interfaces.js';
|
|
6
|
+
type JsonObject = Record<string, unknown>;
|
|
6
7
|
export type ChatSseEventType = 'chat_chunk' | 'chat.done' | 'error' | 'ping';
|
|
7
8
|
export interface ChatSseEvent extends BaseSseEvent {
|
|
8
9
|
/** 事件类型(SSE标准wire格式) */
|
|
@@ -46,6 +47,7 @@ export interface ChatChoiceChunk {
|
|
|
46
47
|
export interface ChatDelta {
|
|
47
48
|
role?: 'system' | 'user' | 'assistant' | 'tool';
|
|
48
49
|
content?: string | null;
|
|
50
|
+
reasoning?: string;
|
|
49
51
|
function_call?: ChatFunctionCall;
|
|
50
52
|
tool_calls?: ChatToolCallChunk[];
|
|
51
53
|
}
|
|
@@ -121,7 +123,7 @@ export interface ChatMessage {
|
|
|
121
123
|
export interface ChatFunction {
|
|
122
124
|
name: string;
|
|
123
125
|
description?: string;
|
|
124
|
-
parameters?: Record<string,
|
|
126
|
+
parameters?: Record<string, unknown>;
|
|
125
127
|
}
|
|
126
128
|
export interface ChatTool {
|
|
127
129
|
type: 'function';
|
|
@@ -160,8 +162,8 @@ export interface ChatJsonToSseContext {
|
|
|
160
162
|
currentChunk: Partial<ChatCompletionChunk>;
|
|
161
163
|
eventStats: ChatEventStats;
|
|
162
164
|
contentIndexCounter?: Map<string, number>;
|
|
163
|
-
currentRequest?:
|
|
164
|
-
currentResponse?:
|
|
165
|
+
currentRequest?: ChatCompletionRequest;
|
|
166
|
+
currentResponse?: ChatCompletionResponse;
|
|
165
167
|
chatResponse?: ChatCompletionResponse;
|
|
166
168
|
}
|
|
167
169
|
export interface SseToChatJsonContext {
|
|
@@ -257,7 +259,7 @@ export interface ChatConversionError extends Error {
|
|
|
257
259
|
chunkId?: string;
|
|
258
260
|
choiceIndex?: number;
|
|
259
261
|
toolCallIndex?: number;
|
|
260
|
-
context?:
|
|
262
|
+
context?: JsonObject;
|
|
261
263
|
}
|
|
262
264
|
export declare const CHAT_CONVERSION_ERROR_CODES: {
|
|
263
265
|
readonly TIMEOUT: "CHAT_TIMEOUT";
|
|
@@ -273,8 +275,8 @@ export interface ChatEventValidationRule {
|
|
|
273
275
|
requiredFields: string[];
|
|
274
276
|
optionalFields: string[];
|
|
275
277
|
dataValidation?: {
|
|
276
|
-
schema?:
|
|
277
|
-
customValidator?: (data:
|
|
278
|
+
schema?: JsonObject;
|
|
279
|
+
customValidator?: (data: JsonObject) => boolean;
|
|
278
280
|
};
|
|
279
281
|
}
|
|
280
282
|
export interface ChatConversionConfig {
|
|
@@ -306,3 +308,4 @@ export interface ChatSseEventStream extends AsyncIterable<ChatSseEvent> {
|
|
|
306
308
|
on(event: 'chunk', handler: (chunk: ChatCompletionChunk) => void): this;
|
|
307
309
|
on(event: 'stats', handler: (stats: ChatEventStats) => void): this;
|
|
308
310
|
}
|
|
311
|
+
export {};
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* 转换上下文类型定义
|
|
3
3
|
* 定义JSON<>SSE双向转换过程中的上下文信息
|
|
4
4
|
*/
|
|
5
|
+
import type { JsonObject, JsonValue } from './core-interfaces.js';
|
|
5
6
|
import type { SseEvent, SseEventStats, SseEventType } from './sse-events.js';
|
|
6
7
|
export interface BaseConversionContext {
|
|
7
8
|
requestId: string;
|
|
@@ -36,6 +37,7 @@ export interface SseToJsonContext extends BaseConversionContext {
|
|
|
36
37
|
isResponseCreated: boolean;
|
|
37
38
|
isInProgress: boolean;
|
|
38
39
|
}
|
|
40
|
+
type ConversionContextUnion = JsonToSseContext | SseToJsonContext;
|
|
39
41
|
export interface JsonToSseOptions {
|
|
40
42
|
requestId: string;
|
|
41
43
|
model: string;
|
|
@@ -104,12 +106,13 @@ export interface OutputItemBuilder {
|
|
|
104
106
|
hasContentPartAdded: boolean;
|
|
105
107
|
isTextInProgress: boolean;
|
|
106
108
|
}
|
|
109
|
+
type LoggerMetadata = Record<string, unknown>;
|
|
107
110
|
export interface ConversionLogger {
|
|
108
|
-
debug(message: string, meta?:
|
|
109
|
-
info(message: string, meta?:
|
|
110
|
-
warn(message: string, meta?:
|
|
111
|
-
error(message: string, error?: Error, meta?:
|
|
112
|
-
event(eventType: string, data?:
|
|
111
|
+
debug(message: string, meta?: LoggerMetadata): void;
|
|
112
|
+
info(message: string, meta?: LoggerMetadata): void;
|
|
113
|
+
warn(message: string, meta?: LoggerMetadata): void;
|
|
114
|
+
error(message: string, error?: Error, meta?: LoggerMetadata): void;
|
|
115
|
+
event(eventType: string, data?: LoggerMetadata): void;
|
|
113
116
|
metric(name: string, value: number, tags?: Record<string, string>): void;
|
|
114
117
|
}
|
|
115
118
|
export interface ConversionError extends Error {
|
|
@@ -117,7 +120,7 @@ export interface ConversionError extends Error {
|
|
|
117
120
|
requestId: string;
|
|
118
121
|
eventType?: string;
|
|
119
122
|
sequenceNumber?: number;
|
|
120
|
-
context?:
|
|
123
|
+
context?: JsonObject;
|
|
121
124
|
}
|
|
122
125
|
export interface StreamState {
|
|
123
126
|
isStarted: boolean;
|
|
@@ -156,20 +159,20 @@ export interface ConversionConfig {
|
|
|
156
159
|
export declare const DEFAULT_CONVERSION_CONFIG: ConversionConfig;
|
|
157
160
|
export interface EventHandler {
|
|
158
161
|
canHandle(eventType: SseEventType): boolean;
|
|
159
|
-
handle(event: SseEvent, context:
|
|
162
|
+
handle(event: SseEvent, context: ConversionContextUnion): Promise<void>;
|
|
160
163
|
}
|
|
161
164
|
export interface ConversionMiddleware {
|
|
162
165
|
name: string;
|
|
163
|
-
beforeConversion?: (context:
|
|
164
|
-
afterConversion?: (context:
|
|
165
|
-
onError?: (context:
|
|
166
|
+
beforeConversion?: (context: ConversionContextUnion) => Promise<void>;
|
|
167
|
+
afterConversion?: (context: ConversionContextUnion, result: unknown) => Promise<void>;
|
|
168
|
+
onError?: (context: ConversionContextUnion, error: Error) => Promise<void>;
|
|
166
169
|
}
|
|
167
170
|
interface OutputItem {
|
|
168
171
|
id: string;
|
|
169
172
|
type: 'reasoning' | 'message' | 'function_call' | 'system_message';
|
|
170
173
|
status?: 'in_progress' | 'completed';
|
|
171
174
|
content?: ContentPart[];
|
|
172
|
-
summary?:
|
|
175
|
+
summary?: JsonValue[];
|
|
173
176
|
role?: string;
|
|
174
177
|
arguments?: string;
|
|
175
178
|
call_id?: string;
|
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
* 核心接口定义
|
|
3
3
|
* 统一的SSE事件最小接口,供writer.ts等共享模块使用
|
|
4
4
|
*/
|
|
5
|
+
export interface JsonObject {
|
|
6
|
+
[key: string]: JsonValue;
|
|
7
|
+
}
|
|
8
|
+
export type JsonValue = string | number | boolean | null | JsonObject | JsonValue[];
|
|
5
9
|
export interface BaseSseEvent {
|
|
6
10
|
/** 事件类型 */
|
|
7
11
|
type: string;
|
|
8
12
|
/** 事件时间戳 */
|
|
9
13
|
timestamp: number;
|
|
10
14
|
/** 事件数据 */
|
|
11
|
-
data:
|
|
15
|
+
data: unknown;
|
|
12
16
|
/** 序列号(可选) */
|
|
13
17
|
sequenceNumber?: number;
|
|
14
18
|
/** 协议标识 */
|
|
@@ -56,7 +60,7 @@ export interface BaseConversionContext {
|
|
|
56
60
|
/** 模型名称 */
|
|
57
61
|
model: string;
|
|
58
62
|
/** 转换选项 */
|
|
59
|
-
options:
|
|
63
|
+
options: JsonObject;
|
|
60
64
|
/** 开始时间 */
|
|
61
65
|
startTime: number;
|
|
62
66
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* 支持Responses和Chat协议的JSON↔SSE双向转换
|
|
4
4
|
*/
|
|
5
5
|
export type { BaseSseEvent, BaseSseEventStream, StreamProtocol, StreamDirection, SseProtocol, SseDirection } from './core-interfaces.js';
|
|
6
|
-
export type { ChatSseEvent, ChatSseEventType, ChatSseEventStream, ChatEventStats, ChatJsonToSseContext, SseToChatJsonContext, ChatCompletionRequest, ChatCompletionResponse, ChatCompletionChunk, ChatJsonToSseOptions, SseToChatJsonOptions, ChatConversionError, ChatToolCall, ChatChoiceBuilder, ChatMessageBuilder, ChatToolCallBuilder } from './chat-types.js';
|
|
6
|
+
export type { ChatSseEvent, ChatSseEventType, ChatSseEventStream, ChatEventStats, ChatJsonToSseContext, SseToChatJsonContext, ChatCompletionRequest, ChatCompletionResponse, ChatCompletionChunk, ChatMessage, ChatJsonToSseOptions, SseToChatJsonOptions, ChatConversionError, ChatToolCall, ChatToolCallChunk, ChatChoiceBuilder, ChatMessageBuilder, ChatToolCallBuilder } from './chat-types.js';
|
|
7
7
|
export type { ChatJsonToSseConverter } from '../json-to-sse/chat-json-to-sse-converter.js';
|
|
8
8
|
export type { ResponsesJsonToSseConverter } from '../json-to-sse/responses-json-to-sse-converter.js';
|
|
9
9
|
export type { ResponsesSseEvent, ResponsesSseEventType, ResponsesSseEventStream, ResponsesEventStats, ResponsesJsonToSseContext, SseToResponsesJsonContext, ResponsesJsonToSseOptions, SseToResponsesJsonOptions, ResponsesResponse, ResponsesRequest, ResponsesOutputItem, ResponsesMessageItem, ResponsesFunctionCallItem, ResponsesFunctionCallOutputItem, ResponsesReasoningItem, ResponsesContent, ResponsesTool, ResponsesToolCall, ResponsesUsage, OutputItemBuilder, OutputItemProcessingState } from './responses-types.js';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Responses协议相关类型定义
|
|
3
3
|
* 支持OpenAI Responses API的JSON↔SSE双向转换
|
|
4
4
|
*/
|
|
5
|
-
import { BaseSseEvent, StreamDirection } from './core-interfaces.js';
|
|
5
|
+
import { BaseSseEvent, StreamDirection, type JsonObject, type JsonValue } from './core-interfaces.js';
|
|
6
6
|
export * from './sse-events.js';
|
|
7
7
|
export type ResponsesSseEventType = 'response.created' | 'response.in_progress' | 'response.completed' | 'response.required_action' | 'response.done' | 'response.output_item.added' | 'response.output_item.done' | 'response.content_part.added' | 'response.content_part.done' | 'response.output_text.delta' | 'response.output_text.done' | 'response.reasoning_text.delta' | 'response.reasoning_text.done' | 'response.reasoning_signature.delta' | 'response.reasoning_image.delta' | 'response.reasoning_summary_part.added' | 'response.reasoning_summary_part.done' | 'response.reasoning_summary_text.delta' | 'response.reasoning_summary_text.done' | 'response.function_call_arguments.delta' | 'response.function_call_arguments.done' | 'response.error' | 'response.cancelled' | 'response.start' | 'content_part.delta' | 'reasoning.delta' | 'function_call.start' | 'function_call.delta' | 'function_call.done' | 'output_item.start' | 'content_part.start' | 'content_part.done' | 'output_item.done' | 'reasoning.start' | 'reasoning.done' | 'required_action' | 'error';
|
|
8
8
|
export interface ResponsesSseEvent extends BaseSseEvent {
|
|
@@ -37,7 +37,7 @@ export interface SseToResponsesJsonContext {
|
|
|
37
37
|
startTime: number;
|
|
38
38
|
endTime?: number;
|
|
39
39
|
duration?: number;
|
|
40
|
-
aggregatedEvents:
|
|
40
|
+
aggregatedEvents: ResponsesSseEvent[];
|
|
41
41
|
currentResponse: Partial<ResponsesResponse>;
|
|
42
42
|
outputItemBuilders: Map<string, OutputItemBuilder>;
|
|
43
43
|
eventStats: ResponsesEventStats;
|
|
@@ -53,7 +53,7 @@ export interface ResponsesRequest {
|
|
|
53
53
|
temperature?: number;
|
|
54
54
|
top_p?: number;
|
|
55
55
|
max_output_tokens?: number;
|
|
56
|
-
metadata?:
|
|
56
|
+
metadata?: JsonObject;
|
|
57
57
|
store?: boolean;
|
|
58
58
|
truncation?: 'auto' | 'disabled';
|
|
59
59
|
user?: string;
|
|
@@ -80,27 +80,27 @@ export type ResponsesContent = {
|
|
|
80
80
|
detail?: 'auto' | 'low' | 'high';
|
|
81
81
|
} | {
|
|
82
82
|
type: 'file_search';
|
|
83
|
-
file_search:
|
|
83
|
+
file_search: JsonObject;
|
|
84
84
|
} | {
|
|
85
85
|
type: 'computer_use';
|
|
86
|
-
computer_use:
|
|
86
|
+
computer_use: JsonObject;
|
|
87
87
|
} | {
|
|
88
88
|
type: 'function_call';
|
|
89
89
|
name: string;
|
|
90
90
|
arguments: string;
|
|
91
91
|
} | {
|
|
92
92
|
type: 'function_result';
|
|
93
|
-
result:
|
|
93
|
+
result: JsonValue;
|
|
94
94
|
tool_call_id: string;
|
|
95
95
|
} | {
|
|
96
96
|
type: 'conversation';
|
|
97
|
-
conversation:
|
|
97
|
+
conversation: JsonValue[];
|
|
98
98
|
};
|
|
99
99
|
export interface ResponsesTool {
|
|
100
100
|
type: 'function';
|
|
101
101
|
name: string;
|
|
102
102
|
description?: string;
|
|
103
|
-
parameters?:
|
|
103
|
+
parameters?: JsonObject;
|
|
104
104
|
strict?: boolean;
|
|
105
105
|
}
|
|
106
106
|
export interface ResponsesReasoningConfig {
|
|
@@ -113,7 +113,7 @@ export interface ResponsesResponse {
|
|
|
113
113
|
object: 'response';
|
|
114
114
|
created_at: number;
|
|
115
115
|
status: 'in_progress' | 'requires_action' | 'completed' | 'failed' | 'incomplete';
|
|
116
|
-
error?:
|
|
116
|
+
error?: JsonValue;
|
|
117
117
|
model: string;
|
|
118
118
|
output: ResponsesOutputItem[];
|
|
119
119
|
previous_response_id?: string;
|
|
@@ -121,7 +121,7 @@ export interface ResponsesResponse {
|
|
|
121
121
|
temperature?: number;
|
|
122
122
|
top_p?: number;
|
|
123
123
|
max_output_tokens?: number;
|
|
124
|
-
metadata?:
|
|
124
|
+
metadata?: JsonObject;
|
|
125
125
|
user?: string;
|
|
126
126
|
store?: boolean;
|
|
127
127
|
truncation?: 'auto' | 'disabled';
|
|
@@ -147,7 +147,7 @@ export type ResponsesReasoningContent = {
|
|
|
147
147
|
text: string;
|
|
148
148
|
} | {
|
|
149
149
|
type: 'reasoning_signature';
|
|
150
|
-
signature:
|
|
150
|
+
signature: JsonObject;
|
|
151
151
|
} | {
|
|
152
152
|
type: 'reasoning_image';
|
|
153
153
|
image_url: string;
|
|
@@ -164,14 +164,14 @@ export interface ResponsesFunctionCallOutputItem {
|
|
|
164
164
|
id: string;
|
|
165
165
|
type: 'function_call_output';
|
|
166
166
|
call_id: string;
|
|
167
|
-
output:
|
|
167
|
+
output: JsonValue;
|
|
168
168
|
tool_call_id?: string;
|
|
169
169
|
}
|
|
170
170
|
export interface ResponsesSystemItem {
|
|
171
171
|
id: string;
|
|
172
172
|
type: 'system';
|
|
173
173
|
name: string;
|
|
174
|
-
data:
|
|
174
|
+
data: JsonValue;
|
|
175
175
|
}
|
|
176
176
|
export interface ResponsesUsage {
|
|
177
177
|
input_tokens: number;
|
|
@@ -217,7 +217,7 @@ export interface ResponsesJsonToSseOptions {
|
|
|
217
217
|
includeSequenceNumbers?: boolean;
|
|
218
218
|
includeMetadata?: boolean;
|
|
219
219
|
validationMode?: 'none' | 'basic' | 'strict';
|
|
220
|
-
onEvent?: (event:
|
|
220
|
+
onEvent?: (event: ResponsesSseEvent) => void;
|
|
221
221
|
onError?: (error: Error) => void;
|
|
222
222
|
onComplete?: () => void;
|
|
223
223
|
resumeToolOutputs?: ResponsesFunctionCallOutputItem[];
|
|
@@ -230,7 +230,7 @@ export interface SseToResponsesJsonOptions {
|
|
|
230
230
|
enableSequenceValidation?: boolean;
|
|
231
231
|
accumulateOutputItems?: boolean;
|
|
232
232
|
onPartialResult?: (partial: Partial<ResponsesResponse>) => void;
|
|
233
|
-
onEvent?: (event:
|
|
233
|
+
onEvent?: (event: ResponsesSseEvent) => void;
|
|
234
234
|
onCompletion?: (final: ResponsesResponse) => void;
|
|
235
235
|
onError?: (error: Error) => void;
|
|
236
236
|
onTimeout?: () => void;
|
|
@@ -256,7 +256,7 @@ export interface OutputItemProcessingState {
|
|
|
256
256
|
status: 'in_progress' | 'completed';
|
|
257
257
|
contentIndex: number;
|
|
258
258
|
isContentPartAdded: boolean;
|
|
259
|
-
accumulatedContent:
|
|
259
|
+
accumulatedContent: ResponsesContent[];
|
|
260
260
|
deltaBuffer: string;
|
|
261
261
|
isTextStarted: boolean;
|
|
262
262
|
isTextCompleted: boolean;
|
|
@@ -265,9 +265,9 @@ export interface OutputItemBuilder {
|
|
|
265
265
|
id: string;
|
|
266
266
|
type: string;
|
|
267
267
|
status: 'in_progress' | 'completed';
|
|
268
|
-
contentParts:
|
|
268
|
+
contentParts: ResponsesContent[];
|
|
269
269
|
currentContentIndex: number;
|
|
270
|
-
accumulatedContent:
|
|
270
|
+
accumulatedContent: ResponsesContent[];
|
|
271
271
|
hasContentPartAdded: boolean;
|
|
272
272
|
isTextInProgress: boolean;
|
|
273
273
|
callId?: string;
|
|
@@ -281,7 +281,7 @@ export interface ResponsesConversionError extends Error {
|
|
|
281
281
|
eventId?: string;
|
|
282
282
|
outputItemId?: string;
|
|
283
283
|
sequenceNumber?: number;
|
|
284
|
-
context?:
|
|
284
|
+
context?: JsonObject;
|
|
285
285
|
}
|
|
286
286
|
export declare const RESPONSES_CONVERSION_ERROR_CODES: {
|
|
287
287
|
readonly TIMEOUT: "RESPONSES_TIMEOUT";
|
|
@@ -323,6 +323,6 @@ export interface ResponsesSseEventStream extends AsyncIterable<ResponsesSseEvent
|
|
|
323
323
|
on(event: 'complete', handler: () => void): this;
|
|
324
324
|
on(event: 'timeout', handler: () => void): this;
|
|
325
325
|
on(event: 'output_item', handler: (item: ResponsesOutputItem) => void): this;
|
|
326
|
-
on(event: 'content_part', handler: (part:
|
|
326
|
+
on(event: 'content_part', handler: (part: ResponsesContent) => void): this;
|
|
327
327
|
on(event: 'stats', handler: (stats: ResponsesEventStats) => void): this;
|
|
328
328
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* SSE事件类型定义
|
|
3
3
|
* 基于OpenAI Responses协议的事件规范
|
|
4
4
|
*/
|
|
5
|
+
import type { JsonValue } from './core-interfaces.js';
|
|
5
6
|
export type SseEventType = 'response.created' | 'response.in_progress' | 'response.completed' | 'response.required_action' | 'response.done' | 'response.output_item.added' | 'response.output_item.done' | 'response.content_part.added' | 'response.content_part.done' | 'response.output_text.delta' | 'response.output_text.done' | 'response.reasoning_text.delta' | 'response.reasoning_text.done' | 'response.function_call_arguments.delta' | 'response.function_call_arguments.done';
|
|
6
7
|
export interface BaseSseEvent {
|
|
7
8
|
type: SseEventType;
|
|
@@ -66,7 +67,7 @@ export interface OutputTextDeltaEvent extends BaseSseEvent {
|
|
|
66
67
|
output_index: number;
|
|
67
68
|
content_index: number;
|
|
68
69
|
delta: string;
|
|
69
|
-
logprobs?:
|
|
70
|
+
logprobs?: JsonValue[];
|
|
70
71
|
}
|
|
71
72
|
export interface OutputTextDoneEvent extends BaseSseEvent {
|
|
72
73
|
type: 'response.output_text.done';
|
|
@@ -118,7 +119,7 @@ export interface OutputItem {
|
|
|
118
119
|
type: 'reasoning' | 'message' | 'function_call' | 'system_message';
|
|
119
120
|
status?: 'in_progress' | 'completed';
|
|
120
121
|
content?: ContentPart[];
|
|
121
|
-
summary?:
|
|
122
|
+
summary?: JsonValue[];
|
|
122
123
|
role?: string;
|
|
123
124
|
arguments?: string;
|
|
124
125
|
call_id?: string;
|
|
@@ -173,7 +174,7 @@ export interface EventValidationRule {
|
|
|
173
174
|
optionalFields: string[];
|
|
174
175
|
dependencies: Array<{
|
|
175
176
|
field: string;
|
|
176
|
-
condition: (event:
|
|
177
|
+
condition: (event: Record<string, unknown>) => boolean;
|
|
177
178
|
requiredFields: string[];
|
|
178
179
|
}>;
|
|
179
180
|
}
|