effect 4.0.7 → 4.1.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/README.md +1 -1
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +3 -0
- package/dist/BigDecimal.js.map +1 -1
- package/dist/Channel.d.ts +12 -6
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +9 -3
- package/dist/Channel.js.map +1 -1
- package/dist/Config.d.ts +7 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js.map +1 -1
- package/dist/Context.d.ts +18 -1
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +27 -8
- package/dist/Context.js.map +1 -1
- package/dist/Cron.d.ts +81 -11
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +101 -26
- package/dist/Cron.js.map +1 -1
- package/dist/Duration.d.ts +78 -0
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +123 -0
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +164 -7
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +11 -1
- package/dist/Effect.js.map +1 -1
- package/dist/FileSystem.d.ts +59 -4
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +9 -2
- package/dist/FileSystem.js.map +1 -1
- package/dist/Glob.d.ts +165 -0
- package/dist/Glob.d.ts.map +1 -0
- package/dist/Glob.js +127 -0
- package/dist/Glob.js.map +1 -0
- package/dist/Match.d.ts +86 -0
- package/dist/Match.d.ts.map +1 -1
- package/dist/Match.js +72 -0
- package/dist/Match.js.map +1 -1
- package/dist/Pool.d.ts +51 -0
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +59 -9
- package/dist/Pool.js.map +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +3 -3
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +8 -2
- package/dist/RcMap.js.map +1 -1
- package/dist/Schedule.d.ts +18 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +7 -2
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +666 -41
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +650 -0
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaGetter.d.ts +6 -1
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +22 -11
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +14 -0
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +16 -0
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +8 -3
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +6 -3
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +5 -7
- package/dist/ScopedCache.js.map +1 -1
- package/dist/Semaphore.d.ts +130 -0
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +40 -0
- package/dist/Semaphore.js.map +1 -1
- package/dist/Stream.d.ts +13 -4
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +9 -0
- package/dist/Stream.js.map +1 -1
- package/dist/Terminal.d.ts +18 -1
- package/dist/Terminal.d.ts.map +1 -1
- package/dist/Terminal.js +1 -1
- package/dist/Terminal.js.map +1 -1
- package/dist/ai/AiError.d.ts +43 -116
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +53 -72
- package/dist/ai/AiError.js.map +1 -1
- package/dist/ai/Decision.d.ts +196 -15
- package/dist/ai/Decision.d.ts.map +1 -1
- package/dist/ai/Decision.js +130 -0
- package/dist/ai/Decision.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +54 -13
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +123 -12
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/McpServer.d.ts +630 -29
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +562 -116
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/McpTest.d.ts +130 -0
- package/dist/ai/McpTest.d.ts.map +1 -0
- package/dist/ai/McpTest.js +237 -0
- package/dist/ai/McpTest.js.map +1 -0
- package/dist/ai/Response.d.ts +1 -25
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +1 -10
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +19 -1
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +5 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/internal/mcpCore.js +17 -12
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +18 -10
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +13 -0
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +5 -3
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
- package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
- package/dist/cli/Argument.d.ts +6 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +2 -0
- package/dist/cli/Argument.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +65 -1
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +94 -37
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +23 -0
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +8 -0
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Flag.d.ts +107 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +37 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/HelpDoc.d.ts +15 -1
- package/dist/cli/HelpDoc.d.ts.map +1 -1
- package/dist/cli/Param.d.ts +6 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +2 -0
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/Primitive.d.ts +14 -0
- package/dist/cli/Primitive.d.ts.map +1 -1
- package/dist/cli/Primitive.js +15 -1
- package/dist/cli/Primitive.js.map +1 -1
- package/dist/cli/Prompt.d.ts +1 -0
- package/dist/cli/Prompt.d.ts.map +1 -1
- package/dist/cli/Prompt.js +1 -0
- package/dist/cli/Prompt.js.map +1 -1
- package/dist/cli/internal/help.d.ts.map +1 -1
- package/dist/cli/internal/help.js +17 -10
- package/dist/cli/internal/help.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +90 -28
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +72 -6
- package/dist/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/cluster/ShardingConfig.js +4 -0
- package/dist/cluster/ShardingConfig.js.map +1 -1
- package/dist/cluster/SingleRunner.d.ts +3 -3
- package/dist/cluster/SingleRunner.d.ts.map +1 -1
- package/dist/cluster/SingleRunner.js +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts +37 -6
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +34 -7
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +23 -8
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/crypto/Aead.d.ts +322 -0
- package/dist/crypto/Aead.d.ts.map +1 -0
- package/dist/crypto/Aead.js +331 -0
- package/dist/crypto/Aead.js.map +1 -0
- package/dist/crypto/Cipher.d.ts +235 -0
- package/dist/crypto/Cipher.d.ts.map +1 -0
- package/dist/crypto/Cipher.js +233 -0
- package/dist/crypto/Cipher.js.map +1 -0
- package/dist/crypto/CryptoError.d.ts +212 -0
- package/dist/crypto/CryptoError.d.ts.map +1 -0
- package/dist/crypto/CryptoError.js +202 -0
- package/dist/crypto/CryptoError.js.map +1 -0
- package/dist/crypto/Digest.d.ts +143 -0
- package/dist/crypto/Digest.d.ts.map +1 -0
- package/dist/crypto/Digest.js +146 -0
- package/dist/crypto/Digest.js.map +1 -0
- package/dist/crypto/Kdf.d.ts +220 -0
- package/dist/crypto/Kdf.d.ts.map +1 -0
- package/dist/crypto/Kdf.js +212 -0
- package/dist/crypto/Kdf.js.map +1 -0
- package/dist/crypto/KeyAgreement.d.ts +323 -0
- package/dist/crypto/KeyAgreement.d.ts.map +1 -0
- package/dist/crypto/KeyAgreement.js +303 -0
- package/dist/crypto/KeyAgreement.js.map +1 -0
- package/dist/crypto/KeyFormat.d.ts +309 -0
- package/dist/crypto/KeyFormat.d.ts.map +1 -0
- package/dist/crypto/KeyFormat.js +556 -0
- package/dist/crypto/KeyFormat.js.map +1 -0
- package/dist/crypto/KeyWrap.d.ts +389 -0
- package/dist/crypto/KeyWrap.d.ts.map +1 -0
- package/dist/crypto/KeyWrap.js +381 -0
- package/dist/crypto/KeyWrap.js.map +1 -0
- package/dist/crypto/Mac.d.ts +277 -0
- package/dist/crypto/Mac.d.ts.map +1 -0
- package/dist/crypto/Mac.js +288 -0
- package/dist/crypto/Mac.js.map +1 -0
- package/dist/crypto/SecureRandom.d.ts +340 -0
- package/dist/crypto/SecureRandom.d.ts.map +1 -0
- package/dist/crypto/SecureRandom.js +257 -0
- package/dist/crypto/SecureRandom.js.map +1 -0
- package/dist/crypto/Signature.d.ts +448 -0
- package/dist/crypto/Signature.d.ts.map +1 -0
- package/dist/crypto/Signature.js +484 -0
- package/dist/crypto/Signature.js.map +1 -0
- package/dist/crypto/WebCrypto.d.ts +61 -0
- package/dist/crypto/WebCrypto.d.ts.map +1 -0
- package/dist/crypto/WebCrypto.js +63 -0
- package/dist/crypto/WebCrypto.js.map +1 -0
- package/dist/crypto/index.d.ts +65 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +66 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/internal/asymmetric.d.ts +2 -0
- package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
- package/dist/crypto/internal/asymmetric.js +210 -0
- package/dist/crypto/internal/asymmetric.js.map +1 -0
- package/dist/crypto/internal/chacha.d.ts +46 -0
- package/dist/crypto/internal/chacha.d.ts.map +1 -0
- package/dist/crypto/internal/chacha.js +885 -0
- package/dist/crypto/internal/chacha.js.map +1 -0
- package/dist/crypto/internal/der.d.ts +6 -0
- package/dist/crypto/internal/der.d.ts.map +1 -0
- package/dist/crypto/internal/der.js +86 -0
- package/dist/crypto/internal/der.js.map +1 -0
- package/dist/crypto/internal/digest.d.ts +2 -0
- package/dist/crypto/internal/digest.d.ts.map +1 -0
- package/dist/crypto/internal/digest.js +15 -0
- package/dist/crypto/internal/digest.js.map +1 -0
- package/dist/crypto/internal/key.d.ts +2 -0
- package/dist/crypto/internal/key.d.ts.map +1 -0
- package/dist/crypto/internal/key.js +170 -0
- package/dist/crypto/internal/key.js.map +1 -0
- package/dist/crypto/internal/md5.d.ts +39 -0
- package/dist/crypto/internal/md5.d.ts.map +1 -0
- package/dist/crypto/internal/md5.js +179 -0
- package/dist/crypto/internal/md5.js.map +1 -0
- package/dist/crypto/internal/webCrypto.d.ts +2 -0
- package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
- package/dist/crypto/internal/webCrypto.js +111 -0
- package/dist/crypto/internal/webCrypto.js.map +1 -0
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +3 -2
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Csv.d.ts +608 -0
- package/dist/encoding/Csv.d.ts.map +1 -0
- package/dist/encoding/Csv.js +718 -0
- package/dist/encoding/Csv.js.map +1 -0
- package/dist/encoding/Hex.d.ts +3 -2
- package/dist/encoding/Hex.d.ts.map +1 -1
- package/dist/encoding/Hex.js +3 -2
- package/dist/encoding/Hex.js.map +1 -1
- package/dist/encoding/SchemaBinary.d.ts.map +1 -1
- package/dist/encoding/SchemaBinary.js +42 -4
- package/dist/encoding/SchemaBinary.js.map +1 -1
- package/dist/encoding/Toml.d.ts +17 -3
- package/dist/encoding/Toml.d.ts.map +1 -1
- package/dist/encoding/Toml.js +104 -16
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Yaml.d.ts +8 -1
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +54 -18
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/index.d.ts +5 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +5 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/eventlog/EventJournal.js +6 -3
- package/dist/eventlog/EventJournal.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +119 -4
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +200 -12
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogEncryption.d.ts +41 -4
- package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/eventlog/EventLogEncryption.js +83 -64
- package/dist/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/eventlog/EventLogMessage.d.ts +279 -0
- package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/eventlog/EventLogMessage.js +217 -1
- package/dist/eventlog/EventLogMessage.js.map +1 -1
- package/dist/eventlog/EventLogRemote.d.ts +200 -28
- package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/eventlog/EventLogRemote.js +186 -16
- package/dist/eventlog/EventLogRemote.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +3 -0
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +18 -10
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +326 -5
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js +769 -14
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.d.ts +5 -3
- package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.js +41 -64
- package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
- package/dist/eventlog/EventRow.d.ts +4 -0
- package/dist/eventlog/EventRow.d.ts.map +1 -1
- package/dist/eventlog/EventRow.js +12 -2
- package/dist/eventlog/EventRow.js.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +2 -2
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
- package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/internal/batches.d.ts +12 -0
- package/dist/eventlog/internal/batches.d.ts.map +1 -0
- package/dist/eventlog/internal/batches.js +26 -0
- package/dist/eventlog/internal/batches.js.map +1 -0
- package/dist/eventlog/internal/compaction.d.ts +38 -0
- package/dist/eventlog/internal/compaction.d.ts.map +1 -0
- package/dist/eventlog/internal/compaction.js +33 -0
- package/dist/eventlog/internal/compaction.js.map +1 -0
- package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
- package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
- package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
- package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
- package/dist/eventlog/internal/remoteCompaction.js +76 -0
- package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
- package/dist/http/Cookies.d.ts +172 -0
- package/dist/http/Cookies.d.ts.map +1 -1
- package/dist/http/Cookies.js +143 -1
- package/dist/http/Cookies.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +26 -2
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +78 -15
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/HttpClient.d.ts +79 -8
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +65 -5
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts +9 -5
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +2 -3
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/http/HttpClientResponse.js +3 -2
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpMethod.d.ts +7 -1
- package/dist/http/HttpMethod.d.ts.map +1 -1
- package/dist/http/HttpMethod.js +3 -8
- package/dist/http/HttpMethod.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +5 -2
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +6 -17
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +3 -2
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpTraceContext.d.ts +2 -1
- package/dist/http/HttpTraceContext.d.ts.map +1 -1
- package/dist/http/HttpTraceContext.js +7 -5
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/http/ProblemDetails.d.ts +96 -0
- package/dist/http/ProblemDetails.d.ts.map +1 -0
- package/dist/http/ProblemDetails.js +98 -0
- package/dist/http/ProblemDetails.js.map +1 -0
- package/dist/http/index.d.ts +5 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +5 -0
- package/dist/http/index.js.map +1 -1
- package/dist/http/internal/decompression.js +3 -2
- package/dist/http/internal/decompression.js.map +1 -1
- package/dist/http/internal/urlParams.js +8 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- package/dist/http-api/HttpApiBuilder.js +19 -5
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +63 -0
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +51 -0
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +14 -5
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +185 -13
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +128 -0
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
- package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/http-api/HttpApiMiddleware.js +85 -1
- package/dist/http-api/HttpApiMiddleware.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +76 -14
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +53 -0
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/internal/effect.js +25 -14
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/glob.d.ts +2 -0
- package/dist/internal/glob.d.ts.map +1 -0
- package/dist/internal/glob.js +630 -0
- package/dist/internal/glob.js.map +1 -0
- package/dist/internal/matcher.js +10 -0
- package/dist/internal/matcher.js.map +1 -1
- package/dist/internal/persistence.js +9 -0
- package/dist/internal/persistence.js.map +1 -1
- package/dist/internal/rcRef.js +4 -1
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +6 -3
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/trie.js +42 -13
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/ulid.js +41 -0
- package/dist/internal/ulid.js.map +1 -1
- package/dist/internal/uuid.js +52 -8
- package/dist/internal/uuid.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/observability/Otlp.d.ts +15 -4
- package/dist/observability/Otlp.d.ts.map +1 -1
- package/dist/observability/Otlp.js +10 -0
- package/dist/observability/Otlp.js.map +1 -1
- package/dist/observability/OtlpResource.d.ts +7 -0
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +11 -1
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/persistence/KeyValueStore.d.ts +47 -2
- package/dist/persistence/KeyValueStore.d.ts.map +1 -1
- package/dist/persistence/KeyValueStore.js +129 -18
- package/dist/persistence/KeyValueStore.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +9 -0
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +94 -52
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/persistence/Persistence.d.ts +10 -4
- package/dist/persistence/Persistence.d.ts.map +1 -1
- package/dist/persistence/Persistence.js +18 -11
- package/dist/persistence/Persistence.js.map +1 -1
- package/dist/process/ChildProcess.d.ts +207 -67
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js +56 -158
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/process/ChildProcessSpawner.d.ts +5 -0
- package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/process/ChildProcessSpawner.js.map +1 -1
- package/dist/process/CommandLine.d.ts +294 -0
- package/dist/process/CommandLine.d.ts.map +1 -0
- package/dist/process/CommandLine.js +481 -0
- package/dist/process/CommandLine.js.map +1 -0
- package/dist/process/index.d.ts +5 -0
- package/dist/process/index.d.ts.map +1 -1
- package/dist/process/index.js +5 -0
- package/dist/process/index.js.map +1 -1
- package/dist/reactivity/Atom.d.ts +2 -1
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +3 -4
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +16 -1
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +50 -16
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcMessage.d.ts +10 -1
- package/dist/rpc/RpcMessage.d.ts.map +1 -1
- package/dist/rpc/RpcMessage.js +1 -0
- package/dist/rpc/RpcMessage.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +6 -0
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts +31 -0
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +139 -66
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/schema/Model.d.ts +14 -0
- package/dist/schema/Model.d.ts.map +1 -1
- package/dist/schema/Model.js +18 -3
- package/dist/schema/Model.js.map +1 -1
- package/dist/sql/Migrator.d.ts +0 -19
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +3 -48
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/MigratorFileSystem.d.ts +21 -0
- package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
- package/dist/sql/MigratorFileSystem.js +57 -0
- package/dist/sql/MigratorFileSystem.js.map +1 -0
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +5 -9
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/Statement.d.ts +20 -6
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +0 -13
- package/dist/sql/Statement.js.map +1 -1
- package/dist/sql/index.js +1 -1
- package/dist/testing/index.d.ts +0 -5
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +0 -5
- package/dist/testing/index.js.map +1 -1
- package/dist/workflow/internal/crypto.js +9 -8
- package/dist/workflow/internal/crypto.js.map +1 -1
- package/package.json +3 -1
- package/src/BigDecimal.ts +3 -0
- package/src/Channel.ts +17 -11
- package/src/Config.ts +7 -1
- package/src/Context.ts +34 -10
- package/src/Cron.ts +178 -29
- package/src/Duration.ts +140 -0
- package/src/Effect.ts +914 -85
- package/src/FileSystem.ts +65 -4
- package/src/Glob.ts +205 -0
- package/src/Match.ts +127 -0
- package/src/Pool.ts +73 -15
- package/src/Random.ts +3 -3
- package/src/RcMap.ts +5 -1
- package/src/Schedule.ts +26 -3
- package/src/Schema.ts +1189 -62
- package/src/SchemaGetter.ts +27 -11
- package/src/SchemaRepresentation.ts +19 -0
- package/src/SchemaTransformation.ts +8 -3
- package/src/ScopedCache.ts +5 -9
- package/src/Semaphore.ts +141 -0
- package/src/Stream.ts +15 -6
- package/src/Terminal.ts +19 -1
- package/src/ai/AiError.ts +56 -80
- package/src/ai/Decision.ts +257 -6
- package/src/ai/DecisionModel.ts +171 -28
- package/src/ai/McpServer.ts +1269 -286
- package/src/ai/McpTest.ts +380 -0
- package/src/ai/Response.ts +2 -22
- package/src/ai/Tool.ts +27 -8
- package/src/ai/index.ts +6 -0
- package/src/ai/internal/mcpCore.ts +78 -44
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +15 -10
- package/src/ai/internal/mcpProtocol.ts +29 -0
- package/src/ai/internal/mcpRuntime.ts +9 -5
- package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
- package/src/cli/Argument.ts +6 -0
- package/src/cli/CliOutput.ts +117 -49
- package/src/cli/Command.ts +23 -0
- package/src/cli/Flag.ts +107 -0
- package/src/cli/HelpDoc.ts +18 -1
- package/src/cli/Param.ts +6 -0
- package/src/cli/Primitive.ts +16 -1
- package/src/cli/Prompt.ts +1 -0
- package/src/cli/internal/help.ts +21 -9
- package/src/cluster/Sharding.ts +93 -26
- package/src/cluster/ShardingConfig.ts +41 -3
- package/src/cluster/SingleRunner.ts +3 -3
- package/src/cluster/SqlMessageStorage.ts +49 -17
- package/src/cluster/SqlRunnerStorage.ts +37 -27
- package/src/crypto/Aead.ts +517 -0
- package/src/crypto/Cipher.ts +326 -0
- package/src/crypto/CryptoError.ts +242 -0
- package/src/crypto/Digest.ts +167 -0
- package/src/crypto/Kdf.ts +315 -0
- package/src/crypto/KeyAgreement.ts +489 -0
- package/src/crypto/KeyFormat.ts +712 -0
- package/src/crypto/KeyWrap.ts +639 -0
- package/src/crypto/Mac.ts +386 -0
- package/src/crypto/SecureRandom.ts +459 -0
- package/src/crypto/Signature.ts +673 -0
- package/src/crypto/WebCrypto.ts +64 -0
- package/src/crypto/index.ts +78 -0
- package/src/crypto/internal/asymmetric.ts +329 -0
- package/src/crypto/internal/chacha.ts +1088 -0
- package/src/crypto/internal/der.ts +110 -0
- package/src/crypto/internal/digest.ts +16 -0
- package/src/crypto/internal/key.ts +235 -0
- package/src/crypto/internal/md5.ts +170 -0
- package/src/crypto/internal/webCrypto.ts +150 -0
- package/src/encoding/Base64Url.ts +5 -2
- package/src/encoding/Csv.ts +1298 -0
- package/src/encoding/Hex.ts +3 -2
- package/src/encoding/SchemaBinary.ts +40 -4
- package/src/encoding/Toml.ts +85 -20
- package/src/encoding/Yaml.ts +61 -18
- package/src/encoding/index.ts +6 -0
- package/src/eventlog/EventJournal.ts +4 -3
- package/src/eventlog/EventLog.ts +340 -15
- package/src/eventlog/EventLogEncryption.ts +118 -110
- package/src/eventlog/EventLogMessage.ts +273 -1
- package/src/eventlog/EventLogRemote.ts +367 -23
- package/src/eventlog/EventLogServer.ts +23 -8
- package/src/eventlog/EventLogServerEncrypted.ts +1130 -67
- package/src/eventlog/EventLogSessionAuth.ts +56 -70
- package/src/eventlog/EventRow.ts +12 -3
- package/src/eventlog/SqlEventJournal.ts +2 -2
- package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
- package/src/eventlog/internal/batches.ts +30 -0
- package/src/eventlog/internal/compaction.ts +64 -0
- package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
- package/src/eventlog/internal/remoteCompaction.ts +92 -0
- package/src/http/Cookies.ts +281 -1
- package/src/http/FetchHttpClient.ts +88 -16
- package/src/http/HttpClient.ts +89 -22
- package/src/http/HttpClientRequest.ts +12 -9
- package/src/http/HttpClientResponse.ts +3 -2
- package/src/http/HttpMethod.ts +10 -2
- package/src/http/HttpServerRequest.ts +15 -30
- package/src/http/HttpServerResponse.ts +3 -2
- package/src/http/HttpTraceContext.ts +7 -4
- package/src/http/ProblemDetails.ts +149 -0
- package/src/http/index.ts +6 -0
- package/src/http/internal/decompression.ts +4 -4
- package/src/http/internal/urlParams.ts +8 -0
- package/src/http-api/HttpApiBuilder.ts +24 -12
- package/src/http-api/HttpApiClient.ts +67 -1
- package/src/http-api/HttpApiEndpoint.ts +14 -5
- package/src/http-api/HttpApiError.ts +250 -0
- package/src/http-api/HttpApiMiddleware.ts +95 -1
- package/src/http-api/HttpApiSchema.ts +105 -14
- package/src/index.ts +6 -6
- package/src/internal/effect.ts +34 -18
- package/src/internal/glob.ts +736 -0
- package/src/internal/matcher.ts +17 -0
- package/src/internal/persistence.ts +11 -0
- package/src/internal/rcRef.ts +4 -1
- package/src/internal/schema/toCodeDocument.ts +7 -3
- package/src/internal/trie.ts +43 -14
- package/src/internal/ulid.ts +44 -0
- package/src/internal/uuid.ts +57 -16
- package/src/internal/version.ts +1 -1
- package/src/observability/Otlp.ts +21 -4
- package/src/observability/OtlpResource.ts +9 -1
- package/src/persistence/KeyValueStore.ts +219 -22
- package/src/persistence/PersistedQueue.ts +128 -59
- package/src/persistence/Persistence.ts +20 -13
- package/src/process/ChildProcess.ts +255 -260
- package/src/process/ChildProcessSpawner.ts +5 -0
- package/src/process/CommandLine.ts +630 -0
- package/src/process/index.ts +6 -0
- package/src/reactivity/Atom.ts +5 -5
- package/src/reactivity/AtomRegistry.ts +1 -1
- package/src/rpc/RpcClient.ts +62 -26
- package/src/rpc/RpcMessage.ts +10 -1
- package/src/rpc/RpcSerialization.ts +3 -0
- package/src/rpc/RpcServer.ts +176 -78
- package/src/schema/Model.ts +26 -3
- package/src/sql/Migrator.ts +4 -63
- package/src/sql/MigratorFileSystem.ts +71 -0
- package/src/sql/SqlClient.ts +2 -16
- package/src/sql/Statement.ts +8 -7
- package/src/sql/index.ts +1 -1
- package/src/testing/index.ts +0 -6
- package/src/workflow/internal/crypto.ts +15 -11
- package/dist/Crypto.d.ts +0 -244
- package/dist/Crypto.d.ts.map +0 -1
- package/dist/Crypto.js +0 -139
- package/dist/Crypto.js.map +0 -1
- package/dist/testing/TestCrypto.d.ts +0 -73
- package/dist/testing/TestCrypto.d.ts.map +0 -1
- package/dist/testing/TestCrypto.js +0 -87
- package/dist/testing/TestCrypto.js.map +0 -1
- package/src/Crypto.ts +0 -347
- package/src/testing/TestCrypto.ts +0 -94
package/src/ai/Decision.ts
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Defines decisions that a `DecisionModel` answers over a single input.
|
|
3
|
-
* Pair an input schema with named classification, rating, or
|
|
4
|
-
* decisions using `make`, then answer them with `DecisionModel.decide`,
|
|
5
|
-
* with `DecisionModel.decideSettled` to keep valid answers when others fail.
|
|
3
|
+
* Pair an input schema with named classification, rating, probability, or
|
|
4
|
+
* locate decisions using `make`, then answer them with `DecisionModel.decide`,
|
|
5
|
+
* or with `DecisionModel.decideSettled` to keep valid answers when others fail.
|
|
6
6
|
*
|
|
7
7
|
* @see {@link make} for building a definition from an input schema and decisions
|
|
8
8
|
*
|
|
9
9
|
* @stability unstable
|
|
10
10
|
* @since 4.0.0
|
|
11
11
|
*/
|
|
12
|
+
import * as Base64 from "../encoding/Base64.ts"
|
|
13
|
+
import * as Predicate from "../Predicate.ts"
|
|
12
14
|
import type * as Result from "../Result.ts"
|
|
13
|
-
import
|
|
15
|
+
import * as Schema from "../Schema.ts"
|
|
16
|
+
import * as SchemaTransformation from "../SchemaTransformation.ts"
|
|
17
|
+
import type * as DecisionModel from "./DecisionModel.ts"
|
|
14
18
|
|
|
15
19
|
/**
|
|
16
20
|
* Brand type for decision definitions.
|
|
@@ -100,6 +104,162 @@ export interface Probability {
|
|
|
100
104
|
} | undefined
|
|
101
105
|
}
|
|
102
106
|
|
|
107
|
+
/**
|
|
108
|
+
* Decision that finds one target in an image field of the input.
|
|
109
|
+
* `image` is the field's path in the encoded input, such as `"photo"` or
|
|
110
|
+
* `"frames[2].frame"`. The answer is a bounding box around the target.
|
|
111
|
+
*
|
|
112
|
+
* @see {@link locate} for the constructor
|
|
113
|
+
* @see {@link LocateAnswer} for the answer produced by this decision
|
|
114
|
+
*
|
|
115
|
+
* @stability unstable
|
|
116
|
+
* @category models
|
|
117
|
+
* @since 4.1.0
|
|
118
|
+
*/
|
|
119
|
+
export interface Locate<Field extends string = string> {
|
|
120
|
+
readonly _tag: "Locate"
|
|
121
|
+
readonly image: Field
|
|
122
|
+
readonly instructions: string
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Key that marks an encoded {@link Image}.
|
|
127
|
+
*
|
|
128
|
+
* @stability unstable
|
|
129
|
+
* @category models
|
|
130
|
+
* @since 4.1.0
|
|
131
|
+
*/
|
|
132
|
+
export const ImageKey = "~effect/ai/Decision/Image"
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* JSON encoding of an {@link Image}: base64 data or a URL with its media type,
|
|
136
|
+
* under {@link ImageKey}.
|
|
137
|
+
*
|
|
138
|
+
* @stability unstable
|
|
139
|
+
* @category models
|
|
140
|
+
* @since 4.1.0
|
|
141
|
+
*/
|
|
142
|
+
export interface ImageEncoded {
|
|
143
|
+
readonly [ImageKey]: {
|
|
144
|
+
readonly mediaType: string
|
|
145
|
+
readonly base64: string
|
|
146
|
+
} | {
|
|
147
|
+
readonly mediaType: string
|
|
148
|
+
readonly url: string
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const isImage = (u: unknown): u is DecisionModel.Image =>
|
|
153
|
+
Predicate.isObject(u) && Predicate.isString(u.mediaType) &&
|
|
154
|
+
(Predicate.isString(u.data) || u.data instanceof globalThis.Uint8Array || u.data instanceof globalThis.URL)
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Type-level representation of the {@link Image} schema.
|
|
158
|
+
*
|
|
159
|
+
* @stability unstable
|
|
160
|
+
* @category models
|
|
161
|
+
* @since 4.1.0
|
|
162
|
+
*/
|
|
163
|
+
export interface Image extends
|
|
164
|
+
Schema.decodeTo<
|
|
165
|
+
Schema.declare<DecisionModel.Image>,
|
|
166
|
+
Schema.Struct<{
|
|
167
|
+
readonly [ImageKey]: Schema.Union<
|
|
168
|
+
readonly [
|
|
169
|
+
Schema.Struct<{ readonly mediaType: Schema.String; readonly base64: Schema.String }>,
|
|
170
|
+
Schema.Struct<{ readonly mediaType: Schema.String; readonly url: Schema.URLFromString }>
|
|
171
|
+
]
|
|
172
|
+
>
|
|
173
|
+
}>
|
|
174
|
+
>
|
|
175
|
+
{
|
|
176
|
+
readonly "Rebuild": Image
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Schema for an image input field. Its type is `DecisionModel.Image`: a
|
|
181
|
+
* media type with base64 data, bytes, or a URL. Decisions refer to the image
|
|
182
|
+
* by the field's path, like any other field.
|
|
183
|
+
*
|
|
184
|
+
* **Details**
|
|
185
|
+
*
|
|
186
|
+
* The field encodes to an {@link ImageEncoded} object. `DecisionModel.decide`
|
|
187
|
+
* replaces each one in the encoded input with a reference string and sends the
|
|
188
|
+
* images to the provider separately; an image used in several fields is sent
|
|
189
|
+
* once. The encoded shape also appears in JSON Schema generated from the input.
|
|
190
|
+
*
|
|
191
|
+
* **Example** (Declaring an image field)
|
|
192
|
+
*
|
|
193
|
+
* ```ts
|
|
194
|
+
* import { Schema } from "effect"
|
|
195
|
+
* import { Decision } from "effect/ai"
|
|
196
|
+
*
|
|
197
|
+
* const Listing = Schema.Struct({
|
|
198
|
+
* title: Schema.String,
|
|
199
|
+
* photo: Decision.Image
|
|
200
|
+
* })
|
|
201
|
+
* ```
|
|
202
|
+
*
|
|
203
|
+
* @stability unstable
|
|
204
|
+
* @category schemas
|
|
205
|
+
* @since 4.1.0
|
|
206
|
+
*/
|
|
207
|
+
export const Image: Image = Schema.Struct({
|
|
208
|
+
[ImageKey]: Schema.Union([
|
|
209
|
+
Schema.Struct({ mediaType: Schema.String, base64: Schema.String }),
|
|
210
|
+
Schema.Struct({ mediaType: Schema.String, url: Schema.URLFromString })
|
|
211
|
+
])
|
|
212
|
+
}).pipe(
|
|
213
|
+
Schema.decodeTo(
|
|
214
|
+
Schema.declare(isImage, { expected: "DecisionModel.Image" }),
|
|
215
|
+
SchemaTransformation.transform({
|
|
216
|
+
decode: ({ [ImageKey]: image }): DecisionModel.Image => ({
|
|
217
|
+
mediaType: image.mediaType,
|
|
218
|
+
data: "base64" in image ? image.base64 : image.url
|
|
219
|
+
}),
|
|
220
|
+
encode: ({ mediaType, data }) => ({
|
|
221
|
+
[ImageKey]: data instanceof globalThis.URL
|
|
222
|
+
? { mediaType, url: data }
|
|
223
|
+
: { mediaType, base64: typeof data === "string" ? data : Base64.encode(data) }
|
|
224
|
+
})
|
|
225
|
+
})
|
|
226
|
+
)
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
type PrevDepth = [never, 0, 1, 2, 3, 4]
|
|
230
|
+
|
|
231
|
+
type ImagePathSuffixes<A, Depth extends number> = [Depth] extends [never] ? never
|
|
232
|
+
: A extends ImageEncoded ? ""
|
|
233
|
+
: A extends ReadonlyArray<unknown> ?
|
|
234
|
+
number extends A["length"] ? `[${number}]${ImagePathSuffixes<A[number], PrevDepth[Depth]>}`
|
|
235
|
+
: {
|
|
236
|
+
[K in keyof A & `${number}`]: `[${K}]${ImagePathSuffixes<A[K], PrevDepth[Depth]>}`
|
|
237
|
+
}[keyof A & `${number}`]
|
|
238
|
+
: A extends object ? {
|
|
239
|
+
[K in keyof A & string]-?: K extends `${string}.${string}` | `${string}[${string}` ? never
|
|
240
|
+
: {} extends Pick<A, K> ? never
|
|
241
|
+
: `.${K}${ImagePathSuffixes<A[K], PrevDepth[Depth]>}`
|
|
242
|
+
}[keyof A & string]
|
|
243
|
+
: never
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Paths to the required {@link Image} fields of an encoded input type, as
|
|
247
|
+
* accepted by {@link locate}. Object keys are joined with `.`, and array
|
|
248
|
+
* elements use `[index]`: exact indices for tuples, any number for arrays.
|
|
249
|
+
*
|
|
250
|
+
* **Details**
|
|
251
|
+
*
|
|
252
|
+
* Paths reach four levels deep. Optional fields and keys containing `.` or
|
|
253
|
+
* `[` are excluded.
|
|
254
|
+
*
|
|
255
|
+
* @stability unstable
|
|
256
|
+
* @category utility types
|
|
257
|
+
* @since 4.1.0
|
|
258
|
+
*/
|
|
259
|
+
export type ImagePaths<A> = ImagePathSuffixes<A, 4> extends infer Path extends string ?
|
|
260
|
+
Path extends "" ? never : Path extends `.${infer Rest}` ? Rest : Path :
|
|
261
|
+
never
|
|
262
|
+
|
|
103
263
|
/**
|
|
104
264
|
* Union of every decision kind.
|
|
105
265
|
*
|
|
@@ -107,7 +267,7 @@ export interface Probability {
|
|
|
107
267
|
* @category models
|
|
108
268
|
* @since 4.0.0
|
|
109
269
|
*/
|
|
110
|
-
export type Any = Classify<string> | Rate<string> | Probability
|
|
270
|
+
export type Any = Classify<string> | Rate<string> | Probability | Locate
|
|
111
271
|
|
|
112
272
|
/**
|
|
113
273
|
* Answer to a {@link Classify} decision.
|
|
@@ -154,6 +314,38 @@ export interface ProbabilityAnswer {
|
|
|
154
314
|
readonly probability: number
|
|
155
315
|
}
|
|
156
316
|
|
|
317
|
+
/**
|
|
318
|
+
* Smallest rectangle that contains a located target. Each edge is a fraction
|
|
319
|
+
* of the image's size measured from the top-left corner: `left` and `right`
|
|
320
|
+
* of its width, `top` and `bottom` of its height. Edges are in `[0, 1]`, with
|
|
321
|
+
* `left <= right` and `top <= bottom`.
|
|
322
|
+
*
|
|
323
|
+
* @stability unstable
|
|
324
|
+
* @category models
|
|
325
|
+
* @since 4.1.0
|
|
326
|
+
*/
|
|
327
|
+
export interface BoundingBox {
|
|
328
|
+
readonly left: number
|
|
329
|
+
readonly top: number
|
|
330
|
+
readonly right: number
|
|
331
|
+
readonly bottom: number
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Answer to a {@link Locate} decision.
|
|
336
|
+
* There is no "not found" answer: a target absent from the image still gets a
|
|
337
|
+
* box. Pair the decision with a {@link Probability} that the target is present.
|
|
338
|
+
* `confidence` is an optional, provider-defined measure in `[0, 1]`.
|
|
339
|
+
*
|
|
340
|
+
* @stability unstable
|
|
341
|
+
* @category models
|
|
342
|
+
* @since 4.1.0
|
|
343
|
+
*/
|
|
344
|
+
export interface LocateAnswer {
|
|
345
|
+
readonly box: BoundingBox
|
|
346
|
+
readonly confidence?: number | undefined
|
|
347
|
+
}
|
|
348
|
+
|
|
157
349
|
/**
|
|
158
350
|
* Answer type for a single decision.
|
|
159
351
|
*
|
|
@@ -164,6 +356,7 @@ export interface ProbabilityAnswer {
|
|
|
164
356
|
export type Answer<D extends Any> = D extends Classify<infer Label> ? ClassifyAnswer<Label>
|
|
165
357
|
: D extends Rate<infer Level> ? RateAnswer<Level>
|
|
166
358
|
: D extends Probability ? ProbabilityAnswer
|
|
359
|
+
: D extends Locate ? LocateAnswer
|
|
167
360
|
: never
|
|
168
361
|
|
|
169
362
|
/**
|
|
@@ -395,6 +588,58 @@ export const probability = (options: {
|
|
|
395
588
|
criteria: options.criteria
|
|
396
589
|
})
|
|
397
590
|
|
|
591
|
+
/**
|
|
592
|
+
* Creates a decision that finds one target in an image field of the input.
|
|
593
|
+
* `image` is the field's path in the encoded input: keys joined with `.` and
|
|
594
|
+
* array indices in brackets, such as `"frames[2].frame"`. The model must be
|
|
595
|
+
* created with `supportsLocate: true`.
|
|
596
|
+
*
|
|
597
|
+
* **Details**
|
|
598
|
+
*
|
|
599
|
+
* Paths use encoded key names, so a key renamed with `Schema.encodeKeys` is
|
|
600
|
+
* targeted by its encoded name. `make` accepts only paths to required
|
|
601
|
+
* {@link Image} fields, and `DecisionModel.decide` fails with
|
|
602
|
+
* `AiError.InvalidUserInputError` when the path holds no image, such as an
|
|
603
|
+
* index past the end of an array.
|
|
604
|
+
*
|
|
605
|
+
* The answer is always one box, even when the target is absent. Pair the
|
|
606
|
+
* decision with a {@link probability} decision that the target is present.
|
|
607
|
+
*
|
|
608
|
+
* **Gotchas**
|
|
609
|
+
*
|
|
610
|
+
* - For a generic input schema, the compiler error for an invalid path names
|
|
611
|
+
* the whole decision type rather than the path.
|
|
612
|
+
*
|
|
613
|
+
* **Example** (Finding a mug in a photo)
|
|
614
|
+
*
|
|
615
|
+
* ```ts
|
|
616
|
+
* import { Schema } from "effect"
|
|
617
|
+
* import { Decision } from "effect/ai"
|
|
618
|
+
*
|
|
619
|
+
* const FindMug = Decision.make({
|
|
620
|
+
* input: Schema.Struct({ photo: Decision.Image }),
|
|
621
|
+
* decisions: {
|
|
622
|
+
* present: Decision.probability({ instructions: "`photo` shows a coffee mug" }),
|
|
623
|
+
* mug: Decision.locate({ image: "photo", instructions: "the coffee mug" })
|
|
624
|
+
* }
|
|
625
|
+
* })
|
|
626
|
+
* ```
|
|
627
|
+
*
|
|
628
|
+
* @see {@link LocateAnswer} for the answer
|
|
629
|
+
*
|
|
630
|
+
* @stability unstable
|
|
631
|
+
* @category constructors
|
|
632
|
+
* @since 4.1.0
|
|
633
|
+
*/
|
|
634
|
+
export const locate = <const Field extends string>(options: {
|
|
635
|
+
readonly image: Field
|
|
636
|
+
readonly instructions: string
|
|
637
|
+
}): Locate<Field> => ({
|
|
638
|
+
_tag: "Locate",
|
|
639
|
+
image: options.image,
|
|
640
|
+
instructions: options.instructions
|
|
641
|
+
})
|
|
642
|
+
|
|
398
643
|
/**
|
|
399
644
|
* Creates a decision definition from an input schema and named decisions.
|
|
400
645
|
* `DecisionModel.decide` encodes the input with `Schema.toCodecJson` before
|
|
@@ -433,7 +678,13 @@ export const probability = (options: {
|
|
|
433
678
|
* @category constructors
|
|
434
679
|
* @since 4.0.0
|
|
435
680
|
*/
|
|
436
|
-
export const make = <
|
|
681
|
+
export const make = <
|
|
682
|
+
Input extends Schema.Constraint,
|
|
683
|
+
Decisions extends Record<
|
|
684
|
+
string,
|
|
685
|
+
Classify<string> | Rate<string> | Probability | Locate<ImagePaths<Input["Encoded"]>>
|
|
686
|
+
>
|
|
687
|
+
>(options: {
|
|
437
688
|
readonly input: Input
|
|
438
689
|
readonly decisions: Decisions
|
|
439
690
|
}): Definition<Input, Decisions> => {
|
package/src/ai/DecisionModel.ts
CHANGED
|
@@ -9,11 +9,13 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import * as Context from "../Context.ts"
|
|
11
11
|
import * as Effect from "../Effect.ts"
|
|
12
|
+
import * as Uuid from "../internal/uuid.ts"
|
|
12
13
|
import * as Predicate from "../Predicate.ts"
|
|
14
|
+
import * as Random from "../Random.ts"
|
|
13
15
|
import * as Result from "../Result.ts"
|
|
14
16
|
import * as Schema from "../Schema.ts"
|
|
15
17
|
import * as AiError from "./AiError.ts"
|
|
16
|
-
import
|
|
18
|
+
import * as Decision from "./Decision.ts"
|
|
17
19
|
import type * as Response from "./Response.ts"
|
|
18
20
|
|
|
19
21
|
/**
|
|
@@ -71,14 +73,10 @@ export class DecisionUsage extends Schema.Class<DecisionUsage>(
|
|
|
71
73
|
*/
|
|
72
74
|
export interface DecideOptions<Input extends Schema.Constraint> {
|
|
73
75
|
readonly input: Input["Type"]
|
|
74
|
-
/**
|
|
75
|
-
* Images to include with the input.
|
|
76
|
-
*/
|
|
77
|
-
readonly images?: ReadonlyArray<Image> | undefined
|
|
78
76
|
}
|
|
79
77
|
|
|
80
78
|
/**
|
|
81
|
-
* An image
|
|
79
|
+
* An image in the input, declared with a `Decision.Image` field.
|
|
82
80
|
* `data` is a base64 string, a byte array, or a URL.
|
|
83
81
|
*
|
|
84
82
|
* @stability unstable
|
|
@@ -90,6 +88,24 @@ export interface Image {
|
|
|
90
88
|
readonly data: string | Uint8Array | URL
|
|
91
89
|
}
|
|
92
90
|
|
|
91
|
+
/**
|
|
92
|
+
* An image extracted from the encoded input. `state` holds `reference` where
|
|
93
|
+
* the image was, and `path` is where it was first found. `data` is a base64
|
|
94
|
+
* string or a URL.
|
|
95
|
+
*
|
|
96
|
+
* @stability unstable
|
|
97
|
+
* @category models
|
|
98
|
+
* @since 4.1.0
|
|
99
|
+
*/
|
|
100
|
+
export interface ProviderImage {
|
|
101
|
+
readonly reference: string
|
|
102
|
+
readonly path: ReadonlyArray<string | number>
|
|
103
|
+
readonly image: {
|
|
104
|
+
readonly mediaType: string
|
|
105
|
+
readonly data: string | URL
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
93
109
|
/**
|
|
94
110
|
* Provider-specific response metadata keyed by provider name. Provider
|
|
95
111
|
* packages augment this interface.
|
|
@@ -155,16 +171,18 @@ export interface DecideSettledResponse<Decisions extends Record<string, Decision
|
|
|
155
171
|
* Provider input options for a decision request.
|
|
156
172
|
* `state` is encoded with `Schema.toCodecJson`, not stringified.
|
|
157
173
|
* All `decisions` must be answered in one call.
|
|
158
|
-
* `images`
|
|
174
|
+
* `images` holds the `Decision.Image` values found in the input and is omitted
|
|
175
|
+
* when there are none.
|
|
176
|
+
* `Decisions` is the union of decision kinds the provider receives.
|
|
159
177
|
*
|
|
160
178
|
* @stability unstable
|
|
161
179
|
* @category options
|
|
162
180
|
* @since 4.0.0
|
|
163
181
|
*/
|
|
164
|
-
export interface ProviderOptions {
|
|
182
|
+
export interface ProviderOptions<Decisions extends Decision.Any = Decision.Any> {
|
|
165
183
|
readonly state: Schema.Json
|
|
166
|
-
readonly decisions: Record<string,
|
|
167
|
-
readonly images?: ReadonlyArray<
|
|
184
|
+
readonly decisions: Record<string, Decisions>
|
|
185
|
+
readonly images?: ReadonlyArray<ProviderImage> | undefined
|
|
168
186
|
}
|
|
169
187
|
|
|
170
188
|
/**
|
|
@@ -219,6 +237,19 @@ export interface ProviderRefusalAnswer {
|
|
|
219
237
|
readonly _tag: "Refusal"
|
|
220
238
|
}
|
|
221
239
|
|
|
240
|
+
/**
|
|
241
|
+
* Provider answer for a locate decision.
|
|
242
|
+
*
|
|
243
|
+
* @stability unstable
|
|
244
|
+
* @category models
|
|
245
|
+
* @since 4.1.0
|
|
246
|
+
*/
|
|
247
|
+
export interface ProviderLocateAnswer {
|
|
248
|
+
readonly _tag: "Locate"
|
|
249
|
+
readonly box: Decision.BoundingBox
|
|
250
|
+
readonly confidence?: number | undefined
|
|
251
|
+
}
|
|
252
|
+
|
|
222
253
|
/**
|
|
223
254
|
* Provider answer for any decision kind.
|
|
224
255
|
*
|
|
@@ -231,6 +262,7 @@ export type ProviderAnswer =
|
|
|
231
262
|
| ProviderRateAnswer
|
|
232
263
|
| ProviderProbabilityAnswer
|
|
233
264
|
| ProviderRefusalAnswer
|
|
265
|
+
| ProviderLocateAnswer
|
|
234
266
|
|
|
235
267
|
/**
|
|
236
268
|
* Provider response for a decision request.
|
|
@@ -283,6 +315,70 @@ const invalid = (description: string) => unanswered("Invalid", description)
|
|
|
283
315
|
const aiError = (method: "decide" | "decideSettled", reason: AiError.AiErrorReason): AiError.AiError =>
|
|
284
316
|
AiError.make({ module: "DecisionModel", method, reason })
|
|
285
317
|
|
|
318
|
+
const invalidUserInput = (method: "decide" | "decideSettled", description: string): AiError.AiError =>
|
|
319
|
+
aiError(method, new AiError.InvalidUserInputError({ description }))
|
|
320
|
+
|
|
321
|
+
const toProviderImage = (value: unknown): ProviderImage["image"] | undefined => {
|
|
322
|
+
if (!Predicate.isObject(value) || Object.keys(value).length !== 1) return undefined
|
|
323
|
+
const image = value[Decision.ImageKey]
|
|
324
|
+
if (!Predicate.isObject(image) || Object.keys(image).length !== 2 || !Predicate.isString(image.mediaType)) {
|
|
325
|
+
return undefined
|
|
326
|
+
}
|
|
327
|
+
if (Predicate.isString(image.base64)) return { mediaType: image.mediaType, data: image.base64 }
|
|
328
|
+
if (Predicate.isString(image.url) && URL.canParse(image.url)) {
|
|
329
|
+
return { mediaType: image.mediaType, data: new URL(image.url) }
|
|
330
|
+
}
|
|
331
|
+
return undefined
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
const formatPath = (path: ReadonlyArray<string | number>): string =>
|
|
335
|
+
path.map((segment, index) => typeof segment === "number" ? `[${segment}]` : index === 0 ? segment : `.${segment}`)
|
|
336
|
+
.join("")
|
|
337
|
+
|
|
338
|
+
const randomUuid = (random: Random.Random): string => {
|
|
339
|
+
const bytes = new Uint8Array(16)
|
|
340
|
+
for (let index = 0; index < bytes.length; index++) {
|
|
341
|
+
bytes[index] = Math.floor(random.nextDoubleUnsafe() * 256)
|
|
342
|
+
}
|
|
343
|
+
return Uuid.v4String(bytes)
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Replaces each encoded `Decision.Image` in `state` with a reference. Equal
|
|
348
|
+
* images share one reference. `paths` holds every path where an image was found.
|
|
349
|
+
*/
|
|
350
|
+
const extractImages = (state: Schema.Json, random: Random.Random) => {
|
|
351
|
+
const images: Array<ProviderImage> = []
|
|
352
|
+
const references = new Map<string, string>()
|
|
353
|
+
const paths = new Set<string>()
|
|
354
|
+
const walk = (value: Schema.Json, path: ReadonlyArray<string | number>): Schema.Json => {
|
|
355
|
+
const image = toProviderImage(value)
|
|
356
|
+
if (image !== undefined) {
|
|
357
|
+
paths.add(formatPath(path))
|
|
358
|
+
const key = `${image.mediaType}\n${
|
|
359
|
+
typeof image.data === "string" ? `base64:${image.data}` : `url:${image.data.href}`
|
|
360
|
+
}`
|
|
361
|
+
let reference = references.get(key)
|
|
362
|
+
if (reference === undefined) {
|
|
363
|
+
reference = randomUuid(random)
|
|
364
|
+
references.set(key, reference)
|
|
365
|
+
images.push({ reference, path, image })
|
|
366
|
+
}
|
|
367
|
+
return reference
|
|
368
|
+
}
|
|
369
|
+
if (Array.isArray(value)) {
|
|
370
|
+
return value.map((item, index) => walk(item, [...path, index]))
|
|
371
|
+
}
|
|
372
|
+
if (Predicate.isObject(value)) {
|
|
373
|
+
return Object.fromEntries(
|
|
374
|
+
Object.entries(value).map(([key, item]) => [key, walk(item as Schema.Json, [...path, key])])
|
|
375
|
+
)
|
|
376
|
+
}
|
|
377
|
+
return value
|
|
378
|
+
}
|
|
379
|
+
return { state: walk(state, []), images, paths }
|
|
380
|
+
}
|
|
381
|
+
|
|
286
382
|
const isFiniteNumber = (value: unknown): value is number => Predicate.isNumber(value) && Number.isFinite(value)
|
|
287
383
|
|
|
288
384
|
const isUnitInterval = (value: unknown): value is number => isFiniteNumber(value) && value >= 0 && value <= 1
|
|
@@ -390,6 +486,23 @@ const validateAnswer = (
|
|
|
390
486
|
}
|
|
391
487
|
return Result.succeed({ probability: answer.probability })
|
|
392
488
|
}
|
|
489
|
+
case "Locate": {
|
|
490
|
+
const box = answer.box
|
|
491
|
+
if (
|
|
492
|
+
!Predicate.isObject(box) || !isUnitInterval(box.left) || !isUnitInterval(box.top) ||
|
|
493
|
+
!isUnitInterval(box.right) || !isUnitInterval(box.bottom)
|
|
494
|
+
) {
|
|
495
|
+
return invalid(`Provider returned a box with edges outside [0, 1] for decision "${key}"`)
|
|
496
|
+
}
|
|
497
|
+
if (box.left > box.right || box.top > box.bottom) {
|
|
498
|
+
return invalid(`Provider returned a box with crossed edges for decision "${key}"`)
|
|
499
|
+
}
|
|
500
|
+
const bounds = { left: box.left, top: box.top, right: box.right, bottom: box.bottom }
|
|
501
|
+
return Result.map(validateConfidence(key, answer), (confidence) => ({
|
|
502
|
+
box: bounds,
|
|
503
|
+
...(confidence === undefined ? undefined : { confidence })
|
|
504
|
+
}))
|
|
505
|
+
}
|
|
393
506
|
}
|
|
394
507
|
}
|
|
395
508
|
|
|
@@ -436,16 +549,24 @@ const requireAnswers = <Decisions extends Record<string, Decision.Any>>(
|
|
|
436
549
|
* Creates a `DecisionModel` that encodes inputs as JSON and validates provider answers.
|
|
437
550
|
* Answers must cover every decision and use its labels. Distributions must
|
|
438
551
|
* sum to 1 within `1e-6`, optional confidence must be in `[0, 1]`, and ratings must be
|
|
439
|
-
* in `[0, criteria.length - 1]
|
|
552
|
+
* in `[0, criteria.length - 1]`, and boxes must have edges in `[0, 1]` that do
|
|
553
|
+
* not cross. With `decide`, refused decisions fail with
|
|
440
554
|
* `AiError.ContentPolicyError` and other unanswered decisions fail with
|
|
441
555
|
* `AiError.InvalidOutputError`; `decideSettled` reports them per decision
|
|
442
556
|
* instead. Encoding failures use `AiError.InvalidUserInputError`.
|
|
443
557
|
*
|
|
444
558
|
* **Details**
|
|
445
559
|
*
|
|
446
|
-
*
|
|
560
|
+
* After encoding, each `Decision.Image` in the input is replaced with a
|
|
561
|
+
* reference string, and the provider receives the images in `images`. Set
|
|
562
|
+
* `supportsImages: true` to accept images. Otherwise, an input with images
|
|
447
563
|
* fails with `AiError.InvalidUserInputError`.
|
|
448
564
|
*
|
|
565
|
+
* Set `supportsLocate: true` to accept locate decisions; only then does
|
|
566
|
+
* `decide` receive them. Otherwise, a definition with a locate decision fails
|
|
567
|
+
* with `AiError.InvalidUserInputError`, as does a locate decision whose path
|
|
568
|
+
* holds no image.
|
|
569
|
+
*
|
|
449
570
|
* Providers that round each probability to `probabilityPrecision` decimal
|
|
450
571
|
* places may return distributions whose sum drifts from 1 by up to half a unit
|
|
451
572
|
* of the last place per label. Setting `probabilityPrecision` accepts that
|
|
@@ -459,11 +580,21 @@ const requireAnswers = <Decisions extends Record<string, Decision.Any>>(
|
|
|
459
580
|
* @category constructors
|
|
460
581
|
* @since 4.0.0
|
|
461
582
|
*/
|
|
462
|
-
export const make = (
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
583
|
+
export const make = (
|
|
584
|
+
params: {
|
|
585
|
+
readonly decide: (
|
|
586
|
+
options: ProviderOptions<Exclude<Decision.Any, Decision.Locate>>
|
|
587
|
+
) => Effect.Effect<ProviderResponse, AiError.AiError>
|
|
588
|
+
readonly probabilityPrecision?: number | undefined
|
|
589
|
+
readonly supportsImages?: boolean | undefined
|
|
590
|
+
readonly supportsLocate?: false | undefined
|
|
591
|
+
} | {
|
|
592
|
+
readonly decide: (options: ProviderOptions) => Effect.Effect<ProviderResponse, AiError.AiError>
|
|
593
|
+
readonly probabilityPrecision?: number | undefined
|
|
594
|
+
readonly supportsImages?: boolean | undefined
|
|
595
|
+
readonly supportsLocate: true
|
|
596
|
+
}
|
|
597
|
+
): Effect.Effect<DecisionModel> =>
|
|
467
598
|
Effect.sync(() => {
|
|
468
599
|
const roundingError = params.probabilityPrecision === undefined ? 0 : 0.5 * 10 ** -params.probabilityPrecision
|
|
469
600
|
const settle = <Input extends Schema.Constraint, Decisions extends Record<string, Decision.Any>>(
|
|
@@ -472,21 +603,33 @@ export const make = (params: {
|
|
|
472
603
|
options: DecideOptions<Input>
|
|
473
604
|
): Effect.Effect<DecideSettledResponse<Decisions>, AiError.AiError, Input["EncodingServices"]> =>
|
|
474
605
|
Schema.encodeEffect(Schema.toCodecJson(definition.input))(options.input).pipe(
|
|
475
|
-
Effect.mapError((error) =>
|
|
476
|
-
Effect.flatMap((
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
606
|
+
Effect.mapError((error) => invalidUserInput(method, error.message)),
|
|
607
|
+
Effect.flatMap((encoded) =>
|
|
608
|
+
Effect.withFiber((fiber) => Effect.succeed(extractImages(encoded, fiber.getRef(Random.Random))))
|
|
609
|
+
),
|
|
610
|
+
Effect.flatMap(({ state, images, paths }) => {
|
|
611
|
+
if (images.length > 0 && params.supportsImages !== true) {
|
|
612
|
+
return Effect.fail(invalidUserInput(method, "This decision model does not accept images"))
|
|
613
|
+
}
|
|
614
|
+
for (const [key, decision] of Object.entries(definition.decisions)) {
|
|
615
|
+
if (decision._tag !== "Locate") continue
|
|
616
|
+
if (params.supportsLocate !== true) {
|
|
617
|
+
return Effect.fail(invalidUserInput(method, "This decision model does not support locate decisions"))
|
|
618
|
+
}
|
|
619
|
+
if (!paths.has(decision.image)) {
|
|
620
|
+
return Effect.fail(
|
|
621
|
+
invalidUserInput(method, `Locate decision "${key}" targets "${decision.image}", which holds no image`)
|
|
483
622
|
)
|
|
484
|
-
|
|
623
|
+
}
|
|
485
624
|
}
|
|
486
|
-
|
|
625
|
+
// Locate decisions were rejected above unless `supportsLocate` is true.
|
|
626
|
+
const decide = params.decide as (
|
|
627
|
+
options: ProviderOptions
|
|
628
|
+
) => Effect.Effect<ProviderResponse, AiError.AiError>
|
|
629
|
+
return decide({
|
|
487
630
|
state,
|
|
488
631
|
decisions: definition.decisions,
|
|
489
|
-
...(images ===
|
|
632
|
+
...(images.length === 0 ? undefined : { images })
|
|
490
633
|
})
|
|
491
634
|
}),
|
|
492
635
|
Effect.map((response): DecideSettledResponse<Decisions> => ({
|