@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
|
@@ -1,46 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// =============================================================================
|
|
3
|
-
//
|
|
3
|
+
// AnthropicProviderAdapter: the Nest binding (issue #991)
|
|
4
4
|
// =============================================================================
|
|
5
5
|
//
|
|
6
|
-
// The
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// anthropic-client.factory.ts one SDK client per call (key, maxRetries 0)
|
|
15
|
-
// anthropic-messages.mapper.ts AiResponseRequest <-> Messages API
|
|
16
|
-
// anthropic-stream.mapper.ts stream events -> AiStreamEvent
|
|
17
|
-
// anthropic-errors.ts SDK error -> AiError
|
|
18
|
-
// anthropic-model-catalog.ts classifyModel()'s rule table + per-family profile
|
|
19
|
-
//
|
|
20
|
-
// PORTS. `responses` only. Anthropic has no embeddings, image-generation or
|
|
21
|
-
// audio endpoints, so `embeddings`, `images`, `audio` and `realtime` are
|
|
22
|
-
// ABSENT — presence is the declaration, and `AiProviderRegistry.supports()`
|
|
23
|
-
// stays truthful. `supportsHostedTools: false` keeps it truthful for the one
|
|
24
|
-
// capability that rides on the responses port without a port of its own:
|
|
25
|
-
// Anthropic's server tools are a different set, and none is mapped yet.
|
|
26
|
-
//
|
|
27
|
-
// STATELESS (#446). `supportsPreviousResponseId: false`: Anthropic stores no
|
|
28
|
-
// response to chain onto. The facade refuses a caller's `previousResponseId`
|
|
29
|
-
// and the tool loop resends the full history instead — see
|
|
30
|
-
// `AiProviderAdapter.supportsPreviousResponseId`. The request mapper refuses
|
|
31
|
-
// it too, as defence in depth for a direct port caller.
|
|
32
|
-
//
|
|
33
|
-
// STORAGE-OBJECT INPUTS (#441). `fileInputStrategy` is images by
|
|
34
|
-
// `presigned_url` (a 10-minute signed GET the runtime minted, passed as an
|
|
35
|
-
// `image` URL source — Anthropic fetches it) and files `inline` (the bytes,
|
|
36
|
-
// read under the runtime's cap, sent as a base64 PDF or plain-text
|
|
37
|
-
// `document`). Nothing is uploaded to Anthropic, so there is nothing to
|
|
38
|
-
// delete afterwards.
|
|
39
|
-
//
|
|
40
|
-
// OBSERVABILITY. Every provider call runs inside an `ai.provider.call` span
|
|
41
|
-
// carrying `ai.provider`, `ai.model`, `ai.operation` and `ai.status` (`ok` or
|
|
42
|
-
// the AiErrorCode) — never prompt text, output text or the key — exactly as
|
|
43
|
-
// the OpenAI adapter's do. No exception is recorded on the span.
|
|
6
|
+
// The adapter itself (ports, mappers, error mapping, telemetry) lives in
|
|
7
|
+
// `@marinoscar/platform-ai-providers/anthropic`, framework-free. This subclass keeps the
|
|
8
|
+
// platform's injectable class and constructor signature
|
|
9
|
+
// (`AiProviderRegistry`, `AnthropicClientFactory`), hands the base a Nest `Logger` named
|
|
10
|
+
// after this class and the platform tracer (`../platform-ai-tracer.ts`), so
|
|
11
|
+
// log lines and `ai.provider.call` spans are unchanged, and registers itself
|
|
12
|
+
// with `AiProviderRegistry` in `onModuleInit` as it always did. It imports no
|
|
13
|
+
// SDK.
|
|
44
14
|
// =============================================================================
|
|
45
15
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
46
16
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -53,270 +23,33 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
53
23
|
};
|
|
54
24
|
var AnthropicProviderAdapter_1;
|
|
55
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
56
|
-
exports.
|
|
26
|
+
exports.ANTHROPIC_PROVIDER_CALL_SPAN = exports.AnthropicProviderAdapter = void 0;
|
|
57
27
|
const common_1 = require("@nestjs/common");
|
|
58
|
-
const
|
|
59
|
-
|
|
28
|
+
const anthropic_1 = require("@marinoscar/platform-ai-providers/anthropic");
|
|
29
|
+
require("../../core/ai-error");
|
|
60
30
|
const provider_registry_1 = require("../../core/provider-registry");
|
|
61
|
-
const
|
|
31
|
+
const platform_ai_tracer_1 = require("../platform-ai-tracer");
|
|
62
32
|
const anthropic_client_factory_1 = require("./anthropic-client.factory");
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const MODELS_PAGE_SIZE = 1000;
|
|
71
|
-
const tracer = api_1.trace.getTracer((0, index_1.resolveServiceName)());
|
|
72
|
-
let AnthropicProviderAdapter = AnthropicProviderAdapter_1 = class AnthropicProviderAdapter {
|
|
33
|
+
/**
|
|
34
|
+
* The injectable AnthropicProviderAdapter: registers itself with `AiProviderRegistry` when
|
|
35
|
+
* its module initialises.
|
|
36
|
+
*
|
|
37
|
+
* @stability experimental
|
|
38
|
+
*/
|
|
39
|
+
let AnthropicProviderAdapter = AnthropicProviderAdapter_1 = class AnthropicProviderAdapter extends anthropic_1.AnthropicProviderAdapter {
|
|
73
40
|
registry;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
defaultBaseUrl = anthropic_client_factory_1.ANTHROPIC_DEFAULT_BASE_URL;
|
|
79
|
-
/** Stateless: the runtime resends history instead of chaining (#446). */
|
|
80
|
-
supportsPreviousResponseId = false;
|
|
81
|
-
/** None of the neutral hosted tools are mapped — the mapper refuses them. */
|
|
82
|
-
supportsHostedTools = false;
|
|
83
|
-
/** Images by presigned URL, documents inline — see the file header. */
|
|
84
|
-
fileInputStrategy = { image: 'presigned_url', file: 'inline' };
|
|
85
|
-
responses = {
|
|
86
|
-
create: (req, ctx) => this.createResponse(req, ctx),
|
|
87
|
-
stream: (req, ctx) => this.streamResponse(req, ctx),
|
|
88
|
-
};
|
|
89
|
-
logger = new common_1.Logger(AnthropicProviderAdapter_1.name);
|
|
41
|
+
/**
|
|
42
|
+
* @param registry - the provider registry this adapter joins.
|
|
43
|
+
* @param clients - the injectable SDK client factory.
|
|
44
|
+
*/
|
|
90
45
|
constructor(registry, clients) {
|
|
46
|
+
super({ clients, logger: new common_1.Logger(AnthropicProviderAdapter_1.name), tracer: platform_ai_tracer_1.PLATFORM_AI_TRACER });
|
|
91
47
|
this.registry = registry;
|
|
92
|
-
this.clients = clients;
|
|
93
48
|
}
|
|
49
|
+
/** Adds this adapter to `AiProviderRegistry`. */
|
|
94
50
|
onModuleInit() {
|
|
95
51
|
this.registry.register(this);
|
|
96
52
|
}
|
|
97
|
-
classifyModel(modelId) {
|
|
98
|
-
return (0, anthropic_model_catalog_1.classifyAnthropicModel)(modelId);
|
|
99
|
-
}
|
|
100
|
-
/** `GET /v1/models`, every page. */
|
|
101
|
-
async listModels(ctx) {
|
|
102
|
-
return this.call('models.list', undefined, ctx, async () => {
|
|
103
|
-
const client = this.clients.create(ctx);
|
|
104
|
-
const models = [];
|
|
105
|
-
for await (const model of client.models.list({ limit: MODELS_PAGE_SIZE }, { signal: ctx.signal })) {
|
|
106
|
-
const created = model.created_at ? new Date(model.created_at) : undefined;
|
|
107
|
-
models.push({
|
|
108
|
-
id: model.id,
|
|
109
|
-
ownedBy: anthropic_errors_1.ANTHROPIC_PROVIDER_ID,
|
|
110
|
-
...(created && !Number.isNaN(created.getTime()) ? { createdAt: created } : {}),
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
return models;
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* `GET /v1/models?limit=1` with the key. A rejected key is an ANSWER
|
|
118
|
-
* (`{ ok: false, code: 'AI_KEY_INVALID' }`), as is any other failure.
|
|
119
|
-
*/
|
|
120
|
-
async verifyKey(ctx) {
|
|
121
|
-
try {
|
|
122
|
-
await this.call('verify_key', undefined, ctx, async () => {
|
|
123
|
-
const client = this.clients.create(ctx);
|
|
124
|
-
await client.models.list({ limit: 1 }, { signal: ctx.signal });
|
|
125
|
-
});
|
|
126
|
-
return { ok: true };
|
|
127
|
-
}
|
|
128
|
-
catch (err) {
|
|
129
|
-
const mapped = (0, anthropic_errors_1.mapAnthropicError)(err);
|
|
130
|
-
return mapped.code === 'AI_KEY_INVALID'
|
|
131
|
-
? { ok: false, code: 'AI_KEY_INVALID' }
|
|
132
|
-
: { ok: false, code: mapped.code, detail: mapped.message };
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
// ---- responses port -------------------------------------------------------
|
|
136
|
-
plan(req, storage) {
|
|
137
|
-
return (0, anthropic_messages_mapper_1.toAnthropicRequest)(req, (0, anthropic_model_catalog_1.anthropicModelProfile)(req.model), storage);
|
|
138
|
-
}
|
|
139
|
-
createResponse(req, ctx) {
|
|
140
|
-
return this.call('messages.create', req.model, ctx, async () => {
|
|
141
|
-
const plan = this.plan(req, await this.deliverStorageInputs(req, ctx));
|
|
142
|
-
const client = this.clients.create(ctx);
|
|
143
|
-
const { data, request_id } = await client.messages
|
|
144
|
-
.create({ ...plan.body, stream: false }, { signal: ctx.signal })
|
|
145
|
-
.withResponse();
|
|
146
|
-
return (0, anthropic_messages_mapper_1.fromAnthropicMessage)(data, {
|
|
147
|
-
request: req,
|
|
148
|
-
providerRequestId: request_id,
|
|
149
|
-
structuredToolName: plan.structuredToolName,
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Streams one response. A failure BEFORE `response.created` (a rejected
|
|
155
|
-
* key, a 429, an unsupported request) is thrown as an `AiError`; once the
|
|
156
|
-
* stream has started, a failure ends it with exactly one `error` event.
|
|
157
|
-
*
|
|
158
|
-
* `ctx.signal` aborts the SDK request; a consumer that stops iterating
|
|
159
|
-
* (`break`) aborts it too.
|
|
160
|
-
*/
|
|
161
|
-
async *streamResponse(req, ctx) {
|
|
162
|
-
const started = Date.now();
|
|
163
|
-
const span = this.startSpan('messages.stream', req.model);
|
|
164
|
-
let status = 'ok';
|
|
165
|
-
let providerRequestId = null;
|
|
166
|
-
let sdkStream;
|
|
167
|
-
let terminated = false;
|
|
168
|
-
try {
|
|
169
|
-
const plan = this.plan(req, await this.deliverStorageInputs(req, ctx));
|
|
170
|
-
const client = this.clients.create(ctx);
|
|
171
|
-
try {
|
|
172
|
-
const { data, request_id } = await client.messages
|
|
173
|
-
.create({ ...plan.body, stream: true }, { signal: ctx.signal })
|
|
174
|
-
.withResponse();
|
|
175
|
-
sdkStream = data;
|
|
176
|
-
providerRequestId = request_id ?? null;
|
|
177
|
-
}
|
|
178
|
-
catch (err) {
|
|
179
|
-
throw (0, anthropic_errors_1.mapAnthropicError)(err);
|
|
180
|
-
}
|
|
181
|
-
const mapper = new anthropic_stream_mapper_1.AnthropicStreamMapper({
|
|
182
|
-
request: req,
|
|
183
|
-
providerRequestId,
|
|
184
|
-
structuredToolName: plan.structuredToolName,
|
|
185
|
-
});
|
|
186
|
-
try {
|
|
187
|
-
for await (const event of sdkStream) {
|
|
188
|
-
for (const out of mapper.map(event)) {
|
|
189
|
-
if (out.type === 'error')
|
|
190
|
-
status = out.code;
|
|
191
|
-
yield out;
|
|
192
|
-
}
|
|
193
|
-
if (mapper.terminated)
|
|
194
|
-
break;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
catch (err) {
|
|
198
|
-
const mapped = (0, anthropic_errors_1.mapAnthropicError)(err);
|
|
199
|
-
if (!mapper.started)
|
|
200
|
-
throw mapped;
|
|
201
|
-
status = mapped.code;
|
|
202
|
-
yield* mapper.fail(mapped);
|
|
203
|
-
}
|
|
204
|
-
terminated = mapper.terminated;
|
|
205
|
-
if (!terminated) {
|
|
206
|
-
if (ctx.signal?.aborted) {
|
|
207
|
-
throw new ai_error_1.AiError('AI_PROVIDER_UNAVAILABLE', 'The AI request was cancelled.', {
|
|
208
|
-
details: { provider: anthropic_errors_1.ANTHROPIC_PROVIDER_ID, aborted: true },
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
const truncated = new ai_error_1.AiError('AI_PROVIDER_UNAVAILABLE', 'The Anthropic stream ended before the response completed.', { details: { provider: anthropic_errors_1.ANTHROPIC_PROVIDER_ID } });
|
|
212
|
-
if (!mapper.started)
|
|
213
|
-
throw truncated;
|
|
214
|
-
status = truncated.code;
|
|
215
|
-
terminated = true;
|
|
216
|
-
yield* mapper.fail(truncated);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
catch (err) {
|
|
220
|
-
const mapped = (0, anthropic_errors_1.mapAnthropicError)(err);
|
|
221
|
-
status = mapped.code;
|
|
222
|
-
throw mapped;
|
|
223
|
-
}
|
|
224
|
-
finally {
|
|
225
|
-
// A consumer that stopped early leaves the HTTP stream open: close it.
|
|
226
|
-
if (!terminated)
|
|
227
|
-
sdkStream?.controller.abort();
|
|
228
|
-
this.endSpan(span, status);
|
|
229
|
-
this.logCall('messages.stream', req.model, ctx, status, started, providerRequestId);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
// ---- storage-object inputs (#441) ------------------------------------------
|
|
233
|
-
/**
|
|
234
|
-
* What each storage-object part of `req` becomes on the wire, by the
|
|
235
|
-
* strategy the runtime prepared it for: a presigned URL, or the bytes read
|
|
236
|
-
* (under the runtime's cap) for an inline document. `undefined` when the
|
|
237
|
-
* request names no storage object.
|
|
238
|
-
*/
|
|
239
|
-
async deliverStorageInputs(req, ctx) {
|
|
240
|
-
const ids = (0, anthropic_messages_mapper_1.anthropicStorageObjectIds)(req);
|
|
241
|
-
if (ids.length === 0)
|
|
242
|
-
return undefined;
|
|
243
|
-
const deliveries = new Map();
|
|
244
|
-
for (const id of ids) {
|
|
245
|
-
const input = ctx.storageInputs?.get(id);
|
|
246
|
-
if (!input) {
|
|
247
|
-
throw new ai_error_1.AiError('AI_INVALID_REQUEST', 'A storage-object input was not resolved by the runtime.', {
|
|
248
|
-
details: { provider: anthropic_errors_1.ANTHROPIC_PROVIDER_ID },
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
const base = { modality: input.modality, mimeType: input.mimeType, filename: input.filename };
|
|
252
|
-
if (input.strategy === 'presigned_url' && input.url) {
|
|
253
|
-
deliveries.set(id, { ...base, url: input.url });
|
|
254
|
-
}
|
|
255
|
-
else if (input.strategy === 'inline' && input.read) {
|
|
256
|
-
const payload = await input.read();
|
|
257
|
-
deliveries.set(id, { ...base, data: payload.data });
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
throw new ai_error_1.AiError('AI_INVALID_REQUEST', 'A storage-object input was not prepared for delivery.', {
|
|
261
|
-
details: { provider: anthropic_errors_1.ANTHROPIC_PROVIDER_ID, strategy: input.strategy },
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
return deliveries;
|
|
266
|
-
}
|
|
267
|
-
// ---- telemetry ------------------------------------------------------------
|
|
268
|
-
startSpan(operation, model) {
|
|
269
|
-
return tracer.startSpan(exports.ANTHROPIC_PROVIDER_CALL_SPAN, {
|
|
270
|
-
kind: api_1.SpanKind.CLIENT,
|
|
271
|
-
attributes: {
|
|
272
|
-
'ai.provider': anthropic_errors_1.ANTHROPIC_PROVIDER_ID,
|
|
273
|
-
'ai.operation': operation,
|
|
274
|
-
...(model ? { 'ai.model': model } : {}),
|
|
275
|
-
},
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
endSpan(span, status) {
|
|
279
|
-
span.setAttribute('ai.status', status);
|
|
280
|
-
span.setStatus(status === 'ok' ? { code: api_1.SpanStatusCode.OK } : { code: api_1.SpanStatusCode.ERROR, message: status });
|
|
281
|
-
span.end();
|
|
282
|
-
}
|
|
283
|
-
/** ⚠ Only ids, the model, the operation, the outcome and a duration. Never the key or a body. */
|
|
284
|
-
logCall(operation, model, ctx, status, started, providerRequestId) {
|
|
285
|
-
this.logger.debug({
|
|
286
|
-
msg: 'AI provider call',
|
|
287
|
-
provider: anthropic_errors_1.ANTHROPIC_PROVIDER_ID,
|
|
288
|
-
operation,
|
|
289
|
-
model,
|
|
290
|
-
status,
|
|
291
|
-
requestId: ctx.requestId,
|
|
292
|
-
providerRequestId: providerRequestId ?? undefined,
|
|
293
|
-
durationMs: Date.now() - started,
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
/** Runs `fn` inside an `ai.provider.call` span, mapping any failure to `AiError`. */
|
|
297
|
-
async call(operation, model, ctx, fn) {
|
|
298
|
-
const started = Date.now();
|
|
299
|
-
const span = this.startSpan(operation, model);
|
|
300
|
-
let status = 'ok';
|
|
301
|
-
let providerRequestId;
|
|
302
|
-
try {
|
|
303
|
-
const result = await fn();
|
|
304
|
-
if (result && typeof result === 'object' && 'providerRequestId' in result) {
|
|
305
|
-
providerRequestId = result.providerRequestId;
|
|
306
|
-
}
|
|
307
|
-
return result;
|
|
308
|
-
}
|
|
309
|
-
catch (err) {
|
|
310
|
-
const mapped = (0, anthropic_errors_1.mapAnthropicError)(err);
|
|
311
|
-
status = mapped.code;
|
|
312
|
-
providerRequestId = mapped.toJSON().details.providerRequestId;
|
|
313
|
-
throw mapped;
|
|
314
|
-
}
|
|
315
|
-
finally {
|
|
316
|
-
this.endSpan(span, status);
|
|
317
|
-
this.logCall(operation, model, ctx, status, started, providerRequestId);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
53
|
};
|
|
321
54
|
exports.AnthropicProviderAdapter = AnthropicProviderAdapter;
|
|
322
55
|
exports.AnthropicProviderAdapter = AnthropicProviderAdapter = AnthropicProviderAdapter_1 = __decorate([
|
|
@@ -324,4 +57,7 @@ exports.AnthropicProviderAdapter = AnthropicProviderAdapter = AnthropicProviderA
|
|
|
324
57
|
__metadata("design:paramtypes", [provider_registry_1.AiProviderRegistry,
|
|
325
58
|
anthropic_client_factory_1.AnthropicClientFactory])
|
|
326
59
|
], AnthropicProviderAdapter);
|
|
60
|
+
// The rest of what this path exported before #991, unchanged.
|
|
61
|
+
var anthropic_2 = require("@marinoscar/platform-ai-providers/anthropic");
|
|
62
|
+
Object.defineProperty(exports, "ANTHROPIC_PROVIDER_CALL_SPAN", { enumerable: true, get: function () { return anthropic_2.ANTHROPIC_PROVIDER_CALL_SPAN; } });
|
|
327
63
|
//# sourceMappingURL=anthropic.adapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.adapter.js","sourceRoot":"","sources":["../../../../src/ai/providers/anthropic/anthropic.adapter.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,
|
|
1
|
+
{"version":3,"file":"anthropic.adapter.js","sourceRoot":"","sources":["../../../../src/ai/providers/anthropic/anthropic.adapter.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0DAA0D;AAC1D,gFAAgF;AAChF,EAAE;AACF,yEAAyE;AACzE,yFAAyF;AACzF,wDAAwD;AACxD,yFAAyF;AACzF,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAC9E,OAAO;AACP,gFAAgF;;;;;;;;;;;;;AAEhF,2CAAkE;AAClE,2EAAuH;AAEvH,+BAA6B;AAC7B,oEAAkE;AAClE,8DAA2D;AAC3D,yEAAoE;AAEpE;;;;;GAKG;AAEI,IAAM,wBAAwB,gCAA9B,MAAM,wBAAyB,SAAQ,oCAA4B;IAMrD;IALnB;;;OAGG;IACH,YACmB,QAA4B,EAC7C,OAA+B;QAE/B,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,eAAM,CAAC,0BAAwB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,uCAAkB,EAAE,CAAC,CAAC;QAHjF,aAAQ,GAAR,QAAQ,CAAoB;IAI/C,CAAC;IAED,iDAAiD;IACjD,YAAY;QACV,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF,CAAA;AAhBY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;qCAOkB,sCAAkB;QACpC,iDAAsB;GAPtB,wBAAwB,CAgBpC;AAED,8DAA8D;AAC9D,yEAA2F;AAAlF,yHAAA,4BAA4B,OAAA"}
|
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { type OpenAiClientOptions } from '../openai/openai-client.factory';
|
|
4
|
-
import { type AzureOpenAiSettings } from './azure-openai-settings';
|
|
5
|
-
/** DI token for the Azure client's options (tests inject a mocked `fetch`). */
|
|
1
|
+
import { AzureOpenAiClientFactory as BaseAzureOpenAiClientFactory, type OpenAiClientOptions } from '@marinoscar/platform-ai-providers/openai';
|
|
2
|
+
/** DI token for `OpenAiClientOptions` (optional; tests and forks provide it). */
|
|
6
3
|
export declare const AZURE_OPENAI_CLIENT_OPTIONS: unique symbol;
|
|
7
4
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
5
|
+
* The injectable AzureOpenAiClientFactory: the framework-free factory of
|
|
6
|
+
* `@marinoscar/platform-ai-providers/openai` with its options injected.
|
|
7
|
+
*
|
|
8
|
+
* @stability experimental
|
|
10
9
|
*/
|
|
11
|
-
export declare
|
|
12
|
-
export declare class AzureOpenAiClientFactory {
|
|
13
|
-
private readonly options;
|
|
14
|
-
constructor(options?: OpenAiClientOptions);
|
|
10
|
+
export declare class AzureOpenAiClientFactory extends BaseAzureOpenAiClientFactory {
|
|
15
11
|
/**
|
|
16
|
-
*
|
|
17
|
-
* `AI_PROVIDER_UNAVAILABLE` when no endpoint is configured.
|
|
12
|
+
* @param options - the client options (a mocked `fetch` in tests); none in production.
|
|
18
13
|
*/
|
|
19
|
-
|
|
14
|
+
constructor(options?: OpenAiClientOptions);
|
|
20
15
|
}
|
|
16
|
+
export { azureOpenAiBaseUrl } from '@marinoscar/platform-ai-providers/openai';
|
|
21
17
|
//# sourceMappingURL=azure-openai-client.factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"azure-openai-client.factory.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/azure-openai/azure-openai-client.factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"azure-openai-client.factory.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/azure-openai/azure-openai-client.factory.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,wBAAwB,IAAI,4BAA4B,EACxD,KAAK,mBAAmB,EACzB,MAAM,0CAA0C,CAAC;AAElD,iFAAiF;AACjF,eAAO,MAAM,2BAA2B,eAAwC,CAAC;AAEjF;;;;;GAKG;AACH,qBACa,wBAAyB,SAAQ,4BAA4B;IACxE;;OAEG;gBAC0D,OAAO,CAAC,EAAE,mBAAmB;CAG3F;AAGD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC"}
|
|
@@ -1,26 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// =============================================================================
|
|
3
|
-
//
|
|
3
|
+
// AzureOpenAiClientFactory: the Nest binding (issue #991)
|
|
4
4
|
// =============================================================================
|
|
5
5
|
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// to `OPENAI_BASE_URL` and refuses `endpoint` beside it, so an ambient
|
|
12
|
-
// variable on a host would otherwise break (or redirect) every call. The
|
|
13
|
-
// base is `<endpoint>/openai`, the path the SDK itself derives.
|
|
14
|
-
// - `apiVersion` and `apiKey` are always explicit (the SDK falls back to
|
|
15
|
-
// `OPENAI_API_VERSION` / `AZURE_OPENAI_API_KEY`).
|
|
16
|
-
// - the key travels in Azure's `api-key` header (the SDK's own behaviour).
|
|
17
|
-
// - `maxRetries: 0`, no SDK logging, and a `fetch` that follows no
|
|
18
|
-
// redirect (`openai-redirect-guard.ts`).
|
|
19
|
-
//
|
|
20
|
-
// No `deployment` is pinned on the client: the adapter puts the DEPLOYMENT
|
|
21
|
-
// NAME in the request's `model`, and the SDK routes Chat Completions and
|
|
22
|
-
// embeddings to `/deployments/<model>/...` from it while the Responses API
|
|
23
|
-
// takes it as the body's `model` — so one client serves every model.
|
|
6
|
+
// The factory itself (one SDK client per call, every SDK option pinned) lives
|
|
7
|
+
// in `@marinoscar/platform-ai-providers/openai`. This subclass keeps the
|
|
8
|
+
// platform's injectable class, its constructor signature and its optional
|
|
9
|
+
// `AZURE_OPENAI_CLIENT_OPTIONS` injection token, so the provider module and any test
|
|
10
|
+
// that provides the token wire it exactly as before. It imports no SDK.
|
|
24
11
|
// =============================================================================
|
|
25
12
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
26
13
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -35,46 +22,23 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
35
22
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
36
23
|
};
|
|
37
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.AzureOpenAiClientFactory = exports.AZURE_OPENAI_CLIENT_OPTIONS = void 0;
|
|
39
|
-
exports.azureOpenAiBaseUrl = azureOpenAiBaseUrl;
|
|
25
|
+
exports.azureOpenAiBaseUrl = exports.AzureOpenAiClientFactory = exports.AZURE_OPENAI_CLIENT_OPTIONS = void 0;
|
|
40
26
|
const common_1 = require("@nestjs/common");
|
|
41
|
-
const openai_1 = require("openai");
|
|
42
|
-
|
|
43
|
-
const openai_client_factory_1 = require("../openai/openai-client.factory");
|
|
44
|
-
const openai_redirect_guard_1 = require("../openai/openai-redirect-guard");
|
|
45
|
-
const azure_openai_settings_1 = require("./azure-openai-settings");
|
|
46
|
-
/** DI token for the Azure client's options (tests inject a mocked `fetch`). */
|
|
27
|
+
const openai_1 = require("@marinoscar/platform-ai-providers/openai");
|
|
28
|
+
/** DI token for `OpenAiClientOptions` (optional; tests and forks provide it). */
|
|
47
29
|
exports.AZURE_OPENAI_CLIENT_OPTIONS = Symbol('AZURE_OPENAI_CLIENT_OPTIONS');
|
|
48
30
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
31
|
+
* The injectable AzureOpenAiClientFactory: the framework-free factory of
|
|
32
|
+
* `@marinoscar/platform-ai-providers/openai` with its options injected.
|
|
33
|
+
*
|
|
34
|
+
* @stability experimental
|
|
51
35
|
*/
|
|
52
|
-
|
|
53
|
-
const trimmed = endpoint.replace(/\/+$/, '');
|
|
54
|
-
return /\/openai$/i.test(trimmed) ? trimmed : `${trimmed}/openai`;
|
|
55
|
-
}
|
|
56
|
-
let AzureOpenAiClientFactory = class AzureOpenAiClientFactory {
|
|
57
|
-
options;
|
|
58
|
-
constructor(options) {
|
|
59
|
-
this.options = options ?? {};
|
|
60
|
-
}
|
|
36
|
+
let AzureOpenAiClientFactory = class AzureOpenAiClientFactory extends openai_1.AzureOpenAiClientFactory {
|
|
61
37
|
/**
|
|
62
|
-
*
|
|
63
|
-
* `AI_PROVIDER_UNAVAILABLE` when no endpoint is configured.
|
|
38
|
+
* @param options - the client options (a mocked `fetch` in tests); none in production.
|
|
64
39
|
*/
|
|
65
|
-
|
|
66
|
-
(
|
|
67
|
-
if (!ctx.baseUrl) {
|
|
68
|
-
throw new ai_error_1.AiError('AI_PROVIDER_UNAVAILABLE', 'No Azure OpenAI endpoint is configured.', {
|
|
69
|
-
details: { provider: azure_openai_settings_1.AZURE_OPENAI_FAMILY.providerId, missing: 'baseUrl' },
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
return new openai_1.AzureOpenAI({
|
|
73
|
-
apiKey: ctx.apiKey,
|
|
74
|
-
baseURL: azureOpenAiBaseUrl(ctx.baseUrl),
|
|
75
|
-
apiVersion: settings.apiVersion,
|
|
76
|
-
...(0, openai_client_factory_1.pinnedOpenAiClientOptions)(this.options, (0, openai_redirect_guard_1.noRedirectFetch)(this.options.fetch)),
|
|
77
|
-
});
|
|
40
|
+
constructor(options) {
|
|
41
|
+
super(options);
|
|
78
42
|
}
|
|
79
43
|
};
|
|
80
44
|
exports.AzureOpenAiClientFactory = AzureOpenAiClientFactory;
|
|
@@ -84,4 +48,7 @@ exports.AzureOpenAiClientFactory = AzureOpenAiClientFactory = __decorate([
|
|
|
84
48
|
__param(0, (0, common_1.Inject)(exports.AZURE_OPENAI_CLIENT_OPTIONS)),
|
|
85
49
|
__metadata("design:paramtypes", [Object])
|
|
86
50
|
], AzureOpenAiClientFactory);
|
|
51
|
+
// The rest of what this path exported before #991, unchanged.
|
|
52
|
+
var openai_2 = require("@marinoscar/platform-ai-providers/openai");
|
|
53
|
+
Object.defineProperty(exports, "azureOpenAiBaseUrl", { enumerable: true, get: function () { return openai_2.azureOpenAiBaseUrl; } });
|
|
87
54
|
//# sourceMappingURL=azure-openai-client.factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"azure-openai-client.factory.js","sourceRoot":"","sources":["../../../../src/ai/providers/azure-openai/azure-openai-client.factory.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0DAA0D;AAC1D,gFAAgF;AAChF,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"azure-openai-client.factory.js","sourceRoot":"","sources":["../../../../src/ai/providers/azure-openai/azure-openai-client.factory.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0DAA0D;AAC1D,gFAAgF;AAChF,EAAE;AACF,8EAA8E;AAC9E,yEAAyE;AACzE,0EAA0E;AAC1E,qFAAqF;AACrF,wEAAwE;AACxE,gFAAgF;;;;;;;;;;;;;;;AAEhF,2CAA8D;AAC9D,qEAGkD;AAElD,iFAAiF;AACpE,QAAA,2BAA2B,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC;AAEjF;;;;;GAKG;AAEI,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,iCAA4B;IACxE;;OAEG;IACH,YAA6D,OAA6B;QACxF,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF,CAAA;AAPY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;IAKE,WAAA,IAAA,iBAAQ,GAAE,CAAA;IAAE,WAAA,IAAA,eAAM,EAAC,mCAA2B,CAAC,CAAA;;GAJjD,wBAAwB,CAOpC;AAED,8DAA8D;AAC9D,mEAA8E;AAArE,4GAAA,kBAAkB,OAAA"}
|
|
@@ -1,39 +1,22 @@
|
|
|
1
1
|
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import { AzureOpenAiProviderAdapter as BaseAzureOpenAiProviderAdapter } from '@marinoscar/platform-ai-providers/openai';
|
|
3
|
+
import '../../core/ai-error';
|
|
4
4
|
import { AiProviderRegistry } from '../../core/provider-registry';
|
|
5
|
-
import type { AiFileInputStrategies } from '../../core/types/file-inputs.types';
|
|
6
|
-
import type { AiEmbeddingsPort } from '../../core/types/media.types';
|
|
7
5
|
import { AzureOpenAiClientFactory } from './azure-openai-client.factory';
|
|
8
|
-
|
|
6
|
+
/**
|
|
7
|
+
* The injectable AzureOpenAiProviderAdapter: registers itself with `AiProviderRegistry` when
|
|
8
|
+
* its module initialises.
|
|
9
|
+
*
|
|
10
|
+
* @stability experimental
|
|
11
|
+
*/
|
|
12
|
+
export declare class AzureOpenAiProviderAdapter extends BaseAzureOpenAiProviderAdapter implements OnModuleInit {
|
|
9
13
|
private readonly registry;
|
|
10
|
-
private readonly clients;
|
|
11
|
-
readonly id = "azure-openai";
|
|
12
|
-
readonly displayName = "Azure OpenAI";
|
|
13
|
-
/** Static and conservative — see the file header. */
|
|
14
|
-
readonly supportsPreviousResponseId = false;
|
|
15
|
-
/** No hosted tool is mapped for Azure — see the file header. */
|
|
16
|
-
readonly supportsHostedTools = false;
|
|
17
|
-
/** Images by presigned URL, files inline — see the file header. */
|
|
18
|
-
readonly fileInputStrategy: AiFileInputStrategies;
|
|
19
|
-
readonly responses: AiResponsesPort;
|
|
20
|
-
readonly embeddings: AiEmbeddingsPort;
|
|
21
|
-
private readonly logger;
|
|
22
|
-
private readonly telemetry;
|
|
23
|
-
private readonly responsesEngine;
|
|
24
|
-
private readonly chatEngine;
|
|
25
|
-
constructor(registry: AiProviderRegistry, clients: AzureOpenAiClientFactory);
|
|
26
|
-
onModuleInit(): void;
|
|
27
|
-
classifyModel(modelId: string): AiModelCapabilities | null;
|
|
28
|
-
listModels(ctx: AiCallContext): Promise<AiDiscoveredModel[]>;
|
|
29
14
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
15
|
+
* @param registry - the provider registry this adapter joins.
|
|
16
|
+
* @param clients - the injectable SDK client factory.
|
|
32
17
|
*/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
/** `POST /openai/deployments/<deployment>/embeddings`, floats on the wire. */
|
|
37
|
-
private embed;
|
|
18
|
+
constructor(registry: AiProviderRegistry, clients: AzureOpenAiClientFactory);
|
|
19
|
+
/** Adds this adapter to `AiProviderRegistry`. */
|
|
20
|
+
onModuleInit(): void;
|
|
38
21
|
}
|
|
39
22
|
//# sourceMappingURL=azure-openai.adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"azure-openai.adapter.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/azure-openai/azure-openai.adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"azure-openai.adapter.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/azure-openai/azure-openai.adapter.ts"],"names":[],"mappings":"AAcA,OAAO,EAAsB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,0BAA0B,IAAI,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAExH,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE;;;;;GAKG;AACH,qBACa,0BAA2B,SAAQ,8BAA+B,YAAW,YAAY;IAMlG,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B;;;OAGG;gBAEgB,QAAQ,EAAE,kBAAkB,EAC7C,OAAO,EAAE,wBAAwB;IAKnC,iDAAiD;IACjD,YAAY,IAAI,IAAI;CAGrB"}
|