@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.
Files changed (50) hide show
  1. package/README.md +4 -0
  2. package/dist/middleware/services/llm/llm.service.d.ts +3 -2
  3. package/dist/middleware/services/llm/llm.service.d.ts.map +1 -1
  4. package/dist/middleware/services/llm/llm.service.js.map +1 -1
  5. package/dist/middleware/services/llm/providers/anthropic-provider.d.ts +2 -1
  6. package/dist/middleware/services/llm/providers/anthropic-provider.d.ts.map +1 -1
  7. package/dist/middleware/services/llm/providers/anthropic-provider.js +23 -5
  8. package/dist/middleware/services/llm/providers/anthropic-provider.js.map +1 -1
  9. package/dist/middleware/services/llm/providers/base-llm-provider.d.ts +3 -2
  10. package/dist/middleware/services/llm/providers/base-llm-provider.d.ts.map +1 -1
  11. package/dist/middleware/services/llm/providers/base-llm-provider.js.map +1 -1
  12. package/dist/middleware/services/llm/providers/gemini/gemini-base.provider.d.ts +3 -2
  13. package/dist/middleware/services/llm/providers/gemini/gemini-base.provider.d.ts.map +1 -1
  14. package/dist/middleware/services/llm/providers/gemini/gemini-base.provider.js +30 -8
  15. package/dist/middleware/services/llm/providers/gemini/gemini-base.provider.js.map +1 -1
  16. package/dist/middleware/services/llm/providers/ollama-provider.d.ts +4 -3
  17. package/dist/middleware/services/llm/providers/ollama-provider.d.ts.map +1 -1
  18. package/dist/middleware/services/llm/providers/ollama-provider.js +8 -4
  19. package/dist/middleware/services/llm/providers/ollama-provider.js.map +1 -1
  20. package/dist/middleware/services/llm/providers/requesty-provider.d.ts +2 -1
  21. package/dist/middleware/services/llm/providers/requesty-provider.d.ts.map +1 -1
  22. package/dist/middleware/services/llm/providers/requesty-provider.js +23 -5
  23. package/dist/middleware/services/llm/providers/requesty-provider.js.map +1 -1
  24. package/dist/middleware/services/llm/types/anthropic.types.d.ts +21 -2
  25. package/dist/middleware/services/llm/types/anthropic.types.d.ts.map +1 -1
  26. package/dist/middleware/services/llm/types/gemini.types.d.ts +11 -2
  27. package/dist/middleware/services/llm/types/gemini.types.d.ts.map +1 -1
  28. package/dist/middleware/services/llm/types/index.d.ts +1 -0
  29. package/dist/middleware/services/llm/types/index.d.ts.map +1 -1
  30. package/dist/middleware/services/llm/types/index.js +2 -0
  31. package/dist/middleware/services/llm/types/index.js.map +1 -1
  32. package/dist/middleware/services/llm/types/multimodal.types.d.ts +47 -0
  33. package/dist/middleware/services/llm/types/multimodal.types.d.ts.map +1 -0
  34. package/dist/middleware/services/llm/types/multimodal.types.js +14 -0
  35. package/dist/middleware/services/llm/types/multimodal.types.js.map +1 -0
  36. package/dist/middleware/services/llm/types/requesty.types.d.ts +14 -1
  37. package/dist/middleware/services/llm/types/requesty.types.d.ts.map +1 -1
  38. package/dist/middleware/services/llm/utils/index.d.ts +1 -0
  39. package/dist/middleware/services/llm/utils/index.d.ts.map +1 -1
  40. package/dist/middleware/services/llm/utils/index.js +1 -0
  41. package/dist/middleware/services/llm/utils/index.js.map +1 -1
  42. package/dist/middleware/services/llm/utils/multimodal.utils.d.ts +56 -0
  43. package/dist/middleware/services/llm/utils/multimodal.utils.d.ts.map +1 -0
  44. package/dist/middleware/services/llm/utils/multimodal.utils.js +119 -0
  45. package/dist/middleware/services/llm/utils/multimodal.utils.js.map +1 -0
  46. package/dist/middleware/usecases/base/base-ai.usecase.d.ts +15 -0
  47. package/dist/middleware/usecases/base/base-ai.usecase.d.ts.map +1 -1
  48. package/dist/middleware/usecases/base/base-ai.usecase.js +36 -9
  49. package/dist/middleware/usecases/base/base-ai.usecase.js.map +1 -1
  50. 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
- // Format the raw prompt using formatUserMessage
115
- const formattedPrompt = this.formatUserMessage(request.prompt);
116
- // Apply the user template to create the final message
117
- const userTemplate = this.getUserTemplate();
118
- const formattedUserMessage = userTemplate(formattedPrompt);
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
- use_case_metrics_logger_1.UseCaseMetricsLoggerService.logStart(this.constructor.name, this.modelConfig.name, formattedUserMessage.length, effectiveTemperature, definedParams);
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, formattedUserMessage, result.message.content, thinking, this.modelConfig.name, success, errorMessage, definedParams, actualTokens // Pass actual tokens from provider
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, formattedUserMessage, thinking);
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, formattedUserMessage, '', thinking, this.modelConfig.name, false, errorMessage, definedParams);
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":"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"}
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.20.0",
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})\"",