@loonylabs/llm-middleware 2.20.0 → 2.22.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 +3 -2
- package/dist/middleware/services/llm/llm.service.d.ts.map +1 -1
- 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 +3 -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 +30 -8
- package/dist/middleware/services/llm/providers/gemini/gemini-base.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/gemini.types.d.ts +11 -2
- 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/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/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
|
@@ -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.22.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})\"",
|