@marinoscar/platform-api 0.1.0-next.5 → 0.1.0-next.7
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 +19 -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,56 +1,23 @@
|
|
|
1
1
|
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import { OpenAiProviderAdapter as BaseOpenAiProviderAdapter } from '@marinoscar/platform-ai-providers/openai';
|
|
3
|
+
import '../../core/ai-error';
|
|
4
4
|
import { AiProviderRegistry } from '../../core/provider-registry';
|
|
5
|
-
import type { AiAudioPort, AiEmbeddingsPort, AiImagesPort, AiRealtimePort } from '../../core/types/media.types';
|
|
6
|
-
import type { AiFileInputStrategies } from '../../core/types/file-inputs.types';
|
|
7
5
|
import { OpenAiClientFactory } from './openai-client.factory';
|
|
8
|
-
export { AI_PROVIDER_CALL_SPAN } from '
|
|
9
|
-
|
|
6
|
+
export { AI_PROVIDER_CALL_SPAN } from '@marinoscar/platform-ai-providers/openai';
|
|
7
|
+
/**
|
|
8
|
+
* The injectable OpenAiProviderAdapter: registers itself with `AiProviderRegistry` when
|
|
9
|
+
* its module initialises.
|
|
10
|
+
*
|
|
11
|
+
* @stability experimental
|
|
12
|
+
*/
|
|
13
|
+
export declare class OpenAiProviderAdapter extends BaseOpenAiProviderAdapter implements OnModuleInit {
|
|
10
14
|
private readonly registry;
|
|
11
|
-
private readonly clients;
|
|
12
|
-
readonly id = "openai";
|
|
13
|
-
readonly displayName = "OpenAI";
|
|
14
|
-
/** The endpoint used when the settings slot has no `baseUrl` (#773: the egress inventory reads it). */
|
|
15
|
-
readonly defaultBaseUrl = "https://api.openai.com/v1";
|
|
16
|
-
/** Images by presigned URL, files through the Files API — see the file header. */
|
|
17
|
-
readonly fileInputStrategy: AiFileInputStrategies;
|
|
18
|
-
readonly responses: AiResponsesPort;
|
|
19
|
-
readonly embeddings: AiEmbeddingsPort;
|
|
20
|
-
readonly images: AiImagesPort;
|
|
21
|
-
readonly audio: AiAudioPort;
|
|
22
|
-
readonly realtime: AiRealtimePort;
|
|
23
|
-
private readonly logger;
|
|
24
|
-
private readonly telemetry;
|
|
25
|
-
private readonly responsesEngine;
|
|
26
|
-
constructor(registry: AiProviderRegistry, clients: OpenAiClientFactory);
|
|
27
|
-
onModuleInit(): void;
|
|
28
|
-
classifyModel(modelId: string): AiModelCapabilities | null;
|
|
29
|
-
listModels(ctx: AiCallContext): Promise<AiDiscoveredModel[]>;
|
|
30
|
-
/**
|
|
31
|
-
* `GET /v1/models` with the key. A rejected key is an ANSWER
|
|
32
|
-
* (`{ ok: false, code: 'AI_KEY_INVALID' }`), as is any other failure —
|
|
33
|
-
* mapped to its code — so the admin UI never has to catch.
|
|
34
|
-
*/
|
|
35
|
-
verifyKey(ctx: AiCallContext): Promise<AiKeyVerification>;
|
|
36
|
-
/** `POST /v1/embeddings`, floats on the wire — see `openai-embeddings.mapper.ts`. */
|
|
37
|
-
private embed;
|
|
38
|
-
/** `POST /v1/images/generations`, always answered as base64 bytes — see `openai-images.mapper.ts`. */
|
|
39
|
-
private generateImages;
|
|
40
|
-
/** `POST /v1/images/edits` (multipart: the source images and the optional mask). */
|
|
41
|
-
private editImages;
|
|
42
15
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
16
|
+
* @param registry - the provider registry this adapter joins.
|
|
17
|
+
* @param clients - the injectable SDK client factory.
|
|
45
18
|
*/
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* `POST /v1/realtime/client_secrets` — mints the ephemeral secret a browser
|
|
51
|
-
* opens one WebRTC session with (`openai-realtime.mapper.ts`). The call's
|
|
52
|
-
* key is the request's `Authorization` header and goes nowhere else.
|
|
53
|
-
*/
|
|
54
|
-
private createRealtimeSession;
|
|
19
|
+
constructor(registry: AiProviderRegistry, clients: OpenAiClientFactory);
|
|
20
|
+
/** Adds this adapter to `AiProviderRegistry`. */
|
|
21
|
+
onModuleInit(): void;
|
|
55
22
|
}
|
|
56
23
|
//# sourceMappingURL=openai.adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.adapter.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/openai/openai.adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openai.adapter.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/openai/openai.adapter.ts"],"names":[],"mappings":"AAcA,OAAO,EAAsB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,qBAAqB,IAAI,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAE9G,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAEjF;;;;;GAKG;AACH,qBACa,qBAAsB,SAAQ,yBAA0B,YAAW,YAAY;IAMxF,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B;;;OAGG;gBAEgB,QAAQ,EAAE,kBAAkB,EAC7C,OAAO,EAAE,mBAAmB;IAK9B,iDAAiD;IACjD,YAAY,IAAI,IAAI;CAGrB"}
|
|
@@ -1,52 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// =============================================================================
|
|
3
|
-
//
|
|
3
|
+
// OpenAiProviderAdapter: the Nest binding (issue #991)
|
|
4
4
|
// =============================================================================
|
|
5
5
|
//
|
|
6
|
-
// The
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// openai-errors.ts SDK error -> AiError
|
|
15
|
-
// openai-model-catalog.ts classifyModel()'s rule table
|
|
16
|
-
// openai-embeddings.mapper.ts AiEmbeddingRequest <-> /v1/embeddings
|
|
17
|
-
// openai-images.mapper.ts AiImage*Request <-> /v1/images/{generations,edits}
|
|
18
|
-
// openai-audio.mapper.ts AiTranscriptionRequest <-> /v1/audio/transcriptions,
|
|
19
|
-
// AiSpeechRequest <-> /v1/audio/speech
|
|
20
|
-
// openai-realtime.mapper.ts AiRealtimeSessionRequest <-> /v1/realtime/client_secrets
|
|
21
|
-
//
|
|
22
|
-
// PORTS. `responses`, `embeddings` (#440), `images` (#437, generate AND
|
|
23
|
-
// edit), `audio` (#438 `transcribe`, #439 `speech` + its static `voices`)
|
|
24
|
-
// and `realtime` (#449 `createSession` + its static `voices`) are carried —
|
|
25
|
-
// presence is the declaration, so `AiProviderRegistry.supports()` stays
|
|
26
|
-
// truthful about what this adapter can actually do.
|
|
27
|
-
//
|
|
28
|
-
// REALTIME (#449). `createSession` spends the call's key ONCE, as the
|
|
29
|
-
// `Authorization` header of `POST /v1/realtime/client_secrets`, and returns
|
|
30
|
-
// the EPHEMERAL secret OpenAI mints — the one value this adapter hands back
|
|
31
|
-
// that a browser may hold. It is never logged and never put on a span; the
|
|
32
|
-
// debug line carries the same ids and outcome every other call's does.
|
|
33
|
-
//
|
|
34
|
-
// STORAGE-OBJECT INPUTS (#441). `fileInputStrategy` is images by
|
|
35
|
-
// `presigned_url` (a 10-minute signed GET the runtime minted, passed as
|
|
36
|
-
// `image_url` — OpenAI fetches it, the bytes never pass through the API) and
|
|
37
|
-
// files by `upload`: the runtime's capped stream goes to the Files API
|
|
38
|
-
// (`purpose: 'user_data'`) under the caller's own resolved key, the request
|
|
39
|
-
// names it by `file_id`, and the provider-side copy is DELETED once the
|
|
40
|
-
// response completes, fails or its stream ends — best effort, logged by file
|
|
41
|
-
// id only. Nothing is cached across calls (or users): each call uploads its
|
|
42
|
-
// own copy.
|
|
43
|
-
//
|
|
44
|
-
// OBSERVABILITY. Every provider call runs inside an `ai.provider.call` span
|
|
45
|
-
// carrying `ai.provider`, `ai.model`, `ai.operation` and `ai.status` (`ok` or
|
|
46
|
-
// the AiErrorCode) — never prompt text, output text or the key. The debug log
|
|
47
|
-
// line carries the same four facts plus the request ids and duration. No
|
|
48
|
-
// exception is recorded on the span: an SDK error's message can echo a
|
|
49
|
-
// masked key.
|
|
6
|
+
// The adapter itself (ports, mappers, error mapping, telemetry) lives in
|
|
7
|
+
// `@marinoscar/platform-ai-providers/openai`, framework-free. This subclass keeps the
|
|
8
|
+
// platform's injectable class and constructor signature
|
|
9
|
+
// (`AiProviderRegistry`, `OpenAiClientFactory`), 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.
|
|
50
14
|
// =============================================================================
|
|
51
15
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
52
16
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -61,176 +25,33 @@ var OpenAiProviderAdapter_1;
|
|
|
61
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
26
|
exports.OpenAiProviderAdapter = exports.AI_PROVIDER_CALL_SPAN = void 0;
|
|
63
27
|
const common_1 = require("@nestjs/common");
|
|
28
|
+
const openai_1 = require("@marinoscar/platform-ai-providers/openai");
|
|
29
|
+
require("../../core/ai-error");
|
|
64
30
|
const provider_registry_1 = require("../../core/provider-registry");
|
|
65
|
-
const
|
|
31
|
+
const platform_ai_tracer_1 = require("../platform-ai-tracer");
|
|
66
32
|
const openai_client_factory_1 = require("./openai-client.factory");
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
let OpenAiProviderAdapter = OpenAiProviderAdapter_1 = class OpenAiProviderAdapter {
|
|
33
|
+
var openai_2 = require("@marinoscar/platform-ai-providers/openai");
|
|
34
|
+
Object.defineProperty(exports, "AI_PROVIDER_CALL_SPAN", { enumerable: true, get: function () { return openai_2.AI_PROVIDER_CALL_SPAN; } });
|
|
35
|
+
/**
|
|
36
|
+
* The injectable OpenAiProviderAdapter: registers itself with `AiProviderRegistry` when
|
|
37
|
+
* its module initialises.
|
|
38
|
+
*
|
|
39
|
+
* @stability experimental
|
|
40
|
+
*/
|
|
41
|
+
let OpenAiProviderAdapter = OpenAiProviderAdapter_1 = class OpenAiProviderAdapter extends openai_1.OpenAiProviderAdapter {
|
|
77
42
|
registry;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
defaultBaseUrl = openai_client_factory_1.OPENAI_DEFAULT_BASE_URL;
|
|
83
|
-
/** Images by presigned URL, files through the Files API — see the file header. */
|
|
84
|
-
fileInputStrategy = { image: 'presigned_url', file: 'upload' };
|
|
85
|
-
responses = {
|
|
86
|
-
create: (req, ctx) => this.responsesEngine.create(req, ctx),
|
|
87
|
-
stream: (req, ctx) => this.responsesEngine.stream(req, ctx),
|
|
88
|
-
};
|
|
89
|
-
embeddings = {
|
|
90
|
-
embed: (req, ctx) => this.embed(req, ctx),
|
|
91
|
-
};
|
|
92
|
-
images = {
|
|
93
|
-
generate: (req, ctx) => this.generateImages(req, ctx),
|
|
94
|
-
edit: (req, ctx) => this.editImages(req, ctx),
|
|
95
|
-
};
|
|
96
|
-
audio = {
|
|
97
|
-
transcribe: (req, ctx) => this.transcribe(req, ctx),
|
|
98
|
-
transcriptionMaxBytes: openai_audio_mapper_1.OPENAI_TRANSCRIPTION_MAX_BYTES,
|
|
99
|
-
speech: (req, ctx) => this.speak(req, ctx),
|
|
100
|
-
voices: openai_model_catalog_1.OPENAI_SPEECH_VOICES,
|
|
101
|
-
};
|
|
102
|
-
realtime = {
|
|
103
|
-
createSession: (req, ctx) => this.createRealtimeSession(req, ctx),
|
|
104
|
-
voices: openai_model_catalog_1.OPENAI_REALTIME_VOICES,
|
|
105
|
-
};
|
|
106
|
-
logger = new common_1.Logger(OpenAiProviderAdapter_1.name);
|
|
107
|
-
telemetry = new openai_call_telemetry_1.OpenAiCallTelemetry(openai_errors_1.OPENAI_FAMILY, this.logger);
|
|
108
|
-
responsesEngine;
|
|
43
|
+
/**
|
|
44
|
+
* @param registry - the provider registry this adapter joins.
|
|
45
|
+
* @param clients - the injectable SDK client factory.
|
|
46
|
+
*/
|
|
109
47
|
constructor(registry, clients) {
|
|
48
|
+
super({ clients, logger: new common_1.Logger(OpenAiProviderAdapter_1.name), tracer: platform_ai_tracer_1.PLATFORM_AI_TRACER });
|
|
110
49
|
this.registry = registry;
|
|
111
|
-
this.clients = clients;
|
|
112
|
-
this.responsesEngine = new openai_responses_engine_1.OpenAiResponsesEngine({
|
|
113
|
-
family: openai_errors_1.OPENAI_FAMILY,
|
|
114
|
-
telemetry: this.telemetry,
|
|
115
|
-
logger: this.logger,
|
|
116
|
-
client: (ctx) => this.clients.create(ctx),
|
|
117
|
-
classify: (modelId) => this.classifyModel(modelId),
|
|
118
|
-
});
|
|
119
50
|
}
|
|
51
|
+
/** Adds this adapter to `AiProviderRegistry`. */
|
|
120
52
|
onModuleInit() {
|
|
121
53
|
this.registry.register(this);
|
|
122
54
|
}
|
|
123
|
-
classifyModel(modelId) {
|
|
124
|
-
return (0, openai_model_catalog_1.classifyOpenAiModel)(modelId);
|
|
125
|
-
}
|
|
126
|
-
async listModels(ctx) {
|
|
127
|
-
return this.telemetry.call('models.list', undefined, ctx, async () => {
|
|
128
|
-
const client = this.clients.create(ctx);
|
|
129
|
-
const models = [];
|
|
130
|
-
for await (const model of client.models.list({ signal: ctx.signal })) {
|
|
131
|
-
models.push({
|
|
132
|
-
id: model.id,
|
|
133
|
-
ownedBy: model.owned_by,
|
|
134
|
-
...(typeof model.created === 'number' ? { createdAt: new Date(model.created * 1000) } : {}),
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
return models;
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* `GET /v1/models` with the key. A rejected key is an ANSWER
|
|
142
|
-
* (`{ ok: false, code: 'AI_KEY_INVALID' }`), as is any other failure —
|
|
143
|
-
* mapped to its code — so the admin UI never has to catch.
|
|
144
|
-
*/
|
|
145
|
-
async verifyKey(ctx) {
|
|
146
|
-
try {
|
|
147
|
-
await this.telemetry.call('verify_key', undefined, ctx, async () => {
|
|
148
|
-
const client = this.clients.create(ctx);
|
|
149
|
-
await client.models.list({ signal: ctx.signal });
|
|
150
|
-
});
|
|
151
|
-
return { ok: true };
|
|
152
|
-
}
|
|
153
|
-
catch (err) {
|
|
154
|
-
const mapped = (0, openai_errors_1.mapOpenAiError)(err);
|
|
155
|
-
return mapped.code === 'AI_KEY_INVALID'
|
|
156
|
-
? { ok: false, code: 'AI_KEY_INVALID' }
|
|
157
|
-
: { ok: false, code: mapped.code, detail: mapped.message };
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
// ---- embeddings port ------------------------------------------------------
|
|
161
|
-
/** `POST /v1/embeddings`, floats on the wire — see `openai-embeddings.mapper.ts`. */
|
|
162
|
-
embed(req, ctx) {
|
|
163
|
-
return this.telemetry.call('embeddings.create', req.model, ctx, async () => {
|
|
164
|
-
const body = (0, openai_embeddings_mapper_1.toOpenAiEmbeddingRequest)(req);
|
|
165
|
-
const client = this.clients.create(ctx);
|
|
166
|
-
const { data, request_id } = await client.embeddings.create(body, { signal: ctx.signal }).withResponse();
|
|
167
|
-
return (0, openai_embeddings_mapper_1.fromOpenAiEmbeddingResponse)(data, { request: req, providerRequestId: request_id });
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
// ---- images port ------------------------------------------------------------
|
|
171
|
-
/** `POST /v1/images/generations`, always answered as base64 bytes — see `openai-images.mapper.ts`. */
|
|
172
|
-
generateImages(req, ctx) {
|
|
173
|
-
return this.telemetry.call('images.generate', req.model, ctx, async () => {
|
|
174
|
-
const body = (0, openai_images_mapper_1.toOpenAiImageGenerateRequest)(req);
|
|
175
|
-
const client = this.clients.create(ctx);
|
|
176
|
-
const { data, request_id } = await client.images.generate(body, { signal: ctx.signal }).withResponse();
|
|
177
|
-
return (0, openai_images_mapper_1.fromOpenAiImagesResponse)(data, { request: req, providerRequestId: request_id });
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
/** `POST /v1/images/edits` (multipart: the source images and the optional mask). */
|
|
181
|
-
editImages(req, ctx) {
|
|
182
|
-
return this.telemetry.call('images.edit', req.model, ctx, async () => {
|
|
183
|
-
const body = await (0, openai_images_mapper_1.toOpenAiImageEditRequest)(req);
|
|
184
|
-
const client = this.clients.create(ctx);
|
|
185
|
-
const { data, request_id } = await client.images.edit(body, { signal: ctx.signal }).withResponse();
|
|
186
|
-
return (0, openai_images_mapper_1.fromOpenAiImagesResponse)(data, { request: req, providerRequestId: request_id });
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
// ---- audio port -------------------------------------------------------------
|
|
190
|
-
/**
|
|
191
|
-
* `POST /v1/audio/transcriptions` (multipart). A streamed input is sent as
|
|
192
|
-
* it is read — see `openai-audio.mapper.ts`.
|
|
193
|
-
*/
|
|
194
|
-
transcribe(req, ctx) {
|
|
195
|
-
return this.telemetry.call('audio.transcribe', req.model, ctx, async () => {
|
|
196
|
-
const body = await (0, openai_audio_mapper_1.toOpenAiTranscriptionRequest)(req);
|
|
197
|
-
const client = this.clients.create(ctx);
|
|
198
|
-
const { data, request_id } = await client.audio.transcriptions
|
|
199
|
-
.create(body, { signal: ctx.signal })
|
|
200
|
-
.withResponse();
|
|
201
|
-
return (0, openai_audio_mapper_1.fromOpenAiTranscriptionResponse)(data, { request: req, providerRequestId: request_id });
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
/** `POST /v1/audio/speech` — the answer is the audio file itself. */
|
|
205
|
-
speak(req, ctx) {
|
|
206
|
-
return this.telemetry.call('audio.speech', req.model, ctx, async () => {
|
|
207
|
-
const body = (0, openai_audio_mapper_1.toOpenAiSpeechRequest)(req);
|
|
208
|
-
const client = this.clients.create(ctx);
|
|
209
|
-
const { data, request_id } = await client.audio.speech.create(body, { signal: ctx.signal }).withResponse();
|
|
210
|
-
const bytes = new Uint8Array(await data.arrayBuffer());
|
|
211
|
-
return (0, openai_audio_mapper_1.fromOpenAiSpeechResponse)(bytes, { request: req, providerRequestId: request_id });
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
// ---- realtime port -----------------------------------------------------------
|
|
215
|
-
/**
|
|
216
|
-
* `POST /v1/realtime/client_secrets` — mints the ephemeral secret a browser
|
|
217
|
-
* opens one WebRTC session with (`openai-realtime.mapper.ts`). The call's
|
|
218
|
-
* key is the request's `Authorization` header and goes nowhere else.
|
|
219
|
-
*/
|
|
220
|
-
createRealtimeSession(req, ctx) {
|
|
221
|
-
return this.telemetry.call('realtime.client_secret', req.model, ctx, async () => {
|
|
222
|
-
const body = (0, openai_realtime_mapper_1.toOpenAiClientSecretRequest)(req);
|
|
223
|
-
const client = this.clients.create(ctx);
|
|
224
|
-
const { data, request_id } = await client.realtime.clientSecrets
|
|
225
|
-
.create(body, { signal: ctx.signal })
|
|
226
|
-
.withResponse();
|
|
227
|
-
return (0, openai_realtime_mapper_1.fromOpenAiClientSecretResponse)(data, {
|
|
228
|
-
request: req,
|
|
229
|
-
baseUrl: ctx.baseUrl,
|
|
230
|
-
providerRequestId: request_id,
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
55
|
};
|
|
235
56
|
exports.OpenAiProviderAdapter = OpenAiProviderAdapter;
|
|
236
57
|
exports.OpenAiProviderAdapter = OpenAiProviderAdapter = OpenAiProviderAdapter_1 = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.adapter.js","sourceRoot":"","sources":["../../../../src/ai/providers/openai/openai.adapter.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,
|
|
1
|
+
{"version":3,"file":"openai.adapter.js","sourceRoot":"","sources":["../../../../src/ai/providers/openai/openai.adapter.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,uDAAuD;AACvD,gFAAgF;AAChF,EAAE;AACF,yEAAyE;AACzE,sFAAsF;AACtF,wDAAwD;AACxD,sFAAsF;AACtF,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAC9E,OAAO;AACP,gFAAgF;;;;;;;;;;;;;AAEhF,2CAAkE;AAClE,qEAA8G;AAE9G,+BAA6B;AAC7B,oEAAkE;AAClE,8DAA2D;AAC3D,mEAA8D;AAE9D,mEAAiF;AAAxE,+GAAA,qBAAqB,OAAA;AAE9B;;;;;GAKG;AAEI,IAAM,qBAAqB,6BAA3B,MAAM,qBAAsB,SAAQ,8BAAyB;IAM/C;IALnB;;;OAGG;IACH,YACmB,QAA4B,EAC7C,OAA4B;QAE5B,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,eAAM,CAAC,uBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,uCAAkB,EAAE,CAAC,CAAC;QAH9E,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,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCAOkB,sCAAkB;QACpC,2CAAmB;GAPnB,qBAAqB,CAgBjC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { type OpenAiClientOptions } from '../openai/openai-client.factory';
|
|
4
|
-
/** DI token for the client's options (tests inject a mocked `fetch`). */
|
|
1
|
+
import { OpenAiCompatibleClientFactory as BaseOpenAiCompatibleClientFactory, type OpenAiClientOptions } from '@marinoscar/platform-ai-providers/openai';
|
|
2
|
+
/** DI token for `OpenAiClientOptions` (optional; tests and forks provide it). */
|
|
5
3
|
export declare const OPENAI_COMPATIBLE_CLIENT_OPTIONS: unique symbol;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
/**
|
|
5
|
+
* The injectable OpenAiCompatibleClientFactory: the framework-free factory of
|
|
6
|
+
* `@marinoscar/platform-ai-providers/openai` with its options injected.
|
|
7
|
+
*
|
|
8
|
+
* @stability experimental
|
|
9
|
+
*/
|
|
10
|
+
export declare class OpenAiCompatibleClientFactory extends BaseOpenAiCompatibleClientFactory {
|
|
9
11
|
/**
|
|
10
|
-
*
|
|
11
|
-
* `AI_PROVIDER_UNAVAILABLE` when no base URL is configured — there is no
|
|
12
|
-
* default host for a self-hosted server.
|
|
12
|
+
* @param options - the client options (a mocked `fetch` in tests); none in production.
|
|
13
13
|
*/
|
|
14
|
-
|
|
14
|
+
constructor(options?: OpenAiClientOptions);
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=openai-compatible-client.factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-compatible-client.factory.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/openai-compatible/openai-compatible-client.factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openai-compatible-client.factory.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/openai-compatible/openai-compatible-client.factory.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,6BAA6B,IAAI,iCAAiC,EAClE,KAAK,mBAAmB,EACzB,MAAM,0CAA0C,CAAC;AAElD,iFAAiF;AACjF,eAAO,MAAM,gCAAgC,eAA6C,CAAC;AAE3F;;;;;GAKG;AACH,qBACa,6BAA8B,SAAQ,iCAAiC;IAClF;;OAEG;gBAC+D,OAAO,CAAC,EAAE,mBAAmB;CAGhG"}
|
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// =============================================================================
|
|
3
|
-
//
|
|
3
|
+
// OpenAiCompatibleClientFactory: the Nest binding (issue #991)
|
|
4
4
|
// =============================================================================
|
|
5
5
|
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// KEYLESS (`keySource: 'none'`). A call whose key is `AI_KEYLESS_API_KEY` —
|
|
12
|
-
// the marker the key resolver hands out for a `requiresKey: false` server —
|
|
13
|
-
// carries NO credential: the SDK's `Authorization` header is explicitly
|
|
14
|
-
// removed (`defaultHeaders: { Authorization: null }`), so the marker never
|
|
15
|
-
// reaches the wire. Any other key is sent as a bearer token, as OpenAI does;
|
|
16
|
-
// that is what vLLM's `--api-key`, LM Studio and most gateways check.
|
|
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
|
+
// `OPENAI_COMPATIBLE_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.
|
|
17
11
|
// =============================================================================
|
|
18
12
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
13
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -30,38 +24,21 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
30
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
25
|
exports.OpenAiCompatibleClientFactory = exports.OPENAI_COMPATIBLE_CLIENT_OPTIONS = void 0;
|
|
32
26
|
const common_1 = require("@nestjs/common");
|
|
33
|
-
const openai_1 = require("openai");
|
|
34
|
-
|
|
35
|
-
const provider_adapter_interface_1 = require("../../core/provider-adapter.interface");
|
|
36
|
-
const openai_client_factory_1 = require("../openai/openai-client.factory");
|
|
37
|
-
const openai_redirect_guard_1 = require("../openai/openai-redirect-guard");
|
|
38
|
-
const openai_compatible_settings_1 = require("./openai-compatible-settings");
|
|
39
|
-
/** DI token for the 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). */
|
|
40
29
|
exports.OPENAI_COMPATIBLE_CLIENT_OPTIONS = Symbol('OPENAI_COMPATIBLE_CLIENT_OPTIONS');
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
30
|
+
/**
|
|
31
|
+
* The injectable OpenAiCompatibleClientFactory: the framework-free factory of
|
|
32
|
+
* `@marinoscar/platform-ai-providers/openai` with its options injected.
|
|
33
|
+
*
|
|
34
|
+
* @stability experimental
|
|
35
|
+
*/
|
|
36
|
+
let OpenAiCompatibleClientFactory = class OpenAiCompatibleClientFactory extends openai_1.OpenAiCompatibleClientFactory {
|
|
46
37
|
/**
|
|
47
|
-
*
|
|
48
|
-
* `AI_PROVIDER_UNAVAILABLE` when no base URL is configured — there is no
|
|
49
|
-
* default host for a self-hosted server.
|
|
38
|
+
* @param options - the client options (a mocked `fetch` in tests); none in production.
|
|
50
39
|
*/
|
|
51
|
-
|
|
52
|
-
(
|
|
53
|
-
if (!ctx.baseUrl) {
|
|
54
|
-
throw new ai_error_1.AiError('AI_PROVIDER_UNAVAILABLE', 'No OpenAI-compatible base URL is configured.', {
|
|
55
|
-
details: { provider: openai_compatible_settings_1.OPENAI_COMPATIBLE_FAMILY.providerId, missing: 'baseUrl' },
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
const keyless = ctx.apiKey === provider_adapter_interface_1.AI_KEYLESS_API_KEY;
|
|
59
|
-
return new openai_1.OpenAI({
|
|
60
|
-
apiKey: ctx.apiKey,
|
|
61
|
-
baseURL: ctx.baseUrl,
|
|
62
|
-
...(keyless ? { defaultHeaders: { Authorization: null } } : {}),
|
|
63
|
-
...(0, openai_client_factory_1.pinnedOpenAiClientOptions)(this.options, (0, openai_redirect_guard_1.noRedirectFetch)(this.options.fetch)),
|
|
64
|
-
});
|
|
40
|
+
constructor(options) {
|
|
41
|
+
super(options);
|
|
65
42
|
}
|
|
66
43
|
};
|
|
67
44
|
exports.OpenAiCompatibleClientFactory = OpenAiCompatibleClientFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-compatible-client.factory.js","sourceRoot":"","sources":["../../../../src/ai/providers/openai-compatible/openai-compatible-client.factory.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+DAA+D;AAC/D,gFAAgF;AAChF,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"openai-compatible-client.factory.js","sourceRoot":"","sources":["../../../../src/ai/providers/openai-compatible/openai-compatible-client.factory.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+DAA+D;AAC/D,gFAAgF;AAChF,EAAE;AACF,8EAA8E;AAC9E,yEAAyE;AACzE,0EAA0E;AAC1E,0FAA0F;AAC1F,wEAAwE;AACxE,gFAAgF;;;;;;;;;;;;;;;AAEhF,2CAA8D;AAC9D,qEAGkD;AAElD,iFAAiF;AACpE,QAAA,gCAAgC,GAAG,MAAM,CAAC,kCAAkC,CAAC,CAAC;AAE3F;;;;;GAKG;AAEI,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,sCAAiC;IAClF;;OAEG;IACH,YAAkE,OAA6B;QAC7F,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF,CAAA;AAPY,sEAA6B;wCAA7B,6BAA6B;IADzC,IAAA,mBAAU,GAAE;IAKE,WAAA,IAAA,iBAAQ,GAAE,CAAA;IAAE,WAAA,IAAA,eAAM,EAAC,wCAAgC,CAAC,CAAA;;GAJtD,6BAA6B,CAOzC"}
|
|
@@ -1,40 +1,22 @@
|
|
|
1
1
|
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import { OpenAiCompatibleProviderAdapter as BaseOpenAiCompatibleProviderAdapter } 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 { OpenAiCompatibleClientFactory } from './openai-compatible-client.factory';
|
|
8
|
-
|
|
6
|
+
/**
|
|
7
|
+
* The injectable OpenAiCompatibleProviderAdapter: registers itself with `AiProviderRegistry` when
|
|
8
|
+
* its module initialises.
|
|
9
|
+
*
|
|
10
|
+
* @stability experimental
|
|
11
|
+
*/
|
|
12
|
+
export declare class OpenAiCompatibleProviderAdapter extends BaseOpenAiCompatibleProviderAdapter implements OnModuleInit {
|
|
9
13
|
private readonly registry;
|
|
10
|
-
private readonly clients;
|
|
11
|
-
readonly id = "openai-compatible";
|
|
12
|
-
readonly displayName = "OpenAI-compatible";
|
|
13
|
-
/** Chat Completions stores nothing; declared for both styles — see the file header. */
|
|
14
|
-
readonly supportsPreviousResponseId = false;
|
|
15
|
-
/** No compatible server is assumed to run hosted tools. */
|
|
16
|
-
readonly supportsHostedTools = false;
|
|
17
|
-
/** Inline for both modalities — 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: OpenAiCompatibleClientFactory);
|
|
26
|
-
onModuleInit(): void;
|
|
27
|
-
/** Always unclassified — see the file header. */
|
|
28
|
-
classifyModel(): AiModelCapabilities | null;
|
|
29
|
-
listModels(ctx: AiCallContext): Promise<AiDiscoveredModel[]>;
|
|
30
14
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
15
|
+
* @param registry - the provider registry this adapter joins.
|
|
16
|
+
* @param clients - the injectable SDK client factory.
|
|
33
17
|
*/
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
/** `POST {baseUrl}/embeddings`, floats on the wire. */
|
|
38
|
-
private embed;
|
|
18
|
+
constructor(registry: AiProviderRegistry, clients: OpenAiCompatibleClientFactory);
|
|
19
|
+
/** Adds this adapter to `AiProviderRegistry`. */
|
|
20
|
+
onModuleInit(): void;
|
|
39
21
|
}
|
|
40
22
|
//# sourceMappingURL=openai-compatible.adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-compatible.adapter.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/openai-compatible/openai-compatible.adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openai-compatible.adapter.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/openai-compatible/openai-compatible.adapter.ts"],"names":[],"mappings":"AAcA,OAAO,EAAsB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,+BAA+B,IAAI,mCAAmC,EAAE,MAAM,0CAA0C,CAAC;AAElI,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF;;;;;GAKG;AACH,qBACa,+BAAgC,SAAQ,mCAAoC,YAAW,YAAY;IAM5G,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B;;;OAGG;gBAEgB,QAAQ,EAAE,kBAAkB,EAC7C,OAAO,EAAE,6BAA6B;IAKxC,iDAAiD;IACjD,YAAY,IAAI,IAAI;CAGrB"}
|