@loonylabs/llm-middleware 2.21.0 → 2.23.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/README.md +4 -0
- package/dist/middleware/services/llm/llm.service.d.ts +9 -3
- package/dist/middleware/services/llm/llm.service.d.ts.map +1 -1
- package/dist/middleware/services/llm/llm.service.js +2 -2
- package/dist/middleware/services/llm/llm.service.js.map +1 -1
- package/dist/middleware/services/llm/providers/anthropic-provider.d.ts +2 -1
- package/dist/middleware/services/llm/providers/anthropic-provider.d.ts.map +1 -1
- package/dist/middleware/services/llm/providers/anthropic-provider.js +23 -5
- package/dist/middleware/services/llm/providers/anthropic-provider.js.map +1 -1
- package/dist/middleware/services/llm/providers/base-llm-provider.d.ts +3 -2
- package/dist/middleware/services/llm/providers/base-llm-provider.d.ts.map +1 -1
- package/dist/middleware/services/llm/providers/base-llm-provider.js.map +1 -1
- package/dist/middleware/services/llm/providers/gemini/gemini-base.provider.d.ts +6 -2
- package/dist/middleware/services/llm/providers/gemini/gemini-base.provider.d.ts.map +1 -1
- package/dist/middleware/services/llm/providers/gemini/gemini-base.provider.js +35 -17
- package/dist/middleware/services/llm/providers/gemini/gemini-base.provider.js.map +1 -1
- package/dist/middleware/services/llm/providers/gemini/index.d.ts +1 -1
- package/dist/middleware/services/llm/providers/gemini/index.d.ts.map +1 -1
- package/dist/middleware/services/llm/providers/gemini/index.js.map +1 -1
- package/dist/middleware/services/llm/providers/gemini/vertex-ai.provider.d.ts +23 -1
- package/dist/middleware/services/llm/providers/gemini/vertex-ai.provider.d.ts.map +1 -1
- package/dist/middleware/services/llm/providers/gemini/vertex-ai.provider.js +98 -2
- package/dist/middleware/services/llm/providers/gemini/vertex-ai.provider.js.map +1 -1
- package/dist/middleware/services/llm/providers/ollama-provider.d.ts +4 -3
- package/dist/middleware/services/llm/providers/ollama-provider.d.ts.map +1 -1
- package/dist/middleware/services/llm/providers/ollama-provider.js +8 -4
- package/dist/middleware/services/llm/providers/ollama-provider.js.map +1 -1
- package/dist/middleware/services/llm/providers/requesty-provider.d.ts +2 -1
- package/dist/middleware/services/llm/providers/requesty-provider.d.ts.map +1 -1
- package/dist/middleware/services/llm/providers/requesty-provider.js +23 -5
- package/dist/middleware/services/llm/providers/requesty-provider.js.map +1 -1
- package/dist/middleware/services/llm/types/anthropic.types.d.ts +21 -2
- package/dist/middleware/services/llm/types/anthropic.types.d.ts.map +1 -1
- package/dist/middleware/services/llm/types/common.types.d.ts +2 -0
- package/dist/middleware/services/llm/types/common.types.d.ts.map +1 -1
- package/dist/middleware/services/llm/types/common.types.js.map +1 -1
- package/dist/middleware/services/llm/types/gemini.types.d.ts +9 -1
- package/dist/middleware/services/llm/types/gemini.types.d.ts.map +1 -1
- package/dist/middleware/services/llm/types/index.d.ts +1 -0
- package/dist/middleware/services/llm/types/index.d.ts.map +1 -1
- package/dist/middleware/services/llm/types/index.js +2 -0
- package/dist/middleware/services/llm/types/index.js.map +1 -1
- package/dist/middleware/services/llm/types/multimodal.types.d.ts +47 -0
- package/dist/middleware/services/llm/types/multimodal.types.d.ts.map +1 -0
- package/dist/middleware/services/llm/types/multimodal.types.js +14 -0
- package/dist/middleware/services/llm/types/multimodal.types.js.map +1 -0
- package/dist/middleware/services/llm/types/requesty.types.d.ts +14 -1
- package/dist/middleware/services/llm/types/requesty.types.d.ts.map +1 -1
- package/dist/middleware/services/llm/types/vertex-ai.types.d.ts +22 -0
- package/dist/middleware/services/llm/types/vertex-ai.types.d.ts.map +1 -1
- package/dist/middleware/services/llm/utils/index.d.ts +1 -0
- package/dist/middleware/services/llm/utils/index.d.ts.map +1 -1
- package/dist/middleware/services/llm/utils/index.js +1 -0
- package/dist/middleware/services/llm/utils/index.js.map +1 -1
- package/dist/middleware/services/llm/utils/multimodal.utils.d.ts +56 -0
- package/dist/middleware/services/llm/utils/multimodal.utils.d.ts.map +1 -0
- package/dist/middleware/services/llm/utils/multimodal.utils.js +119 -0
- package/dist/middleware/services/llm/utils/multimodal.utils.js.map +1 -0
- package/dist/middleware/services/llm/utils/retry.utils.d.ts +7 -1
- package/dist/middleware/services/llm/utils/retry.utils.d.ts.map +1 -1
- package/dist/middleware/services/llm/utils/retry.utils.js +6 -1
- package/dist/middleware/services/llm/utils/retry.utils.js.map +1 -1
- package/dist/middleware/usecases/base/base-ai.usecase.d.ts +15 -0
- package/dist/middleware/usecases/base/base-ai.usecase.d.ts.map +1 -1
- package/dist/middleware/usecases/base/base-ai.usecase.js +36 -9
- package/dist/middleware/usecases/base/base-ai.usecase.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multimodal content types for vision/image input support.
|
|
3
|
+
* Enables sending images alongside text to LLM providers.
|
|
4
|
+
*
|
|
5
|
+
* Design decisions:
|
|
6
|
+
* - Base64 only (no URLs) — Gemini doesn't support direct URLs, base64 is universal
|
|
7
|
+
* - type: 'image' (not 'image_url') — follows Vercel AI SDK / Anthropic convention
|
|
8
|
+
* - Explicit mimeType — required by Gemini and Anthropic, safer than inference
|
|
9
|
+
*
|
|
10
|
+
* @since 2.22.0
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Text content part for multimodal messages.
|
|
14
|
+
*/
|
|
15
|
+
export interface TextContentPart {
|
|
16
|
+
type: 'text';
|
|
17
|
+
text: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Image content part for multimodal messages.
|
|
21
|
+
* Uses base64-encoded image data (without data-URI prefix).
|
|
22
|
+
*/
|
|
23
|
+
export interface ImageContentPart {
|
|
24
|
+
type: 'image';
|
|
25
|
+
/** Base64-encoded image data (without data: URI prefix) */
|
|
26
|
+
data: string;
|
|
27
|
+
/** MIME type of the image */
|
|
28
|
+
mimeType: 'image/jpeg' | 'image/png' | 'image/webp' | 'image/gif';
|
|
29
|
+
/**
|
|
30
|
+
* Optional resolution/detail hint.
|
|
31
|
+
* - OpenAI: maps to `detail` parameter (low/high/auto)
|
|
32
|
+
* - Gemini: could map to media_resolution (not currently used)
|
|
33
|
+
* - Anthropic: ignored (no equivalent)
|
|
34
|
+
*/
|
|
35
|
+
detail?: 'low' | 'high' | 'auto';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Union type for all content part types.
|
|
39
|
+
* Extensible for future content types (audio, video, etc.).
|
|
40
|
+
*/
|
|
41
|
+
export type ContentPart = TextContentPart | ImageContentPart;
|
|
42
|
+
/**
|
|
43
|
+
* Multimodal content: either a plain string (backward-compatible) or an array of content parts.
|
|
44
|
+
* When a string is provided, it is internally normalized to [{ type: 'text', text: string }].
|
|
45
|
+
*/
|
|
46
|
+
export type MultimodalContent = string | ContentPart[];
|
|
47
|
+
//# sourceMappingURL=multimodal.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multimodal.types.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/multimodal.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,QAAQ,EAAE,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC;IAClE;;;;;OAKG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAE7D;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Multimodal content types for vision/image input support.
|
|
4
|
+
* Enables sending images alongside text to LLM providers.
|
|
5
|
+
*
|
|
6
|
+
* Design decisions:
|
|
7
|
+
* - Base64 only (no URLs) — Gemini doesn't support direct URLs, base64 is universal
|
|
8
|
+
* - type: 'image' (not 'image_url') — follows Vercel AI SDK / Anthropic convention
|
|
9
|
+
* - Explicit mimeType — required by Gemini and Anthropic, safer than inference
|
|
10
|
+
*
|
|
11
|
+
* @since 2.22.0
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
//# sourceMappingURL=multimodal.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multimodal.types.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/multimodal.types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG"}
|
|
@@ -16,6 +16,19 @@ export interface RequestyRequestOptions extends CommonLLMOptions {
|
|
|
16
16
|
* extended values ('min', 'max', 'none').
|
|
17
17
|
*/
|
|
18
18
|
export type RequestyReasoningEffort = 'none' | 'min' | 'low' | 'medium' | 'high' | 'max';
|
|
19
|
+
/**
|
|
20
|
+
* OpenAI-compatible content part for multimodal messages
|
|
21
|
+
*/
|
|
22
|
+
export type RequestyContentPart = {
|
|
23
|
+
type: 'text';
|
|
24
|
+
text: string;
|
|
25
|
+
} | {
|
|
26
|
+
type: 'image_url';
|
|
27
|
+
image_url: {
|
|
28
|
+
url: string;
|
|
29
|
+
detail?: 'low' | 'high' | 'auto';
|
|
30
|
+
};
|
|
31
|
+
};
|
|
19
32
|
/**
|
|
20
33
|
* OpenAI-compatible request format for Requesty API
|
|
21
34
|
*/
|
|
@@ -23,7 +36,7 @@ export interface RequestyAPIRequest {
|
|
|
23
36
|
model: string;
|
|
24
37
|
messages: Array<{
|
|
25
38
|
role: 'system' | 'user' | 'assistant';
|
|
26
|
-
content: string;
|
|
39
|
+
content: string | RequestyContentPart[];
|
|
27
40
|
}>;
|
|
28
41
|
temperature?: number;
|
|
29
42
|
max_tokens?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requesty.types.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/requesty.types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAmB,MAAM,gBAAgB,CAAC;AAEtF;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;QACtC,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"requesty.types.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/requesty.types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAmB,MAAM,gBAAgB,CAAC;AAEtF;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;QACtC,OAAO,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAAC;KACzC,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE;YACP,IAAI,EAAE,WAAW,CAAC;YAClB,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,aAAa,EAAE,MAAM,GAAG,QAAQ,GAAG,gBAAgB,GAAG,IAAI,CAAC;KAC5D,CAAC,CAAC;IACH,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -36,6 +36,28 @@ export interface VertexAIRequestOptions extends GeminiRequestOptions {
|
|
|
36
36
|
/**
|
|
37
37
|
* Service account JSON structure (partial, key fields only).
|
|
38
38
|
*/
|
|
39
|
+
/**
|
|
40
|
+
* Configuration for region rotation on quota errors (429 / Resource Exhausted).
|
|
41
|
+
*
|
|
42
|
+
* When Vertex AI returns a quota error, the middleware rotates through the
|
|
43
|
+
* configured regions instead of retrying the same region. This is useful
|
|
44
|
+
* when Dynamic Shared Quota is temporarily exhausted in a single region.
|
|
45
|
+
*
|
|
46
|
+
* The total retry budget (from RetryConfig.maxRetries) is shared across
|
|
47
|
+
* all regions — region rotation does NOT multiply the retry count.
|
|
48
|
+
*/
|
|
49
|
+
export interface RegionRotationConfig {
|
|
50
|
+
/** Ordered list of regions to try. First entry = primary region. */
|
|
51
|
+
regions: VertexAIRegion[];
|
|
52
|
+
/** Last-resort region after all regions exhausted (typically 'global'). */
|
|
53
|
+
fallback: VertexAIRegion;
|
|
54
|
+
/**
|
|
55
|
+
* If true: when maxRetries is exhausted before reaching the fallback,
|
|
56
|
+
* one final bonus attempt on the fallback region is made.
|
|
57
|
+
* @default true
|
|
58
|
+
*/
|
|
59
|
+
alwaysTryFallback?: boolean;
|
|
60
|
+
}
|
|
39
61
|
export interface ServiceAccountCredentials {
|
|
40
62
|
type: 'service_account';
|
|
41
63
|
project_id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertex-ai.types.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/vertex-ai.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAEtB,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,eAAe,GACf,iBAAiB,GACjB,mBAAmB,GAEnB,aAAa,GACb,UAAU,GAEV,QAAQ,CAAC;AAEb;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,oBAAoB;IAClE,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B,EAAE,MAAM,CAAC;IACpC,oBAAoB,EAAE,MAAM,CAAC;CAC9B"}
|
|
1
|
+
{"version":3,"file":"vertex-ai.types.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/vertex-ai.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAEtB,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,eAAe,GACf,iBAAiB,GACjB,mBAAmB,GAEnB,aAAa,GACb,UAAU,GAEV,QAAQ,CAAC;AAEb;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,oBAAoB;IAClE,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH;;;;;;;;;GASG;AACH,MAAM,WAAW,oBAAoB;IACnC,oEAAoE;IACpE,OAAO,EAAE,cAAc,EAAE,CAAC;IAE1B,2EAA2E;IAC3E,QAAQ,EAAE,cAAc,CAAC;IAEzB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B,EAAE,MAAM,CAAC;IACpC,oBAAoB,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
|
|
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./debug-llm.utils"), exports);
|
|
18
18
|
__exportStar(require("./text-analysis.utils"), exports);
|
|
19
19
|
__exportStar(require("./retry.utils"), exports);
|
|
20
|
+
__exportStar(require("./multimodal.utils"), exports);
|
|
20
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,wDAAsC;AACtC,gDAA8B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,wDAAsC;AACtC,gDAA8B;AAC9B,qDAAmC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for multimodal content handling.
|
|
3
|
+
* Provides normalization, debug formatting, and inspection helpers.
|
|
4
|
+
*
|
|
5
|
+
* @since 2.22.0
|
|
6
|
+
*/
|
|
7
|
+
import { MultimodalContent, ContentPart } from '../types/multimodal.types';
|
|
8
|
+
/**
|
|
9
|
+
* Normalizes MultimodalContent to ContentPart[].
|
|
10
|
+
* Converts a plain string to a single TextContentPart array.
|
|
11
|
+
*
|
|
12
|
+
* @param content - String or ContentPart array
|
|
13
|
+
* @returns Normalized ContentPart array
|
|
14
|
+
*/
|
|
15
|
+
export declare function normalizeContent(content: MultimodalContent): ContentPart[];
|
|
16
|
+
/**
|
|
17
|
+
* Extracts the combined text content from MultimodalContent.
|
|
18
|
+
* Only includes text parts, ignores images.
|
|
19
|
+
*
|
|
20
|
+
* @param content - String or ContentPart array
|
|
21
|
+
* @returns Combined text from all text parts
|
|
22
|
+
*/
|
|
23
|
+
export declare function extractTextContent(content: MultimodalContent): string;
|
|
24
|
+
/**
|
|
25
|
+
* Creates a debug-safe string representation of MultimodalContent.
|
|
26
|
+
* Images are replaced with placeholder strings showing type and size.
|
|
27
|
+
* This prevents base64 blobs from appearing in logs.
|
|
28
|
+
*
|
|
29
|
+
* @param content - String or ContentPart array
|
|
30
|
+
* @returns Debug-safe string representation
|
|
31
|
+
*/
|
|
32
|
+
export declare function contentToDebugString(content: MultimodalContent): string;
|
|
33
|
+
/**
|
|
34
|
+
* Returns the effective "length" of MultimodalContent for metrics/logging.
|
|
35
|
+
* For strings, returns string length. For content parts, returns
|
|
36
|
+
* the debug string length (images counted as placeholder length).
|
|
37
|
+
*
|
|
38
|
+
* @param content - String or ContentPart array
|
|
39
|
+
* @returns Character length suitable for metrics
|
|
40
|
+
*/
|
|
41
|
+
export declare function contentLength(content: MultimodalContent): number;
|
|
42
|
+
/**
|
|
43
|
+
* Checks whether MultimodalContent contains any image parts.
|
|
44
|
+
*
|
|
45
|
+
* @param content - String or ContentPart array
|
|
46
|
+
* @returns true if content contains at least one image part
|
|
47
|
+
*/
|
|
48
|
+
export declare function hasImages(content: MultimodalContent): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Counts the number of image parts in MultimodalContent.
|
|
51
|
+
*
|
|
52
|
+
* @param content - String or ContentPart array
|
|
53
|
+
* @returns Number of image parts
|
|
54
|
+
*/
|
|
55
|
+
export declare function countImages(content: MultimodalContent): number;
|
|
56
|
+
//# sourceMappingURL=multimodal.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multimodal.utils.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/multimodal.utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAE7F;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,EAAE,CAK1E;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAQrE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAgBvE;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAKhE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAK7D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAK9D"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utility functions for multimodal content handling.
|
|
4
|
+
* Provides normalization, debug formatting, and inspection helpers.
|
|
5
|
+
*
|
|
6
|
+
* @since 2.22.0
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.normalizeContent = normalizeContent;
|
|
10
|
+
exports.extractTextContent = extractTextContent;
|
|
11
|
+
exports.contentToDebugString = contentToDebugString;
|
|
12
|
+
exports.contentLength = contentLength;
|
|
13
|
+
exports.hasImages = hasImages;
|
|
14
|
+
exports.countImages = countImages;
|
|
15
|
+
/**
|
|
16
|
+
* Normalizes MultimodalContent to ContentPart[].
|
|
17
|
+
* Converts a plain string to a single TextContentPart array.
|
|
18
|
+
*
|
|
19
|
+
* @param content - String or ContentPart array
|
|
20
|
+
* @returns Normalized ContentPart array
|
|
21
|
+
*/
|
|
22
|
+
function normalizeContent(content) {
|
|
23
|
+
if (typeof content === 'string') {
|
|
24
|
+
return [{ type: 'text', text: content }];
|
|
25
|
+
}
|
|
26
|
+
return content;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Extracts the combined text content from MultimodalContent.
|
|
30
|
+
* Only includes text parts, ignores images.
|
|
31
|
+
*
|
|
32
|
+
* @param content - String or ContentPart array
|
|
33
|
+
* @returns Combined text from all text parts
|
|
34
|
+
*/
|
|
35
|
+
function extractTextContent(content) {
|
|
36
|
+
if (typeof content === 'string') {
|
|
37
|
+
return content;
|
|
38
|
+
}
|
|
39
|
+
return content
|
|
40
|
+
.filter((part) => part.type === 'text')
|
|
41
|
+
.map(part => part.text)
|
|
42
|
+
.join('\n');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Creates a debug-safe string representation of MultimodalContent.
|
|
46
|
+
* Images are replaced with placeholder strings showing type and size.
|
|
47
|
+
* This prevents base64 blobs from appearing in logs.
|
|
48
|
+
*
|
|
49
|
+
* @param content - String or ContentPart array
|
|
50
|
+
* @returns Debug-safe string representation
|
|
51
|
+
*/
|
|
52
|
+
function contentToDebugString(content) {
|
|
53
|
+
if (typeof content === 'string') {
|
|
54
|
+
return content;
|
|
55
|
+
}
|
|
56
|
+
return content
|
|
57
|
+
.map(part => {
|
|
58
|
+
if (part.type === 'text') {
|
|
59
|
+
return part.text;
|
|
60
|
+
}
|
|
61
|
+
// Calculate approximate size of base64 data
|
|
62
|
+
const sizeBytes = Math.ceil(part.data.length * 3 / 4);
|
|
63
|
+
const sizeStr = formatByteSize(sizeBytes);
|
|
64
|
+
return `[IMAGE: ${part.mimeType}, ${sizeStr}]`;
|
|
65
|
+
})
|
|
66
|
+
.join('\n');
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Returns the effective "length" of MultimodalContent for metrics/logging.
|
|
70
|
+
* For strings, returns string length. For content parts, returns
|
|
71
|
+
* the debug string length (images counted as placeholder length).
|
|
72
|
+
*
|
|
73
|
+
* @param content - String or ContentPart array
|
|
74
|
+
* @returns Character length suitable for metrics
|
|
75
|
+
*/
|
|
76
|
+
function contentLength(content) {
|
|
77
|
+
if (typeof content === 'string') {
|
|
78
|
+
return content.length;
|
|
79
|
+
}
|
|
80
|
+
return contentToDebugString(content).length;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Checks whether MultimodalContent contains any image parts.
|
|
84
|
+
*
|
|
85
|
+
* @param content - String or ContentPart array
|
|
86
|
+
* @returns true if content contains at least one image part
|
|
87
|
+
*/
|
|
88
|
+
function hasImages(content) {
|
|
89
|
+
if (typeof content === 'string') {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
return content.some(part => part.type === 'image');
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Counts the number of image parts in MultimodalContent.
|
|
96
|
+
*
|
|
97
|
+
* @param content - String or ContentPart array
|
|
98
|
+
* @returns Number of image parts
|
|
99
|
+
*/
|
|
100
|
+
function countImages(content) {
|
|
101
|
+
if (typeof content === 'string') {
|
|
102
|
+
return 0;
|
|
103
|
+
}
|
|
104
|
+
return content.filter(part => part.type === 'image').length;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Formats a byte size into a human-readable string.
|
|
108
|
+
* @internal
|
|
109
|
+
*/
|
|
110
|
+
function formatByteSize(bytes) {
|
|
111
|
+
if (bytes < 1024) {
|
|
112
|
+
return `${bytes}B`;
|
|
113
|
+
}
|
|
114
|
+
if (bytes < 1024 * 1024) {
|
|
115
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
116
|
+
}
|
|
117
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=multimodal.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multimodal.utils.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/multimodal.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,12 +41,18 @@ export declare function isRetryableError(error: any): boolean;
|
|
|
41
41
|
* Calculates the delay for a given retry attempt with optional jitter.
|
|
42
42
|
*/
|
|
43
43
|
export declare function calculateDelay(attempt: number, config: Required<RetryConfig>): number;
|
|
44
|
+
/** Options for retryWithBackoff beyond the retry config. */
|
|
45
|
+
export interface RetryHooks {
|
|
46
|
+
/** Called before each retry. Use to adjust state (e.g., rotate regions on quota errors). */
|
|
47
|
+
onRetry?: (error: any, attempt: number) => void;
|
|
48
|
+
}
|
|
44
49
|
/**
|
|
45
50
|
* Executes an async function with exponential backoff retry on transient errors.
|
|
46
51
|
*
|
|
47
52
|
* @param fn - The async function to execute (typically an axios call)
|
|
48
53
|
* @param context - Logging context (e.g. provider class name)
|
|
49
54
|
* @param config - Retry configuration (merged with defaults)
|
|
55
|
+
* @param hooks - Optional hooks (e.g., onRetry for region rotation)
|
|
50
56
|
* @returns The result of fn()
|
|
51
57
|
* @throws The last error if all retries are exhausted
|
|
52
58
|
*
|
|
@@ -59,5 +65,5 @@ export declare function calculateDelay(attempt: number, config: Required<RetryCo
|
|
|
59
65
|
* );
|
|
60
66
|
* ```
|
|
61
67
|
*/
|
|
62
|
-
export declare function retryWithBackoff<T>(fn: () => Promise<T>, context: string, config?: RetryConfig): Promise<T>;
|
|
68
|
+
export declare function retryWithBackoff<T>(fn: () => Promise<T>, context: string, config?: RetryConfig, hooks?: RetryHooks): Promise<T>;
|
|
63
69
|
//# sourceMappingURL=retry.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.utils.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/retry.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qEAAqE;AACrE,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAOtD,CAAC;AAgBF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAoBpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,MAAM,CAUR;AA+CD
|
|
1
|
+
{"version":3,"file":"retry.utils.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/retry.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qEAAqE;AACrE,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAOtD,CAAC;AAgBF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAoBpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,MAAM,CAUR;AA+CD,4DAA4D;AAC5D,MAAM,WAAW,UAAU;IACzB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,EACpB,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,CAAC,CAAC,CAwDZ"}
|
|
@@ -124,6 +124,7 @@ function sleep(ms) {
|
|
|
124
124
|
* @param fn - The async function to execute (typically an axios call)
|
|
125
125
|
* @param context - Logging context (e.g. provider class name)
|
|
126
126
|
* @param config - Retry configuration (merged with defaults)
|
|
127
|
+
* @param hooks - Optional hooks (e.g., onRetry for region rotation)
|
|
127
128
|
* @returns The result of fn()
|
|
128
129
|
* @throws The last error if all retries are exhausted
|
|
129
130
|
*
|
|
@@ -136,7 +137,7 @@ function sleep(ms) {
|
|
|
136
137
|
* );
|
|
137
138
|
* ```
|
|
138
139
|
*/
|
|
139
|
-
async function retryWithBackoff(fn, context, config) {
|
|
140
|
+
async function retryWithBackoff(fn, context, config, hooks) {
|
|
140
141
|
const resolvedConfig = {
|
|
141
142
|
...exports.DEFAULT_RETRY_CONFIG,
|
|
142
143
|
...config,
|
|
@@ -155,6 +156,10 @@ async function retryWithBackoff(fn, context, config) {
|
|
|
155
156
|
if (!isRetryableError(error) || attempt === resolvedConfig.maxRetries) {
|
|
156
157
|
throw error;
|
|
157
158
|
}
|
|
159
|
+
// Notify consumer before retry (e.g., for region rotation on quota errors)
|
|
160
|
+
if (hooks?.onRetry) {
|
|
161
|
+
hooks.onRetry(error, attempt + 1);
|
|
162
|
+
}
|
|
158
163
|
const errorInfo = getErrorInfo(error);
|
|
159
164
|
let delayMs = calculateDelay(attempt, resolvedConfig);
|
|
160
165
|
// Respect Retry-After header if present (use the larger value)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.utils.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/retry.utils.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AA+CH,4CAoBC;AAKD,wCAaC;
|
|
1
|
+
{"version":3,"file":"retry.utils.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/retry.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { ModelConfigKey, ValidatedLLMModelConfig } from '../../shared/config/mod
|
|
|
3
3
|
import { ResponseProcessingOptions } from '../../services/response-processor/types';
|
|
4
4
|
import { BaseAIRequest, BaseAIResult } from '../../shared/types/base-request.types';
|
|
5
5
|
import { ModelParameterOverrides } from '../../services/model-parameter-manager/model-parameter-manager.service';
|
|
6
|
+
import { MultimodalContent } from '../../services/llm/types/multimodal.types';
|
|
6
7
|
/**
|
|
7
8
|
* Base abstract class for all AI use cases
|
|
8
9
|
* Provides common functionality and enforces configuration for each use case
|
|
@@ -86,6 +87,20 @@ export declare abstract class BaseAIUseCase<TPrompt = string, TRequest extends B
|
|
|
86
87
|
* This enforces the message pattern: each use case should have a corresponding message file
|
|
87
88
|
*/
|
|
88
89
|
protected abstract getUserTemplate(): (formattedPrompt: string) => string;
|
|
90
|
+
/**
|
|
91
|
+
* Optional override for multimodal content.
|
|
92
|
+
* When this method returns non-null, the result is sent directly to the provider,
|
|
93
|
+
* bypassing the text-only path (formatUserMessage + getUserTemplate).
|
|
94
|
+
*
|
|
95
|
+
* Override in child classes that need to send images alongside text.
|
|
96
|
+
*
|
|
97
|
+
* @param prompt - The raw prompt data
|
|
98
|
+
* @param request - The full request object
|
|
99
|
+
* @returns MultimodalContent or null (default: null = text-only path)
|
|
100
|
+
*
|
|
101
|
+
* @since 2.22.0
|
|
102
|
+
*/
|
|
103
|
+
protected formatMultimodalContent(prompt: TPrompt, request: TRequest): MultimodalContent | null;
|
|
89
104
|
/**
|
|
90
105
|
* Override model parameters for this specific use case
|
|
91
106
|
* Override this method in child classes to customize parameters
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-ai.usecase.d.ts","sourceRoot":"","sources":["../../../../src/middleware/usecases/base/base-ai.usecase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAkB,cAAc,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAE5G,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAEpF,OAAO,EAAgC,uBAAuB,EAAE,MAAM,wEAAwE,CAAC;
|
|
1
|
+
{"version":3,"file":"base-ai.usecase.d.ts","sourceRoot":"","sources":["../../../../src/middleware/usecases/base/base-ai.usecase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAkB,cAAc,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAE5G,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAEpF,OAAO,EAAgC,uBAAuB,EAAE,MAAM,wEAAwE,CAAC;AAE/I,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAG9E;;;;;;GAMG;AACH,8BAAsB,aAAa,CACjC,OAAO,GAAG,MAAM,EAChB,QAAQ,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,EAChE,OAAO,SAAS,YAAY,GAAG,YAAY;IAE3C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAElD;;;OAGG;IACH,OAAO,CAAC,eAAe,CAAC,CAAW;IAEnC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM;IAItD;;;OAGG;IACH,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,EAAE,cAAc,CAAY;IAE9E;;;OAGG;IACH,SAAS,KAAK,cAAc,IAAI,cAAc,CAE7C;IAED;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,sBAAsB,CAAC,GAAG,EAAE,cAAc,GAAG,uBAAuB;IAI9E;;;OAGG;IACH,SAAS,KAAK,WAAW,IAAI,uBAAuB,CAEnD;IAED;;;OAGG;IACH,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM;IAShD;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM;IAEzE;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAG,iBAAiB,GAAG,IAAI;IAI/F;;;;OAIG;IACH,SAAS,CAAC,qBAAqB,IAAI,uBAAuB;IAI1D;;;;OAIG;IACH,SAAS,CAAC,WAAW,IAAI,WAAW;IAIpC;;;;OAIG;IACU,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IA0KzD;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,SAAS,CAAC,4BAA4B,IAAI,yBAAyB;IAKnE;;;;;OAKG;cACa,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAKrG;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO;CACX"}
|
|
@@ -6,6 +6,7 @@ const models_config_1 = require("../../shared/config/models.config");
|
|
|
6
6
|
const response_processor_service_1 = require("../../services/response-processor.service");
|
|
7
7
|
const model_parameter_manager_service_1 = require("../../services/model-parameter-manager/model-parameter-manager.service");
|
|
8
8
|
const use_case_metrics_logger_1 = require("../../services/use-case-metrics-logger");
|
|
9
|
+
const multimodal_utils_1 = require("../../services/llm/utils/multimodal.utils");
|
|
9
10
|
/**
|
|
10
11
|
* Base abstract class for all AI use cases
|
|
11
12
|
* Provides common functionality and enforces configuration for each use case
|
|
@@ -82,6 +83,22 @@ class BaseAIUseCase {
|
|
|
82
83
|
// Basic JSON formatting for complex prompts
|
|
83
84
|
return JSON.stringify(prompt, null, 2);
|
|
84
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Optional override for multimodal content.
|
|
88
|
+
* When this method returns non-null, the result is sent directly to the provider,
|
|
89
|
+
* bypassing the text-only path (formatUserMessage + getUserTemplate).
|
|
90
|
+
*
|
|
91
|
+
* Override in child classes that need to send images alongside text.
|
|
92
|
+
*
|
|
93
|
+
* @param prompt - The raw prompt data
|
|
94
|
+
* @param request - The full request object
|
|
95
|
+
* @returns MultimodalContent or null (default: null = text-only path)
|
|
96
|
+
*
|
|
97
|
+
* @since 2.22.0
|
|
98
|
+
*/
|
|
99
|
+
formatMultimodalContent(prompt, request) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
85
102
|
/**
|
|
86
103
|
* Override model parameters for this specific use case
|
|
87
104
|
* Override this method in child classes to customize parameters
|
|
@@ -111,11 +128,19 @@ class BaseAIUseCase {
|
|
|
111
128
|
this._currentRequest = request;
|
|
112
129
|
// Get effective system message (may be dynamic based on request)
|
|
113
130
|
const effectiveSystemMessage = this.getSystemMessage(request);
|
|
114
|
-
//
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
131
|
+
// Check for multimodal content (opt-in by child classes)
|
|
132
|
+
const multimodalContent = this.formatMultimodalContent(request.prompt, request);
|
|
133
|
+
let formattedUserMessage;
|
|
134
|
+
if (multimodalContent !== null) {
|
|
135
|
+
// Multimodal path: use content directly (bypasses text template)
|
|
136
|
+
formattedUserMessage = multimodalContent;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
// Standard text-only path (unchanged)
|
|
140
|
+
const formattedPrompt = this.formatUserMessage(request.prompt);
|
|
141
|
+
const userTemplate = this.getUserTemplate();
|
|
142
|
+
formattedUserMessage = userTemplate(formattedPrompt);
|
|
143
|
+
}
|
|
119
144
|
const startTime = Date.now();
|
|
120
145
|
let success = false;
|
|
121
146
|
let errorMessage = '';
|
|
@@ -134,7 +159,9 @@ class BaseAIUseCase {
|
|
|
134
159
|
const effectiveTemperature = request.temperature ?? validatedParams.temperature;
|
|
135
160
|
const effectiveReasoningEffort = request.reasoningEffort;
|
|
136
161
|
// Log the start of execution with metrics
|
|
137
|
-
|
|
162
|
+
const messageLength = (0, multimodal_utils_1.contentLength)(formattedUserMessage);
|
|
163
|
+
const messageDebugString = (0, multimodal_utils_1.contentToDebugString)(formattedUserMessage);
|
|
164
|
+
use_case_metrics_logger_1.UseCaseMetricsLoggerService.logStart(this.constructor.name, this.modelConfig.name, messageLength, effectiveTemperature, definedParams);
|
|
138
165
|
try {
|
|
139
166
|
// Get the provider for this use case
|
|
140
167
|
const provider = this.getProvider();
|
|
@@ -177,12 +204,12 @@ class BaseAIUseCase {
|
|
|
177
204
|
};
|
|
178
205
|
}
|
|
179
206
|
// Calculate and log metrics
|
|
180
|
-
const metrics = use_case_metrics_logger_1.UseCaseMetricsLoggerService.calculateMetrics(startTime, effectiveSystemMessage,
|
|
207
|
+
const metrics = use_case_metrics_logger_1.UseCaseMetricsLoggerService.calculateMetrics(startTime, effectiveSystemMessage, messageDebugString, result.message.content, thinking, this.modelConfig.name, success, errorMessage, definedParams, actualTokens // Pass actual tokens from provider
|
|
181
208
|
);
|
|
182
209
|
// Log completion with metrics
|
|
183
210
|
use_case_metrics_logger_1.UseCaseMetricsLoggerService.logCompletion(this.constructor.name, metrics);
|
|
184
211
|
// Create the business result from concrete implementation
|
|
185
|
-
const businessResult = this.createResult(processedContent,
|
|
212
|
+
const businessResult = this.createResult(processedContent, messageDebugString, thinking);
|
|
186
213
|
// Attach usage metadata to result (library responsibility since 2.13.0)
|
|
187
214
|
// This ensures consistent token/cost data across all use cases
|
|
188
215
|
const finalResult = {
|
|
@@ -194,7 +221,7 @@ class BaseAIUseCase {
|
|
|
194
221
|
catch (error) {
|
|
195
222
|
errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
196
223
|
// Calculate metrics for failed execution
|
|
197
|
-
const metrics = use_case_metrics_logger_1.UseCaseMetricsLoggerService.calculateMetrics(startTime, effectiveSystemMessage,
|
|
224
|
+
const metrics = use_case_metrics_logger_1.UseCaseMetricsLoggerService.calculateMetrics(startTime, effectiveSystemMessage, messageDebugString, '', thinking, this.modelConfig.name, false, errorMessage, definedParams);
|
|
198
225
|
// Log completion with error
|
|
199
226
|
use_case_metrics_logger_1.UseCaseMetricsLoggerService.logCompletion(this.constructor.name, metrics);
|
|
200
227
|
throw error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-ai.usecase.js","sourceRoot":"","sources":["../../../../src/middleware/usecases/base/base-ai.usecase.ts"],"names":[],"mappings":";;;AAAA,4CAA6D;AAC7D,qEAA4G;AAC5G,0FAAqF;AAIrF,4HAA+I;AAC/I,oFAAqF;AAErF;;;;;;GAMG;AACH,MAAsB,aAAa;IAiBjC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACO,gBAAgB,CAAC,OAAkB;QAC3C,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAQD;;;OAGG;IACH,IAAc,cAAc;QAC1B,OAAQ,IAAI,CAAC,WAAoC,CAAC,wBAAwB,CAAC;IAC7E,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACO,sBAAsB,CAAC,GAAmB;QAClD,OAAO,IAAA,8BAAc,EAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,IAAc,WAAW;QACvB,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACO,iBAAiB,CAAC,MAAW;QACrC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,4CAA4C;QAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IASD;;;;OAIG;IACO,qBAAqB;QAC7B,OAAO,EAAE,CAAC,CAAC,wBAAwB;IACrC,CAAC;IAED;;;;OAIG;IACO,WAAW;QACnB,OAAO,iBAAW,CAAC,MAAM,CAAC,CAAC,6CAA6C;IAC1E,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO,CAAC,OAAiB;QACpC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAE/B,iEAAiE;QACjE,MAAM,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE9D,
|
|
1
|
+
{"version":3,"file":"base-ai.usecase.js","sourceRoot":"","sources":["../../../../src/middleware/usecases/base/base-ai.usecase.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loonylabs/llm-middleware",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.23.0",
|
|
4
4
|
"description": "Complete middleware infrastructure for LLM-based backends with multi-provider support (Ollama, Anthropic, OpenAI, Google)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"test:live": "LLM_INTEGRATION_TESTS=true jest tests/integration/*.integration.test.ts --testTimeout=120000",
|
|
32
32
|
"test:reasoning:smoke": "ts-node tests/manual/reasoning-smoke-test.ts",
|
|
33
33
|
"test:cache:smoke": "ts-node tests/manual/cache-smoke-test.ts",
|
|
34
|
+
"test:vision:smoke": "ts-node tests/manual/vision-smoke-test.ts",
|
|
34
35
|
"test:ci": "jest --runInBand --ci --coverage",
|
|
35
36
|
"lint": "eslint src/**/*.ts",
|
|
36
37
|
"clean": "node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"",
|