@particle-academy/prism 0.0.0
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/LICENSE +21 -0
- package/README.md +155 -0
- package/dist/audio/pending-request.d.ts +37 -0
- package/dist/audio/pending-request.d.ts.map +1 -0
- package/dist/audio/pending-request.js +91 -0
- package/dist/audio/pending-request.js.map +1 -0
- package/dist/audio/request.d.ts +37 -0
- package/dist/audio/request.d.ts.map +1 -0
- package/dist/audio/request.js +50 -0
- package/dist/audio/request.js.map +1 -0
- package/dist/audio/response.d.ts +24 -0
- package/dist/audio/response.d.ts.map +1 -0
- package/dist/audio/response.js +36 -0
- package/dist/audio/response.js.map +1 -0
- package/dist/batch/batch-job.d.ts +91 -0
- package/dist/batch/batch-job.d.ts.map +1 -0
- package/dist/batch/batch-job.js +156 -0
- package/dist/batch/batch-job.js.map +1 -0
- package/dist/batch/pending-request.d.ts +29 -0
- package/dist/batch/pending-request.d.ts.map +1 -0
- package/dist/batch/pending-request.js +73 -0
- package/dist/batch/pending-request.js.map +1 -0
- package/dist/batch/request.d.ts +73 -0
- package/dist/batch/request.d.ts.map +1 -0
- package/dist/batch/request.js +79 -0
- package/dist/batch/request.js.map +1 -0
- package/dist/embeddings/pending-request.d.ts +38 -0
- package/dist/embeddings/pending-request.d.ts.map +1 -0
- package/dist/embeddings/pending-request.js +86 -0
- package/dist/embeddings/pending-request.js.map +1 -0
- package/dist/embeddings/request.d.ts +27 -0
- package/dist/embeddings/request.d.ts.map +1 -0
- package/dist/embeddings/request.js +38 -0
- package/dist/embeddings/request.js.map +1 -0
- package/dist/embeddings/response.d.ts +19 -0
- package/dist/embeddings/response.d.ts.map +1 -0
- package/dist/embeddings/response.js +21 -0
- package/dist/embeddings/response.js.map +1 -0
- package/dist/enums.d.ts +52 -0
- package/dist/enums.d.ts.map +1 -0
- package/dist/enums.js +69 -0
- package/dist/enums.js.map +1 -0
- package/dist/errors.d.ts +119 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +115 -0
- package/dist/errors.js.map +1 -0
- package/dist/files/file-data.d.ts +53 -0
- package/dist/files/file-data.d.ts.map +1 -0
- package/dist/files/file-data.js +79 -0
- package/dist/files/file-data.js.map +1 -0
- package/dist/files/pending-request.d.ts +38 -0
- package/dist/files/pending-request.d.ts.map +1 -0
- package/dist/files/pending-request.js +96 -0
- package/dist/files/pending-request.js.map +1 -0
- package/dist/files/request.d.ts +77 -0
- package/dist/files/request.d.ts.map +1 -0
- package/dist/files/request.js +81 -0
- package/dist/files/request.js.map +1 -0
- package/dist/fim/pending-request.d.ts +31 -0
- package/dist/fim/pending-request.d.ts.map +1 -0
- package/dist/fim/pending-request.js +89 -0
- package/dist/fim/pending-request.js.map +1 -0
- package/dist/fim/request.d.ts +39 -0
- package/dist/fim/request.d.ts.map +1 -0
- package/dist/fim/request.js +65 -0
- package/dist/fim/request.js.map +1 -0
- package/dist/fim/response.d.ts +21 -0
- package/dist/fim/response.d.ts.map +1 -0
- package/dist/fim/response.js +30 -0
- package/dist/fim/response.js.map +1 -0
- package/dist/http/header-names.d.ts +36 -0
- package/dist/http/header-names.d.ts.map +1 -0
- package/dist/http/header-names.js +44 -0
- package/dist/http/header-names.js.map +1 -0
- package/dist/http/transport.d.ts +94 -0
- package/dist/http/transport.d.ts.map +1 -0
- package/dist/http/transport.js +131 -0
- package/dist/http/transport.js.map +1 -0
- package/dist/images/pending-request.d.ts +30 -0
- package/dist/images/pending-request.d.ts.map +1 -0
- package/dist/images/pending-request.js +66 -0
- package/dist/images/pending-request.js.map +1 -0
- package/dist/images/request.d.ts +19 -0
- package/dist/images/request.d.ts.map +1 -0
- package/dist/images/request.js +30 -0
- package/dist/images/request.js.map +1 -0
- package/dist/images/response.d.ts +29 -0
- package/dist/images/response.d.ts.map +1 -0
- package/dist/images/response.js +34 -0
- package/dist/images/response.js.map +1 -0
- package/dist/index.d.ts +108 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/filters.d.ts +40 -0
- package/dist/internal/filters.d.ts.map +1 -0
- package/dist/internal/filters.js +83 -0
- package/dist/internal/filters.js.map +1 -0
- package/dist/json.d.ts +41 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +75 -0
- package/dist/json.js.map +1 -0
- package/dist/moderation/pending-request.d.ts +24 -0
- package/dist/moderation/pending-request.d.ts.map +1 -0
- package/dist/moderation/pending-request.js +60 -0
- package/dist/moderation/pending-request.js.map +1 -0
- package/dist/moderation/request.d.ts +20 -0
- package/dist/moderation/request.d.ts.map +1 -0
- package/dist/moderation/request.js +31 -0
- package/dist/moderation/request.js.map +1 -0
- package/dist/moderation/response.d.ts +26 -0
- package/dist/moderation/response.d.ts.map +1 -0
- package/dist/moderation/response.js +34 -0
- package/dist/moderation/response.js.map +1 -0
- package/dist/prism.d.ts +43 -0
- package/dist/prism.d.ts.map +1 -0
- package/dist/prism.js +79 -0
- package/dist/prism.js.map +1 -0
- package/dist/providers/anthropic/anthropic.d.ts +67 -0
- package/dist/providers/anthropic/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic/anthropic.js +172 -0
- package/dist/providers/anthropic/anthropic.js.map +1 -0
- package/dist/providers/anthropic/build-request-body.d.ts +15 -0
- package/dist/providers/anthropic/build-request-body.d.ts.map +1 -0
- package/dist/providers/anthropic/build-request-body.js +51 -0
- package/dist/providers/anthropic/build-request-body.js.map +1 -0
- package/dist/providers/anthropic/maps/finish-reason-map.d.ts +14 -0
- package/dist/providers/anthropic/maps/finish-reason-map.d.ts.map +1 -0
- package/dist/providers/anthropic/maps/finish-reason-map.js +30 -0
- package/dist/providers/anthropic/maps/finish-reason-map.js.map +1 -0
- package/dist/providers/anthropic/maps/media-map.d.ts +25 -0
- package/dist/providers/anthropic/maps/media-map.d.ts.map +1 -0
- package/dist/providers/anthropic/maps/media-map.js +87 -0
- package/dist/providers/anthropic/maps/media-map.js.map +1 -0
- package/dist/providers/anthropic/maps/message-map.d.ts +31 -0
- package/dist/providers/anthropic/maps/message-map.d.ts.map +1 -0
- package/dist/providers/anthropic/maps/message-map.js +121 -0
- package/dist/providers/anthropic/maps/message-map.js.map +1 -0
- package/dist/providers/anthropic/maps/tool-choice-map.d.ts +11 -0
- package/dist/providers/anthropic/maps/tool-choice-map.d.ts.map +1 -0
- package/dist/providers/anthropic/maps/tool-choice-map.js +25 -0
- package/dist/providers/anthropic/maps/tool-choice-map.js.map +1 -0
- package/dist/providers/anthropic/maps/tool-map.d.ts +14 -0
- package/dist/providers/anthropic/maps/tool-map.d.ts.map +1 -0
- package/dist/providers/anthropic/maps/tool-map.js +22 -0
- package/dist/providers/anthropic/maps/tool-map.js.map +1 -0
- package/dist/providers/anthropic/parse-response.d.ts +21 -0
- package/dist/providers/anthropic/parse-response.d.ts.map +1 -0
- package/dist/providers/anthropic/parse-response.js +109 -0
- package/dist/providers/anthropic/parse-response.js.map +1 -0
- package/dist/providers/anthropic/rate-limits.d.ts +4 -0
- package/dist/providers/anthropic/rate-limits.d.ts.map +1 -0
- package/dist/providers/anthropic/rate-limits.js +47 -0
- package/dist/providers/anthropic/rate-limits.js.map +1 -0
- package/dist/providers/anthropic/stream-events.d.ts +27 -0
- package/dist/providers/anthropic/stream-events.d.ts.map +1 -0
- package/dist/providers/anthropic/stream-events.js +147 -0
- package/dist/providers/anthropic/stream-events.js.map +1 -0
- package/dist/providers/mistral/build-request-body.d.ts +32 -0
- package/dist/providers/mistral/build-request-body.d.ts.map +1 -0
- package/dist/providers/mistral/build-request-body.js +69 -0
- package/dist/providers/mistral/build-request-body.js.map +1 -0
- package/dist/providers/mistral/embeddings.d.ts +14 -0
- package/dist/providers/mistral/embeddings.d.ts.map +1 -0
- package/dist/providers/mistral/embeddings.js +41 -0
- package/dist/providers/mistral/embeddings.js.map +1 -0
- package/dist/providers/mistral/fim.d.ts +32 -0
- package/dist/providers/mistral/fim.d.ts.map +1 -0
- package/dist/providers/mistral/fim.js +70 -0
- package/dist/providers/mistral/fim.js.map +1 -0
- package/dist/providers/mistral/maps/finish-reason-map.d.ts +15 -0
- package/dist/providers/mistral/maps/finish-reason-map.d.ts.map +1 -0
- package/dist/providers/mistral/maps/finish-reason-map.js +32 -0
- package/dist/providers/mistral/maps/finish-reason-map.js.map +1 -0
- package/dist/providers/mistral/maps/media-map.d.ts +24 -0
- package/dist/providers/mistral/maps/media-map.d.ts.map +1 -0
- package/dist/providers/mistral/maps/media-map.js +41 -0
- package/dist/providers/mistral/maps/media-map.js.map +1 -0
- package/dist/providers/mistral/maps/message-map.d.ts +20 -0
- package/dist/providers/mistral/maps/message-map.d.ts.map +1 -0
- package/dist/providers/mistral/maps/message-map.js +83 -0
- package/dist/providers/mistral/maps/message-map.js.map +1 -0
- package/dist/providers/mistral/maps/tool-choice-map.d.ts +12 -0
- package/dist/providers/mistral/maps/tool-choice-map.d.ts.map +1 -0
- package/dist/providers/mistral/maps/tool-choice-map.js +25 -0
- package/dist/providers/mistral/maps/tool-choice-map.js.map +1 -0
- package/dist/providers/mistral/maps/tool-map.d.ts +15 -0
- package/dist/providers/mistral/maps/tool-map.d.ts.map +1 -0
- package/dist/providers/mistral/maps/tool-map.js +26 -0
- package/dist/providers/mistral/maps/tool-map.js.map +1 -0
- package/dist/providers/mistral/mistral.d.ts +90 -0
- package/dist/providers/mistral/mistral.d.ts.map +1 -0
- package/dist/providers/mistral/mistral.js +210 -0
- package/dist/providers/mistral/mistral.js.map +1 -0
- package/dist/providers/mistral/parse-response.d.ts +35 -0
- package/dist/providers/mistral/parse-response.d.ts.map +1 -0
- package/dist/providers/mistral/parse-response.js +114 -0
- package/dist/providers/mistral/parse-response.js.map +1 -0
- package/dist/providers/mistral/rate-limits.d.ts +24 -0
- package/dist/providers/mistral/rate-limits.d.ts.map +1 -0
- package/dist/providers/mistral/rate-limits.js +55 -0
- package/dist/providers/mistral/rate-limits.js.map +1 -0
- package/dist/providers/mistral/stream-events.d.ts +29 -0
- package/dist/providers/mistral/stream-events.d.ts.map +1 -0
- package/dist/providers/mistral/stream-events.js +142 -0
- package/dist/providers/mistral/stream-events.js.map +1 -0
- package/dist/providers/openai/audio.d.ts +16 -0
- package/dist/providers/openai/audio.d.ts.map +1 -0
- package/dist/providers/openai/audio.js +105 -0
- package/dist/providers/openai/audio.js.map +1 -0
- package/dist/providers/openai/batch.d.ts +29 -0
- package/dist/providers/openai/batch.d.ts.map +1 -0
- package/dist/providers/openai/batch.js +181 -0
- package/dist/providers/openai/batch.js.map +1 -0
- package/dist/providers/openai/build-request-body.d.ts +25 -0
- package/dist/providers/openai/build-request-body.d.ts.map +1 -0
- package/dist/providers/openai/build-request-body.js +66 -0
- package/dist/providers/openai/build-request-body.js.map +1 -0
- package/dist/providers/openai/build-structured-body.d.ts +16 -0
- package/dist/providers/openai/build-structured-body.d.ts.map +1 -0
- package/dist/providers/openai/build-structured-body.js +47 -0
- package/dist/providers/openai/build-structured-body.js.map +1 -0
- package/dist/providers/openai/embeddings.d.ts +6 -0
- package/dist/providers/openai/embeddings.d.ts.map +1 -0
- package/dist/providers/openai/embeddings.js +61 -0
- package/dist/providers/openai/embeddings.js.map +1 -0
- package/dist/providers/openai/files.d.ts +16 -0
- package/dist/providers/openai/files.d.ts.map +1 -0
- package/dist/providers/openai/files.js +80 -0
- package/dist/providers/openai/files.js.map +1 -0
- package/dist/providers/openai/images.d.ts +6 -0
- package/dist/providers/openai/images.d.ts.map +1 -0
- package/dist/providers/openai/images.js +55 -0
- package/dist/providers/openai/images.js.map +1 -0
- package/dist/providers/openai/maps/finish-reason-map.d.ts +21 -0
- package/dist/providers/openai/maps/finish-reason-map.d.ts.map +1 -0
- package/dist/providers/openai/maps/finish-reason-map.js +56 -0
- package/dist/providers/openai/maps/finish-reason-map.js.map +1 -0
- package/dist/providers/openai/maps/media-map.d.ts +25 -0
- package/dist/providers/openai/maps/media-map.d.ts.map +1 -0
- package/dist/providers/openai/maps/media-map.js +53 -0
- package/dist/providers/openai/maps/media-map.js.map +1 -0
- package/dist/providers/openai/maps/message-map.d.ts +21 -0
- package/dist/providers/openai/maps/message-map.d.ts.map +1 -0
- package/dist/providers/openai/maps/message-map.js +128 -0
- package/dist/providers/openai/maps/message-map.js.map +1 -0
- package/dist/providers/openai/maps/tool-choice-map.d.ts +14 -0
- package/dist/providers/openai/maps/tool-choice-map.d.ts.map +1 -0
- package/dist/providers/openai/maps/tool-choice-map.js +27 -0
- package/dist/providers/openai/maps/tool-choice-map.js.map +1 -0
- package/dist/providers/openai/maps/tool-map.d.ts +16 -0
- package/dist/providers/openai/maps/tool-map.d.ts.map +1 -0
- package/dist/providers/openai/maps/tool-map.js +34 -0
- package/dist/providers/openai/maps/tool-map.js.map +1 -0
- package/dist/providers/openai/moderation.d.ts +6 -0
- package/dist/providers/openai/moderation.d.ts.map +1 -0
- package/dist/providers/openai/moderation.js +26 -0
- package/dist/providers/openai/moderation.js.map +1 -0
- package/dist/providers/openai/openai.d.ts +103 -0
- package/dist/providers/openai/openai.d.ts.map +1 -0
- package/dist/providers/openai/openai.js +385 -0
- package/dist/providers/openai/openai.js.map +1 -0
- package/dist/providers/openai/parse-response.d.ts +21 -0
- package/dist/providers/openai/parse-response.d.ts.map +1 -0
- package/dist/providers/openai/parse-response.js +114 -0
- package/dist/providers/openai/parse-response.js.map +1 -0
- package/dist/providers/openai/rate-limits.d.ts +4 -0
- package/dist/providers/openai/rate-limits.d.ts.map +1 -0
- package/dist/providers/openai/rate-limits.js +47 -0
- package/dist/providers/openai/rate-limits.js.map +1 -0
- package/dist/providers/openai/stream-events.d.ts +13 -0
- package/dist/providers/openai/stream-events.d.ts.map +1 -0
- package/dist/providers/openai/stream-events.js +79 -0
- package/dist/providers/openai/stream-events.js.map +1 -0
- package/dist/providers/openai/structured-mode-resolver.d.ts +3 -0
- package/dist/providers/openai/structured-mode-resolver.d.ts.map +1 -0
- package/dist/providers/openai/structured-mode-resolver.js +41 -0
- package/dist/providers/openai/structured-mode-resolver.js.map +1 -0
- package/dist/providers/provider.d.ts +55 -0
- package/dist/providers/provider.d.ts.map +1 -0
- package/dist/providers/provider.js +73 -0
- package/dist/providers/provider.js.map +1 -0
- package/dist/providers/registry.d.ts +10 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +27 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/support/media.d.ts +16 -0
- package/dist/providers/support/media.d.ts.map +1 -0
- package/dist/providers/support/media.js +26 -0
- package/dist/providers/support/media.js.map +1 -0
- package/dist/schema/index.d.ts +114 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +192 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/streaming/events.d.ts +90 -0
- package/dist/streaming/events.d.ts.map +1 -0
- package/dist/streaming/events.js +152 -0
- package/dist/streaming/events.js.map +1 -0
- package/dist/streaming/sse.d.ts +17 -0
- package/dist/streaming/sse.d.ts.map +1 -0
- package/dist/streaming/sse.js +50 -0
- package/dist/streaming/sse.js.map +1 -0
- package/dist/structured/extract.d.ts +23 -0
- package/dist/structured/extract.d.ts.map +1 -0
- package/dist/structured/extract.js +43 -0
- package/dist/structured/extract.js.map +1 -0
- package/dist/structured/from-text.d.ts +16 -0
- package/dist/structured/from-text.d.ts.map +1 -0
- package/dist/structured/from-text.js +27 -0
- package/dist/structured/from-text.js.map +1 -0
- package/dist/structured/pending-request.d.ts +28 -0
- package/dist/structured/pending-request.d.ts.map +1 -0
- package/dist/structured/pending-request.js +48 -0
- package/dist/structured/pending-request.js.map +1 -0
- package/dist/structured/request.d.ts +28 -0
- package/dist/structured/request.d.ts.map +1 -0
- package/dist/structured/request.js +31 -0
- package/dist/structured/request.js.map +1 -0
- package/dist/structured/response.d.ts +44 -0
- package/dist/structured/response.d.ts.map +1 -0
- package/dist/structured/response.js +49 -0
- package/dist/structured/response.js.map +1 -0
- package/dist/text/pending-request.d.ts +77 -0
- package/dist/text/pending-request.d.ts.map +1 -0
- package/dist/text/pending-request.js +189 -0
- package/dist/text/pending-request.js.map +1 -0
- package/dist/text/request.d.ts +62 -0
- package/dist/text/request.d.ts.map +1 -0
- package/dist/text/request.js +117 -0
- package/dist/text/request.js.map +1 -0
- package/dist/text/response-builder.d.ts +16 -0
- package/dist/text/response-builder.d.ts.map +1 -0
- package/dist/text/response-builder.js +52 -0
- package/dist/text/response-builder.js.map +1 -0
- package/dist/text/response.d.ts +36 -0
- package/dist/text/response.d.ts.map +1 -0
- package/dist/text/response.js +40 -0
- package/dist/text/response.js.map +1 -0
- package/dist/text/step.d.ts +41 -0
- package/dist/text/step.d.ts.map +1 -0
- package/dist/text/step.js +46 -0
- package/dist/text/step.js.map +1 -0
- package/dist/tool.d.ts +34 -0
- package/dist/tool.d.ts.map +1 -0
- package/dist/tool.js +86 -0
- package/dist/tool.js.map +1 -0
- package/dist/value-objects/artifact.d.ts +14 -0
- package/dist/value-objects/artifact.d.ts.map +1 -0
- package/dist/value-objects/artifact.js +32 -0
- package/dist/value-objects/artifact.js.map +1 -0
- package/dist/value-objects/embedding.d.ts +24 -0
- package/dist/value-objects/embedding.d.ts.map +1 -0
- package/dist/value-objects/embedding.js +29 -0
- package/dist/value-objects/embedding.js.map +1 -0
- package/dist/value-objects/embeddings-usage.d.ts +16 -0
- package/dist/value-objects/embeddings-usage.d.ts.map +1 -0
- package/dist/value-objects/embeddings-usage.js +19 -0
- package/dist/value-objects/embeddings-usage.js.map +1 -0
- package/dist/value-objects/generated-audio.d.ts +20 -0
- package/dist/value-objects/generated-audio.d.ts.map +1 -0
- package/dist/value-objects/generated-audio.js +23 -0
- package/dist/value-objects/generated-audio.js.map +1 -0
- package/dist/value-objects/generated-image.d.ts +36 -0
- package/dist/value-objects/generated-image.d.ts.map +1 -0
- package/dist/value-objects/generated-image.js +35 -0
- package/dist/value-objects/generated-image.js.map +1 -0
- package/dist/value-objects/index.d.ts +13 -0
- package/dist/value-objects/index.d.ts.map +1 -0
- package/dist/value-objects/index.js +10 -0
- package/dist/value-objects/index.js.map +1 -0
- package/dist/value-objects/media/audio.d.ts +8 -0
- package/dist/value-objects/media/audio.d.ts.map +1 -0
- package/dist/value-objects/media/audio.js +9 -0
- package/dist/value-objects/media/audio.js.map +1 -0
- package/dist/value-objects/media/document.d.ts +44 -0
- package/dist/value-objects/media/document.d.ts.map +1 -0
- package/dist/value-objects/media/document.js +75 -0
- package/dist/value-objects/media/document.js.map +1 -0
- package/dist/value-objects/media/image.d.ts +13 -0
- package/dist/value-objects/media/image.d.ts.map +1 -0
- package/dist/value-objects/media/image.js +14 -0
- package/dist/value-objects/media/image.js.map +1 -0
- package/dist/value-objects/media/media.d.ts +119 -0
- package/dist/value-objects/media/media.d.ts.map +1 -0
- package/dist/value-objects/media/media.js +267 -0
- package/dist/value-objects/media/media.js.map +1 -0
- package/dist/value-objects/media/part.d.ts +25 -0
- package/dist/value-objects/media/part.d.ts.map +1 -0
- package/dist/value-objects/media/part.js +41 -0
- package/dist/value-objects/media/part.js.map +1 -0
- package/dist/value-objects/media/text.d.ts +24 -0
- package/dist/value-objects/media/text.d.ts.map +1 -0
- package/dist/value-objects/media/text.js +33 -0
- package/dist/value-objects/media/text.js.map +1 -0
- package/dist/value-objects/media/video.d.ts +7 -0
- package/dist/value-objects/media/video.d.ts.map +1 -0
- package/dist/value-objects/media/video.js +8 -0
- package/dist/value-objects/media/video.js.map +1 -0
- package/dist/value-objects/messages/assistant-message.d.ts +26 -0
- package/dist/value-objects/messages/assistant-message.d.ts.map +1 -0
- package/dist/value-objects/messages/assistant-message.js +37 -0
- package/dist/value-objects/messages/assistant-message.js.map +1 -0
- package/dist/value-objects/messages/index.d.ts +27 -0
- package/dist/value-objects/messages/index.d.ts.map +1 -0
- package/dist/value-objects/messages/index.js +32 -0
- package/dist/value-objects/messages/index.js.map +1 -0
- package/dist/value-objects/messages/system-message.d.ts +9 -0
- package/dist/value-objects/messages/system-message.d.ts.map +1 -0
- package/dist/value-objects/messages/system-message.js +17 -0
- package/dist/value-objects/messages/system-message.js.map +1 -0
- package/dist/value-objects/messages/tool-result-message.d.ts +14 -0
- package/dist/value-objects/messages/tool-result-message.d.ts.map +1 -0
- package/dist/value-objects/messages/tool-result-message.js +26 -0
- package/dist/value-objects/messages/tool-result-message.js.map +1 -0
- package/dist/value-objects/messages/user-message.d.ts +47 -0
- package/dist/value-objects/messages/user-message.d.ts.map +1 -0
- package/dist/value-objects/messages/user-message.js +87 -0
- package/dist/value-objects/messages/user-message.js.map +1 -0
- package/dist/value-objects/meta.d.ts +12 -0
- package/dist/value-objects/meta.d.ts.map +1 -0
- package/dist/value-objects/meta.js +28 -0
- package/dist/value-objects/meta.js.map +1 -0
- package/dist/value-objects/moderation-result.d.ts +20 -0
- package/dist/value-objects/moderation-result.d.ts.map +1 -0
- package/dist/value-objects/moderation-result.js +64 -0
- package/dist/value-objects/moderation-result.js.map +1 -0
- package/dist/value-objects/provider-rate-limit.d.ts +11 -0
- package/dist/value-objects/provider-rate-limit.d.ts.map +1 -0
- package/dist/value-objects/provider-rate-limit.js +34 -0
- package/dist/value-objects/provider-rate-limit.js.map +1 -0
- package/dist/value-objects/provider-tool.d.ts +19 -0
- package/dist/value-objects/provider-tool.d.ts.map +1 -0
- package/dist/value-objects/provider-tool.js +31 -0
- package/dist/value-objects/provider-tool.js.map +1 -0
- package/dist/value-objects/tool-call.d.ts +29 -0
- package/dist/value-objects/tool-call.d.ts.map +1 -0
- package/dist/value-objects/tool-call.js +112 -0
- package/dist/value-objects/tool-call.js.map +1 -0
- package/dist/value-objects/tool-result.d.ts +25 -0
- package/dist/value-objects/tool-result.d.ts.map +1 -0
- package/dist/value-objects/tool-result.js +45 -0
- package/dist/value-objects/tool-result.js.map +1 -0
- package/dist/value-objects/usage.d.ts +13 -0
- package/dist/value-objects/usage.d.ts.map +1 -0
- package/dist/value-objects/usage.js +31 -0
- package/dist/value-objects/usage.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/** The reference expresses "nullable" as a two-member type union, not a flag. */
|
|
2
|
+
function schemaType(type, nullable) {
|
|
3
|
+
return nullable ? [type, 'null'] : type;
|
|
4
|
+
}
|
|
5
|
+
export class StringSchema {
|
|
6
|
+
name;
|
|
7
|
+
description;
|
|
8
|
+
nullable;
|
|
9
|
+
pattern;
|
|
10
|
+
format;
|
|
11
|
+
constructor(name, description, options = {}) {
|
|
12
|
+
this.name = name;
|
|
13
|
+
this.description = description;
|
|
14
|
+
this.nullable = options.nullable ?? false;
|
|
15
|
+
this.pattern = options.pattern ?? null;
|
|
16
|
+
this.format = options.format ?? null;
|
|
17
|
+
}
|
|
18
|
+
toObject() {
|
|
19
|
+
const schema = {
|
|
20
|
+
description: this.description,
|
|
21
|
+
type: schemaType('string', this.nullable),
|
|
22
|
+
};
|
|
23
|
+
if (this.pattern !== null) {
|
|
24
|
+
schema.pattern = this.pattern;
|
|
25
|
+
}
|
|
26
|
+
if (this.format !== null) {
|
|
27
|
+
schema.format = this.format;
|
|
28
|
+
}
|
|
29
|
+
return schema;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export class NumberSchema {
|
|
33
|
+
name;
|
|
34
|
+
description;
|
|
35
|
+
nullable;
|
|
36
|
+
multipleOf;
|
|
37
|
+
maximum;
|
|
38
|
+
exclusiveMaximum;
|
|
39
|
+
minimum;
|
|
40
|
+
exclusiveMinimum;
|
|
41
|
+
constructor(name, description, options = {}) {
|
|
42
|
+
this.name = name;
|
|
43
|
+
this.description = description;
|
|
44
|
+
this.nullable = options.nullable ?? false;
|
|
45
|
+
this.multipleOf = options.multipleOf ?? null;
|
|
46
|
+
this.maximum = options.maximum ?? null;
|
|
47
|
+
this.exclusiveMaximum = options.exclusiveMaximum ?? null;
|
|
48
|
+
this.minimum = options.minimum ?? null;
|
|
49
|
+
this.exclusiveMinimum = options.exclusiveMinimum ?? null;
|
|
50
|
+
}
|
|
51
|
+
toObject() {
|
|
52
|
+
const schema = {
|
|
53
|
+
description: this.description,
|
|
54
|
+
type: schemaType('number', this.nullable),
|
|
55
|
+
};
|
|
56
|
+
if (this.multipleOf !== null) {
|
|
57
|
+
schema.multipleOf = this.multipleOf;
|
|
58
|
+
}
|
|
59
|
+
if (this.maximum !== null) {
|
|
60
|
+
schema.maximum = this.maximum;
|
|
61
|
+
}
|
|
62
|
+
if (this.exclusiveMaximum !== null) {
|
|
63
|
+
schema.exclusiveMaximum = this.exclusiveMaximum;
|
|
64
|
+
}
|
|
65
|
+
if (this.minimum !== null) {
|
|
66
|
+
schema.minimum = this.minimum;
|
|
67
|
+
}
|
|
68
|
+
if (this.exclusiveMinimum !== null) {
|
|
69
|
+
schema.exclusiveMinimum = this.exclusiveMinimum;
|
|
70
|
+
}
|
|
71
|
+
return schema;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export class BooleanSchema {
|
|
75
|
+
name;
|
|
76
|
+
description;
|
|
77
|
+
nullable;
|
|
78
|
+
constructor(name, description, options = {}) {
|
|
79
|
+
this.name = name;
|
|
80
|
+
this.description = description;
|
|
81
|
+
this.nullable = options.nullable ?? false;
|
|
82
|
+
}
|
|
83
|
+
toObject() {
|
|
84
|
+
return {
|
|
85
|
+
description: this.description,
|
|
86
|
+
type: schemaType('boolean', this.nullable),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The schema a structured response is shaped by.
|
|
92
|
+
*
|
|
93
|
+
* `allowAdditionalProperties` DEFAULTS TO FALSE, matching the reference, and the
|
|
94
|
+
* default matters more here than it looks: OpenAI's strict schema mode REJECTS a
|
|
95
|
+
* schema that permits extra properties, so a permissive default would make the
|
|
96
|
+
* strongest structured mode unusable and silently push every request down to
|
|
97
|
+
* plain JSON mode.
|
|
98
|
+
*/
|
|
99
|
+
export class ObjectSchema {
|
|
100
|
+
name;
|
|
101
|
+
description;
|
|
102
|
+
properties;
|
|
103
|
+
requiredFields;
|
|
104
|
+
allowAdditionalProperties;
|
|
105
|
+
nullable;
|
|
106
|
+
constructor(name, description, properties = [], options = {}) {
|
|
107
|
+
this.name = name;
|
|
108
|
+
this.description = description;
|
|
109
|
+
this.properties = properties;
|
|
110
|
+
this.requiredFields = options.requiredFields ?? [];
|
|
111
|
+
this.allowAdditionalProperties = options.allowAdditionalProperties ?? false;
|
|
112
|
+
this.nullable = options.nullable ?? false;
|
|
113
|
+
}
|
|
114
|
+
toObject() {
|
|
115
|
+
const properties = {};
|
|
116
|
+
for (const property of this.properties) {
|
|
117
|
+
properties[property.name] = property.toObject();
|
|
118
|
+
}
|
|
119
|
+
// `properties` is dropped when empty rather than sent as `{}`, matching the
|
|
120
|
+
// reference's not-null filter. `required` and `additionalProperties` are
|
|
121
|
+
// always sent: `[]` and `false` are meaningful answers, not absences.
|
|
122
|
+
const schema = {
|
|
123
|
+
description: this.description,
|
|
124
|
+
type: schemaType('object', this.nullable),
|
|
125
|
+
};
|
|
126
|
+
if (this.properties.length > 0) {
|
|
127
|
+
schema.properties = properties;
|
|
128
|
+
}
|
|
129
|
+
schema.required = [...this.requiredFields];
|
|
130
|
+
schema.additionalProperties = this.allowAdditionalProperties;
|
|
131
|
+
return schema;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
export class ArraySchema {
|
|
135
|
+
name;
|
|
136
|
+
description;
|
|
137
|
+
items;
|
|
138
|
+
minItems;
|
|
139
|
+
maxItems;
|
|
140
|
+
nullable;
|
|
141
|
+
constructor(name, description, items, options = {}) {
|
|
142
|
+
this.name = name;
|
|
143
|
+
this.description = description;
|
|
144
|
+
this.items = items;
|
|
145
|
+
this.minItems = options.minItems ?? null;
|
|
146
|
+
this.maxItems = options.maxItems ?? null;
|
|
147
|
+
this.nullable = options.nullable ?? false;
|
|
148
|
+
}
|
|
149
|
+
toObject() {
|
|
150
|
+
const schema = {
|
|
151
|
+
description: this.description,
|
|
152
|
+
type: schemaType('array', this.nullable),
|
|
153
|
+
items: this.items.toObject(),
|
|
154
|
+
};
|
|
155
|
+
// Present only when set. The reference appends these conditionally rather
|
|
156
|
+
// than emitting nulls, and a `minItems: null` is rejected by strict mode.
|
|
157
|
+
if (this.minItems !== null) {
|
|
158
|
+
schema.minItems = this.minItems;
|
|
159
|
+
}
|
|
160
|
+
if (this.maxItems !== null) {
|
|
161
|
+
schema.maxItems = this.maxItems;
|
|
162
|
+
}
|
|
163
|
+
return schema;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* A closed set of allowed values.
|
|
168
|
+
*
|
|
169
|
+
* When nullable, the reference adds `null` to the OPTIONS as well as to the
|
|
170
|
+
* type union — a nullable enum whose options omit null describes a value that
|
|
171
|
+
* can be null and may not be, which no validator can satisfy.
|
|
172
|
+
*/
|
|
173
|
+
export class EnumSchema {
|
|
174
|
+
name;
|
|
175
|
+
description;
|
|
176
|
+
options;
|
|
177
|
+
nullable;
|
|
178
|
+
constructor(name, description, options, schemaOptions = {}) {
|
|
179
|
+
this.name = name;
|
|
180
|
+
this.description = description;
|
|
181
|
+
this.options = options;
|
|
182
|
+
this.nullable = schemaOptions.nullable ?? false;
|
|
183
|
+
}
|
|
184
|
+
toObject() {
|
|
185
|
+
return {
|
|
186
|
+
description: this.description,
|
|
187
|
+
enum: this.nullable ? [...this.options, null] : [...this.options],
|
|
188
|
+
type: schemaType('string', this.nullable),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { JsonObject } from '../json.js';
|
|
2
|
+
import type { FinishReason } from '../enums.js';
|
|
3
|
+
import type { ToolCall } from '../value-objects/tool-call.js';
|
|
4
|
+
import type { Usage } from '../value-objects/usage.js';
|
|
5
|
+
/**
|
|
6
|
+
* What a stream emits.
|
|
7
|
+
*
|
|
8
|
+
* The reference defines twenty event types; this port emits the seven that
|
|
9
|
+
* OpenAI and Anthropic actually produce through the paths implemented here.
|
|
10
|
+
* The enum lists ONLY those seven rather than all twenty, deliberately: a
|
|
11
|
+
* member nothing can ever emit reads to a consumer as a case they must handle,
|
|
12
|
+
* and writing a branch for an event that never arrives is worse than not
|
|
13
|
+
* knowing it exists. They are added when a provider can emit them.
|
|
14
|
+
*/
|
|
15
|
+
export declare enum StreamEventType {
|
|
16
|
+
StreamStart = "stream_start",
|
|
17
|
+
TextStart = "text_start",
|
|
18
|
+
TextDelta = "text_delta",
|
|
19
|
+
TextComplete = "text_complete",
|
|
20
|
+
ToolCall = "tool_call",
|
|
21
|
+
Error = "error",
|
|
22
|
+
StreamEnd = "stream_end"
|
|
23
|
+
}
|
|
24
|
+
/** Unique within a process, and cheap. Streams are correlated by run, not by this. */
|
|
25
|
+
export declare function eventId(prefix?: string): string;
|
|
26
|
+
export declare abstract class StreamEvent {
|
|
27
|
+
readonly id: string;
|
|
28
|
+
readonly timestamp: number;
|
|
29
|
+
constructor(id?: string, timestamp?: number);
|
|
30
|
+
abstract type(): StreamEventType;
|
|
31
|
+
abstract toObject(): JsonObject;
|
|
32
|
+
protected base(): JsonObject;
|
|
33
|
+
}
|
|
34
|
+
export declare class StreamStartEvent extends StreamEvent {
|
|
35
|
+
readonly model: string;
|
|
36
|
+
constructor(model: string, id?: string, timestamp?: number);
|
|
37
|
+
type(): StreamEventType;
|
|
38
|
+
toObject(): JsonObject;
|
|
39
|
+
}
|
|
40
|
+
export declare class TextStartEvent extends StreamEvent {
|
|
41
|
+
readonly messageId: string;
|
|
42
|
+
constructor(messageId: string, id?: string, timestamp?: number);
|
|
43
|
+
type(): StreamEventType;
|
|
44
|
+
toObject(): JsonObject;
|
|
45
|
+
}
|
|
46
|
+
/** The one a consumer renders. Everything else is bookkeeping around it. */
|
|
47
|
+
export declare class TextDeltaEvent extends StreamEvent {
|
|
48
|
+
readonly delta: string;
|
|
49
|
+
readonly messageId: string;
|
|
50
|
+
constructor(delta: string, messageId: string, id?: string, timestamp?: number);
|
|
51
|
+
type(): StreamEventType;
|
|
52
|
+
toObject(): JsonObject;
|
|
53
|
+
}
|
|
54
|
+
export declare class TextCompleteEvent extends StreamEvent {
|
|
55
|
+
readonly text: string;
|
|
56
|
+
readonly messageId: string;
|
|
57
|
+
constructor(text: string, messageId: string, id?: string, timestamp?: number);
|
|
58
|
+
type(): StreamEventType;
|
|
59
|
+
toObject(): JsonObject;
|
|
60
|
+
}
|
|
61
|
+
export declare class ToolCallEvent extends StreamEvent {
|
|
62
|
+
readonly toolCall: ToolCall;
|
|
63
|
+
readonly messageId: string;
|
|
64
|
+
constructor(toolCall: ToolCall, messageId: string, id?: string, timestamp?: number);
|
|
65
|
+
type(): StreamEventType;
|
|
66
|
+
toObject(): JsonObject;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The provider reported a failure MID-STREAM.
|
|
70
|
+
*
|
|
71
|
+
* Emitted rather than thrown, and the distinction is the reason this type
|
|
72
|
+
* exists: by the time it arrives the consumer has already rendered text, and
|
|
73
|
+
* throwing would discard a partial answer the user watched appear. The stream
|
|
74
|
+
* ends after it; the caller decides what the partial answer was worth.
|
|
75
|
+
*/
|
|
76
|
+
export declare class ErrorEvent extends StreamEvent {
|
|
77
|
+
readonly code: string;
|
|
78
|
+
readonly message: string;
|
|
79
|
+
constructor(code: string, message: string, id?: string, timestamp?: number);
|
|
80
|
+
type(): StreamEventType;
|
|
81
|
+
toObject(): JsonObject;
|
|
82
|
+
}
|
|
83
|
+
export declare class StreamEndEvent extends StreamEvent {
|
|
84
|
+
readonly finishReason: FinishReason;
|
|
85
|
+
readonly usage: Usage | null;
|
|
86
|
+
constructor(finishReason: FinishReason, usage?: Usage | null, id?: string, timestamp?: number);
|
|
87
|
+
type(): StreamEventType;
|
|
88
|
+
toObject(): JsonObject;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/streaming/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a stream emits.
|
|
3
|
+
*
|
|
4
|
+
* The reference defines twenty event types; this port emits the seven that
|
|
5
|
+
* OpenAI and Anthropic actually produce through the paths implemented here.
|
|
6
|
+
* The enum lists ONLY those seven rather than all twenty, deliberately: a
|
|
7
|
+
* member nothing can ever emit reads to a consumer as a case they must handle,
|
|
8
|
+
* and writing a branch for an event that never arrives is worse than not
|
|
9
|
+
* knowing it exists. They are added when a provider can emit them.
|
|
10
|
+
*/
|
|
11
|
+
export var StreamEventType;
|
|
12
|
+
(function (StreamEventType) {
|
|
13
|
+
StreamEventType["StreamStart"] = "stream_start";
|
|
14
|
+
StreamEventType["TextStart"] = "text_start";
|
|
15
|
+
StreamEventType["TextDelta"] = "text_delta";
|
|
16
|
+
StreamEventType["TextComplete"] = "text_complete";
|
|
17
|
+
StreamEventType["ToolCall"] = "tool_call";
|
|
18
|
+
StreamEventType["Error"] = "error";
|
|
19
|
+
StreamEventType["StreamEnd"] = "stream_end";
|
|
20
|
+
})(StreamEventType || (StreamEventType = {}));
|
|
21
|
+
let counter = 0;
|
|
22
|
+
/** Unique within a process, and cheap. Streams are correlated by run, not by this. */
|
|
23
|
+
export function eventId(prefix = 'evt') {
|
|
24
|
+
counter += 1;
|
|
25
|
+
return `${prefix}_${Date.now().toString(36)}${counter.toString(36)}`;
|
|
26
|
+
}
|
|
27
|
+
export class StreamEvent {
|
|
28
|
+
id;
|
|
29
|
+
timestamp;
|
|
30
|
+
constructor(id, timestamp) {
|
|
31
|
+
this.id = id ?? eventId();
|
|
32
|
+
this.timestamp = timestamp ?? Date.now();
|
|
33
|
+
}
|
|
34
|
+
base() {
|
|
35
|
+
return { id: this.id, timestamp: this.timestamp, type: this.type() };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class StreamStartEvent extends StreamEvent {
|
|
39
|
+
model;
|
|
40
|
+
constructor(model, id, timestamp) {
|
|
41
|
+
super(id, timestamp);
|
|
42
|
+
this.model = model;
|
|
43
|
+
}
|
|
44
|
+
type() {
|
|
45
|
+
return StreamEventType.StreamStart;
|
|
46
|
+
}
|
|
47
|
+
toObject() {
|
|
48
|
+
return { ...this.base(), model: this.model };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class TextStartEvent extends StreamEvent {
|
|
52
|
+
messageId;
|
|
53
|
+
constructor(messageId, id, timestamp) {
|
|
54
|
+
super(id, timestamp);
|
|
55
|
+
this.messageId = messageId;
|
|
56
|
+
}
|
|
57
|
+
type() {
|
|
58
|
+
return StreamEventType.TextStart;
|
|
59
|
+
}
|
|
60
|
+
toObject() {
|
|
61
|
+
return { ...this.base(), message_id: this.messageId };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** The one a consumer renders. Everything else is bookkeeping around it. */
|
|
65
|
+
export class TextDeltaEvent extends StreamEvent {
|
|
66
|
+
delta;
|
|
67
|
+
messageId;
|
|
68
|
+
constructor(delta, messageId, id, timestamp) {
|
|
69
|
+
super(id, timestamp);
|
|
70
|
+
this.delta = delta;
|
|
71
|
+
this.messageId = messageId;
|
|
72
|
+
}
|
|
73
|
+
type() {
|
|
74
|
+
return StreamEventType.TextDelta;
|
|
75
|
+
}
|
|
76
|
+
toObject() {
|
|
77
|
+
return { ...this.base(), delta: this.delta, message_id: this.messageId };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export class TextCompleteEvent extends StreamEvent {
|
|
81
|
+
text;
|
|
82
|
+
messageId;
|
|
83
|
+
constructor(text, messageId, id, timestamp) {
|
|
84
|
+
super(id, timestamp);
|
|
85
|
+
this.text = text;
|
|
86
|
+
this.messageId = messageId;
|
|
87
|
+
}
|
|
88
|
+
type() {
|
|
89
|
+
return StreamEventType.TextComplete;
|
|
90
|
+
}
|
|
91
|
+
toObject() {
|
|
92
|
+
return { ...this.base(), text: this.text, message_id: this.messageId };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export class ToolCallEvent extends StreamEvent {
|
|
96
|
+
toolCall;
|
|
97
|
+
messageId;
|
|
98
|
+
constructor(toolCall, messageId, id, timestamp) {
|
|
99
|
+
super(id, timestamp);
|
|
100
|
+
this.toolCall = toolCall;
|
|
101
|
+
this.messageId = messageId;
|
|
102
|
+
}
|
|
103
|
+
type() {
|
|
104
|
+
return StreamEventType.ToolCall;
|
|
105
|
+
}
|
|
106
|
+
toObject() {
|
|
107
|
+
return { ...this.base(), tool_call: this.toolCall.toObject(), message_id: this.messageId };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* The provider reported a failure MID-STREAM.
|
|
112
|
+
*
|
|
113
|
+
* Emitted rather than thrown, and the distinction is the reason this type
|
|
114
|
+
* exists: by the time it arrives the consumer has already rendered text, and
|
|
115
|
+
* throwing would discard a partial answer the user watched appear. The stream
|
|
116
|
+
* ends after it; the caller decides what the partial answer was worth.
|
|
117
|
+
*/
|
|
118
|
+
export class ErrorEvent extends StreamEvent {
|
|
119
|
+
code;
|
|
120
|
+
message;
|
|
121
|
+
constructor(code, message, id, timestamp) {
|
|
122
|
+
super(id, timestamp);
|
|
123
|
+
this.code = code;
|
|
124
|
+
this.message = message;
|
|
125
|
+
}
|
|
126
|
+
type() {
|
|
127
|
+
return StreamEventType.Error;
|
|
128
|
+
}
|
|
129
|
+
toObject() {
|
|
130
|
+
return { ...this.base(), code: this.code, message: this.message };
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
export class StreamEndEvent extends StreamEvent {
|
|
134
|
+
finishReason;
|
|
135
|
+
usage;
|
|
136
|
+
constructor(finishReason, usage = null, id, timestamp) {
|
|
137
|
+
super(id, timestamp);
|
|
138
|
+
this.finishReason = finishReason;
|
|
139
|
+
this.usage = usage;
|
|
140
|
+
}
|
|
141
|
+
type() {
|
|
142
|
+
return StreamEventType.StreamEnd;
|
|
143
|
+
}
|
|
144
|
+
toObject() {
|
|
145
|
+
return {
|
|
146
|
+
...this.base(),
|
|
147
|
+
finish_reason: this.finishReason,
|
|
148
|
+
usage: this.usage === null ? null : this.usage.toObject(),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/streaming/events.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,MAAM,CAAN,IAAY,eAQX;AARD,WAAY,eAAe;IACzB,+CAA4B,CAAA;IAC5B,2CAAwB,CAAA;IACxB,2CAAwB,CAAA;IACxB,iDAA8B,CAAA;IAC9B,yCAAsB,CAAA;IACtB,kCAAe,CAAA;IACf,2CAAwB,CAAA;AAC1B,CAAC,EARW,eAAe,KAAf,eAAe,QAQ1B;AAED,IAAI,OAAO,GAAG,CAAC,CAAC;AAEhB,sFAAsF;AACtF,MAAM,UAAU,OAAO,CAAC,MAAM,GAAG,KAAK;IACpC,OAAO,IAAI,CAAC,CAAC;IAEb,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,OAAgB,WAAW;IACtB,EAAE,CAAS;IAEX,SAAS,CAAS;IAE3B,YAAY,EAAW,EAAE,SAAkB;QACzC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3C,CAAC;IAMS,IAAI;QACZ,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;IACvE,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAEpC;IADX,YACW,KAAa,EACtB,EAAW,EACX,SAAkB;QAElB,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAJZ,UAAK,GAAL,KAAK,CAAQ;IAKxB,CAAC;IAED,IAAI;QACF,OAAO,eAAe,CAAC,WAAW,CAAC;IACrC,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC/C,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,WAAW;IAElC;IADX,YACW,SAAiB,EAC1B,EAAW,EACX,SAAkB;QAElB,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAJZ,cAAS,GAAT,SAAS,CAAQ;IAK5B,CAAC;IAED,IAAI;QACF,OAAO,eAAe,CAAC,SAAS,CAAC;IACnC,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACxD,CAAC;CACF;AAED,4EAA4E;AAC5E,MAAM,OAAO,cAAe,SAAQ,WAAW;IAElC;IACA;IAFX,YACW,KAAa,EACb,SAAiB,EAC1B,EAAW,EACX,SAAkB;QAElB,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QALZ,UAAK,GAAL,KAAK,CAAQ;QACb,cAAS,GAAT,SAAS,CAAQ;IAK5B,CAAC;IAED,IAAI;QACF,OAAO,eAAe,CAAC,SAAS,CAAC;IACnC,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAC3E,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IAErC;IACA;IAFX,YACW,IAAY,EACZ,SAAiB,EAC1B,EAAW,EACX,SAAkB;QAElB,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QALZ,SAAI,GAAJ,IAAI,CAAQ;QACZ,cAAS,GAAT,SAAS,CAAQ;IAK5B,CAAC;IAED,IAAI;QACF,OAAO,eAAe,CAAC,YAAY,CAAC;IACtC,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACzE,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,WAAW;IAEjC;IACA;IAFX,YACW,QAAkB,EAClB,SAAiB,EAC1B,EAAW,EACX,SAAkB;QAElB,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QALZ,aAAQ,GAAR,QAAQ,CAAU;QAClB,cAAS,GAAT,SAAS,CAAQ;IAK5B,CAAC;IAED,IAAI;QACF,OAAO,eAAe,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAC7F,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,UAAW,SAAQ,WAAW;IAE9B;IACA;IAFX,YACW,IAAY,EACZ,OAAe,EACxB,EAAW,EACX,SAAkB;QAElB,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QALZ,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAQ;IAK1B,CAAC;IAED,IAAI;QACF,OAAO,eAAe,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IACpE,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,WAAW;IAElC;IACA;IAFX,YACW,YAA0B,EAC1B,QAAsB,IAAI,EACnC,EAAW,EACX,SAAkB;QAElB,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QALZ,iBAAY,GAAZ,YAAY,CAAc;QAC1B,UAAK,GAAL,KAAK,CAAqB;IAKrC,CAAC;IAED,IAAI;QACF,OAAO,eAAe,CAAC,SAAS,CAAC;IACnC,CAAC;IAED,QAAQ;QACN,OAAO;YACL,GAAG,IAAI,CAAC,IAAI,EAAE;YACd,aAAa,EAAE,IAAI,CAAC,YAAY;YAChC,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;SAC1D,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-sent events, reassembled from whatever the network handed over.
|
|
3
|
+
*
|
|
4
|
+
* THE TRANSPORT YIELDS CHUNKS, NOT LINES, and this is where that costs
|
|
5
|
+
* something and pays for itself. A chunk can end mid-line, mid-JSON, or mid
|
|
6
|
+
* anything — providers do not align their writes to the reader's convenience —
|
|
7
|
+
* so the buffer below is the whole point of the split. A transport that
|
|
8
|
+
* promised lines would have to do this internally, where no test could split a
|
|
9
|
+
* payload at an awkward place on purpose.
|
|
10
|
+
*
|
|
11
|
+
* Only `data:` lines are surfaced. SSE also carries `event:`, `id:` and
|
|
12
|
+
* comments; neither provider this port speaks to uses them for anything the
|
|
13
|
+
* payload does not already say, and inventing meaning for them would be
|
|
14
|
+
* guessing at a protocol rather than reading it.
|
|
15
|
+
*/
|
|
16
|
+
export declare function sseData(chunks: AsyncIterable<string>): AsyncGenerator<string>;
|
|
17
|
+
//# sourceMappingURL=sse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/streaming/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,wBAAuB,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CA+BpF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-sent events, reassembled from whatever the network handed over.
|
|
3
|
+
*
|
|
4
|
+
* THE TRANSPORT YIELDS CHUNKS, NOT LINES, and this is where that costs
|
|
5
|
+
* something and pays for itself. A chunk can end mid-line, mid-JSON, or mid
|
|
6
|
+
* anything — providers do not align their writes to the reader's convenience —
|
|
7
|
+
* so the buffer below is the whole point of the split. A transport that
|
|
8
|
+
* promised lines would have to do this internally, where no test could split a
|
|
9
|
+
* payload at an awkward place on purpose.
|
|
10
|
+
*
|
|
11
|
+
* Only `data:` lines are surfaced. SSE also carries `event:`, `id:` and
|
|
12
|
+
* comments; neither provider this port speaks to uses them for anything the
|
|
13
|
+
* payload does not already say, and inventing meaning for them would be
|
|
14
|
+
* guessing at a protocol rather than reading it.
|
|
15
|
+
*/
|
|
16
|
+
export async function* sseData(chunks) {
|
|
17
|
+
let buffer = '';
|
|
18
|
+
for await (const chunk of chunks) {
|
|
19
|
+
buffer += chunk;
|
|
20
|
+
// `\n` rather than `\r\n`: the spec allows either, and splitting on the
|
|
21
|
+
// longer one leaves a stray `\r` on every line from a server that uses it.
|
|
22
|
+
let newline = buffer.indexOf('\n');
|
|
23
|
+
while (newline !== -1) {
|
|
24
|
+
const line = buffer.slice(0, newline).replace(/\r$/, '');
|
|
25
|
+
buffer = buffer.slice(newline + 1);
|
|
26
|
+
const payload = dataPayload(line);
|
|
27
|
+
if (payload !== null) {
|
|
28
|
+
yield payload;
|
|
29
|
+
}
|
|
30
|
+
newline = buffer.indexOf('\n');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// A final line with no trailing newline is still a line. Dropping it loses
|
|
34
|
+
// the last event of any stream a server closes without one.
|
|
35
|
+
const payload = dataPayload(buffer.replace(/\r$/, ''));
|
|
36
|
+
if (payload !== null) {
|
|
37
|
+
yield payload;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function dataPayload(line) {
|
|
41
|
+
if (!line.startsWith('data:')) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
// One optional space after the colon is part of the format, not content.
|
|
45
|
+
const payload = line.slice(5).replace(/^ /, '');
|
|
46
|
+
// `[DONE]` is OpenAI's sentinel, not JSON. Filtered here rather than left for
|
|
47
|
+
// the caller to parse and fail on.
|
|
48
|
+
return payload === '' || payload === '[DONE]' ? null : payload;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=sse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/streaming/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,OAAO,CAAC,MAA6B;IAC1D,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC;QAEhB,wEAAwE;QACxE,2EAA2E;QAC3E,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEnC,OAAO,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAEnC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YAElC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,OAAO,CAAC;YAChB,CAAC;YAED,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,4DAA4D;IAC5D,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAEvD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,OAAO,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yEAAyE;IACzE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEhD,8EAA8E;IAC9E,mCAAmC;IACnC,OAAO,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { JsonObject } from '../json.js';
|
|
2
|
+
/**
|
|
3
|
+
* Make an object out of what the model said, or report that you could not.
|
|
4
|
+
*
|
|
5
|
+
* RETURNS NULL, NEVER THROWS. A model asked for JSON can answer with a refusal,
|
|
6
|
+
* an apology, or a correct object wrapped in commentary, and none of those is an
|
|
7
|
+
* exception — they are answers of a shape the caller did not want. Throwing here
|
|
8
|
+
* would destroy `text`, which is the only evidence of what actually happened and
|
|
9
|
+
* the only thing that explains the failure to whoever reads the log.
|
|
10
|
+
*
|
|
11
|
+
* Two attempts, in order:
|
|
12
|
+
*
|
|
13
|
+
* 1. Parse the whole string. This is the case that should happen.
|
|
14
|
+
* 2. Parse the contents of the FIRST fenced block. Models fence JSON even when
|
|
15
|
+
* told not to, and the reference's own Anthropic prompt pleads against it
|
|
16
|
+
* ("not in backticks or a code block") — a plea is not a guarantee.
|
|
17
|
+
*
|
|
18
|
+
* A JSON array or a bare scalar parses successfully and is still rejected: the
|
|
19
|
+
* schema describes an object, and returning `[1,2,3]` as "structured" would
|
|
20
|
+
* satisfy the type and break the first caller to read a property off it.
|
|
21
|
+
*/
|
|
22
|
+
export declare function extractStructured(text: string): JsonObject | null;
|
|
23
|
+
//# sourceMappingURL=extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/structured/extract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAUjE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { isJsonObject } from '../json.js';
|
|
2
|
+
/**
|
|
3
|
+
* Make an object out of what the model said, or report that you could not.
|
|
4
|
+
*
|
|
5
|
+
* RETURNS NULL, NEVER THROWS. A model asked for JSON can answer with a refusal,
|
|
6
|
+
* an apology, or a correct object wrapped in commentary, and none of those is an
|
|
7
|
+
* exception — they are answers of a shape the caller did not want. Throwing here
|
|
8
|
+
* would destroy `text`, which is the only evidence of what actually happened and
|
|
9
|
+
* the only thing that explains the failure to whoever reads the log.
|
|
10
|
+
*
|
|
11
|
+
* Two attempts, in order:
|
|
12
|
+
*
|
|
13
|
+
* 1. Parse the whole string. This is the case that should happen.
|
|
14
|
+
* 2. Parse the contents of the FIRST fenced block. Models fence JSON even when
|
|
15
|
+
* told not to, and the reference's own Anthropic prompt pleads against it
|
|
16
|
+
* ("not in backticks or a code block") — a plea is not a guarantee.
|
|
17
|
+
*
|
|
18
|
+
* A JSON array or a bare scalar parses successfully and is still rejected: the
|
|
19
|
+
* schema describes an object, and returning `[1,2,3]` as "structured" would
|
|
20
|
+
* satisfy the type and break the first caller to read a property off it.
|
|
21
|
+
*/
|
|
22
|
+
export function extractStructured(text) {
|
|
23
|
+
const direct = parseObject(text);
|
|
24
|
+
if (direct !== null) {
|
|
25
|
+
return direct;
|
|
26
|
+
}
|
|
27
|
+
const fenced = /```(?:json)?\s*\n?([\s\S]*?)```/i.exec(text);
|
|
28
|
+
return fenced === null ? null : parseObject(fenced[1] ?? '');
|
|
29
|
+
}
|
|
30
|
+
function parseObject(candidate) {
|
|
31
|
+
const trimmed = candidate.trim();
|
|
32
|
+
if (trimmed === '') {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const parsed = JSON.parse(trimmed);
|
|
37
|
+
return isJsonObject(parsed) ? parsed : null;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/structured/extract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAEjC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7D,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB;IACpC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IAEjC,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE5C,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { TextResponse } from '../text/response.js';
|
|
2
|
+
import { StructuredResponse } from './response.js';
|
|
3
|
+
/**
|
|
4
|
+
* Turn a parsed text response into a structured one.
|
|
5
|
+
*
|
|
6
|
+
* Every provider that answers a structured request answers it as TEXT — OpenAI
|
|
7
|
+
* with a schema-constrained string, Anthropic with a message it was asked to
|
|
8
|
+
* keep to JSON. So the parsing, the finish-reason handling, the usage and the
|
|
9
|
+
* metadata are the text path's, and this adds the one thing that differs.
|
|
10
|
+
*
|
|
11
|
+
* Sharing it this way is what keeps a structured call from quietly diverging:
|
|
12
|
+
* when the text parser learns that a provider reports token limits differently,
|
|
13
|
+
* structured learns it in the same commit.
|
|
14
|
+
*/
|
|
15
|
+
export declare function structuredFromTextResponse(response: TextResponse): StructuredResponse;
|
|
16
|
+
//# sourceMappingURL=from-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from-text.d.ts","sourceRoot":"","sources":["../../src/structured/from-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,YAAY,GAAG,kBAAkB,CAWrF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { extractStructured } from './extract.js';
|
|
2
|
+
import { StructuredResponse } from './response.js';
|
|
3
|
+
/**
|
|
4
|
+
* Turn a parsed text response into a structured one.
|
|
5
|
+
*
|
|
6
|
+
* Every provider that answers a structured request answers it as TEXT — OpenAI
|
|
7
|
+
* with a schema-constrained string, Anthropic with a message it was asked to
|
|
8
|
+
* keep to JSON. So the parsing, the finish-reason handling, the usage and the
|
|
9
|
+
* metadata are the text path's, and this adds the one thing that differs.
|
|
10
|
+
*
|
|
11
|
+
* Sharing it this way is what keeps a structured call from quietly diverging:
|
|
12
|
+
* when the text parser learns that a provider reports token limits differently,
|
|
13
|
+
* structured learns it in the same commit.
|
|
14
|
+
*/
|
|
15
|
+
export function structuredFromTextResponse(response) {
|
|
16
|
+
return new StructuredResponse({
|
|
17
|
+
steps: response.steps,
|
|
18
|
+
text: response.text,
|
|
19
|
+
structured: extractStructured(response.text),
|
|
20
|
+
finishReason: response.finishReason,
|
|
21
|
+
usage: response.usage,
|
|
22
|
+
meta: response.meta,
|
|
23
|
+
additionalContent: response.additionalContent,
|
|
24
|
+
raw: response.raw,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=from-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from-text.js","sourceRoot":"","sources":["../../src/structured/from-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAsB;IAC/D,OAAO,IAAI,kBAAkB,CAAC;QAC5B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,UAAU,EAAE,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC5C,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;QAC7C,GAAG,EAAE,QAAQ,CAAC,GAAG;KAClB,CAAC,CAAC;AACL,CAAC"}
|