@carlonicora/nestjs-neo4jsonapi 1.99.0 → 1.101.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bootstrap/app.module.factory.d.ts.map +1 -1
- package/dist/bootstrap/app.module.factory.js +13 -6
- package/dist/bootstrap/app.module.factory.js.map +1 -1
- package/dist/bootstrap/bootstrap.options.d.ts +11 -0
- package/dist/bootstrap/bootstrap.options.d.ts.map +1 -1
- package/dist/common/filters/http-exception.filter.d.ts.map +1 -1
- package/dist/common/filters/http-exception.filter.js +9 -0
- package/dist/common/filters/http-exception.filter.js.map +1 -1
- package/dist/config/base.config.d.ts.map +1 -1
- package/dist/config/base.config.js +29 -0
- package/dist/config/base.config.js.map +1 -1
- package/dist/config/interfaces/config.ai.interface.d.ts +67 -0
- package/dist/config/interfaces/config.ai.interface.d.ts.map +1 -1
- package/dist/core/blocknote/services/blocknote.service.d.ts +14 -0
- package/dist/core/blocknote/services/blocknote.service.d.ts.map +1 -1
- package/dist/core/blocknote/services/blocknote.service.js +89 -0
- package/dist/core/blocknote/services/blocknote.service.js.map +1 -1
- package/dist/core/core.module.d.ts +2 -0
- package/dist/core/core.module.d.ts.map +1 -1
- package/dist/core/core.module.js +3 -3
- package/dist/core/core.module.js.map +1 -1
- package/dist/core/email/services/email.service.d.ts +12 -3
- package/dist/core/email/services/email.service.d.ts.map +1 -1
- package/dist/core/email/services/email.service.js +67 -32
- package/dist/core/email/services/email.service.js.map +1 -1
- package/dist/core/jsonapi/services/jsonapi.service.d.ts +1 -1
- package/dist/core/jsonapi/services/jsonapi.service.d.ts.map +1 -1
- package/dist/core/jsonapi/services/jsonapi.service.js +3 -3
- package/dist/core/jsonapi/services/jsonapi.service.js.map +1 -1
- package/dist/core/llm/index.d.ts +4 -0
- package/dist/core/llm/index.d.ts.map +1 -1
- package/dist/core/llm/index.js +4 -0
- package/dist/core/llm/index.js.map +1 -1
- package/dist/core/llm/llm.module.d.ts.map +1 -1
- package/dist/core/llm/llm.module.js +8 -1
- package/dist/core/llm/llm.module.js.map +1 -1
- package/dist/core/llm/services/document-ai.service.d.ts +35 -0
- package/dist/core/llm/services/document-ai.service.d.ts.map +1 -0
- package/dist/core/llm/services/document-ai.service.js +100 -0
- package/dist/core/llm/services/document-ai.service.js.map +1 -0
- package/dist/core/llm/services/embedder-token-bucket.service.d.ts +29 -0
- package/dist/core/llm/services/embedder-token-bucket.service.d.ts.map +1 -0
- package/dist/core/llm/services/embedder-token-bucket.service.js +127 -0
- package/dist/core/llm/services/embedder-token-bucket.service.js.map +1 -0
- package/dist/core/llm/services/llm.service.d.ts.map +1 -1
- package/dist/core/llm/services/llm.service.js +8 -0
- package/dist/core/llm/services/llm.service.js.map +1 -1
- package/dist/core/llm/services/model.service.d.ts +42 -2
- package/dist/core/llm/services/model.service.d.ts.map +1 -1
- package/dist/core/llm/services/model.service.js +108 -3
- package/dist/core/llm/services/model.service.js.map +1 -1
- package/dist/core/llm/services/rate-limited-embedder.d.ts +31 -0
- package/dist/core/llm/services/rate-limited-embedder.d.ts.map +1 -0
- package/dist/core/llm/services/rate-limited-embedder.js +194 -0
- package/dist/core/llm/services/rate-limited-embedder.js.map +1 -0
- package/dist/core/llm/services/vision.llm.service.d.ts +16 -0
- package/dist/core/llm/services/vision.llm.service.d.ts.map +1 -1
- package/dist/core/llm/services/vision.llm.service.js +46 -5
- package/dist/core/llm/services/vision.llm.service.js.map +1 -1
- package/dist/core/llm/utils/mock-from-zod.d.ts +3 -0
- package/dist/core/llm/utils/mock-from-zod.d.ts.map +1 -0
- package/dist/core/llm/utils/mock-from-zod.js +47 -0
- package/dist/core/llm/utils/mock-from-zod.js.map +1 -0
- package/dist/core/migrator/interfaces/migration.interface.d.ts +21 -1
- package/dist/core/migrator/interfaces/migration.interface.d.ts.map +1 -1
- package/dist/core/migrator/migrator.module.d.ts.map +1 -1
- package/dist/core/migrator/migrator.module.js +5 -1
- package/dist/core/migrator/migrator.module.js.map +1 -1
- package/dist/core/migrator/services/migrator.service.d.ts +8 -1
- package/dist/core/migrator/services/migrator.service.d.ts.map +1 -1
- package/dist/core/migrator/services/migrator.service.js +52 -23
- package/dist/core/migrator/services/migrator.service.js.map +1 -1
- package/dist/core/neo4j/services/neo4j.service.d.ts +1 -0
- package/dist/core/neo4j/services/neo4j.service.d.ts.map +1 -1
- package/dist/core/neo4j/services/neo4j.service.js +8 -5
- package/dist/core/neo4j/services/neo4j.service.js.map +1 -1
- package/dist/core/redis/services/redis.client.storage.service.d.ts +14 -0
- package/dist/core/redis/services/redis.client.storage.service.d.ts.map +1 -1
- package/dist/core/redis/services/redis.client.storage.service.js +28 -0
- package/dist/core/redis/services/redis.client.storage.service.js.map +1 -1
- package/dist/core/security/services/security.service.d.ts +4 -0
- package/dist/core/security/services/security.service.d.ts.map +1 -1
- package/dist/core/security/services/security.service.js +15 -3
- package/dist/core/security/services/security.service.js.map +1 -1
- package/dist/core/websocket/gateways/event.gateway.d.ts.map +1 -1
- package/dist/core/websocket/gateways/event.gateway.js +6 -0
- package/dist/core/websocket/gateways/event.gateway.js.map +1 -1
- package/dist/core/websocket/services/presence.cron.service.d.ts +21 -0
- package/dist/core/websocket/services/presence.cron.service.d.ts.map +1 -0
- package/dist/core/websocket/services/presence.cron.service.js +83 -0
- package/dist/core/websocket/services/presence.cron.service.js.map +1 -0
- package/dist/core/websocket/services/presence.service.d.ts +3 -1
- package/dist/core/websocket/services/presence.service.d.ts.map +1 -1
- package/dist/core/websocket/services/presence.service.js +14 -11
- package/dist/core/websocket/services/presence.service.js.map +1 -1
- package/dist/core/websocket/services/websocket.service.d.ts +9 -5
- package/dist/core/websocket/services/websocket.service.d.ts.map +1 -1
- package/dist/core/websocket/services/websocket.service.js +12 -4
- package/dist/core/websocket/services/websocket.service.js.map +1 -1
- package/dist/core/websocket/websocket.module.d.ts.map +1 -1
- package/dist/core/websocket/websocket.module.js +5 -2
- package/dist/core/websocket/websocket.module.js.map +1 -1
- package/dist/foundations/chunker/services/types/email.service.d.ts +3 -3
- package/dist/foundations/chunker/services/types/email.service.d.ts.map +1 -1
- package/dist/foundations/chunker/services/types/email.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -41,10 +41,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
41
41
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
42
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
43
|
};
|
|
44
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
45
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
46
|
+
};
|
|
44
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
48
|
exports.ModelService = void 0;
|
|
46
49
|
exports.writeGcpCredentials = writeGcpCredentials;
|
|
47
50
|
exports.validateAiUrl = validateAiUrl;
|
|
51
|
+
const testing_1 = require("@langchain/core/utils/testing");
|
|
48
52
|
const google_vertexai_1 = require("@langchain/google-vertexai");
|
|
49
53
|
const openai_1 = require("@langchain/openai");
|
|
50
54
|
const common_1 = require("@nestjs/common");
|
|
@@ -54,8 +58,12 @@ const fs = __importStar(require("fs"));
|
|
|
54
58
|
const os = __importStar(require("os"));
|
|
55
59
|
const path = __importStar(require("path"));
|
|
56
60
|
const nestjs_cls_1 = require("nestjs-cls");
|
|
61
|
+
const openai_2 = __importStar(require("openai"));
|
|
62
|
+
const logging_service_1 = require("../../logging/services/logging.service");
|
|
57
63
|
const model_weight_1 = require("../enums/model.weight");
|
|
64
|
+
const embedder_token_bucket_service_1 = require("./embedder-token-bucket.service");
|
|
58
65
|
const openrouter_fetch_1 = require("./openrouter-fetch");
|
|
66
|
+
const rate_limited_embedder_1 = require("./rate-limited-embedder");
|
|
59
67
|
/**
|
|
60
68
|
* Tracks GCP credential temp files written this process so they can be removed
|
|
61
69
|
* on exit. Each path is UUID-unique (see {@link writeGcpCredentials}).
|
|
@@ -136,9 +144,24 @@ function validateAiUrl(url, provider) {
|
|
|
136
144
|
}
|
|
137
145
|
}
|
|
138
146
|
let ModelService = class ModelService {
|
|
139
|
-
constructor(clsService, configService) {
|
|
147
|
+
constructor(clsService, configService, bucket, logger) {
|
|
140
148
|
this.clsService = clsService;
|
|
141
149
|
this.configService = configService;
|
|
150
|
+
this.bucket = bucket;
|
|
151
|
+
this.logger = logger;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Fail-closed MOCK_AI safety gate. MOCK_AI returns synthetic data (no provider
|
|
155
|
+
* call) for every model/embedder/structured call — invaluable for local dev and
|
|
156
|
+
* tests, catastrophic in production (it would write fake AI data into the graph).
|
|
157
|
+
* This refuses to start when MOCK_AI is on AND the environment is production.
|
|
158
|
+
* Reads `process.env.ENV` directly on purpose: a fail-closed safety gate must not
|
|
159
|
+
* depend on config wiring being correct.
|
|
160
|
+
*/
|
|
161
|
+
onModuleInit() {
|
|
162
|
+
if (this.aiConfig.mock && process.env.ENV === "production") {
|
|
163
|
+
throw new Error("MOCK_AI must never run in production — refusing to start.");
|
|
164
|
+
}
|
|
142
165
|
}
|
|
143
166
|
get aiConfig() {
|
|
144
167
|
return this.configService.get("ai");
|
|
@@ -186,6 +209,9 @@ let ModelService = class ModelService {
|
|
|
186
209
|
* @throws {Error} If the configured LLM type is not supported
|
|
187
210
|
*/
|
|
188
211
|
getLLM(params) {
|
|
212
|
+
if (this.aiConfig.mock) {
|
|
213
|
+
return new testing_1.FakeListChatModel({ responses: ["mock summary"] });
|
|
214
|
+
}
|
|
189
215
|
const temperature = params?.temperature ?? 0.2;
|
|
190
216
|
const cfg = this.getResolvedConfig(params?.modelWeight);
|
|
191
217
|
const maxOutputTokens = params?.maxOutputTokens ?? cfg.maxOutputTokens;
|
|
@@ -213,8 +239,21 @@ let ModelService = class ModelService {
|
|
|
213
239
|
* @throws {Error} If the configured LLM type is not supported
|
|
214
240
|
*/
|
|
215
241
|
getVisionLLM(params) {
|
|
242
|
+
if (this.aiConfig.mock) {
|
|
243
|
+
return new testing_1.FakeListChatModel({ responses: ["mock summary"] });
|
|
244
|
+
}
|
|
216
245
|
const temperature = params?.temperature ?? 0.1;
|
|
217
|
-
|
|
246
|
+
const visionConfig = this.visionConfig;
|
|
247
|
+
// Reasoning models (gpt-5 / o-series) accept `reasoning_effort` on the chat-completions
|
|
248
|
+
// call. Lower effort = far fewer reasoning tokens = much faster. Passed via modelKwargs
|
|
249
|
+
// (raw param) because the LangChain `reasoning` object is rejected by Azure chat-completions
|
|
250
|
+
// deployments. Ignored for non-reasoning models.
|
|
251
|
+
const visionModelLower = (visionConfig.model || "").toLowerCase();
|
|
252
|
+
const isReasoningVisionModel = visionModelLower.includes("gpt-5") || /(^|\/)o\d/.test(visionModelLower);
|
|
253
|
+
const modelKwargs = isReasoningVisionModel && visionConfig.reasoningEffort
|
|
254
|
+
? { reasoning_effort: visionConfig.reasoningEffort }
|
|
255
|
+
: undefined;
|
|
256
|
+
return this.buildChatModel(visionConfig, { temperature, credentialFileTag: "vision", modelKwargs });
|
|
218
257
|
}
|
|
219
258
|
/**
|
|
220
259
|
* Gets a configured LLM instance for audio operations based on the current config.
|
|
@@ -245,6 +284,7 @@ let ModelService = class ModelService {
|
|
|
245
284
|
configuration: {
|
|
246
285
|
baseURL: cfg.url || "http://localhost:8033/v1",
|
|
247
286
|
},
|
|
287
|
+
...(opts.modelKwargs ? { modelKwargs: opts.modelKwargs } : {}),
|
|
248
288
|
};
|
|
249
289
|
switch (cfg.provider) {
|
|
250
290
|
case "llamacpp": {
|
|
@@ -313,6 +353,7 @@ let ModelService = class ModelService {
|
|
|
313
353
|
azureOpenAIApiVersion: cfg.apiVersion,
|
|
314
354
|
temperature,
|
|
315
355
|
...(maxOutputTokens ? { maxTokens: maxOutputTokens } : {}),
|
|
356
|
+
...(llmConfig.modelKwargs ? { modelKwargs: llmConfig.modelKwargs } : {}),
|
|
316
357
|
};
|
|
317
358
|
return new openai_1.AzureChatOpenAI(azureParameters);
|
|
318
359
|
}
|
|
@@ -342,7 +383,37 @@ let ModelService = class ModelService {
|
|
|
342
383
|
...(opts.disableThinking ? { modelKwargs: { ...(llmConfig.modelKwargs ?? {}), reasoning_effort: "none" } } : {}),
|
|
343
384
|
});
|
|
344
385
|
}
|
|
386
|
+
/**
|
|
387
|
+
* Returns the embedder used for vectorisation. Three layers, all additive over
|
|
388
|
+
* the raw provider embedder:
|
|
389
|
+
* 1. MOCK_AI → a zero-vector embedder (no provider call), sized to
|
|
390
|
+
* `embedder.dimensions` so downstream vector writes still have the right shape.
|
|
391
|
+
* 2. When `embedder.rateLimit` is configured AND the token bucket is wired,
|
|
392
|
+
* the provider embedder is wrapped in a RateLimitedEmbedder (distributed
|
|
393
|
+
* token bucket + local concurrency gate + 429 handling) and CACHED on the
|
|
394
|
+
* instance, so every caller shares one bucket/gate.
|
|
395
|
+
* 3. Otherwise the raw provider embedder is returned unchanged.
|
|
396
|
+
*/
|
|
345
397
|
getEmbedder() {
|
|
398
|
+
if (this.aiConfig.mock) {
|
|
399
|
+
const dim = this.aiConfig.embedder.dimensions;
|
|
400
|
+
const zero = () => new Array(dim).fill(0);
|
|
401
|
+
return {
|
|
402
|
+
embedDocuments: async (texts) => texts.map(zero),
|
|
403
|
+
embedQuery: async () => zero(),
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
const rateLimit = this.aiConfig.embedder.rateLimit;
|
|
407
|
+
if (rateLimit && this.bucket && this.logger) {
|
|
408
|
+
if (this.cachedEmbedder)
|
|
409
|
+
return this.cachedEmbedder;
|
|
410
|
+
const inner = this.buildInnerEmbedder();
|
|
411
|
+
this.cachedEmbedder = new rate_limited_embedder_1.RateLimitedEmbedder(inner, this.bucket, rateLimit, this.logger);
|
|
412
|
+
return this.cachedEmbedder;
|
|
413
|
+
}
|
|
414
|
+
return this.buildInnerEmbedder();
|
|
415
|
+
}
|
|
416
|
+
buildInnerEmbedder() {
|
|
346
417
|
let response;
|
|
347
418
|
switch (this.aiConfig.embedder.provider) {
|
|
348
419
|
case "local":
|
|
@@ -413,11 +484,45 @@ let ModelService = class ModelService {
|
|
|
413
484
|
getEmbedderDimensions() {
|
|
414
485
|
return this.aiConfig.embedder.dimensions;
|
|
415
486
|
}
|
|
487
|
+
/**
|
|
488
|
+
* Builds an OpenAI / Azure OpenAI SDK client for audio transcription. This is
|
|
489
|
+
* the SDK-based path (`audio.transcriptions.create`), distinct from
|
|
490
|
+
* AudioLLMService (chat-LLM / OpenAI-style /audio/transcriptions HTTP). Driven
|
|
491
|
+
* by the `transcriber` config block (TRANSCRIBER_* env vars).
|
|
492
|
+
*/
|
|
493
|
+
getTranscriber() {
|
|
494
|
+
const transcriber = this.aiConfig.transcriber;
|
|
495
|
+
switch (transcriber.provider) {
|
|
496
|
+
case "openai":
|
|
497
|
+
return new openai_2.default({ apiKey: transcriber.apiKey });
|
|
498
|
+
case "azure":
|
|
499
|
+
return new openai_2.AzureOpenAI({
|
|
500
|
+
apiKey: transcriber.apiKey,
|
|
501
|
+
apiVersion: transcriber.apiVersion,
|
|
502
|
+
endpoint: transcriber.url,
|
|
503
|
+
deployment: transcriber.model,
|
|
504
|
+
});
|
|
505
|
+
default:
|
|
506
|
+
throw new Error(`Unsupported transcriber provider: ${transcriber.provider}`);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
async transcribeAudio(params) {
|
|
510
|
+
return await this.getTranscriber().audio.transcriptions.create({
|
|
511
|
+
file: fs.createReadStream(params.filePath),
|
|
512
|
+
model: this.aiConfig.transcriber.model,
|
|
513
|
+
prompt: params.prompt,
|
|
514
|
+
response_format: "json",
|
|
515
|
+
});
|
|
516
|
+
}
|
|
416
517
|
};
|
|
417
518
|
exports.ModelService = ModelService;
|
|
418
519
|
exports.ModelService = ModelService = __decorate([
|
|
419
520
|
(0, common_1.Injectable)(),
|
|
521
|
+
__param(2, (0, common_1.Optional)()),
|
|
522
|
+
__param(3, (0, common_1.Optional)()),
|
|
420
523
|
__metadata("design:paramtypes", [nestjs_cls_1.ClsService,
|
|
421
|
-
config_1.ConfigService
|
|
524
|
+
config_1.ConfigService,
|
|
525
|
+
embedder_token_bucket_service_1.EmbedderTokenBucketService,
|
|
526
|
+
logging_service_1.AppLoggingService])
|
|
422
527
|
], ModelService);
|
|
423
528
|
//# sourceMappingURL=model.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.service.js","sourceRoot":"","sources":["../../../../src/core/llm/services/model.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model.service.js","sourceRoot":"","sources":["../../../../src/core/llm/services/model.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Embeddings } from "@langchain/core/embeddings";
|
|
2
|
+
import { ConfigAiInterface } from "../../../config/interfaces";
|
|
3
|
+
import { AppLoggingService } from "../../logging/services/logging.service";
|
|
4
|
+
import { EmbedderTokenBucketService } from "./embedder-token-bucket.service";
|
|
5
|
+
type RateLimitConfig = NonNullable<ConfigAiInterface["embedder"]["rateLimit"]>;
|
|
6
|
+
export declare class EmbedderBucketStarvedError extends Error {
|
|
7
|
+
readonly estTokens: number;
|
|
8
|
+
readonly waitMs: number;
|
|
9
|
+
constructor(estTokens: number, waitMs: number);
|
|
10
|
+
}
|
|
11
|
+
export declare class RateLimitedEmbedder extends Embeddings {
|
|
12
|
+
private readonly inner;
|
|
13
|
+
private readonly bucket;
|
|
14
|
+
private readonly rateLimit;
|
|
15
|
+
private readonly logger;
|
|
16
|
+
private readonly embedGate;
|
|
17
|
+
constructor(inner: Embeddings, bucket: EmbedderTokenBucketService, rateLimit: RateLimitConfig, logger: AppLoggingService);
|
|
18
|
+
embedQuery(text: string): Promise<number[]>;
|
|
19
|
+
embedDocuments(texts: string[]): Promise<number[][]>;
|
|
20
|
+
private embedSubBatchWithRetry;
|
|
21
|
+
private gatedEmbed;
|
|
22
|
+
private estimateTokens;
|
|
23
|
+
private splitIntoSubBatches;
|
|
24
|
+
private is429;
|
|
25
|
+
private isTokenLimitError;
|
|
26
|
+
private parseRetryAfter;
|
|
27
|
+
private getHeader;
|
|
28
|
+
private sleep;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=rate-limited-embedder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limited-embedder.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/services/rate-limited-embedder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,KAAK,eAAe,GAAG,WAAW,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AA6B/E,qBAAa,0BAA2B,SAAQ,KAAK;aAEjC,SAAS,EAAE,MAAM;aACjB,MAAM,EAAE,MAAM;gBADd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM;CAKjC;AAED,qBAAa,mBAAoB,SAAQ,UAAU;IAI/C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IANzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAGnB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,0BAA0B,EAClC,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,iBAAiB;IAMtC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK3C,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAqB5C,sBAAsB;YA6CtB,UAAU;IASxB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RateLimitedEmbedder = exports.EmbedderBucketStarvedError = void 0;
|
|
4
|
+
const embeddings_1 = require("@langchain/core/embeddings");
|
|
5
|
+
// Caps how many embedding requests hit the provider at once across all jobs sharing
|
|
6
|
+
// this (singleton) embedder, set via EMBEDDER_MAX_CONCURRENT_REQUESTS (rateLimit config).
|
|
7
|
+
// Firing many requests concurrently just queues them server-side and inflates per-call
|
|
8
|
+
// latency; a small concurrency keeps calls fast without lowering overall throughput.
|
|
9
|
+
class Semaphore {
|
|
10
|
+
constructor(max) {
|
|
11
|
+
this.waiters = [];
|
|
12
|
+
this.slots = max;
|
|
13
|
+
}
|
|
14
|
+
async acquire() {
|
|
15
|
+
if (this.slots > 0) {
|
|
16
|
+
this.slots--;
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
await new Promise((resolve) => this.waiters.push(resolve));
|
|
20
|
+
}
|
|
21
|
+
release() {
|
|
22
|
+
const next = this.waiters.shift();
|
|
23
|
+
if (next)
|
|
24
|
+
next();
|
|
25
|
+
else
|
|
26
|
+
this.slots++;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
class EmbedderBucketStarvedError extends Error {
|
|
30
|
+
constructor(estTokens, waitMs) {
|
|
31
|
+
super(`Embedder rate-limit bucket starved: requested=${estTokens} waitMs=${waitMs}`);
|
|
32
|
+
this.estTokens = estTokens;
|
|
33
|
+
this.waitMs = waitMs;
|
|
34
|
+
this.name = "EmbedderBucketStarvedError";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.EmbedderBucketStarvedError = EmbedderBucketStarvedError;
|
|
38
|
+
class RateLimitedEmbedder extends embeddings_1.Embeddings {
|
|
39
|
+
constructor(inner, bucket, rateLimit, logger) {
|
|
40
|
+
super({});
|
|
41
|
+
this.inner = inner;
|
|
42
|
+
this.bucket = bucket;
|
|
43
|
+
this.rateLimit = rateLimit;
|
|
44
|
+
this.logger = logger;
|
|
45
|
+
this.embedGate = new Semaphore(this.rateLimit.maxConcurrentRequests);
|
|
46
|
+
}
|
|
47
|
+
async embedQuery(text) {
|
|
48
|
+
const [result] = await this.embedDocuments([text]);
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
async embedDocuments(texts) {
|
|
52
|
+
const estPerText = texts.map((t) => this.estimateTokens(t));
|
|
53
|
+
const subBatches = this.splitIntoSubBatches(texts, estPerText, this.rateLimit.maxBatchTokens);
|
|
54
|
+
if (subBatches.length > 1) {
|
|
55
|
+
const totalTokens = estPerText.reduce((a, b) => a + b, 0);
|
|
56
|
+
this.logger.log("embedder.batch_split", undefined, {
|
|
57
|
+
totalTokens,
|
|
58
|
+
subBatchCount: subBatches.length,
|
|
59
|
+
subBatchSizes: subBatches.map((sb) => sb.estTokens),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const results = new Array(texts.length);
|
|
63
|
+
for (const sb of subBatches) {
|
|
64
|
+
const vectors = await this.embedSubBatchWithRetry(sb.texts, sb.estTokens);
|
|
65
|
+
for (let i = 0; i < sb.indices.length; i++)
|
|
66
|
+
results[sb.indices[i]] = vectors[i];
|
|
67
|
+
}
|
|
68
|
+
return results;
|
|
69
|
+
}
|
|
70
|
+
async embedSubBatchWithRetry(subBatch, estTokens) {
|
|
71
|
+
let attempt = 0;
|
|
72
|
+
while (true) {
|
|
73
|
+
attempt++;
|
|
74
|
+
const consumeResult = await this.bucket.consume(estTokens, this.rateLimit.maxWaitMs);
|
|
75
|
+
if (!consumeResult.granted)
|
|
76
|
+
throw new EmbedderBucketStarvedError(estTokens, consumeResult.waitMs);
|
|
77
|
+
const t0 = Date.now();
|
|
78
|
+
try {
|
|
79
|
+
const result = await this.gatedEmbed(subBatch);
|
|
80
|
+
const lastCallMs = Date.now() - t0;
|
|
81
|
+
this.logger.debug("embedder.success", undefined, {
|
|
82
|
+
tokensConsumed: estTokens,
|
|
83
|
+
responseTimeMs: lastCallMs,
|
|
84
|
+
});
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
if (this.isTokenLimitError(e)) {
|
|
89
|
+
this.logger.warn("embedder.token_limit", undefined, {
|
|
90
|
+
textCount: subBatch.length,
|
|
91
|
+
fallbackPath: "caller",
|
|
92
|
+
});
|
|
93
|
+
throw e;
|
|
94
|
+
}
|
|
95
|
+
if (this.is429(e) && attempt < this.rateLimit.maxAttempts) {
|
|
96
|
+
const retryAfterMs = this.parseRetryAfter(e) ?? 60_000;
|
|
97
|
+
this.logger.warn("embedder.429", undefined, { retryAfterMs, batchTokens: estTokens, attempt });
|
|
98
|
+
await this.bucket.refund(estTokens);
|
|
99
|
+
await this.sleep(retryAfterMs);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (this.is429(e)) {
|
|
103
|
+
this.logger.error("embedder.429_exhausted", undefined, undefined, {
|
|
104
|
+
finalAttempt: attempt,
|
|
105
|
+
batchTokens: estTokens,
|
|
106
|
+
});
|
|
107
|
+
throw e;
|
|
108
|
+
}
|
|
109
|
+
throw e;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Acquire a concurrency slot for the duration of the actual provider call only; retry
|
|
114
|
+
// backoff (in the caller) happens outside the gate so a sleeping retry never holds a slot.
|
|
115
|
+
async gatedEmbed(texts) {
|
|
116
|
+
await this.embedGate.acquire();
|
|
117
|
+
try {
|
|
118
|
+
return await this.inner.embedDocuments(texts);
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
this.embedGate.release();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
estimateTokens(text) {
|
|
125
|
+
return Math.ceil(text.length / this.rateLimit.charsPerToken);
|
|
126
|
+
}
|
|
127
|
+
splitIntoSubBatches(texts, estPerText, cap) {
|
|
128
|
+
const subBatches = [];
|
|
129
|
+
let current = { texts: [], indices: [], estTokens: 0 };
|
|
130
|
+
for (let i = 0; i < texts.length; i++) {
|
|
131
|
+
const tokens = estPerText[i];
|
|
132
|
+
if (current.estTokens + tokens > cap && current.texts.length > 0) {
|
|
133
|
+
subBatches.push(current);
|
|
134
|
+
current = { texts: [], indices: [], estTokens: 0 };
|
|
135
|
+
}
|
|
136
|
+
current.texts.push(texts[i]);
|
|
137
|
+
current.indices.push(i);
|
|
138
|
+
current.estTokens += tokens;
|
|
139
|
+
}
|
|
140
|
+
if (current.texts.length > 0)
|
|
141
|
+
subBatches.push(current);
|
|
142
|
+
return subBatches;
|
|
143
|
+
}
|
|
144
|
+
is429(e) {
|
|
145
|
+
if (!e)
|
|
146
|
+
return false;
|
|
147
|
+
const status = e.status ?? e.statusCode;
|
|
148
|
+
if (status === 429)
|
|
149
|
+
return true;
|
|
150
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
151
|
+
return /rate.?limit/i.test(msg) && /tokens?\s*per\s*min/i.test(msg);
|
|
152
|
+
}
|
|
153
|
+
isTokenLimitError(e) {
|
|
154
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
155
|
+
return /maximum context length/i.test(msg) || /token\s*limit/i.test(msg);
|
|
156
|
+
}
|
|
157
|
+
parseRetryAfter(e) {
|
|
158
|
+
const headers = e.response?.headers;
|
|
159
|
+
if (headers) {
|
|
160
|
+
const ms = this.getHeader(headers, "retry-after-ms");
|
|
161
|
+
if (ms) {
|
|
162
|
+
const n = parseInt(ms, 10);
|
|
163
|
+
if (!isNaN(n))
|
|
164
|
+
return n;
|
|
165
|
+
}
|
|
166
|
+
const sec = this.getHeader(headers, "retry-after");
|
|
167
|
+
if (sec) {
|
|
168
|
+
const n = parseInt(sec, 10);
|
|
169
|
+
if (!isNaN(n))
|
|
170
|
+
return n * 1000;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
174
|
+
const m = msg.match(/(?:try again in|retry after)\s+(\d+)\s*(ms|seconds?|s)\b/i);
|
|
175
|
+
if (m) {
|
|
176
|
+
const n = parseInt(m[1], 10);
|
|
177
|
+
const unit = m[2].toLowerCase();
|
|
178
|
+
return unit.startsWith("ms") ? n : n * 1000;
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
getHeader(headers, key) {
|
|
183
|
+
if (headers instanceof Map)
|
|
184
|
+
return headers.get(key) ?? null;
|
|
185
|
+
if (typeof headers.get === "function")
|
|
186
|
+
return headers.get(key);
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
sleep(ms) {
|
|
190
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
exports.RateLimitedEmbedder = RateLimitedEmbedder;
|
|
194
|
+
//# sourceMappingURL=rate-limited-embedder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limited-embedder.js","sourceRoot":"","sources":["../../../../src/core/llm/services/rate-limited-embedder.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ export declare class VisionLLMService {
|
|
|
23
23
|
private readonly config;
|
|
24
24
|
private readonly MAX_RETRIES;
|
|
25
25
|
private readonly INITIAL_DELAY_MS;
|
|
26
|
+
private readonly CALL_TIMEOUT_MS;
|
|
26
27
|
constructor(modelService: ModelService, config: ConfigService<BaseConfigInterface>);
|
|
27
28
|
/**
|
|
28
29
|
* Checks if an error is a rate limit (429) error
|
|
@@ -32,6 +33,10 @@ export declare class VisionLLMService {
|
|
|
32
33
|
* Sleep for specified milliseconds
|
|
33
34
|
*/
|
|
34
35
|
private sleep;
|
|
36
|
+
/**
|
|
37
|
+
* Wrap a promise with a timeout
|
|
38
|
+
*/
|
|
39
|
+
private withTimeout;
|
|
35
40
|
/**
|
|
36
41
|
* Execute a function with exponential backoff retry on rate limit errors
|
|
37
42
|
*/
|
|
@@ -46,6 +51,17 @@ export declare class VisionLLMService {
|
|
|
46
51
|
* Gemini models require schema sanitization (removal of $schema, $defs, etc.)
|
|
47
52
|
*/
|
|
48
53
|
private isGeminiVisionModel;
|
|
54
|
+
/**
|
|
55
|
+
* Checks if the configured vision model is an Azure OpenAI model.
|
|
56
|
+
* Azure benefits from pre-converted JSON Schema to avoid Zod-to-OpenAI conversion issues.
|
|
57
|
+
*/
|
|
58
|
+
private isAzureVisionModel;
|
|
59
|
+
/**
|
|
60
|
+
* Checks if the configured vision model is a GPT-5 model.
|
|
61
|
+
* GPT-5 models use OpenAI's Responses API and reject legacy parameters
|
|
62
|
+
* like temperature != 1.
|
|
63
|
+
*/
|
|
64
|
+
private isGPT5VisionModel;
|
|
49
65
|
/**
|
|
50
66
|
* Fallback method to call the LLM without structured output.
|
|
51
67
|
* Used when structured output parsing fails.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vision.llm.service.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/services/vision.llm.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAqB,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIhE;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,UAAU,gBAAgB,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBACa,gBAAgB;
|
|
1
|
+
{"version":3,"file":"vision.llm.service.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/services/vision.llm.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAqB,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIhE;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,UAAU,gBAAgB,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBACa,gBAAgB;IAMzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IANzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAK;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;gBAGvB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAG7D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;YACW,SAAS;IAyBvB;;;OAGG;YACW,kBAAkB;IAahC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;;;;;;;OAQG;YACW,2BAA2B;IAgDzC;;;;;;;;;;;;;;;;;;;OAmBG;IACG,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG;QAAE,UAAU,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;CAyH3G"}
|
|
@@ -33,6 +33,7 @@ let VisionLLMService = class VisionLLMService {
|
|
|
33
33
|
this.config = config;
|
|
34
34
|
this.MAX_RETRIES = 5;
|
|
35
35
|
this.INITIAL_DELAY_MS = 1000;
|
|
36
|
+
this.CALL_TIMEOUT_MS = 120000; // 120 second timeout for vision calls
|
|
36
37
|
}
|
|
37
38
|
/**
|
|
38
39
|
* Checks if an error is a rate limit (429) error
|
|
@@ -53,6 +54,15 @@ let VisionLLMService = class VisionLLMService {
|
|
|
53
54
|
sleep(ms) {
|
|
54
55
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
55
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Wrap a promise with a timeout
|
|
59
|
+
*/
|
|
60
|
+
withTimeout(promise, ms, operation) {
|
|
61
|
+
return Promise.race([
|
|
62
|
+
promise,
|
|
63
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`${operation} timed out after ${ms}ms`)), ms)),
|
|
64
|
+
]);
|
|
65
|
+
}
|
|
56
66
|
/**
|
|
57
67
|
* Execute a function with exponential backoff retry on rate limit errors
|
|
58
68
|
*/
|
|
@@ -99,6 +109,24 @@ let VisionLLMService = class VisionLLMService {
|
|
|
99
109
|
const modelLower = visionConfig.model.toLowerCase();
|
|
100
110
|
return modelLower.startsWith("gemini") || modelLower.includes("/gemini");
|
|
101
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Checks if the configured vision model is an Azure OpenAI model.
|
|
114
|
+
* Azure benefits from pre-converted JSON Schema to avoid Zod-to-OpenAI conversion issues.
|
|
115
|
+
*/
|
|
116
|
+
isAzureVisionModel() {
|
|
117
|
+
const visionConfig = this.config.get("ai").vision;
|
|
118
|
+
return visionConfig.provider === "azure";
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Checks if the configured vision model is a GPT-5 model.
|
|
122
|
+
* GPT-5 models use OpenAI's Responses API and reject legacy parameters
|
|
123
|
+
* like temperature != 1.
|
|
124
|
+
*/
|
|
125
|
+
isGPT5VisionModel() {
|
|
126
|
+
const visionConfig = this.config.get("ai").vision;
|
|
127
|
+
const modelLower = visionConfig.model.toLowerCase();
|
|
128
|
+
return modelLower.includes("gpt-5");
|
|
129
|
+
}
|
|
102
130
|
/**
|
|
103
131
|
* Fallback method to call the LLM without structured output.
|
|
104
132
|
* Used when structured output parsing fails.
|
|
@@ -109,12 +137,14 @@ let VisionLLMService = class VisionLLMService {
|
|
|
109
137
|
* @returns Promise with parsed response and raw content
|
|
110
138
|
*/
|
|
111
139
|
async callWithoutStructuredOutput(params, message) {
|
|
140
|
+
const isGPT5 = this.isGPT5VisionModel();
|
|
141
|
+
const effectiveTemperature = isGPT5 ? 1 : (params.temperature ?? 0.1);
|
|
112
142
|
const baseModel = this.modelService.getVisionLLM({
|
|
113
|
-
temperature:
|
|
143
|
+
temperature: effectiveTemperature,
|
|
114
144
|
});
|
|
115
145
|
try {
|
|
116
146
|
// Call without structured output - the model will return raw text
|
|
117
|
-
const response = await baseModel.invoke([message]);
|
|
147
|
+
const response = await this.withTimeout(baseModel.invoke([message]), this.CALL_TIMEOUT_MS, "Vision LLM fallback call");
|
|
118
148
|
const rawContent = typeof response.content === "string" ? response.content : JSON.stringify(response.content);
|
|
119
149
|
// Extract JSON from response (handle markdown code blocks)
|
|
120
150
|
const jsonMatch = rawContent.match(/```json\n?([\s\S]*?)\n?```/) || rawContent.match(/\{[\s\S]*\}/);
|
|
@@ -171,16 +201,20 @@ let VisionLLMService = class VisionLLMService {
|
|
|
171
201
|
type: "image_url",
|
|
172
202
|
image_url: {
|
|
173
203
|
url: params.image,
|
|
204
|
+
detail: "high",
|
|
174
205
|
},
|
|
175
206
|
},
|
|
176
207
|
],
|
|
177
208
|
});
|
|
178
209
|
try {
|
|
210
|
+
const isGPT5 = this.isGPT5VisionModel();
|
|
211
|
+
const effectiveTemperature = isGPT5 ? 1 : (params.temperature ?? 0.1);
|
|
179
212
|
const baseModel = this.modelService.getVisionLLM({
|
|
180
|
-
temperature:
|
|
213
|
+
temperature: effectiveTemperature,
|
|
181
214
|
});
|
|
182
|
-
// Check if
|
|
215
|
+
// Check if provider needs schema conversion/sanitization
|
|
183
216
|
const needsGeminiSanitization = this.isGeminiVisionModel();
|
|
217
|
+
const isAzure = this.isAzureVisionModel();
|
|
184
218
|
let structuredLlm;
|
|
185
219
|
if (needsGeminiSanitization) {
|
|
186
220
|
const jsonSchema = (0, schema_utils_1.convertZodToJsonSchema)(params.outputSchema);
|
|
@@ -189,13 +223,20 @@ let VisionLLMService = class VisionLLMService {
|
|
|
189
223
|
includeRaw: true,
|
|
190
224
|
});
|
|
191
225
|
}
|
|
226
|
+
else if (isAzure || isGPT5) {
|
|
227
|
+
// Azure/GPT-5: use pre-converted JSON Schema to avoid Zod-to-OpenAI conversion issues
|
|
228
|
+
const jsonSchema = (0, schema_utils_1.convertZodToJsonSchema)(params.outputSchema);
|
|
229
|
+
structuredLlm = baseModel.withStructuredOutput(jsonSchema, {
|
|
230
|
+
includeRaw: true,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
192
233
|
else {
|
|
193
234
|
structuredLlm = baseModel.withStructuredOutput(params.outputSchema, {
|
|
194
235
|
includeRaw: true,
|
|
195
236
|
});
|
|
196
237
|
}
|
|
197
238
|
const response = await this.withRetry(async () => {
|
|
198
|
-
return (await structuredLlm.invoke([message]));
|
|
239
|
+
return (await this.withTimeout(structuredLlm.invoke([message]), this.CALL_TIMEOUT_MS, "Vision LLM call"));
|
|
199
240
|
});
|
|
200
241
|
// Handle null parsed response with fallback JSON parsing
|
|
201
242
|
if (!response.parsed) {
|