@carlonicora/nestjs-neo4jsonapi 1.30.0 → 1.31.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.
|
@@ -11,7 +11,21 @@ interface VisionCallParams<T> {
|
|
|
11
11
|
}
|
|
12
12
|
export declare class VisionLLMService {
|
|
13
13
|
private readonly modelService;
|
|
14
|
+
private readonly MAX_RETRIES;
|
|
15
|
+
private readonly INITIAL_DELAY_MS;
|
|
14
16
|
constructor(modelService: ModelService);
|
|
17
|
+
/**
|
|
18
|
+
* Checks if an error is a rate limit (429) error
|
|
19
|
+
*/
|
|
20
|
+
private isRateLimitError;
|
|
21
|
+
/**
|
|
22
|
+
* Sleep for specified milliseconds
|
|
23
|
+
*/
|
|
24
|
+
private sleep;
|
|
25
|
+
/**
|
|
26
|
+
* Execute a function with exponential backoff retry on rate limit errors
|
|
27
|
+
*/
|
|
28
|
+
private withRetry;
|
|
15
29
|
/**
|
|
16
30
|
* Fetches an image from a URL and converts it to a base64 data URL.
|
|
17
31
|
* Required because OpenRouter cannot access local/private URLs.
|
|
@@ -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,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAE9B;;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;AAgCD,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,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAE9B;;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;AAgCD,qBACa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,YAAY;IAHzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAK;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;gBAEZ,YAAY,EAAE,YAAY;IAEvD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;YACW,SAAS;IA6BvB;;;OAGG;YACW,kBAAkB;IAahC;;;;;;;;;;;;;;;;;;OAkBG;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;CA8C3G"}
|
|
@@ -22,6 +22,51 @@ function isValidRaw(raw) {
|
|
|
22
22
|
let VisionLLMService = class VisionLLMService {
|
|
23
23
|
constructor(modelService) {
|
|
24
24
|
this.modelService = modelService;
|
|
25
|
+
this.MAX_RETRIES = 5;
|
|
26
|
+
this.INITIAL_DELAY_MS = 1000;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Checks if an error is a rate limit (429) error
|
|
30
|
+
*/
|
|
31
|
+
isRateLimitError(error) {
|
|
32
|
+
if (error instanceof Error) {
|
|
33
|
+
const message = error.message.toLowerCase();
|
|
34
|
+
return (message.includes("429") ||
|
|
35
|
+
message.includes("rate limit") ||
|
|
36
|
+
message.includes("resource exhausted") ||
|
|
37
|
+
message.includes("too many requests"));
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Sleep for specified milliseconds
|
|
43
|
+
*/
|
|
44
|
+
sleep(ms) {
|
|
45
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Execute a function with exponential backoff retry on rate limit errors
|
|
49
|
+
*/
|
|
50
|
+
async withRetry(fn) {
|
|
51
|
+
let lastError;
|
|
52
|
+
for (let attempt = 0; attempt < this.MAX_RETRIES; attempt++) {
|
|
53
|
+
try {
|
|
54
|
+
return await fn();
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
58
|
+
if (!this.isRateLimitError(error) || attempt === this.MAX_RETRIES - 1) {
|
|
59
|
+
throw lastError;
|
|
60
|
+
}
|
|
61
|
+
// Exponential backoff with jitter: 1s, 2s, 4s, 8s, 16s + random 0-500ms
|
|
62
|
+
const baseDelay = this.INITIAL_DELAY_MS * Math.pow(2, attempt);
|
|
63
|
+
const jitter = Math.random() * 500;
|
|
64
|
+
const delay = baseDelay + jitter;
|
|
65
|
+
console.log(`[VisionLLMService] Rate limited (attempt ${attempt + 1}/${this.MAX_RETRIES}), retrying in ${Math.round(delay)}ms...`);
|
|
66
|
+
await this.sleep(delay);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
throw lastError ?? new Error("Max retries exceeded");
|
|
25
70
|
}
|
|
26
71
|
/**
|
|
27
72
|
* Fetches an image from a URL and converts it to a base64 data URL.
|
|
@@ -78,7 +123,9 @@ let VisionLLMService = class VisionLLMService {
|
|
|
78
123
|
},
|
|
79
124
|
],
|
|
80
125
|
});
|
|
81
|
-
const response =
|
|
126
|
+
const response = await this.withRetry(async () => {
|
|
127
|
+
return (await structuredLlm.invoke([message]));
|
|
128
|
+
});
|
|
82
129
|
// Extract token usage with type guard - same pattern as LLMService
|
|
83
130
|
const raw = isValidRaw(response.raw) ? response.raw : undefined;
|
|
84
131
|
const input = raw?.usage_metadata?.input_tokens ?? 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vision.llm.service.js","sourceRoot":"","sources":["../../../../src/core/llm/services/vision.llm.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAwD;AACxD,2CAA4C;AAC5C,oEAAgE;AA4BhE;;GAEG;AACH,SAAS,UAAU,CAAC,GAAY;IAC9B,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC;AACjD,CAAC;AAWM,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;
|
|
1
|
+
{"version":3,"file":"vision.llm.service.js","sourceRoot":"","sources":["../../../../src/core/llm/services/vision.llm.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED