@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,47 @@
|
|
|
1
|
+
import { isJsonObject } from '../../json.js';
|
|
2
|
+
import { StructuredMode } from '../../enums.js';
|
|
3
|
+
import { buildRequestBody } from './build-request-body.js';
|
|
4
|
+
import { resolveStructuredMode } from './structured-mode-resolver.js';
|
|
5
|
+
/**
|
|
6
|
+
* The text body, plus the instruction that makes it structured.
|
|
7
|
+
*
|
|
8
|
+
* Built ON TOP of `buildRequestBody` rather than beside it, so every rule that
|
|
9
|
+
* decides the text body — the unconditional keys, the not-null filter, the
|
|
10
|
+
* empty-tools collapse — applies identically here. A second builder would drift
|
|
11
|
+
* from the first the moment either changed.
|
|
12
|
+
*
|
|
13
|
+
* `Auto` is resolved to a concrete mode against the MODEL, because "auto" is not
|
|
14
|
+
* something OpenAI accepts; somebody has to decide, and doing it here means the
|
|
15
|
+
* decision is inspectable in one place rather than implied by the wire format.
|
|
16
|
+
*/
|
|
17
|
+
export function buildStructuredBody(request) {
|
|
18
|
+
const body = buildRequestBody(request);
|
|
19
|
+
const mode = request.mode() === StructuredMode.Auto ? resolveStructuredMode(request.model()) : request.mode();
|
|
20
|
+
// `text` may already hold a verbosity from the text builder. Merged rather
|
|
21
|
+
// than overwritten: asking for a schema is not a reason to silently drop the
|
|
22
|
+
// caller's verbosity setting.
|
|
23
|
+
const existing = isJsonObject(body.text) ? body.text : {};
|
|
24
|
+
return {
|
|
25
|
+
...body,
|
|
26
|
+
text: { ...existing, format: format(request, mode) },
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function format(request, mode) {
|
|
30
|
+
if (mode === StructuredMode.Json) {
|
|
31
|
+
// JSON mode guarantees syntactic validity and nothing about the shape. The
|
|
32
|
+
// schema still reaches the model through the prompt the caller wrote; it
|
|
33
|
+
// cannot be enforced here, and pretending otherwise would be the dangerous
|
|
34
|
+
// half of this feature.
|
|
35
|
+
return { type: 'json_object' };
|
|
36
|
+
}
|
|
37
|
+
const schema = request.schema();
|
|
38
|
+
return {
|
|
39
|
+
type: 'json_schema',
|
|
40
|
+
name: schema.name,
|
|
41
|
+
schema: schema.toObject(),
|
|
42
|
+
// The whole reason to prefer this mode. Without it the model may return a
|
|
43
|
+
// near-miss that parses and is missing a required field.
|
|
44
|
+
strict: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=build-structured-body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-structured-body.js","sourceRoot":"","sources":["../../../src/providers/openai/build-structured-body.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA0B;IAC5D,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAE9G,2EAA2E;IAC3E,6EAA6E;IAC7E,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1D,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;KACrD,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,OAA0B,EAAE,IAAoB;IAC9D,IAAI,IAAI,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;QACjC,2EAA2E;QAC3E,yEAAyE;QACzE,2EAA2E;QAC3E,wBAAwB;QACxB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAEhC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;QACzB,0EAA0E;QAC1E,yDAAyD;QACzD,MAAM,EAAE,IAAI;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type JsonObject } from '../../json.js';
|
|
2
|
+
import type { EmbeddingsRequest } from '../../embeddings/request.js';
|
|
3
|
+
import { EmbeddingsResponse } from '../../embeddings/response.js';
|
|
4
|
+
export declare function buildEmbeddingsBody(request: EmbeddingsRequest): JsonObject;
|
|
5
|
+
export declare function parseEmbeddingsResponse(rawBody: unknown): EmbeddingsResponse;
|
|
6
|
+
//# sourceMappingURL=embeddings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/embeddings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAMlE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAa1E;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,kBAAkB,CAqB5E"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { isJsonObject } from '../../json.js';
|
|
2
|
+
import { PrismError } from '../../errors.js';
|
|
3
|
+
import { EmbeddingsResponse } from '../../embeddings/response.js';
|
|
4
|
+
import { Embedding } from '../../value-objects/embedding.js';
|
|
5
|
+
import { EmbeddingsUsage } from '../../value-objects/embeddings-usage.js';
|
|
6
|
+
import { Meta } from '../../value-objects/meta.js';
|
|
7
|
+
import { whereNotNull } from '../../internal/filters.js';
|
|
8
|
+
export function buildEmbeddingsBody(request) {
|
|
9
|
+
return {
|
|
10
|
+
model: request.model(),
|
|
11
|
+
// Sent as a LIST even for one input, which is what the API accepts either
|
|
12
|
+
// way — and keeping the shape constant means the response index maps to the
|
|
13
|
+
// input index without a special case for the single-input call.
|
|
14
|
+
input: [...request.inputs()],
|
|
15
|
+
...whereNotNull({
|
|
16
|
+
dimensions: request.providerOptions('dimensions'),
|
|
17
|
+
encoding_format: request.providerOptions('encoding_format'),
|
|
18
|
+
user: request.providerOptions('user'),
|
|
19
|
+
}),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function parseEmbeddingsResponse(rawBody) {
|
|
23
|
+
if (!isJsonObject(rawBody)) {
|
|
24
|
+
throw PrismError.providerResponseError('OpenAI returned an empty or non-object embeddings response.');
|
|
25
|
+
}
|
|
26
|
+
const data = Array.isArray(rawBody.data) ? rawBody.data : [];
|
|
27
|
+
// ORDERED BY THE PROVIDER'S OWN INDEX, not by arrival. The API documents that
|
|
28
|
+
// `data` may come back out of order, and an embeddings caller almost always
|
|
29
|
+
// zips the result against the inputs it sent — so a silent reordering here
|
|
30
|
+
// would attach every vector to the wrong text.
|
|
31
|
+
const ordered = [...data]
|
|
32
|
+
.filter(isJsonObject)
|
|
33
|
+
.sort((a, b) => readNumber(a.index) - readNumber(b.index));
|
|
34
|
+
return new EmbeddingsResponse({
|
|
35
|
+
embeddings: ordered.map((item) => Embedding.fromArray(Array.isArray(item.embedding) ? item.embedding : [])),
|
|
36
|
+
usage: new EmbeddingsUsage(readTokens(rawBody)),
|
|
37
|
+
meta: new Meta(readString(rawBody.id), readString(rawBody.model)),
|
|
38
|
+
raw: rawBody,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Null when the provider said nothing, rather than 0.
|
|
43
|
+
*
|
|
44
|
+
* A caller totalling spend across calls needs to tell "this cost nothing" from
|
|
45
|
+
* "nobody told me what this cost"; folding them together makes the second
|
|
46
|
+
* silently understate the first.
|
|
47
|
+
*/
|
|
48
|
+
function readTokens(body) {
|
|
49
|
+
const usage = isJsonObject(body.usage) ? body.usage : null;
|
|
50
|
+
if (usage === null) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return typeof usage.total_tokens === 'number' ? usage.total_tokens : null;
|
|
54
|
+
}
|
|
55
|
+
function readString(value) {
|
|
56
|
+
return typeof value === 'string' ? value : '';
|
|
57
|
+
}
|
|
58
|
+
function readNumber(value) {
|
|
59
|
+
return typeof value === 'number' ? value : 0;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../../src/providers/openai/embeddings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DeleteFileResult, FileData, FileListResult } from '../../files/file-data.js';
|
|
2
|
+
import type { ListFilesRequest, UploadFileRequest } from '../../files/request.js';
|
|
3
|
+
import type { MultipartBody } from '../../http/transport.js';
|
|
4
|
+
export declare function buildUploadForm(request: UploadFileRequest): MultipartBody;
|
|
5
|
+
/**
|
|
6
|
+
* The list query.
|
|
7
|
+
*
|
|
8
|
+
* `beforeId` is deliberately dropped: OpenAI's files endpoint paginates with
|
|
9
|
+
* `after` only. Sending `before` would be ignored silently, which reads to a
|
|
10
|
+
* caller like a working backwards page.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildListQuery(request: ListFilesRequest): Record<string, string>;
|
|
13
|
+
export declare function parseFileData(rawBody: unknown): FileData;
|
|
14
|
+
export declare function parseFileListResponse(rawBody: unknown): FileListResult;
|
|
15
|
+
export declare function parseDeleteResponse(rawBody: unknown): DeleteFileResult;
|
|
16
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAmBzE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBhF;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAcxD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAatE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAStE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { isJsonObject } from '../../json.js';
|
|
2
|
+
import { DeleteFileResult, FileData, FileListResult } from '../../files/file-data.js';
|
|
3
|
+
export function buildUploadForm(request) {
|
|
4
|
+
const purpose = request.providerOptions('purpose');
|
|
5
|
+
return {
|
|
6
|
+
fields: {
|
|
7
|
+
// REQUIRED by OpenAI, and it has no default. `assistants` is the purpose
|
|
8
|
+
// that accepts the widest set of file types, so it is the one that fails
|
|
9
|
+
// least often for a caller who did not know they had to choose.
|
|
10
|
+
purpose: typeof purpose === 'string' ? purpose : 'assistants',
|
|
11
|
+
},
|
|
12
|
+
files: [
|
|
13
|
+
{
|
|
14
|
+
field: 'file',
|
|
15
|
+
filename: request.filename,
|
|
16
|
+
bytes: request.content,
|
|
17
|
+
...(request.mimeType === null ? {} : { contentType: request.mimeType }),
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The list query.
|
|
24
|
+
*
|
|
25
|
+
* `beforeId` is deliberately dropped: OpenAI's files endpoint paginates with
|
|
26
|
+
* `after` only. Sending `before` would be ignored silently, which reads to a
|
|
27
|
+
* caller like a working backwards page.
|
|
28
|
+
*/
|
|
29
|
+
export function buildListQuery(request) {
|
|
30
|
+
const query = {};
|
|
31
|
+
const purpose = request.providerOptions('purpose');
|
|
32
|
+
if (request.limit !== null) {
|
|
33
|
+
query.limit = String(request.limit);
|
|
34
|
+
}
|
|
35
|
+
if (request.afterId !== null) {
|
|
36
|
+
query.after = request.afterId;
|
|
37
|
+
}
|
|
38
|
+
if (typeof purpose === 'string') {
|
|
39
|
+
query.purpose = purpose;
|
|
40
|
+
}
|
|
41
|
+
return query;
|
|
42
|
+
}
|
|
43
|
+
export function parseFileData(rawBody) {
|
|
44
|
+
if (!isJsonObject(rawBody)) {
|
|
45
|
+
return new FileData('');
|
|
46
|
+
}
|
|
47
|
+
return new FileData(readString(rawBody.id) ?? '', readString(rawBody.filename), readString(rawBody.mime_type), typeof rawBody.bytes === 'number' ? rawBody.bytes : null, readCreatedAt(rawBody.created_at), readString(rawBody.purpose), rawBody);
|
|
48
|
+
}
|
|
49
|
+
export function parseFileListResponse(rawBody) {
|
|
50
|
+
if (!isJsonObject(rawBody)) {
|
|
51
|
+
return new FileListResult([]);
|
|
52
|
+
}
|
|
53
|
+
const data = Array.isArray(rawBody.data) ? rawBody.data : [];
|
|
54
|
+
return new FileListResult(data.map((entry) => parseFileData(entry)), rawBody.has_more === true, readString(rawBody.first_id), readString(rawBody.last_id));
|
|
55
|
+
}
|
|
56
|
+
export function parseDeleteResponse(rawBody) {
|
|
57
|
+
const body = isJsonObject(rawBody) ? rawBody : {};
|
|
58
|
+
return new DeleteFileResult(readString(body.id) ?? '',
|
|
59
|
+
// The provider's own verdict, not the status code. OpenAI answers 200 with
|
|
60
|
+
// `deleted: false` for a file it declined to remove.
|
|
61
|
+
body.deleted === true);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* A unix timestamp, rendered as ISO 8601 in UTC.
|
|
65
|
+
*
|
|
66
|
+
* The reference uses PHP's `date('c')`, which renders in the SERVER's local
|
|
67
|
+
* zone — so the same file reports a different creation time on two machines.
|
|
68
|
+
* UTC here, deliberately: a timestamp that means something different depending
|
|
69
|
+
* on who read it is not a timestamp.
|
|
70
|
+
*/
|
|
71
|
+
function readCreatedAt(value) {
|
|
72
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
return new Date(value * 1000).toISOString();
|
|
76
|
+
}
|
|
77
|
+
function readString(value) {
|
|
78
|
+
return typeof value === 'string' && value !== '' ? value : null;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/providers/openai/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type JsonObject } from '../../json.js';
|
|
2
|
+
import type { ImagesRequest } from '../../images/request.js';
|
|
3
|
+
import { ImagesResponse } from '../../images/response.js';
|
|
4
|
+
export declare function buildImagesBody(request: ImagesRequest): JsonObject;
|
|
5
|
+
export declare function parseImagesResponse(rawBody: unknown, model: string): ImagesResponse;
|
|
6
|
+
//# sourceMappingURL=images.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM1D,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,CAelE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CA0BnF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { isJsonObject } from '../../json.js';
|
|
2
|
+
import { PrismError } from '../../errors.js';
|
|
3
|
+
import { ImagesResponse } from '../../images/response.js';
|
|
4
|
+
import { GeneratedImage } from '../../value-objects/generated-image.js';
|
|
5
|
+
import { Meta } from '../../value-objects/meta.js';
|
|
6
|
+
import { Usage } from '../../value-objects/usage.js';
|
|
7
|
+
import { whereNotNull } from '../../internal/filters.js';
|
|
8
|
+
export function buildImagesBody(request) {
|
|
9
|
+
return {
|
|
10
|
+
model: request.model(),
|
|
11
|
+
prompt: request.prompt(),
|
|
12
|
+
...whereNotNull({
|
|
13
|
+
n: request.providerOptions('n'),
|
|
14
|
+
size: request.providerOptions('size'),
|
|
15
|
+
quality: request.providerOptions('quality'),
|
|
16
|
+
style: request.providerOptions('style'),
|
|
17
|
+
response_format: request.providerOptions('response_format'),
|
|
18
|
+
background: request.providerOptions('background'),
|
|
19
|
+
output_format: request.providerOptions('output_format'),
|
|
20
|
+
user: request.providerOptions('user'),
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function parseImagesResponse(rawBody, model) {
|
|
25
|
+
if (!isJsonObject(rawBody)) {
|
|
26
|
+
throw PrismError.providerResponseError('OpenAI returned an empty or non-object images response.');
|
|
27
|
+
}
|
|
28
|
+
const data = Array.isArray(rawBody.data) ? rawBody.data.filter(isJsonObject) : [];
|
|
29
|
+
return new ImagesResponse({
|
|
30
|
+
images: data.map((item) => new GeneratedImage(readOptional(item.url), readOptional(item.b64_json), readOptional(item.revised_prompt))),
|
|
31
|
+
// Two spellings, because the image endpoints disagree with each other:
|
|
32
|
+
// `gpt-image-1` reports input/output tokens and DALL·E reports
|
|
33
|
+
// prompt/completion. Reading only one would report zero cost for the other.
|
|
34
|
+
usage: new Usage(readNumber(rawBody, 'usage.input_tokens', 'usage.prompt_tokens'), readNumber(rawBody, 'usage.output_tokens', 'usage.completion_tokens')),
|
|
35
|
+
meta: new Meta(readString(rawBody.id), readString(rawBody.model) || model),
|
|
36
|
+
raw: rawBody,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/** Null rather than '' — a missing url and an empty one are different answers. */
|
|
40
|
+
function readOptional(value) {
|
|
41
|
+
return typeof value === 'string' && value !== '' ? value : null;
|
|
42
|
+
}
|
|
43
|
+
function readString(value) {
|
|
44
|
+
return typeof value === 'string' ? value : '';
|
|
45
|
+
}
|
|
46
|
+
function readNumber(body, ...paths) {
|
|
47
|
+
for (const path of paths) {
|
|
48
|
+
const value = path.split('.').reduce((carry, key) => (isJsonObject(carry) ? carry[key] : undefined), body);
|
|
49
|
+
if (typeof value === 'number') {
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../../src/providers/openai/images.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { JsonObject } from '../../../json.js';
|
|
2
|
+
import { FinishReason } from '../../../enums.js';
|
|
3
|
+
/**
|
|
4
|
+
* The LAST item of `output`, or `null` when there isn't one.
|
|
5
|
+
*
|
|
6
|
+
* The reference reads `output.{last}`, which means exactly this. An empty
|
|
7
|
+
* `output` array yields nothing at all rather than an error — worth stating,
|
|
8
|
+
* because "the last element of an empty list" is where a port can quietly
|
|
9
|
+
* produce `undefined` and map it to the wrong finish reason.
|
|
10
|
+
*/
|
|
11
|
+
export declare function lastOutputItem(data: JsonObject): JsonObject | null;
|
|
12
|
+
/** Map an output item's status and type onto a finish reason. */
|
|
13
|
+
export declare function mapFinishReasonFromOutput(status: string, type: string): FinishReason;
|
|
14
|
+
/**
|
|
15
|
+
* Map a whole response payload onto a finish reason.
|
|
16
|
+
*
|
|
17
|
+
* A TOP-LEVEL `incomplete` status wins over anything the output items say,
|
|
18
|
+
* because it is the response as a whole that was cut short.
|
|
19
|
+
*/
|
|
20
|
+
export declare function mapFinishReason(data: JsonObject): FinishReason;
|
|
21
|
+
//# sourceMappingURL=finish-reason-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finish-reason-map.d.ts","sourceRoot":"","sources":["../../../../src/providers/openai/maps/finish-reason-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAUlE;AAED,iEAAiE;AACjE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAsBpF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAU9D"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { isJsonObject } from '../../../json.js';
|
|
2
|
+
import { readString } from '../../../internal/filters.js';
|
|
3
|
+
import { FinishReason } from '../../../enums.js';
|
|
4
|
+
/**
|
|
5
|
+
* The LAST item of `output`, or `null` when there isn't one.
|
|
6
|
+
*
|
|
7
|
+
* The reference reads `output.{last}`, which means exactly this. An empty
|
|
8
|
+
* `output` array yields nothing at all rather than an error — worth stating,
|
|
9
|
+
* because "the last element of an empty list" is where a port can quietly
|
|
10
|
+
* produce `undefined` and map it to the wrong finish reason.
|
|
11
|
+
*/
|
|
12
|
+
export function lastOutputItem(data) {
|
|
13
|
+
const output = data.output;
|
|
14
|
+
if (!Array.isArray(output) || output.length === 0) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const last = output.at(-1);
|
|
18
|
+
return isJsonObject(last) ? last : null;
|
|
19
|
+
}
|
|
20
|
+
/** Map an output item's status and type onto a finish reason. */
|
|
21
|
+
export function mapFinishReasonFromOutput(status, type) {
|
|
22
|
+
switch (status) {
|
|
23
|
+
case 'incomplete':
|
|
24
|
+
case 'length':
|
|
25
|
+
return FinishReason.Length;
|
|
26
|
+
case 'failed':
|
|
27
|
+
return FinishReason.Error;
|
|
28
|
+
case 'completed':
|
|
29
|
+
if (type === 'function_call') {
|
|
30
|
+
return FinishReason.ToolCalls;
|
|
31
|
+
}
|
|
32
|
+
if (type === 'message') {
|
|
33
|
+
return FinishReason.Stop;
|
|
34
|
+
}
|
|
35
|
+
// Every provider-native tool ends in `_call`, so an unrecognised
|
|
36
|
+
// `*_call` type is still a tool call rather than an unknown finish.
|
|
37
|
+
return type.endsWith('_call') ? FinishReason.ToolCalls : FinishReason.Unknown;
|
|
38
|
+
default:
|
|
39
|
+
return FinishReason.Unknown;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Map a whole response payload onto a finish reason.
|
|
44
|
+
*
|
|
45
|
+
* A TOP-LEVEL `incomplete` status wins over anything the output items say,
|
|
46
|
+
* because it is the response as a whole that was cut short.
|
|
47
|
+
*/
|
|
48
|
+
export function mapFinishReason(data) {
|
|
49
|
+
if (readString(data.status, '') === 'incomplete') {
|
|
50
|
+
const details = isJsonObject(data.incomplete_details) ? data.incomplete_details : {};
|
|
51
|
+
return details.reason === 'content_filter' ? FinishReason.ContentFilter : FinishReason.Length;
|
|
52
|
+
}
|
|
53
|
+
const last = lastOutputItem(data) ?? {};
|
|
54
|
+
return mapFinishReasonFromOutput(readString(last.status, ''), readString(last.type, ''));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=finish-reason-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finish-reason-map.js","sourceRoot":"","sources":["../../../../src/providers/openai/maps/finish-reason-map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,IAAgB;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAE3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3B,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,yBAAyB,CAAC,MAAc,EAAE,IAAY;IACpE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,MAAM,CAAC;QAC7B,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,KAAK,CAAC;QAC5B,KAAK,WAAW;YACd,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;gBAC7B,OAAO,YAAY,CAAC,SAAS,CAAC;YAChC,CAAC;YAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,YAAY,CAAC,IAAI,CAAC;YAC3B,CAAC;YAED,iEAAiE;YACjE,oEAAoE;YACpE,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;QAChF;YACE,OAAO,YAAY,CAAC,OAAO,CAAC;IAChC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAgB;IAC9C,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,YAAY,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QAErF,OAAO,OAAO,CAAC,MAAM,KAAK,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;IAChG,CAAC;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAExC,OAAO,yBAAyB,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3F,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { JsonObject } from '../../../json.js';
|
|
2
|
+
import type { Document } from '../../../value-objects/media/document.js';
|
|
3
|
+
import type { Image } from '../../../value-objects/media/image.js';
|
|
4
|
+
/**
|
|
5
|
+
* The Responses API's image part.
|
|
6
|
+
*
|
|
7
|
+
* `image_url` here is a BARE STRING, where Mistral's chat-completions shape
|
|
8
|
+
* wraps the same value in an object. A file id goes in its own field rather
|
|
9
|
+
* than through the url, because a `data:` uri and a provider-side file are two
|
|
10
|
+
* different things to OpenAI even though both end up as `input_image`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function mapImage(image: Image): JsonObject;
|
|
13
|
+
/**
|
|
14
|
+
* The Responses API's document part.
|
|
15
|
+
*
|
|
16
|
+
* Three shapes for one concept, and the inline one needs a FILENAME: OpenAI
|
|
17
|
+
* reads the extension off it to decide how to parse the bytes, so a document
|
|
18
|
+
* with no title is sent as `document` rather than omitting the field, matching
|
|
19
|
+
* the reference. The other two shapes carry the name in the url or the file.
|
|
20
|
+
*
|
|
21
|
+
* Chunks are rejected. They are text with no container, and only Anthropic has
|
|
22
|
+
* somewhere to put them.
|
|
23
|
+
*/
|
|
24
|
+
export declare function mapDocument(document: Document): JsonObject;
|
|
25
|
+
//# sourceMappingURL=media-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-map.d.ts","sourceRoot":"","sources":["../../../../src/providers/openai/maps/media-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAC;AAGnE;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,CAcjD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAsB1D"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { PrismError } from '../../../errors.js';
|
|
2
|
+
import { dataUri } from '../../support/media.js';
|
|
3
|
+
/**
|
|
4
|
+
* The Responses API's image part.
|
|
5
|
+
*
|
|
6
|
+
* `image_url` here is a BARE STRING, where Mistral's chat-completions shape
|
|
7
|
+
* wraps the same value in an object. A file id goes in its own field rather
|
|
8
|
+
* than through the url, because a `data:` uri and a provider-side file are two
|
|
9
|
+
* different things to OpenAI even though both end up as `input_image`.
|
|
10
|
+
*/
|
|
11
|
+
export function mapImage(image) {
|
|
12
|
+
if (image.isFileId()) {
|
|
13
|
+
return { type: 'input_image', file_id: image.fileId() };
|
|
14
|
+
}
|
|
15
|
+
if (image.isUrl()) {
|
|
16
|
+
return { type: 'input_image', image_url: image.url };
|
|
17
|
+
}
|
|
18
|
+
if (!image.hasBase64()) {
|
|
19
|
+
throw PrismError.unsupportedMedia('OpenAI', 'image', 'a file id, a url, or bytes it can send as base64');
|
|
20
|
+
}
|
|
21
|
+
return { type: 'input_image', image_url: dataUri(image, 'OpenAI', 'image') };
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The Responses API's document part.
|
|
25
|
+
*
|
|
26
|
+
* Three shapes for one concept, and the inline one needs a FILENAME: OpenAI
|
|
27
|
+
* reads the extension off it to decide how to parse the bytes, so a document
|
|
28
|
+
* with no title is sent as `document` rather than omitting the field, matching
|
|
29
|
+
* the reference. The other two shapes carry the name in the url or the file.
|
|
30
|
+
*
|
|
31
|
+
* Chunks are rejected. They are text with no container, and only Anthropic has
|
|
32
|
+
* somewhere to put them.
|
|
33
|
+
*/
|
|
34
|
+
export function mapDocument(document) {
|
|
35
|
+
if (document.isFileId()) {
|
|
36
|
+
return { type: 'input_file', file_id: document.fileId() };
|
|
37
|
+
}
|
|
38
|
+
if (document.isUrl()) {
|
|
39
|
+
return { type: 'input_file', file_url: document.url };
|
|
40
|
+
}
|
|
41
|
+
if (document.isChunks()) {
|
|
42
|
+
throw PrismError.unsupportedMedia('OpenAI', 'document', 'a file id, a url, or bytes — not pre-split chunks');
|
|
43
|
+
}
|
|
44
|
+
if (!document.hasBase64()) {
|
|
45
|
+
throw PrismError.unsupportedMedia('OpenAI', 'document', 'a file id, a url, or bytes it can send as base64');
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
type: 'input_file',
|
|
49
|
+
filename: document.documentTitle() ?? 'document',
|
|
50
|
+
file_data: dataUri(document, 'OpenAI', 'document'),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=media-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-map.js","sourceRoot":"","sources":["../../../../src/providers/openai/maps/media-map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAY;IACnC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;QACvB,MAAM,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,kDAAkD,CAAC,CAAC;IAC3G,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,QAAkB;IAC5C,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;IAC5D,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;IACxD,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;QACxB,MAAM,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,mDAAmD,CAAC,CAAC;IAC/G,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;QAC1B,MAAM,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,kDAAkD,CAAC,CAAC;IAC9G,CAAC;IAED,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,QAAQ,CAAC,aAAa,EAAE,IAAI,UAAU;QAChD,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC;KACnD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { JsonValue } from '../../../json.js';
|
|
2
|
+
import type { Message, SystemMessage } from '../../../value-objects/messages/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Map messages onto the Responses API's flat `input` array.
|
|
5
|
+
*
|
|
6
|
+
* Three things about this mapping are easy to get subtly wrong:
|
|
7
|
+
*
|
|
8
|
+
* 1. System prompts are PREPENDED to the message list rather than carried in
|
|
9
|
+
* a field of their own, and a system message maps to a BARE STRING content
|
|
10
|
+
* while a user message maps to a parts ARRAY. Two roles, two shapes, one
|
|
11
|
+
* payload.
|
|
12
|
+
* 2. An assistant message's tool calls do not stay attached to it. Each one
|
|
13
|
+
* becomes its own top-level `function_call` item whose `arguments` is a
|
|
14
|
+
* JSON STRING — a JSON document nested inside a JSON document.
|
|
15
|
+
* 3. A tool result is keyed by the RESULT id, not by the id of the call that
|
|
16
|
+
* produced it.
|
|
17
|
+
*
|
|
18
|
+
* @throws PrismError code `unknown_message_type`
|
|
19
|
+
*/
|
|
20
|
+
export declare function mapMessages(messages: readonly Message[], systemPrompts?: readonly SystemMessage[]): JsonValue[];
|
|
21
|
+
//# sourceMappingURL=message-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-map.d.ts","sourceRoot":"","sources":["../../../../src/providers/openai/maps/message-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,KAAK,EAAoB,OAAO,EAAE,aAAa,EAAqB,MAAM,0CAA0C,CAAC;AAK5H;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,aAAa,GAAE,SAAS,aAAa,EAAO,GAC3C,SAAS,EAAE,CAgCb"}
|