@marinoscar/platform-api 0.1.0-next.4 → 0.1.0-next.6
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/CHANGELOG.md +18 -0
- package/dist/ai/core/ai-error.d.ts +15 -158
- package/dist/ai/core/ai-error.d.ts.map +1 -1
- package/dist/ai/core/ai-error.js +58 -221
- package/dist/ai/core/ai-error.js.map +1 -1
- package/dist/ai/core/capabilities.d.ts +3 -126
- package/dist/ai/core/capabilities.d.ts.map +1 -1
- package/dist/ai/core/capabilities.js +13 -109
- package/dist/ai/core/capabilities.js.map +1 -1
- package/dist/ai/core/conversation.d.ts +2 -15
- package/dist/ai/core/conversation.d.ts.map +1 -1
- package/dist/ai/core/conversation.js +9 -54
- package/dist/ai/core/conversation.js.map +1 -1
- package/dist/ai/core/hosted-tools.d.ts +3 -172
- package/dist/ai/core/hosted-tools.d.ts.map +1 -1
- package/dist/ai/core/hosted-tools.js +20 -286
- package/dist/ai/core/hosted-tools.js.map +1 -1
- package/dist/ai/core/provider-adapter.interface.d.ts +3 -260
- package/dist/ai/core/provider-adapter.interface.d.ts.map +1 -1
- package/dist/ai/core/provider-adapter.interface.js +7 -29
- package/dist/ai/core/provider-adapter.interface.js.map +1 -1
- package/dist/ai/core/structured-output.d.ts +3 -49
- package/dist/ai/core/structured-output.d.ts.map +1 -1
- package/dist/ai/core/structured-output.js +9 -80
- package/dist/ai/core/structured-output.js.map +1 -1
- package/dist/ai/core/tools.d.ts +3 -93
- package/dist/ai/core/tools.d.ts.map +1 -1
- package/dist/ai/core/tools.js +9 -73
- package/dist/ai/core/tools.js.map +1 -1
- package/dist/ai/core/types/file-inputs.types.d.ts +3 -102
- package/dist/ai/core/types/file-inputs.types.d.ts.map +1 -1
- package/dist/ai/core/types/file-inputs.types.js +14 -78
- package/dist/ai/core/types/file-inputs.types.js.map +1 -1
- package/dist/ai/core/types/media.types.d.ts +3 -616
- package/dist/ai/core/types/media.types.d.ts.map +1 -1
- package/dist/ai/core/types/media.types.js +33 -203
- package/dist/ai/core/types/media.types.js.map +1 -1
- package/dist/ai/core/types/responses.types.d.ts +3 -619
- package/dist/ai/core/types/responses.types.d.ts.map +1 -1
- package/dist/ai/core/types/responses.types.js +9 -57
- package/dist/ai/core/types/responses.types.js.map +1 -1
- package/dist/ai/http/dto/ai-images.dto.d.ts +4 -4
- package/dist/ai/index.d.ts +1 -1
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +3 -3
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/providers/anthropic/anthropic-client.factory.d.ts +13 -15
- package/dist/ai/providers/anthropic/anthropic-client.factory.d.ts.map +1 -1
- package/dist/ai/providers/anthropic/anthropic-client.factory.js +23 -52
- package/dist/ai/providers/anthropic/anthropic-client.factory.js.map +1 -1
- package/dist/ai/providers/anthropic/anthropic.adapter.d.ts +15 -51
- package/dist/ai/providers/anthropic/anthropic.adapter.d.ts.map +1 -1
- package/dist/ai/providers/anthropic/anthropic.adapter.js +29 -293
- package/dist/ai/providers/anthropic/anthropic.adapter.js.map +1 -1
- package/dist/ai/providers/azure-openai/azure-openai-client.factory.d.ts +10 -14
- package/dist/ai/providers/azure-openai/azure-openai-client.factory.d.ts.map +1 -1
- package/dist/ai/providers/azure-openai/azure-openai-client.factory.js +20 -53
- package/dist/ai/providers/azure-openai/azure-openai-client.factory.js.map +1 -1
- package/dist/ai/providers/azure-openai/azure-openai.adapter.d.ts +14 -31
- package/dist/ai/providers/azure-openai/azure-openai.adapter.d.ts.map +1 -1
- package/dist/ai/providers/azure-openai/azure-openai.adapter.js +25 -170
- package/dist/ai/providers/azure-openai/azure-openai.adapter.js.map +1 -1
- package/dist/ai/providers/gemini/gemini-client.factory.d.ts +13 -18
- package/dist/ai/providers/gemini/gemini-client.factory.d.ts.map +1 -1
- package/dist/ai/providers/gemini/gemini-client.factory.js +24 -68
- package/dist/ai/providers/gemini/gemini-client.factory.js.map +1 -1
- package/dist/ai/providers/gemini/gemini.adapter.d.ts +15 -58
- package/dist/ai/providers/gemini/gemini.adapter.d.ts.map +1 -1
- package/dist/ai/providers/gemini/gemini.adapter.js +29 -348
- package/dist/ai/providers/gemini/gemini.adapter.js.map +1 -1
- package/dist/ai/providers/openai/openai-client.factory.d.ts +13 -35
- package/dist/ai/providers/openai/openai-client.factory.d.ts.map +1 -1
- package/dist/ai/providers/openai/openai-client.factory.js +25 -64
- package/dist/ai/providers/openai/openai-client.factory.js.map +1 -1
- package/dist/ai/providers/openai/openai.adapter.d.ts +15 -48
- package/dist/ai/providers/openai/openai.adapter.d.ts.map +1 -1
- package/dist/ai/providers/openai/openai.adapter.js +27 -206
- package/dist/ai/providers/openai/openai.adapter.js.map +1 -1
- package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.d.ts +11 -11
- package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.d.ts.map +1 -1
- package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.js +18 -41
- package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.js.map +1 -1
- package/dist/ai/providers/openai-compatible/openai-compatible.adapter.d.ts +14 -32
- package/dist/ai/providers/openai-compatible/openai-compatible.adapter.d.ts.map +1 -1
- package/dist/ai/providers/openai-compatible/openai-compatible.adapter.js +25 -149
- package/dist/ai/providers/openai-compatible/openai-compatible.adapter.js.map +1 -1
- package/dist/ai/providers/platform-ai-tracer.d.ts +4 -0
- package/dist/ai/providers/platform-ai-tracer.d.ts.map +1 -0
- package/dist/ai/providers/platform-ai-tracer.js +20 -0
- package/dist/ai/providers/platform-ai-tracer.js.map +1 -0
- package/dist/ai/runtime/ai-image-run-request.d.ts +1 -1
- package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.d.ts +28 -5
- package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.d.ts.map +1 -1
- package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.js +54 -9
- package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.js.map +1 -1
- package/dist/ai/testing/index.d.ts +1 -1
- package/dist/ai/testing/index.d.ts.map +1 -1
- package/dist/ai/testing/index.js +2 -1
- package/dist/ai/testing/index.js.map +1 -1
- package/dist/jobs/rate-limit.error.d.ts +2 -26
- package/dist/jobs/rate-limit.error.d.ts.map +1 -1
- package/dist/jobs/rate-limit.error.js +4 -52
- package/dist/jobs/rate-limit.error.js.map +1 -1
- package/dist/storage/config/storage-config.controller.d.ts +1 -1
- package/package.json +3 -2
- package/dist/ai/providers/anthropic/anthropic-errors.d.ts +0 -16
- package/dist/ai/providers/anthropic/anthropic-errors.d.ts.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-errors.js +0 -156
- package/dist/ai/providers/anthropic/anthropic-errors.js.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-messages.mapper.d.ts +0 -80
- package/dist/ai/providers/anthropic/anthropic-messages.mapper.d.ts.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-messages.mapper.js +0 -536
- package/dist/ai/providers/anthropic/anthropic-messages.mapper.js.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-model-catalog.d.ts +0 -49
- package/dist/ai/providers/anthropic/anthropic-model-catalog.d.ts.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-model-catalog.js +0 -198
- package/dist/ai/providers/anthropic/anthropic-model-catalog.js.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-stream.mapper.d.ts +0 -35
- package/dist/ai/providers/anthropic/anthropic-stream.mapper.d.ts.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-stream.mapper.js +0 -203
- package/dist/ai/providers/anthropic/anthropic-stream.mapper.js.map +0 -1
- package/dist/ai/providers/anthropic/testing/anthropic-fixtures.d.ts +0 -18
- package/dist/ai/providers/anthropic/testing/anthropic-fixtures.d.ts.map +0 -1
- package/dist/ai/providers/anthropic/testing/anthropic-fixtures.js +0 -120
- package/dist/ai/providers/anthropic/testing/anthropic-fixtures.js.map +0 -1
- package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.d.ts +0 -59
- package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.d.ts.map +0 -1
- package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.js +0 -206
- package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.js.map +0 -1
- package/dist/ai/providers/azure-openai/azure-openai-settings.d.ts +0 -23
- package/dist/ai/providers/azure-openai/azure-openai-settings.d.ts.map +0 -1
- package/dist/ai/providers/azure-openai/azure-openai-settings.js +0 -54
- package/dist/ai/providers/azure-openai/azure-openai-settings.js.map +0 -1
- package/dist/ai/providers/gemini/gemini-content.mapper.d.ts +0 -98
- package/dist/ai/providers/gemini/gemini-content.mapper.d.ts.map +0 -1
- package/dist/ai/providers/gemini/gemini-content.mapper.js +0 -665
- package/dist/ai/providers/gemini/gemini-content.mapper.js.map +0 -1
- package/dist/ai/providers/gemini/gemini-embeddings.mapper.d.ts +0 -13
- package/dist/ai/providers/gemini/gemini-embeddings.mapper.d.ts.map +0 -1
- package/dist/ai/providers/gemini/gemini-embeddings.mapper.js +0 -78
- package/dist/ai/providers/gemini/gemini-embeddings.mapper.js.map +0 -1
- package/dist/ai/providers/gemini/gemini-errors.d.ts +0 -32
- package/dist/ai/providers/gemini/gemini-errors.d.ts.map +0 -1
- package/dist/ai/providers/gemini/gemini-errors.js +0 -191
- package/dist/ai/providers/gemini/gemini-errors.js.map +0 -1
- package/dist/ai/providers/gemini/gemini-model-catalog.d.ts +0 -45
- package/dist/ai/providers/gemini/gemini-model-catalog.d.ts.map +0 -1
- package/dist/ai/providers/gemini/gemini-model-catalog.js +0 -264
- package/dist/ai/providers/gemini/gemini-model-catalog.js.map +0 -1
- package/dist/ai/providers/gemini/gemini-stream.mapper.d.ts +0 -31
- package/dist/ai/providers/gemini/gemini-stream.mapper.d.ts.map +0 -1
- package/dist/ai/providers/gemini/gemini-stream.mapper.js +0 -118
- package/dist/ai/providers/gemini/gemini-stream.mapper.js.map +0 -1
- package/dist/ai/providers/gemini/testing/gemini-fixtures.d.ts +0 -80
- package/dist/ai/providers/gemini/testing/gemini-fixtures.d.ts.map +0 -1
- package/dist/ai/providers/gemini/testing/gemini-fixtures.js +0 -118
- package/dist/ai/providers/gemini/testing/gemini-fixtures.js.map +0 -1
- package/dist/ai/providers/gemini/testing/gemini-mock-transport.d.ts +0 -82
- package/dist/ai/providers/gemini/testing/gemini-mock-transport.d.ts.map +0 -1
- package/dist/ai/providers/gemini/testing/gemini-mock-transport.js +0 -342
- package/dist/ai/providers/gemini/testing/gemini-mock-transport.js.map +0 -1
- package/dist/ai/providers/openai/openai-audio.mapper.d.ts +0 -42
- package/dist/ai/providers/openai/openai-audio.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-audio.mapper.js +0 -266
- package/dist/ai/providers/openai/openai-audio.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-call-telemetry.d.ts +0 -25
- package/dist/ai/providers/openai/openai-call-telemetry.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-call-telemetry.js +0 -93
- package/dist/ai/providers/openai/openai-call-telemetry.js.map +0 -1
- package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.d.ts +0 -41
- package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.js +0 -173
- package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-chat-completions.engine.d.ts +0 -33
- package/dist/ai/providers/openai/openai-chat-completions.engine.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-chat-completions.engine.js +0 -165
- package/dist/ai/providers/openai/openai-chat-completions.engine.js.map +0 -1
- package/dist/ai/providers/openai/openai-chat-completions.mapper.d.ts +0 -42
- package/dist/ai/providers/openai/openai-chat-completions.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-chat-completions.mapper.js +0 -304
- package/dist/ai/providers/openai/openai-chat-completions.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-embeddings.mapper.d.ts +0 -25
- package/dist/ai/providers/openai/openai-embeddings.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-embeddings.mapper.js +0 -81
- package/dist/ai/providers/openai/openai-embeddings.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-errors.d.ts +0 -45
- package/dist/ai/providers/openai/openai-errors.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-errors.js +0 -247
- package/dist/ai/providers/openai/openai-errors.js.map +0 -1
- package/dist/ai/providers/openai/openai-family-guards.d.ts +0 -4
- package/dist/ai/providers/openai/openai-family-guards.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-family-guards.js +0 -19
- package/dist/ai/providers/openai/openai-family-guards.js.map +0 -1
- package/dist/ai/providers/openai/openai-images.mapper.d.ts +0 -23
- package/dist/ai/providers/openai/openai-images.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-images.mapper.js +0 -164
- package/dist/ai/providers/openai/openai-images.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-model-catalog.d.ts +0 -36
- package/dist/ai/providers/openai/openai-model-catalog.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-model-catalog.js +0 -209
- package/dist/ai/providers/openai/openai-model-catalog.js.map +0 -1
- package/dist/ai/providers/openai/openai-realtime.mapper.d.ts +0 -18
- package/dist/ai/providers/openai/openai-realtime.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-realtime.mapper.js +0 -159
- package/dist/ai/providers/openai/openai-realtime.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-redirect-guard.d.ts +0 -9
- package/dist/ai/providers/openai/openai-redirect-guard.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-redirect-guard.js +0 -61
- package/dist/ai/providers/openai/openai-redirect-guard.js.map +0 -1
- package/dist/ai/providers/openai/openai-responses.engine.d.ts +0 -50
- package/dist/ai/providers/openai/openai-responses.engine.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-responses.engine.js +0 -206
- package/dist/ai/providers/openai/openai-responses.engine.js.map +0 -1
- package/dist/ai/providers/openai/openai-responses.mapper.d.ts +0 -64
- package/dist/ai/providers/openai/openai-responses.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-responses.mapper.js +0 -580
- package/dist/ai/providers/openai/openai-responses.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-stream.mapper.d.ts +0 -28
- package/dist/ai/providers/openai/openai-stream.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-stream.mapper.js +0 -139
- package/dist/ai/providers/openai/openai-stream.mapper.js.map +0 -1
- package/dist/ai/providers/openai/testing/chat-completions-fixtures.d.ts +0 -24
- package/dist/ai/providers/openai/testing/chat-completions-fixtures.d.ts.map +0 -1
- package/dist/ai/providers/openai/testing/chat-completions-fixtures.js +0 -72
- package/dist/ai/providers/openai/testing/chat-completions-fixtures.js.map +0 -1
- package/dist/ai/providers/openai/testing/conformance-responders.d.ts +0 -7
- package/dist/ai/providers/openai/testing/conformance-responders.d.ts.map +0 -1
- package/dist/ai/providers/openai/testing/conformance-responders.js +0 -64
- package/dist/ai/providers/openai/testing/conformance-responders.js.map +0 -1
- package/dist/ai/providers/openai/testing/openai-fixtures.d.ts +0 -52
- package/dist/ai/providers/openai/testing/openai-fixtures.d.ts.map +0 -1
- package/dist/ai/providers/openai/testing/openai-fixtures.js +0 -208
- package/dist/ai/providers/openai/testing/openai-fixtures.js.map +0 -1
- package/dist/ai/providers/openai/testing/openai-mock-transport.d.ts +0 -242
- package/dist/ai/providers/openai/testing/openai-mock-transport.d.ts.map +0 -1
- package/dist/ai/providers/openai/testing/openai-mock-transport.js +0 -523
- package/dist/ai/providers/openai/testing/openai-mock-transport.js.map +0 -1
- package/dist/ai/providers/openai-compatible/openai-compatible-settings.d.ts +0 -13
- package/dist/ai/providers/openai-compatible/openai-compatible-settings.d.ts.map +0 -1
- package/dist/ai/providers/openai-compatible/openai-compatible-settings.js +0 -29
- package/dist/ai/providers/openai-compatible/openai-compatible-settings.js.map +0 -1
|
@@ -59,9 +59,10 @@
|
|
|
59
59
|
// treatment. See that file for the classification ORDER.
|
|
60
60
|
// =============================================================================
|
|
61
61
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
-
exports.CLASSIFY_RATE_LIMIT = exports.RateLimitError = void 0;
|
|
63
|
-
exports.parseRetryAfterMs = parseRetryAfterMs;
|
|
62
|
+
exports.CLASSIFY_RATE_LIMIT = exports.RateLimitError = exports.parseRetryAfterMs = void 0;
|
|
64
63
|
exports.classifyRateLimit = classifyRateLimit;
|
|
64
|
+
const platform_ai_providers_1 = require("@marinoscar/platform-ai-providers");
|
|
65
|
+
Object.defineProperty(exports, "parseRetryAfterMs", { enumerable: true, get: function () { return platform_ai_providers_1.parseRetryAfterMs; } });
|
|
65
66
|
/**
|
|
66
67
|
* Thrown by a handler that has positively identified a provider rate limit.
|
|
67
68
|
*
|
|
@@ -232,55 +233,6 @@ function readRetryAfterHeader(err) {
|
|
|
232
233
|
}
|
|
233
234
|
return null;
|
|
234
235
|
}
|
|
235
|
-
/**
|
|
236
|
-
* Parses an HTTP `Retry-After` header value into milliseconds.
|
|
237
|
-
*
|
|
238
|
-
* RFC 9110 allows exactly two forms and this accepts both, because providers
|
|
239
|
-
* genuinely use both:
|
|
240
|
-
*
|
|
241
|
-
* - `Retry-After: 120` — delta-seconds → 120000
|
|
242
|
-
* - `Retry-After: Wed, 21 Oct 2015 07:28:00 GMT` — an HTTP-date, converted
|
|
243
|
-
* to a delay RELATIVE TO `now` (which is a parameter so tests can pin it,
|
|
244
|
-
* and so a caller that already has a clock does not disagree with this
|
|
245
|
-
* function about what time it is).
|
|
246
|
-
*
|
|
247
|
-
* Returns `null` for absent, empty, unparseable, or nonsensical input —
|
|
248
|
-
* INCLUDING a date already in the past, which is not an error but does not
|
|
249
|
-
* describe a wait. `null` means "no opinion", and the caller falls back to
|
|
250
|
-
* pure backoff; it never means zero, because a provider that said nothing
|
|
251
|
-
* must not be read as a provider that said "retry immediately".
|
|
252
|
-
*
|
|
253
|
-
* A negative delta-seconds is also `null` for the same reason. A fractional
|
|
254
|
-
* value (`0.5`) is rejected too: the grammar is DIGIT-only, so a fractional
|
|
255
|
-
* value means the header is not what we think it is, and guessing at a
|
|
256
|
-
* malformed header is how a 500ms wait gets read as a 500-second one.
|
|
257
|
-
*
|
|
258
|
-
* @stability experimental
|
|
259
|
-
*/
|
|
260
|
-
function parseRetryAfterMs(header, now = Date.now()) {
|
|
261
|
-
if (header === null || header === undefined) {
|
|
262
|
-
return null;
|
|
263
|
-
}
|
|
264
|
-
const raw = String(header).trim();
|
|
265
|
-
if (raw.length === 0) {
|
|
266
|
-
return null;
|
|
267
|
-
}
|
|
268
|
-
// Form 1: delta-seconds. Anchored and digit-only, deliberately — `parseInt`
|
|
269
|
-
// would happily read `30 minutes` as 30 and `1e3` as 1.
|
|
270
|
-
if (/^\d+$/.test(raw)) {
|
|
271
|
-
const seconds = Number(raw);
|
|
272
|
-
return Number.isFinite(seconds) ? seconds * 1000 : null;
|
|
273
|
-
}
|
|
274
|
-
// Form 2: HTTP-date.
|
|
275
|
-
const timestamp = Date.parse(raw);
|
|
276
|
-
if (Number.isNaN(timestamp)) {
|
|
277
|
-
return null;
|
|
278
|
-
}
|
|
279
|
-
const delta = timestamp - now;
|
|
280
|
-
// A date at or before `now` describes no wait at all. See the doc comment:
|
|
281
|
-
// that is "no opinion", not "zero".
|
|
282
|
-
return delta > 0 ? delta : null;
|
|
283
|
-
}
|
|
284
236
|
/**
|
|
285
237
|
* Decides whether an arbitrary thrown value is a provider rate limit, and
|
|
286
238
|
* extracts any `Retry-After` it carried.
|
|
@@ -328,7 +280,7 @@ function classifyRateLimit(err, now = Date.now()) {
|
|
|
328
280
|
}
|
|
329
281
|
return {
|
|
330
282
|
rateLimited: true,
|
|
331
|
-
retryAfterMs: parseRetryAfterMs(readRetryAfterHeader(candidate), now),
|
|
283
|
+
retryAfterMs: (0, platform_ai_providers_1.parseRetryAfterMs)(readRetryAfterHeader(candidate), now),
|
|
332
284
|
};
|
|
333
285
|
}
|
|
334
286
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit.error.js","sourceRoot":"","sources":["../../src/jobs/rate-limit.error.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oDAAoD;AACpD,gFAAgF;AAChF,EAAE;AACF,2EAA2E;AAC3E,2BAA2B;AAC3B,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,sEAAsE;AACtE,kDAAkD;AAClD,4EAA4E;AAC5E,+EAA+E;AAC/E,0EAA0E;AAC1E,uEAAuE;AACvE,8EAA8E;AAC9E,uCAAuC;AACvC,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,EAAE;AACF,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAChF,EAAE;AACF,uEAAuE;AACvE,2EAA2E;AAC3E,4EAA4E;AAC5E,wEAAwE;AACxE,4EAA4E;AAC5E,+CAA+C;AAC/C,EAAE;AACF,gFAAgF;AAChF,+CAA+C;AAC/C,gFAAgF;AAChF,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,4EAA4E;AAC5E,oEAAoE;AACpE,6EAA6E;AAC7E,4EAA4E;AAC5E,0EAA0E;AAC1E,4EAA4E;AAC5E,EAAE;AACF,kEAAkE;AAClE,4EAA4E;AAC5E,0EAA0E;AAC1E,4EAA4E;AAC5E,sEAAsE;AACtE,2EAA2E;AAC3E,4EAA4E;AAC5E,EAAE;AACF,8EAA8E;AAC9E,oEAAoE;AACpE,kEAAkE;AAClE,sEAAsE;AACtE,yDAAyD;AACzD,gFAAgF;;;
|
|
1
|
+
{"version":3,"file":"rate-limit.error.js","sourceRoot":"","sources":["../../src/jobs/rate-limit.error.ts"],"names":[],"mappings":"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"}
|
|
@@ -180,7 +180,7 @@ export declare class StorageConfigController {
|
|
|
180
180
|
region: string;
|
|
181
181
|
effectiveEndpoint: string | null;
|
|
182
182
|
steps: {
|
|
183
|
-
id: "create" | "
|
|
183
|
+
id: "create" | "publicAccessBlock" | "encryption" | "cors";
|
|
184
184
|
label: string;
|
|
185
185
|
status: "failed" | "skipped" | "passed";
|
|
186
186
|
detail: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@marinoscar/platform-api",
|
|
3
|
-
"version": "0.1.0-next.
|
|
3
|
+
"version": "0.1.0-next.6",
|
|
4
4
|
"description": "NestJS dynamic modules of the platform (CommonJS, built with tsc for decorator metadata).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "commonjs",
|
|
@@ -212,7 +212,8 @@
|
|
|
212
212
|
"@aws-sdk/lib-storage": "^3.975.0",
|
|
213
213
|
"@aws-sdk/s3-request-presigner": "^3.975.0",
|
|
214
214
|
"@google/genai": "^2.24.0",
|
|
215
|
-
"@marinoscar/platform-
|
|
215
|
+
"@marinoscar/platform-ai-providers": "0.1.0-next.6",
|
|
216
|
+
"@marinoscar/platform-contract": "0.1.0-next.6",
|
|
216
217
|
"@opentelemetry/auto-instrumentations-node": "^0.79.0",
|
|
217
218
|
"@opentelemetry/core": "^2.10.0",
|
|
218
219
|
"@opentelemetry/exporter-logs-otlp-http": "^0.221.0",
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { AiError, AiErrorCode } from '../../core/ai-error';
|
|
2
|
-
export declare const ANTHROPIC_PROVIDER_ID = "anthropic";
|
|
3
|
-
/** The generic, secret-free message this adapter uses for `code`. */
|
|
4
|
-
export declare function anthropicErrorMessage(code: AiErrorCode): string;
|
|
5
|
-
/** Classifies an Anthropic error `type` (from a body or a stream `error` frame). */
|
|
6
|
-
export declare function classifyAnthropicErrorType(type: string | null | undefined): AiErrorCode;
|
|
7
|
-
/** The provider's requested back-off, from the standard `retry-after` header. */
|
|
8
|
-
export declare function anthropicRetryAfter(headers: Headers | undefined): number | undefined;
|
|
9
|
-
/** Which `AiErrorCode` an SDK error means. Pure — exported for the table spec. */
|
|
10
|
-
export declare function anthropicErrorCode(err: unknown): AiErrorCode;
|
|
11
|
-
/**
|
|
12
|
-
* Turns anything an Anthropic call threw into an `AiError`. An `AiError` is
|
|
13
|
-
* returned unchanged (the mapper's own `AI_CAPABILITY_UNSUPPORTED`, for one).
|
|
14
|
-
*/
|
|
15
|
-
export declare function mapAnthropicError(err: unknown): AiError;
|
|
16
|
-
//# sourceMappingURL=anthropic-errors.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-errors.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/anthropic/anthropic-errors.ts"],"names":[],"mappings":"AAyCA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAG3D,eAAO,MAAM,qBAAqB,cAAc,CAAC;AAoBjD,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAE/D;AAED,oFAAoF;AACpF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CAiBvF;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEpF;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CA2B5D;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CA0BvD"}
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// =============================================================================
|
|
3
|
-
// Anthropic SDK error -> AiError (issue #446, epic #421)
|
|
4
|
-
// =============================================================================
|
|
5
|
-
//
|
|
6
|
-
// The one place an Anthropic SDK failure becomes an `AiError` — the exact
|
|
7
|
-
// counterpart of `openai-errors.ts`, and for the same reasons: every `catch`
|
|
8
|
-
// in this adapter funnels through `mapAnthropicError`, so a raw SDK exception
|
|
9
|
-
// never crosses the `AiProviderAdapter` boundary (the conformance kit asserts
|
|
10
|
-
// it) and one provider condition cannot surface as two codes.
|
|
11
|
-
//
|
|
12
|
-
// ⚠ SECRETS. The SDK's own `message` is never copied into the `AiError`: it
|
|
13
|
-
// is the provider's text, and a provider's text can echo request details.
|
|
14
|
-
// What travels in `details` is short machine-readable metadata only — the
|
|
15
|
-
// HTTP status, Anthropic's error `type` (`rate_limit_error`, ...) and its
|
|
16
|
-
// request id. The SDK error is kept as the non-enumerable `cause`.
|
|
17
|
-
//
|
|
18
|
-
// THE TABLE (pinned by `anthropic-errors.spec.ts`):
|
|
19
|
-
//
|
|
20
|
-
// 401 authentication_error AI_KEY_INVALID
|
|
21
|
-
// 403 permission_error AI_MODEL_NOT_REACHABLE (the key may not use it)
|
|
22
|
-
// 404 not_found_error AI_MODEL_NOT_REACHABLE (Messages' only 404 is the model)
|
|
23
|
-
// 402 billing_error AI_RATE_LIMITED (OpenAI's `insufficient_quota` precedent)
|
|
24
|
-
// 429 rate_limit_error AI_RATE_LIMITED, with `retry-after`
|
|
25
|
-
// 529 overloaded_error / 5xx / 408 AI_PROVIDER_UNAVAILABLE (with `retry-after` when named)
|
|
26
|
-
// 400/409/413/422 AI_INVALID_REQUEST
|
|
27
|
-
// abort (APIUserAbortError) AI_PROVIDER_UNAVAILABLE, details.aborted — as OpenAI's
|
|
28
|
-
// connection / timeout AI_PROVIDER_UNAVAILABLE, details.transport
|
|
29
|
-
//
|
|
30
|
-
// A mid-stream `event: error` frame has no HTTP status; the SDK raises it as a
|
|
31
|
-
// status-less `APIError` whose `type` is the body's `error.type`, classified by
|
|
32
|
-
// the same table.
|
|
33
|
-
// =============================================================================
|
|
34
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
-
exports.ANTHROPIC_PROVIDER_ID = void 0;
|
|
36
|
-
exports.anthropicErrorMessage = anthropicErrorMessage;
|
|
37
|
-
exports.classifyAnthropicErrorType = classifyAnthropicErrorType;
|
|
38
|
-
exports.anthropicRetryAfter = anthropicRetryAfter;
|
|
39
|
-
exports.anthropicErrorCode = anthropicErrorCode;
|
|
40
|
-
exports.mapAnthropicError = mapAnthropicError;
|
|
41
|
-
const sdk_1 = require("@anthropic-ai/sdk");
|
|
42
|
-
const ai_error_1 = require("../../core/ai-error");
|
|
43
|
-
const index_1 = require("../../../jobs/index");
|
|
44
|
-
exports.ANTHROPIC_PROVIDER_ID = 'anthropic';
|
|
45
|
-
const MESSAGES = {
|
|
46
|
-
AI_DISABLED: 'AI is disabled.',
|
|
47
|
-
AI_PROVIDER_DISABLED: 'The AI provider is disabled.',
|
|
48
|
-
AI_KEY_REQUIRED: 'An API key is required for this AI provider.',
|
|
49
|
-
AI_KEY_INVALID: 'The Anthropic API key was rejected.',
|
|
50
|
-
AI_MODEL_NOT_ENABLED: 'The model is not enabled.',
|
|
51
|
-
AI_MODEL_NOT_REACHABLE: 'The Anthropic model is not reachable with this API key.',
|
|
52
|
-
AI_CAPABILITY_UNSUPPORTED: 'The request uses a capability Anthropic does not support here.',
|
|
53
|
-
AI_TOOL_DISABLED: 'The requested tool is not enabled in this deployment.',
|
|
54
|
-
AI_REALTIME_DISABLED: 'Realtime sessions are not enabled in this deployment.',
|
|
55
|
-
AI_RATE_LIMITED: 'Anthropic rate-limited the request.',
|
|
56
|
-
AI_PROVIDER_UNAVAILABLE: 'Anthropic is unavailable or the request failed.',
|
|
57
|
-
AI_CONTENT_FILTERED: 'Anthropic refused the request.',
|
|
58
|
-
AI_INVALID_REQUEST: 'Anthropic rejected the request as invalid.',
|
|
59
|
-
AI_STRUCTURED_OUTPUT_INVALID: 'The model output does not match the requested schema.',
|
|
60
|
-
AI_STORAGE_UNAVAILABLE: 'Object storage is unavailable.',
|
|
61
|
-
};
|
|
62
|
-
/** The generic, secret-free message this adapter uses for `code`. */
|
|
63
|
-
function anthropicErrorMessage(code) {
|
|
64
|
-
return MESSAGES[code];
|
|
65
|
-
}
|
|
66
|
-
/** Classifies an Anthropic error `type` (from a body or a stream `error` frame). */
|
|
67
|
-
function classifyAnthropicErrorType(type) {
|
|
68
|
-
switch (type) {
|
|
69
|
-
case 'authentication_error':
|
|
70
|
-
return 'AI_KEY_INVALID';
|
|
71
|
-
case 'permission_error':
|
|
72
|
-
case 'not_found_error':
|
|
73
|
-
return 'AI_MODEL_NOT_REACHABLE';
|
|
74
|
-
case 'rate_limit_error':
|
|
75
|
-
case 'billing_error':
|
|
76
|
-
return 'AI_RATE_LIMITED';
|
|
77
|
-
case 'invalid_request_error':
|
|
78
|
-
case 'request_too_large':
|
|
79
|
-
return 'AI_INVALID_REQUEST';
|
|
80
|
-
default:
|
|
81
|
-
// overloaded_error, api_error, timeout_error, anything unknown.
|
|
82
|
-
return 'AI_PROVIDER_UNAVAILABLE';
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
/** The provider's requested back-off, from the standard `retry-after` header. */
|
|
86
|
-
function anthropicRetryAfter(headers) {
|
|
87
|
-
return (0, index_1.parseRetryAfterMs)(headers?.get('retry-after') ?? null) ?? undefined;
|
|
88
|
-
}
|
|
89
|
-
/** Which `AiErrorCode` an SDK error means. Pure — exported for the table spec. */
|
|
90
|
-
function anthropicErrorCode(err) {
|
|
91
|
-
if (err instanceof ai_error_1.AiError)
|
|
92
|
-
return err.code;
|
|
93
|
-
// Subclasses before their parents: both extend APIError.
|
|
94
|
-
if (err instanceof sdk_1.APIUserAbortError)
|
|
95
|
-
return 'AI_PROVIDER_UNAVAILABLE';
|
|
96
|
-
if (err instanceof sdk_1.APIConnectionError)
|
|
97
|
-
return 'AI_PROVIDER_UNAVAILABLE';
|
|
98
|
-
if (err instanceof sdk_1.APIError) {
|
|
99
|
-
const status = err.status;
|
|
100
|
-
if (typeof status === 'number') {
|
|
101
|
-
if (status === 401)
|
|
102
|
-
return 'AI_KEY_INVALID';
|
|
103
|
-
if (status === 402)
|
|
104
|
-
return 'AI_RATE_LIMITED';
|
|
105
|
-
if (status === 403 || status === 404)
|
|
106
|
-
return 'AI_MODEL_NOT_REACHABLE';
|
|
107
|
-
if (status === 429)
|
|
108
|
-
return 'AI_RATE_LIMITED';
|
|
109
|
-
if (status === 408 || status >= 500)
|
|
110
|
-
return 'AI_PROVIDER_UNAVAILABLE';
|
|
111
|
-
if (status >= 400)
|
|
112
|
-
return 'AI_INVALID_REQUEST';
|
|
113
|
-
}
|
|
114
|
-
return classifyAnthropicErrorType(err.type);
|
|
115
|
-
}
|
|
116
|
-
// Any other SDK error (a malformed SSE frame, "streaming required", ...),
|
|
117
|
-
// a fetch/socket failure, anything else.
|
|
118
|
-
if (err instanceof sdk_1.AnthropicError)
|
|
119
|
-
return 'AI_PROVIDER_UNAVAILABLE';
|
|
120
|
-
return 'AI_PROVIDER_UNAVAILABLE';
|
|
121
|
-
}
|
|
122
|
-
function stringOrUndefined(value) {
|
|
123
|
-
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Turns anything an Anthropic call threw into an `AiError`. An `AiError` is
|
|
127
|
-
* returned unchanged (the mapper's own `AI_CAPABILITY_UNSUPPORTED`, for one).
|
|
128
|
-
*/
|
|
129
|
-
function mapAnthropicError(err) {
|
|
130
|
-
if (err instanceof ai_error_1.AiError)
|
|
131
|
-
return err;
|
|
132
|
-
const code = anthropicErrorCode(err);
|
|
133
|
-
const details = { provider: exports.ANTHROPIC_PROVIDER_ID };
|
|
134
|
-
let retryAfterMs;
|
|
135
|
-
if (err instanceof sdk_1.APIUserAbortError) {
|
|
136
|
-
details.aborted = true;
|
|
137
|
-
}
|
|
138
|
-
else if (err instanceof sdk_1.APIConnectionError) {
|
|
139
|
-
details.transport = err instanceof sdk_1.APIConnectionTimeoutError ? 'timeout' : 'connection';
|
|
140
|
-
}
|
|
141
|
-
else if (err instanceof sdk_1.APIError) {
|
|
142
|
-
if (typeof err.status === 'number')
|
|
143
|
-
details.status = err.status;
|
|
144
|
-
const providerType = stringOrUndefined(err.type);
|
|
145
|
-
const providerRequestId = stringOrUndefined(err.requestID);
|
|
146
|
-
if (providerType)
|
|
147
|
-
details.providerType = providerType;
|
|
148
|
-
if (providerRequestId)
|
|
149
|
-
details.providerRequestId = providerRequestId;
|
|
150
|
-
if (code === 'AI_RATE_LIMITED' || code === 'AI_PROVIDER_UNAVAILABLE') {
|
|
151
|
-
retryAfterMs = anthropicRetryAfter(err.headers);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
return new ai_error_1.AiError(code, anthropicErrorMessage(code), { cause: err, details, retryAfterMs });
|
|
155
|
-
}
|
|
156
|
-
//# sourceMappingURL=anthropic-errors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-errors.js","sourceRoot":"","sources":["../../../../src/ai/providers/anthropic/anthropic-errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import type { ContentBlock, Message, MessageCreateParamsBase, RedactedThinkingBlockParam, StopReason, ThinkingBlockParam, Usage } from '@anthropic-ai/sdk/resources/messages/messages';
|
|
2
|
-
import type { AiStorageInputModality } from '../../core/types/file-inputs.types';
|
|
3
|
-
import { type AiOutputItem, type AiReasoningItem, type AiResponse, type AiResponseRequest, type AiUsage } from '../../core/types/responses.types';
|
|
4
|
-
import { type AnthropicModelProfile } from './anthropic-model-catalog';
|
|
5
|
-
/** The request body minus `stream`, which the port sets. */
|
|
6
|
-
export type AnthropicRequestBody = Omit<MessageCreateParamsBase, 'stream'>;
|
|
7
|
-
/** The signed / encrypted thinking blocks a reasoning item replays. */
|
|
8
|
-
export type AnthropicThinkingBlock = ThinkingBlockParam | RedactedThinkingBlockParam;
|
|
9
|
-
/** What `AI_PROVIDER_STATE.data` holds for an Anthropic reasoning item. */
|
|
10
|
-
export interface AnthropicReasoningState {
|
|
11
|
-
blocks: AnthropicThinkingBlock[];
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* How one storage-object input reached Anthropic (#441): a presigned URL
|
|
15
|
-
* Anthropic fetches (images), or the bytes inline (documents). ⚠ `url` may be
|
|
16
|
-
* presigned — it goes into the request body and nowhere else.
|
|
17
|
-
*/
|
|
18
|
-
export interface AnthropicStorageDelivery {
|
|
19
|
-
modality: AiStorageInputModality;
|
|
20
|
-
mimeType: string;
|
|
21
|
-
filename: string;
|
|
22
|
-
url?: string;
|
|
23
|
-
data?: Uint8Array;
|
|
24
|
-
}
|
|
25
|
-
/** Deliveries keyed by storage object id. */
|
|
26
|
-
export type AnthropicStorageDeliveries = ReadonlyMap<string, AnthropicStorageDelivery>;
|
|
27
|
-
/**
|
|
28
|
-
* What the request mapper decided that the response mapper must know: the
|
|
29
|
-
* name of the forced structured-output tool, when that path was taken.
|
|
30
|
-
*/
|
|
31
|
-
export interface AnthropicRequestPlan {
|
|
32
|
-
body: AnthropicRequestBody;
|
|
33
|
-
structuredToolName?: string;
|
|
34
|
-
}
|
|
35
|
-
/** Every storage object id `req` names, in order, each once. */
|
|
36
|
-
export declare function anthropicStorageObjectIds(req: AiResponseRequest): string[];
|
|
37
|
-
/** The thinking blocks an Anthropic reasoning item carries, or `[]`. */
|
|
38
|
-
export declare function anthropicReasoningBlocks(item: AiReasoningItem): AnthropicThinkingBlock[];
|
|
39
|
-
/**
|
|
40
|
-
* Builds the Anthropic request body for `req`.
|
|
41
|
-
*
|
|
42
|
-
* `profile` is the model's classifier profile (or `null` when unclassified);
|
|
43
|
-
* `storage` is what the adapter delivered for each storage-object part.
|
|
44
|
-
* Throws `AiError` (never an SDK error): see the file header.
|
|
45
|
-
*/
|
|
46
|
-
export declare function toAnthropicRequest(req: AiResponseRequest, profile: AnthropicModelProfile | null, storage?: AnthropicStorageDeliveries): AnthropicRequestPlan;
|
|
47
|
-
/** A reasoning item for replayable thinking blocks: summary text out, signature in the symbol state. */
|
|
48
|
-
export declare function anthropicReasoningItem(block: AnthropicThinkingBlock): AiReasoningItem;
|
|
49
|
-
/**
|
|
50
|
-
* Maps one content block. `null` for a block type this contract does not
|
|
51
|
-
* model (server-tool blocks, which this adapter never requests).
|
|
52
|
-
*/
|
|
53
|
-
export declare function fromAnthropicContentBlock(block: ContentBlock, structuredTool?: string): AiOutputItem | null;
|
|
54
|
-
/** Usage, normalised: `inputTokens` includes cached tokens, as OpenAI's does. */
|
|
55
|
-
export declare function anthropicUsage(usage: Partial<Pick<Usage, 'input_tokens' | 'output_tokens' | 'cache_read_input_tokens' | 'cache_creation_input_tokens' | 'output_tokens_details'>> | null | undefined): AiUsage;
|
|
56
|
-
export interface FromAnthropicOptions {
|
|
57
|
-
/** The originating request; its `structuredOutput` drives `parsed`. */
|
|
58
|
-
request: AiResponseRequest;
|
|
59
|
-
/** The `request-id` Anthropic answered with. */
|
|
60
|
-
providerRequestId?: string | null;
|
|
61
|
-
}
|
|
62
|
-
export interface AnthropicResponseParts {
|
|
63
|
-
id: string;
|
|
64
|
-
model: string;
|
|
65
|
-
output: AiOutputItem[];
|
|
66
|
-
stopReason: StopReason | null | undefined;
|
|
67
|
-
usage: AiUsage;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* The `AiResponse` for mapped parts — shared by `create` and the stream. When
|
|
71
|
-
* the request asked for structured output and the model finished its turn,
|
|
72
|
-
* the text is validated with `parseStructured` (a mismatch throws
|
|
73
|
-
* `AI_STRUCTURED_OUTPUT_INVALID`).
|
|
74
|
-
*/
|
|
75
|
-
export declare function finishAnthropicResponse(parts: AnthropicResponseParts, opts: FromAnthropicOptions): AiResponse;
|
|
76
|
-
/** Maps a finished SDK `Message` to an `AiResponse`. */
|
|
77
|
-
export declare function fromAnthropicMessage(message: Message, opts: FromAnthropicOptions & {
|
|
78
|
-
structuredToolName?: string;
|
|
79
|
-
}): AiResponse;
|
|
80
|
-
//# sourceMappingURL=anthropic-messages.mapper.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-messages.mapper.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/anthropic/anthropic-messages.mapper.ts"],"names":[],"mappings":"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"}
|