@marinoscar/platform-api 0.1.0-next.5 → 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 +12 -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,62 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// =============================================================================
|
|
3
|
-
//
|
|
3
|
+
// GeminiProviderAdapter: the Nest binding (issue #991)
|
|
4
4
|
// =============================================================================
|
|
5
5
|
//
|
|
6
|
-
// The
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// gemini-client.factory.ts one SDK client per call (key, v1beta, no retries)
|
|
15
|
-
// gemini-content.mapper.ts AiResponseRequest <-> generateContent
|
|
16
|
-
// gemini-stream.mapper.ts stream chunks -> AiStreamEvent
|
|
17
|
-
// gemini-embeddings.mapper.ts AiEmbeddingRequest <-> embedContent
|
|
18
|
-
// gemini-errors.ts SDK / HTTP error -> AiError
|
|
19
|
-
// gemini-model-catalog.ts classifyModel()'s rule table, enriched by the
|
|
20
|
-
// listing's own metadata
|
|
21
|
-
//
|
|
22
|
-
// PORTS. `responses` and `embeddings`. Images, audio and realtime are ABSENT
|
|
23
|
-
// (Gemini's image/speech/Live models are a different API surface this
|
|
24
|
-
// adapter does not map) — presence is the declaration.
|
|
25
|
-
//
|
|
26
|
-
// STATELESS (#446). `supportsPreviousResponseId: false`: the facade refuses a
|
|
27
|
-
// caller's `previousResponseId` and the tool loop resends the full history.
|
|
28
|
-
// `thoughtSignature`s — required back on a Gemini 3 function-call turn — ride
|
|
29
|
-
// on reasoning items as `AI_PROVIDER_STATE`, like Anthropic's thinking
|
|
30
|
-
// signatures (see `gemini-content.mapper.ts`, REPLAY).
|
|
31
|
-
//
|
|
32
|
-
// NO HOSTED TOOLS (#442), `supportsHostedTools: false`. Google Search
|
|
33
|
-
// grounding and code execution exist, but neither maps cleanly onto the
|
|
34
|
-
// neutral result types, and a lossy mapping is worse than an honest refusal:
|
|
35
|
-
// - grounding cites sources through `vertexaisearch.cloud.google.com`
|
|
36
|
-
// REDIRECT links, not the source URLs `AiWebSearchCallResult.sources`
|
|
37
|
-
// and `AiUrlCitation.url` promise, and locates citations by UTF-8 BYTE
|
|
38
|
-
// offsets per part where `AiUrlCitation` means character offsets into
|
|
39
|
-
// the message text;
|
|
40
|
-
// - code execution has no container (`AiCodeInterpreterCallResult
|
|
41
|
-
// .containerId` is required) and returns plots as inline bytes where the
|
|
42
|
-
// neutral type carries a URL; and Gemini 2.5 cannot combine either tool
|
|
43
|
-
// with function calling.
|
|
44
|
-
// A follow-up can map both once the neutral types can say so honestly.
|
|
45
|
-
//
|
|
46
|
-
// STORAGE-OBJECT INPUTS (#441). `fileInputStrategy` is `inline` for both
|
|
47
|
-
// modalities: the runtime reads the bytes (under its 20 MiB image / 50 MiB
|
|
48
|
-
// file caps) and they are sent as base64 `inlineData`. A presigned URL is not
|
|
49
|
-
// usable as `fileData` (Gemini expects a Files API or Cloud Storage URI
|
|
50
|
-
// there), and the Files API would need an upload, a wait for the file to
|
|
51
|
-
// become ACTIVE, and a delete — for bytes that fit inline anyway. Nothing is
|
|
52
|
-
// uploaded, so nothing is left behind to delete. Gemini's own inline request
|
|
53
|
-
// limit is the authority for a very large file: its 400 maps to
|
|
54
|
-
// `AI_INVALID_REQUEST`.
|
|
55
|
-
//
|
|
56
|
-
// OBSERVABILITY. Every provider call runs inside an `ai.provider.call` span
|
|
57
|
-
// carrying `ai.provider`, `ai.model`, `ai.operation` and `ai.status` (`ok` or
|
|
58
|
-
// the AiErrorCode) — never prompt text, output text or the key — exactly as
|
|
59
|
-
// the other adapters' do. No exception is recorded on the span.
|
|
6
|
+
// The adapter itself (ports, mappers, error mapping, telemetry) lives in
|
|
7
|
+
// `@marinoscar/platform-ai-providers/gemini`, framework-free. This subclass keeps the
|
|
8
|
+
// platform's injectable class and constructor signature
|
|
9
|
+
// (`AiProviderRegistry`, `GeminiClientFactory`), 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.
|
|
60
14
|
// =============================================================================
|
|
61
15
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
62
16
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -69,309 +23,33 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
69
23
|
};
|
|
70
24
|
var GeminiProviderAdapter_1;
|
|
71
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
72
|
-
exports.
|
|
26
|
+
exports.GEMINI_PROVIDER_CALL_SPAN = exports.GeminiProviderAdapter = void 0;
|
|
73
27
|
const common_1 = require("@nestjs/common");
|
|
74
|
-
const
|
|
75
|
-
|
|
28
|
+
const gemini_1 = require("@marinoscar/platform-ai-providers/gemini");
|
|
29
|
+
require("../../core/ai-error");
|
|
76
30
|
const provider_registry_1 = require("../../core/provider-registry");
|
|
77
|
-
const
|
|
31
|
+
const platform_ai_tracer_1 = require("../platform-ai-tracer");
|
|
78
32
|
const gemini_client_factory_1 = require("./gemini-client.factory");
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
/** Page size for `GET /v1beta/models` — the API's maximum, so a catalog is one request. */
|
|
87
|
-
const MODELS_PAGE_SIZE = 1000;
|
|
88
|
-
const tracer = api_1.trace.getTracer((0, index_1.resolveServiceName)());
|
|
89
|
-
/** `models/gemini-2.5-flash` → `gemini-2.5-flash`. */
|
|
90
|
-
function stripModelsPrefix(name) {
|
|
91
|
-
return name.startsWith('models/') ? name.slice('models/'.length) : name;
|
|
92
|
-
}
|
|
93
|
-
function positiveInt(value) {
|
|
94
|
-
return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : undefined;
|
|
95
|
-
}
|
|
96
|
-
let GeminiProviderAdapter = GeminiProviderAdapter_1 = class GeminiProviderAdapter {
|
|
33
|
+
/**
|
|
34
|
+
* The injectable GeminiProviderAdapter: registers itself with `AiProviderRegistry` when
|
|
35
|
+
* its module initialises.
|
|
36
|
+
*
|
|
37
|
+
* @stability experimental
|
|
38
|
+
*/
|
|
39
|
+
let GeminiProviderAdapter = GeminiProviderAdapter_1 = class GeminiProviderAdapter extends gemini_1.GeminiProviderAdapter {
|
|
97
40
|
registry;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
defaultBaseUrl = gemini_client_factory_1.GEMINI_DEFAULT_BASE_URL;
|
|
103
|
-
/** Stateless: the runtime resends history instead of chaining (#446). */
|
|
104
|
-
supportsPreviousResponseId = false;
|
|
105
|
-
/** Google Search grounding and code execution are not mapped yet — see the file header. */
|
|
106
|
-
supportsHostedTools = false;
|
|
107
|
-
/** Both modalities inline (base64) — see the file header. */
|
|
108
|
-
fileInputStrategy = { image: 'inline', file: 'inline' };
|
|
109
|
-
responses = {
|
|
110
|
-
create: (req, ctx) => this.createResponse(req, ctx),
|
|
111
|
-
stream: (req, ctx) => this.streamResponse(req, ctx),
|
|
112
|
-
};
|
|
113
|
-
embeddings = {
|
|
114
|
-
embed: (req, ctx) => this.embed(req, ctx),
|
|
115
|
-
};
|
|
116
|
-
logger = new common_1.Logger(GeminiProviderAdapter_1.name);
|
|
41
|
+
/**
|
|
42
|
+
* @param registry - the provider registry this adapter joins.
|
|
43
|
+
* @param clients - the injectable SDK client factory.
|
|
44
|
+
*/
|
|
117
45
|
constructor(registry, clients) {
|
|
46
|
+
super({ clients, logger: new common_1.Logger(GeminiProviderAdapter_1.name), tracer: platform_ai_tracer_1.PLATFORM_AI_TRACER });
|
|
118
47
|
this.registry = registry;
|
|
119
|
-
this.clients = clients;
|
|
120
48
|
}
|
|
49
|
+
/** Adds this adapter to `AiProviderRegistry`. */
|
|
121
50
|
onModuleInit() {
|
|
122
51
|
this.registry.register(this);
|
|
123
52
|
}
|
|
124
|
-
classifyModel(modelId, metadata) {
|
|
125
|
-
return (0, gemini_model_catalog_1.classifyGeminiModel)(modelId, metadata);
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* `GET /v1beta/models`, every page. Each model carries its listing metadata
|
|
129
|
-
* (token limits, supported methods, thinking) for `classifyModel`.
|
|
130
|
-
*/
|
|
131
|
-
async listModels(ctx) {
|
|
132
|
-
return this.call('models.list', undefined, ctx, async () => {
|
|
133
|
-
const client = this.clients.create(ctx);
|
|
134
|
-
const pager = await client.models.list({ config: { pageSize: MODELS_PAGE_SIZE, abortSignal: ctx.signal } });
|
|
135
|
-
const models = [];
|
|
136
|
-
for await (const model of pager) {
|
|
137
|
-
if (!model.name)
|
|
138
|
-
continue;
|
|
139
|
-
const metadata = {};
|
|
140
|
-
const input = positiveInt(model.inputTokenLimit);
|
|
141
|
-
const output = positiveInt(model.outputTokenLimit);
|
|
142
|
-
if (model.displayName)
|
|
143
|
-
metadata.displayName = model.displayName;
|
|
144
|
-
if (input !== undefined)
|
|
145
|
-
metadata.inputTokenLimit = input;
|
|
146
|
-
if (output !== undefined)
|
|
147
|
-
metadata.outputTokenLimit = output;
|
|
148
|
-
if (Array.isArray(model.supportedActions))
|
|
149
|
-
metadata.supportedActions = [...model.supportedActions];
|
|
150
|
-
if (typeof model.thinking === 'boolean')
|
|
151
|
-
metadata.thinking = model.thinking;
|
|
152
|
-
models.push({ id: stripModelsPrefix(model.name), ownedBy: 'google', metadata });
|
|
153
|
-
}
|
|
154
|
-
return models;
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* `GET /v1beta/models?pageSize=1` with the key. A rejected key is an ANSWER
|
|
159
|
-
* (`{ ok: false, code: 'AI_KEY_INVALID' }`), as is any other failure.
|
|
160
|
-
*/
|
|
161
|
-
async verifyKey(ctx) {
|
|
162
|
-
try {
|
|
163
|
-
await this.call('verify_key', undefined, ctx, async () => {
|
|
164
|
-
const client = this.clients.create(ctx);
|
|
165
|
-
await client.models.list({ config: { pageSize: 1, abortSignal: ctx.signal } });
|
|
166
|
-
});
|
|
167
|
-
return { ok: true };
|
|
168
|
-
}
|
|
169
|
-
catch (err) {
|
|
170
|
-
const mapped = (0, gemini_errors_1.mapGeminiError)(err, { signal: ctx.signal });
|
|
171
|
-
return mapped.code === 'AI_KEY_INVALID'
|
|
172
|
-
? { ok: false, code: 'AI_KEY_INVALID' }
|
|
173
|
-
: { ok: false, code: mapped.code, detail: mapped.message };
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
// ---- responses port -------------------------------------------------------
|
|
177
|
-
async plan(req, ctx) {
|
|
178
|
-
return (0, gemini_content_mapper_1.toGeminiRequest)(req, (0, gemini_model_catalog_1.geminiModelProfile)(req.model), await this.deliverStorageInputs(req, ctx));
|
|
179
|
-
}
|
|
180
|
-
createResponse(req, ctx) {
|
|
181
|
-
return this.call('generate_content', req.model, ctx, async () => {
|
|
182
|
-
const plan = await this.plan(req, ctx);
|
|
183
|
-
const client = this.clients.create(ctx);
|
|
184
|
-
const response = await client.models.generateContent({
|
|
185
|
-
model: plan.model,
|
|
186
|
-
contents: plan.contents,
|
|
187
|
-
config: { ...plan.config, abortSignal: ctx.signal },
|
|
188
|
-
});
|
|
189
|
-
return (0, gemini_content_mapper_1.fromGeminiResponse)(response, req);
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Streams one response. A failure BEFORE `response.created` (a rejected
|
|
194
|
-
* key, a 429, an unsupported request) is thrown as an `AiError`; once the
|
|
195
|
-
* stream has started, a failure ends it with exactly one `error` event.
|
|
196
|
-
*
|
|
197
|
-
* `ctx.signal` aborts the request; a consumer that stops iterating
|
|
198
|
-
* (`break`) aborts it too — the SDK's own iterator only releases its reader,
|
|
199
|
-
* so the adapter holds an abort controller of its own for that.
|
|
200
|
-
*/
|
|
201
|
-
async *streamResponse(req, ctx) {
|
|
202
|
-
const started = Date.now();
|
|
203
|
-
const span = this.startSpan('generate_content.stream', req.model);
|
|
204
|
-
const controller = new AbortController();
|
|
205
|
-
const onCallerAbort = () => controller.abort();
|
|
206
|
-
let status = 'ok';
|
|
207
|
-
let terminated = false;
|
|
208
|
-
if (ctx.signal?.aborted)
|
|
209
|
-
controller.abort();
|
|
210
|
-
else
|
|
211
|
-
ctx.signal?.addEventListener('abort', onCallerAbort, { once: true });
|
|
212
|
-
try {
|
|
213
|
-
const plan = await this.plan(req, ctx);
|
|
214
|
-
const client = this.clients.create(ctx);
|
|
215
|
-
let chunks;
|
|
216
|
-
try {
|
|
217
|
-
chunks = await client.models.generateContentStream({
|
|
218
|
-
model: plan.model,
|
|
219
|
-
contents: plan.contents,
|
|
220
|
-
config: { ...plan.config, abortSignal: controller.signal },
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
catch (err) {
|
|
224
|
-
throw (0, gemini_errors_1.mapGeminiError)(err, { signal: ctx.signal });
|
|
225
|
-
}
|
|
226
|
-
const mapper = new gemini_stream_mapper_1.GeminiStreamMapper({ request: req });
|
|
227
|
-
try {
|
|
228
|
-
for await (const chunk of chunks) {
|
|
229
|
-
for (const out of mapper.map(chunk)) {
|
|
230
|
-
if (out.type === 'error')
|
|
231
|
-
status = out.code;
|
|
232
|
-
yield out;
|
|
233
|
-
}
|
|
234
|
-
if (mapper.terminated)
|
|
235
|
-
break;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
catch (err) {
|
|
239
|
-
const mapped = (0, gemini_errors_1.mapGeminiError)(err, { signal: ctx.signal });
|
|
240
|
-
if (!mapper.started)
|
|
241
|
-
throw mapped;
|
|
242
|
-
status = mapped.code;
|
|
243
|
-
yield* mapper.fail(mapped);
|
|
244
|
-
}
|
|
245
|
-
if (!mapper.terminated) {
|
|
246
|
-
if (ctx.signal?.aborted) {
|
|
247
|
-
throw new ai_error_1.AiError('AI_PROVIDER_UNAVAILABLE', 'The AI request was cancelled.', {
|
|
248
|
-
details: { provider: gemini_errors_1.GEMINI_PROVIDER_ID, aborted: true },
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
if (mapper.finished) {
|
|
252
|
-
for (const out of mapper.complete()) {
|
|
253
|
-
if (out.type === 'error')
|
|
254
|
-
status = out.code;
|
|
255
|
-
yield out;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
const truncated = new ai_error_1.AiError('AI_PROVIDER_UNAVAILABLE', 'The Gemini stream ended before the response completed.', { details: { provider: gemini_errors_1.GEMINI_PROVIDER_ID } });
|
|
260
|
-
if (!mapper.started)
|
|
261
|
-
throw truncated;
|
|
262
|
-
status = truncated.code;
|
|
263
|
-
yield* mapper.fail(truncated);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
terminated = mapper.terminated;
|
|
267
|
-
}
|
|
268
|
-
catch (err) {
|
|
269
|
-
const mapped = (0, gemini_errors_1.mapGeminiError)(err, { signal: ctx.signal });
|
|
270
|
-
status = mapped.code;
|
|
271
|
-
throw mapped;
|
|
272
|
-
}
|
|
273
|
-
finally {
|
|
274
|
-
ctx.signal?.removeEventListener('abort', onCallerAbort);
|
|
275
|
-
// A consumer that stopped early leaves the HTTP stream open: close it.
|
|
276
|
-
if (!terminated)
|
|
277
|
-
controller.abort();
|
|
278
|
-
this.endSpan(span, status);
|
|
279
|
-
this.logCall('generate_content.stream', req.model, ctx, status, started);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
// ---- embeddings port ------------------------------------------------------
|
|
283
|
-
/** `embedContent` (`batchEmbedContents` on the wire), one content per input. */
|
|
284
|
-
embed(req, ctx) {
|
|
285
|
-
return this.call('embed_content', req.model, ctx, async () => {
|
|
286
|
-
const params = (0, gemini_embeddings_mapper_1.toGeminiEmbeddingRequest)(req, (0, gemini_model_catalog_1.geminiModelProfile)(req.model));
|
|
287
|
-
const client = this.clients.create(ctx);
|
|
288
|
-
const response = await client.models.embedContent({
|
|
289
|
-
model: params.model,
|
|
290
|
-
contents: params.contents,
|
|
291
|
-
config: { ...params.config, abortSignal: ctx.signal },
|
|
292
|
-
});
|
|
293
|
-
return (0, gemini_embeddings_mapper_1.fromGeminiEmbeddingResponse)(response, req);
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
// ---- storage-object inputs (#441) ------------------------------------------
|
|
297
|
-
/**
|
|
298
|
-
* The bytes of each storage-object part of `req`, read under the runtime's
|
|
299
|
-
* cap for inline delivery. `undefined` when the request names no storage
|
|
300
|
-
* object.
|
|
301
|
-
*/
|
|
302
|
-
async deliverStorageInputs(req, ctx) {
|
|
303
|
-
const ids = (0, gemini_content_mapper_1.geminiStorageObjectIds)(req);
|
|
304
|
-
if (ids.length === 0)
|
|
305
|
-
return undefined;
|
|
306
|
-
const deliveries = new Map();
|
|
307
|
-
for (const id of ids) {
|
|
308
|
-
const input = ctx.storageInputs?.get(id);
|
|
309
|
-
if (!input) {
|
|
310
|
-
throw new ai_error_1.AiError('AI_INVALID_REQUEST', 'A storage-object input was not resolved by the runtime.', {
|
|
311
|
-
details: { provider: gemini_errors_1.GEMINI_PROVIDER_ID },
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
if (input.strategy !== 'inline' || !input.read) {
|
|
315
|
-
throw new ai_error_1.AiError('AI_INVALID_REQUEST', 'A storage-object input was not prepared for delivery.', {
|
|
316
|
-
details: { provider: gemini_errors_1.GEMINI_PROVIDER_ID, strategy: input.strategy },
|
|
317
|
-
});
|
|
318
|
-
}
|
|
319
|
-
const payload = await input.read();
|
|
320
|
-
deliveries.set(id, {
|
|
321
|
-
modality: input.modality,
|
|
322
|
-
mimeType: input.mimeType,
|
|
323
|
-
filename: input.filename,
|
|
324
|
-
data: payload.data,
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
|
-
return deliveries;
|
|
328
|
-
}
|
|
329
|
-
// ---- telemetry ------------------------------------------------------------
|
|
330
|
-
startSpan(operation, model) {
|
|
331
|
-
return tracer.startSpan(exports.GEMINI_PROVIDER_CALL_SPAN, {
|
|
332
|
-
kind: api_1.SpanKind.CLIENT,
|
|
333
|
-
attributes: {
|
|
334
|
-
'ai.provider': gemini_errors_1.GEMINI_PROVIDER_ID,
|
|
335
|
-
'ai.operation': operation,
|
|
336
|
-
...(model ? { 'ai.model': model } : {}),
|
|
337
|
-
},
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
endSpan(span, status) {
|
|
341
|
-
span.setAttribute('ai.status', status);
|
|
342
|
-
span.setStatus(status === 'ok' ? { code: api_1.SpanStatusCode.OK } : { code: api_1.SpanStatusCode.ERROR, message: status });
|
|
343
|
-
span.end();
|
|
344
|
-
}
|
|
345
|
-
/** ⚠ Only ids, the model, the operation, the outcome and a duration. Never the key or a body. */
|
|
346
|
-
logCall(operation, model, ctx, status, started) {
|
|
347
|
-
this.logger.debug({
|
|
348
|
-
msg: 'AI provider call',
|
|
349
|
-
provider: gemini_errors_1.GEMINI_PROVIDER_ID,
|
|
350
|
-
operation,
|
|
351
|
-
model,
|
|
352
|
-
status,
|
|
353
|
-
requestId: ctx.requestId,
|
|
354
|
-
durationMs: Date.now() - started,
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
/** Runs `fn` inside an `ai.provider.call` span, mapping any failure to `AiError`. */
|
|
358
|
-
async call(operation, model, ctx, fn) {
|
|
359
|
-
const started = Date.now();
|
|
360
|
-
const span = this.startSpan(operation, model);
|
|
361
|
-
let status = 'ok';
|
|
362
|
-
try {
|
|
363
|
-
return await fn();
|
|
364
|
-
}
|
|
365
|
-
catch (err) {
|
|
366
|
-
const mapped = (0, gemini_errors_1.mapGeminiError)(err, { signal: ctx.signal });
|
|
367
|
-
status = mapped.code;
|
|
368
|
-
throw mapped;
|
|
369
|
-
}
|
|
370
|
-
finally {
|
|
371
|
-
this.endSpan(span, status);
|
|
372
|
-
this.logCall(operation, model, ctx, status, started);
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
53
|
};
|
|
376
54
|
exports.GeminiProviderAdapter = GeminiProviderAdapter;
|
|
377
55
|
exports.GeminiProviderAdapter = GeminiProviderAdapter = GeminiProviderAdapter_1 = __decorate([
|
|
@@ -379,4 +57,7 @@ exports.GeminiProviderAdapter = GeminiProviderAdapter = GeminiProviderAdapter_1
|
|
|
379
57
|
__metadata("design:paramtypes", [provider_registry_1.AiProviderRegistry,
|
|
380
58
|
gemini_client_factory_1.GeminiClientFactory])
|
|
381
59
|
], GeminiProviderAdapter);
|
|
60
|
+
// The rest of what this path exported before #991, unchanged.
|
|
61
|
+
var gemini_2 = require("@marinoscar/platform-ai-providers/gemini");
|
|
62
|
+
Object.defineProperty(exports, "GEMINI_PROVIDER_CALL_SPAN", { enumerable: true, get: function () { return gemini_2.GEMINI_PROVIDER_CALL_SPAN; } });
|
|
382
63
|
//# sourceMappingURL=gemini.adapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.adapter.js","sourceRoot":"","sources":["../../../../src/ai/providers/gemini/gemini.adapter.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yDAAyD;AACzD,gFAAgF;AAChF,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,6EAA6E;AAC7E,2EAA2E;AAC3E,0EAA0E;AAC1E,yEAAyE;AACzE,mEAAmE;AACnE,EAAE;AACF,oFAAoF;AACpF,wEAAwE;AACxE,iEAAiE;AACjE,sEAAsE;AACtE,8DAA8D;AAC9D,gFAAgF;AAChF,yDAAyD;AACzD,EAAE;AACF,6EAA6E;AAC7E,sEAAsE;AACtE,uDAAuD;AACvD,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,uEAAuE;AACvE,uDAAuD;AACvD,EAAE;AACF,sEAAsE;AACtE,wEAAwE;AACxE,6EAA6E;AAC7E,wEAAwE;AACxE,0EAA0E;AAC1E,2EAA2E;AAC3E,0EAA0E;AAC1E,wBAAwB;AACxB,oEAAoE;AACpE,6EAA6E;AAC7E,4EAA4E;AAC5E,6BAA6B;AAC7B,uEAAuE;AACvE,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,8EAA8E;AAC9E,wEAAwE;AACxE,yEAAyE;AACzE,6EAA6E;AAC7E,6EAA6E;AAC7E,gEAAgE;AAChE,wBAAwB;AACxB,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,gEAAgE;AAChE,gFAAgF;;;;;;;;;;;;;AAGhF,2CAAkE;AAClE,4CAA2E;AAE3E,kDAA8C;AAU9C,oEAAkE;AAIlE,oDAA8D;AAC9D,mEAAuF;AACvF,mEAOiC;AACjC,yEAAmG;AACnG,mDAAqE;AACrE,iEAAiF;AACjF,iEAA4D;AAE5D,iDAAiD;AACpC,QAAA,yBAAyB,GAAG,kBAAkB,CAAC;AAE5D,2FAA2F;AAC3F,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAI9B,MAAM,MAAM,GAAG,WAAK,CAAC,SAAS,CAAC,IAAA,0BAAkB,GAAE,CAAC,CAAC;AAErD,sDAAsD;AACtD,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/F,CAAC;AAGM,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IA4Bb;IACA;IA5BV,EAAE,GAAG,kCAAkB,CAAC;IACxB,WAAW,GAAG,eAAe,CAAC;IAEvC,uGAAuG;IAC9F,cAAc,GAAG,+CAAuB,CAAC;IAElD,yEAAyE;IAChE,0BAA0B,GAAG,KAAK,CAAC;IAE5C,2FAA2F;IAClF,mBAAmB,GAAG,KAAK,CAAC;IAErC,6DAA6D;IACpD,iBAAiB,GAA0B,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAE/E,SAAS,GAAoB;QACpC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC;QACnD,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC;KACpD,CAAC;IAEO,UAAU,GAAqB;QACtC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;KAC1C,CAAC;IAEe,MAAM,GAAG,IAAI,eAAM,CAAC,uBAAqB,CAAC,IAAI,CAAC,CAAC;IAEjE,YACmB,QAA4B,EAC5B,OAA4B;QAD5B,aAAQ,GAAR,QAAQ,CAAoB;QAC5B,YAAO,GAAP,OAAO,CAAqB;IAC5C,CAAC;IAEJ,YAAY;QACV,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,OAAe,EAAE,QAAoC;QACjE,OAAO,IAAA,0CAAmB,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,GAAkB;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC5G,MAAM,MAAM,GAAwB,EAAE,CAAC;YAEvC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,CAAC,IAAI;oBAAE,SAAS;gBAE1B,MAAM,QAAQ,GAA8B,EAAE,CAAC;gBAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBACjD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAEnD,IAAI,KAAK,CAAC,WAAW;oBAAE,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;gBAChE,IAAI,KAAK,KAAK,SAAS;oBAAE,QAAQ,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC1D,IAAI,MAAM,KAAK,SAAS;oBAAE,QAAQ,CAAC,gBAAgB,GAAG,MAAM,CAAC;gBAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC;oBAAE,QAAQ,CAAC,gBAAgB,GAAG,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACnG,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;oBAAE,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAE5E,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YAClF,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,GAAkB;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;gBACvD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAExC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC,CAAC,CAAC;YAEH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,IAAA,8BAAc,EAAC,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAE3D,OAAO,MAAM,CAAC,IAAI,KAAK,gBAAgB;gBACrC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE;gBACvC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,8EAA8E;IAEtE,KAAK,CAAC,IAAI,CAAC,GAAsB,EAAE,GAAkB;QAC3D,OAAO,IAAA,uCAAe,EAAC,GAAG,EAAE,IAAA,yCAAkB,EAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACxG,CAAC;IAEO,cAAc,CAAC,GAAsB,EAAE,GAAkB;QAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAExC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;gBACnD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;aACpD,CAAC,CAAC;YAEH,OAAO,IAAA,0CAAkB,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,CAAC,cAAc,CAAC,GAAsB,EAAE,GAAkB;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC/C,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO;YAAE,UAAU,CAAC,KAAK,EAAE,CAAC;;YACvC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvC,MAAM,MAAM,GAAgB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrD,IAAI,MAA+C,CAAC;YAEpD,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;oBACjD,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE;iBAC3D,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAA,8BAAc,EAAC,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACpD,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,yCAAkB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YAExD,IAAI,CAAC;gBACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBACjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBACpC,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;4BAAE,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;wBAC5C,MAAM,GAAG,CAAC;oBACZ,CAAC;oBAED,IAAI,MAAM,CAAC,UAAU;wBAAE,MAAM;gBAC/B,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,IAAA,8BAAc,EAAC,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBAE3D,IAAI,CAAC,MAAM,CAAC,OAAO;oBAAE,MAAM,MAAM,CAAC;gBAElC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;gBAErB,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACvB,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;oBACxB,MAAM,IAAI,kBAAO,CAAC,yBAAyB,EAAE,+BAA+B,EAAE;wBAC5E,OAAO,EAAE,EAAE,QAAQ,EAAE,kCAAkB,EAAE,OAAO,EAAE,IAAI,EAAE;qBACzD,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;wBACpC,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;4BAAE,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;wBAC5C,MAAM,GAAG,CAAC;oBACZ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,SAAS,GAAG,IAAI,kBAAO,CAC3B,yBAAyB,EACzB,wDAAwD,EACxD,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,kCAAkB,EAAE,EAAE,CAC9C,CAAC;oBAEF,IAAI,CAAC,MAAM,CAAC,OAAO;wBAAE,MAAM,SAAS,CAAC;oBAErC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;oBAExB,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;YAED,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,IAAA,8BAAc,EAAC,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAE3D,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;YAErB,MAAM,MAAM,CAAC;QACf,CAAC;gBAAS,CAAC;YACT,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YACxD,uEAAuE;YACvE,IAAI,CAAC,UAAU;gBAAE,UAAU,CAAC,KAAK,EAAE,CAAC;YAEpC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,8EAA8E;IAE9E,gFAAgF;IACxE,KAAK,CAAC,GAAuB,EAAE,GAAkB;QACvD,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,MAAM,GAAG,IAAA,mDAAwB,EAAC,GAAG,EAAE,IAAA,yCAAkB,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAExC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;gBAChD,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;aACtD,CAAC,CAAC;YAEH,OAAO,IAAA,sDAA2B,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IAE/E;;;;OAIG;IACK,KAAK,CAAC,oBAAoB,CAChC,GAAsB,EACtB,GAAkB;QAElB,MAAM,GAAG,GAAG,IAAA,8CAAsB,EAAC,GAAG,CAAC,CAAC;QAExC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEvC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAiC,CAAC;QAE5D,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAEzC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,kBAAO,CAAC,oBAAoB,EAAE,yDAAyD,EAAE;oBACjG,OAAO,EAAE,EAAE,QAAQ,EAAE,kCAAkB,EAAE;iBAC1C,CAAC,CAAC;YACL,CAAC;YAED,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC/C,MAAM,IAAI,kBAAO,CAAC,oBAAoB,EAAE,uDAAuD,EAAE;oBAC/F,OAAO,EAAE,EAAE,QAAQ,EAAE,kCAAkB,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;iBACpE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YAEnC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE;gBACjB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,8EAA8E;IAEtE,SAAS,CAAC,SAA0B,EAAE,KAAyB;QACrE,OAAO,MAAM,CAAC,SAAS,CAAC,iCAAyB,EAAE;YACjD,IAAI,EAAE,cAAQ,CAAC,MAAM;YACrB,UAAU,EAAE;gBACV,aAAa,EAAE,kCAAkB;gBACjC,cAAc,EAAE,SAAS;gBACzB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,OAAO,CAAC,IAAU,EAAE,MAAc;QACxC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAChH,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,iGAAiG;IACzF,OAAO,CACb,SAA0B,EAC1B,KAAyB,EACzB,GAAkB,EAClB,MAAc,EACd,OAAe;QAEf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAChB,GAAG,EAAE,kBAAkB;YACvB,QAAQ,EAAE,kCAAkB;YAC5B,SAAS;YACT,KAAK;YACL,MAAM;YACN,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;SACjC,CAAC,CAAC;IACL,CAAC;IAED,qFAAqF;IAC7E,KAAK,CAAC,IAAI,CAChB,SAA0B,EAC1B,KAAyB,EACzB,GAAkB,EAClB,EAAoB;QAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,IAAA,8BAAc,EAAC,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAE3D,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;YAErB,MAAM,MAAM,CAAC;QACf,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CACF,CAAA;AAlVY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCA6BkB,sCAAkB;QACnB,2CAAmB;GA7BpC,qBAAqB,CAkVjC"}
|
|
1
|
+
{"version":3,"file":"gemini.adapter.js","sourceRoot":"","sources":["../../../../src/ai/providers/gemini/gemini.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;;;;;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;AAED,8DAA8D;AAC9D,mEAAqF;AAA5E,mHAAA,yBAAyB,OAAA"}
|
|
@@ -1,40 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { AiCallContext } from '../../core/provider-adapter.interface';
|
|
3
|
-
import { type OpenAiFamily } from './openai-errors';
|
|
4
|
-
export declare const OPENAI_DEFAULT_BASE_URL = "https://api.openai.com/v1";
|
|
5
|
-
/** A generous ceiling for one request; long reasoning turns take minutes. */
|
|
6
|
-
export declare const OPENAI_DEFAULT_TIMEOUT_MS: number;
|
|
7
|
-
/** The `fetch` the SDK uses. Tests inject a mocked one; production uses the global. */
|
|
8
|
-
export type OpenAiFetch = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
|
9
|
-
export interface OpenAiClientOptions {
|
|
10
|
-
fetch?: OpenAiFetch;
|
|
11
|
-
timeoutMs?: number;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Every SDK option this application pins, whatever member of the OpenAI
|
|
15
|
-
* family the client talks to (#448): nothing may be read from the
|
|
16
|
-
* environment (`OPENAI_ORG_ID`, `OPENAI_PROJECT_ID`, `OPENAI_LOG`, ...), the
|
|
17
|
-
* SDK never retries, and it never logs. The Azure and OpenAI-compatible
|
|
18
|
-
* factories spread this into their own clients.
|
|
19
|
-
*/
|
|
20
|
-
export declare function pinnedOpenAiClientOptions(options: OpenAiClientOptions, fetch?: OpenAiFetch): {
|
|
21
|
-
fetch?: OpenAiFetch | undefined;
|
|
22
|
-
organization: null;
|
|
23
|
-
project: null;
|
|
24
|
-
adminAPIKey: null;
|
|
25
|
-
webhookSecret: null;
|
|
26
|
-
maxRetries: number;
|
|
27
|
-
timeout: number;
|
|
28
|
-
logLevel: "off";
|
|
29
|
-
};
|
|
30
|
-
/** Throws `AI_KEY_INVALID` for an empty key — before any client is built. */
|
|
31
|
-
export declare function assertOpenAiApiKey(ctx: AiCallContext, family?: OpenAiFamily): void;
|
|
1
|
+
import { OpenAiClientFactory as BaseOpenAiClientFactory, type OpenAiClientOptions } from '@marinoscar/platform-ai-providers/openai';
|
|
32
2
|
/** DI token for `OpenAiClientOptions` (optional; tests and forks provide it). */
|
|
33
3
|
export declare const OPENAI_CLIENT_OPTIONS: unique symbol;
|
|
34
|
-
|
|
35
|
-
|
|
4
|
+
/**
|
|
5
|
+
* The injectable OpenAiClientFactory: the framework-free factory of
|
|
6
|
+
* `@marinoscar/platform-ai-providers/openai` with its options injected.
|
|
7
|
+
*
|
|
8
|
+
* @stability experimental
|
|
9
|
+
*/
|
|
10
|
+
export declare class OpenAiClientFactory extends BaseOpenAiClientFactory {
|
|
11
|
+
/**
|
|
12
|
+
* @param options - the client options (a mocked `fetch` in tests); none in production.
|
|
13
|
+
*/
|
|
36
14
|
constructor(options?: OpenAiClientOptions);
|
|
37
|
-
/** The SDK client for one call. Throws `AI_KEY_INVALID` for an empty key. */
|
|
38
|
-
create(ctx: AiCallContext): OpenAI;
|
|
39
15
|
}
|
|
16
|
+
export { assertOpenAiApiKey, OPENAI_DEFAULT_BASE_URL, OPENAI_DEFAULT_TIMEOUT_MS, pinnedOpenAiClientOptions } from '@marinoscar/platform-ai-providers/openai';
|
|
17
|
+
export type { OpenAiFetch, OpenAiClientOptions } from '@marinoscar/platform-ai-providers/openai';
|
|
40
18
|
//# sourceMappingURL=openai-client.factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-client.factory.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/openai/openai-client.factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openai-client.factory.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/openai/openai-client.factory.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,mBAAmB,IAAI,uBAAuB,EAC9C,KAAK,mBAAmB,EACzB,MAAM,0CAA0C,CAAC;AAElD,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,eAAkC,CAAC;AAErE;;;;;GAKG;AACH,qBACa,mBAAoB,SAAQ,uBAAuB;IAC9D;;OAEG;gBACoD,OAAO,CAAC,EAAE,mBAAmB;CAGrF;AAGD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAC7J,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC"}
|
|
@@ -1,20 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// =============================================================================
|
|
3
|
-
//
|
|
3
|
+
// OpenAiClientFactory: the Nest binding (issue #991)
|
|
4
4
|
// =============================================================================
|
|
5
5
|
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// explicitly. There is no `OPENAI_API_KEY` / `OPENAI_BASE_URL` configuration
|
|
12
|
-
// in this application (docs/specs/ai-platform.md) and an ambient variable on
|
|
13
|
-
// a host must not silently change which account or endpoint a call uses.
|
|
14
|
-
//
|
|
15
|
-
// `maxRetries: 0` — retries are the caller's job (the queue for a job, the
|
|
16
|
-
// user for an interactive call); the SDK retrying underneath would multiply
|
|
17
|
-
// every attempt and hide a 429 from `toRateLimitError()`.
|
|
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_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.
|
|
18
11
|
// =============================================================================
|
|
19
12
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
20
13
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -29,61 +22,23 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
29
22
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
30
23
|
};
|
|
31
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.
|
|
33
|
-
exports.pinnedOpenAiClientOptions = pinnedOpenAiClientOptions;
|
|
34
|
-
exports.assertOpenAiApiKey = assertOpenAiApiKey;
|
|
25
|
+
exports.pinnedOpenAiClientOptions = exports.OPENAI_DEFAULT_TIMEOUT_MS = exports.OPENAI_DEFAULT_BASE_URL = exports.assertOpenAiApiKey = exports.OpenAiClientFactory = exports.OPENAI_CLIENT_OPTIONS = void 0;
|
|
35
26
|
const common_1 = require("@nestjs/common");
|
|
36
|
-
const openai_1 = require("openai");
|
|
37
|
-
const ai_error_1 = require("../../core/ai-error");
|
|
38
|
-
const openai_errors_1 = require("./openai-errors");
|
|
39
|
-
exports.OPENAI_DEFAULT_BASE_URL = 'https://api.openai.com/v1';
|
|
40
|
-
/** A generous ceiling for one request; long reasoning turns take minutes. */
|
|
41
|
-
exports.OPENAI_DEFAULT_TIMEOUT_MS = 10 * 60 * 1000;
|
|
42
|
-
/**
|
|
43
|
-
* Every SDK option this application pins, whatever member of the OpenAI
|
|
44
|
-
* family the client talks to (#448): nothing may be read from the
|
|
45
|
-
* environment (`OPENAI_ORG_ID`, `OPENAI_PROJECT_ID`, `OPENAI_LOG`, ...), the
|
|
46
|
-
* SDK never retries, and it never logs. The Azure and OpenAI-compatible
|
|
47
|
-
* factories spread this into their own clients.
|
|
48
|
-
*/
|
|
49
|
-
function pinnedOpenAiClientOptions(options, fetch) {
|
|
50
|
-
const chosenFetch = fetch ?? options.fetch;
|
|
51
|
-
return {
|
|
52
|
-
organization: null,
|
|
53
|
-
project: null,
|
|
54
|
-
adminAPIKey: null,
|
|
55
|
-
webhookSecret: null,
|
|
56
|
-
maxRetries: 0,
|
|
57
|
-
timeout: options.timeoutMs ?? exports.OPENAI_DEFAULT_TIMEOUT_MS,
|
|
58
|
-
// The SDK's own logger writes to the console and, at debug level, the
|
|
59
|
-
// request — never let an ambient OPENAI_LOG turn that on.
|
|
60
|
-
logLevel: 'off',
|
|
61
|
-
...(chosenFetch ? { fetch: chosenFetch } : {}),
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
/** Throws `AI_KEY_INVALID` for an empty key — before any client is built. */
|
|
65
|
-
function assertOpenAiApiKey(ctx, family = openai_errors_1.OPENAI_FAMILY) {
|
|
66
|
-
if (!ctx.apiKey || ctx.apiKey.trim().length === 0) {
|
|
67
|
-
throw new ai_error_1.AiError('AI_KEY_INVALID', `No ${family.label} API key was supplied.`, {
|
|
68
|
-
details: { provider: family.providerId },
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
}
|
|
27
|
+
const openai_1 = require("@marinoscar/platform-ai-providers/openai");
|
|
72
28
|
/** DI token for `OpenAiClientOptions` (optional; tests and forks provide it). */
|
|
73
29
|
exports.OPENAI_CLIENT_OPTIONS = Symbol('OPENAI_CLIENT_OPTIONS');
|
|
74
|
-
|
|
75
|
-
|
|
30
|
+
/**
|
|
31
|
+
* The injectable OpenAiClientFactory: the framework-free factory of
|
|
32
|
+
* `@marinoscar/platform-ai-providers/openai` with its options injected.
|
|
33
|
+
*
|
|
34
|
+
* @stability experimental
|
|
35
|
+
*/
|
|
36
|
+
let OpenAiClientFactory = class OpenAiClientFactory extends openai_1.OpenAiClientFactory {
|
|
37
|
+
/**
|
|
38
|
+
* @param options - the client options (a mocked `fetch` in tests); none in production.
|
|
39
|
+
*/
|
|
76
40
|
constructor(options) {
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
/** The SDK client for one call. Throws `AI_KEY_INVALID` for an empty key. */
|
|
80
|
-
create(ctx) {
|
|
81
|
-
assertOpenAiApiKey(ctx);
|
|
82
|
-
return new openai_1.OpenAI({
|
|
83
|
-
apiKey: ctx.apiKey,
|
|
84
|
-
baseURL: ctx.baseUrl ?? exports.OPENAI_DEFAULT_BASE_URL,
|
|
85
|
-
...pinnedOpenAiClientOptions(this.options),
|
|
86
|
-
});
|
|
41
|
+
super(options);
|
|
87
42
|
}
|
|
88
43
|
};
|
|
89
44
|
exports.OpenAiClientFactory = OpenAiClientFactory;
|
|
@@ -93,4 +48,10 @@ exports.OpenAiClientFactory = OpenAiClientFactory = __decorate([
|
|
|
93
48
|
__param(0, (0, common_1.Inject)(exports.OPENAI_CLIENT_OPTIONS)),
|
|
94
49
|
__metadata("design:paramtypes", [Object])
|
|
95
50
|
], OpenAiClientFactory);
|
|
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, "assertOpenAiApiKey", { enumerable: true, get: function () { return openai_2.assertOpenAiApiKey; } });
|
|
54
|
+
Object.defineProperty(exports, "OPENAI_DEFAULT_BASE_URL", { enumerable: true, get: function () { return openai_2.OPENAI_DEFAULT_BASE_URL; } });
|
|
55
|
+
Object.defineProperty(exports, "OPENAI_DEFAULT_TIMEOUT_MS", { enumerable: true, get: function () { return openai_2.OPENAI_DEFAULT_TIMEOUT_MS; } });
|
|
56
|
+
Object.defineProperty(exports, "pinnedOpenAiClientOptions", { enumerable: true, get: function () { return openai_2.pinnedOpenAiClientOptions; } });
|
|
96
57
|
//# sourceMappingURL=openai-client.factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-client.factory.js","sourceRoot":"","sources":["../../../../src/ai/providers/openai/openai-client.factory.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,
|
|
1
|
+
{"version":3,"file":"openai-client.factory.js","sourceRoot":"","sources":["../../../../src/ai/providers/openai/openai-client.factory.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,qDAAqD;AACrD,gFAAgF;AAChF,EAAE;AACF,8EAA8E;AAC9E,yEAAyE;AACzE,0EAA0E;AAC1E,+EAA+E;AAC/E,wEAAwE;AACxE,gFAAgF;;;;;;;;;;;;;;;AAEhF,2CAA8D;AAC9D,qEAGkD;AAElD,iFAAiF;AACpE,QAAA,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAErE;;;;;GAKG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,4BAAuB;IAC9D;;OAEG;IACH,YAAuD,OAA6B;QAClF,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF,CAAA;AAPY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;IAKE,WAAA,IAAA,iBAAQ,GAAE,CAAA;IAAE,WAAA,IAAA,eAAM,EAAC,6BAAqB,CAAC,CAAA;;GAJ3C,mBAAmB,CAO/B;AAED,8DAA8D;AAC9D,mEAA6J;AAApJ,4GAAA,kBAAkB,OAAA;AAAE,iHAAA,uBAAuB,OAAA;AAAE,mHAAA,yBAAyB,OAAA;AAAE,mHAAA,yBAAyB,OAAA"}
|