hazo_llm_api 1.0.3 → 1.0.5

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 (62) hide show
  1. package/README.md +4 -4
  2. package/dist/lib/config/config_parser.d.ts +1 -1
  3. package/dist/lib/config/config_parser.js +5 -5
  4. package/dist/lib/config/config_parser.js.map +1 -1
  5. package/dist/lib/config/provider_loader.js +1 -1
  6. package/dist/lib/config/provider_loader.js.map +1 -1
  7. package/dist/lib/database/init_database.d.ts.map +1 -1
  8. package/dist/lib/database/init_database.js +72 -5
  9. package/dist/lib/database/init_database.js.map +1 -1
  10. package/dist/lib/database/utils.d.ts +9 -6
  11. package/dist/lib/database/utils.d.ts.map +1 -1
  12. package/dist/lib/database/utils.js +14 -5
  13. package/dist/lib/database/utils.js.map +1 -1
  14. package/dist/lib/llm_api/chain_helpers.d.ts +117 -0
  15. package/dist/lib/llm_api/chain_helpers.d.ts.map +1 -0
  16. package/dist/lib/llm_api/chain_helpers.js +445 -0
  17. package/dist/lib/llm_api/chain_helpers.js.map +1 -0
  18. package/dist/lib/llm_api/hazo_llm_prompt_chain.d.ts +20 -0
  19. package/dist/lib/llm_api/hazo_llm_prompt_chain.d.ts.map +1 -0
  20. package/dist/lib/llm_api/hazo_llm_prompt_chain.js +368 -0
  21. package/dist/lib/llm_api/hazo_llm_prompt_chain.js.map +1 -0
  22. package/dist/lib/llm_api/index.d.ts +34 -2
  23. package/dist/lib/llm_api/index.d.ts.map +1 -1
  24. package/dist/lib/llm_api/index.js +57 -5
  25. package/dist/lib/llm_api/index.js.map +1 -1
  26. package/dist/lib/llm_api/provider_helper.js +1 -1
  27. package/dist/lib/llm_api/provider_helper.js.map +1 -1
  28. package/dist/lib/llm_api/types.d.ts +143 -1
  29. package/dist/lib/llm_api/types.d.ts.map +1 -1
  30. package/dist/lib/llm_api/types.js.map +1 -1
  31. package/dist/lib/prompts/get_prompt.d.ts +27 -1
  32. package/dist/lib/prompts/get_prompt.d.ts.map +1 -1
  33. package/dist/lib/prompts/get_prompt.js +112 -2
  34. package/dist/lib/prompts/get_prompt.js.map +1 -1
  35. package/dist/lib/prompts/index.d.ts +1 -1
  36. package/dist/lib/prompts/index.d.ts.map +1 -1
  37. package/dist/lib/prompts/index.js +1 -1
  38. package/dist/lib/prompts/index.js.map +1 -1
  39. package/dist/lib/prompts/substitute_variables.d.ts +2 -2
  40. package/dist/lib/prompts/substitute_variables.d.ts.map +1 -1
  41. package/dist/lib/prompts/substitute_variables.js +10 -14
  42. package/dist/lib/prompts/substitute_variables.js.map +1 -1
  43. package/dist/lib/providers/qwen/qwen_provider.js +1 -1
  44. package/dist/lib/providers/qwen/qwen_provider.js.map +1 -1
  45. package/dist/server.d.ts +4 -3
  46. package/dist/server.d.ts.map +1 -1
  47. package/dist/server.js +3 -2
  48. package/dist/server.js.map +1 -1
  49. package/package.json +12 -1
  50. package/techdoc.md +2 -2
  51. package/dist/components/hazo_llm_prompt_config/hazo_llm_prompt_config.d.ts +0 -16
  52. package/dist/components/hazo_llm_prompt_config/hazo_llm_prompt_config.d.ts.map +0 -1
  53. package/dist/components/hazo_llm_prompt_config/hazo_llm_prompt_config.js +0 -258
  54. package/dist/components/hazo_llm_prompt_config/hazo_llm_prompt_config.js.map +0 -1
  55. package/dist/components/hazo_llm_prompt_config/index.d.ts +0 -8
  56. package/dist/components/hazo_llm_prompt_config/index.d.ts.map +0 -1
  57. package/dist/components/hazo_llm_prompt_config/index.js +0 -7
  58. package/dist/components/hazo_llm_prompt_config/index.js.map +0 -1
  59. package/dist/components/hazo_llm_prompt_config/types.d.ts +0 -74
  60. package/dist/components/hazo_llm_prompt_config/types.d.ts.map +0 -1
  61. package/dist/components/hazo_llm_prompt_config/types.js +0 -8
  62. package/dist/components/hazo_llm_prompt_config/types.js.map +0 -1
@@ -0,0 +1,445 @@
1
+ /**
2
+ * Chain Helper Functions
3
+ *
4
+ * Utility functions for parsing call_chain paths, resolving values,
5
+ * and deep merging results in prompt chains.
6
+ */
7
+ const FILE_NAME = 'chain_helpers.ts';
8
+ // =============================================================================
9
+ // Path Parsing Functions
10
+ // =============================================================================
11
+ /**
12
+ * Parse a call_chain path expression like "call[0].tax_category" or "call[2].data.nested.value"
13
+ *
14
+ * @param path_expr - The path expression to parse
15
+ * @param logger - Logger instance
16
+ * @returns Parsed path with call index and property path array, or null if invalid
17
+ */
18
+ export function parse_call_chain_path(path_expr, logger) {
19
+ // Pattern: call[N].property.path
20
+ const match = path_expr.match(/^call\[(\d+)\]\.(.+)$/);
21
+ if (!match) {
22
+ logger.error('Invalid call_chain path format', {
23
+ file: FILE_NAME,
24
+ data: { path_expr, expected_format: 'call[N].property.path' },
25
+ });
26
+ return null;
27
+ }
28
+ const call_index = parseInt(match[1], 10);
29
+ const property_path = match[2].split('.');
30
+ logger.debug('Parsed call_chain path', {
31
+ file: FILE_NAME,
32
+ data: { path_expr, call_index, property_path },
33
+ });
34
+ return { call_index, property_path };
35
+ }
36
+ /**
37
+ * Extract a value from a nested object using a property path array
38
+ *
39
+ * @param obj - The object to extract from
40
+ * @param path - Array of property names to traverse
41
+ * @param logger - Logger instance
42
+ * @returns The extracted value as a string, or null if not found
43
+ */
44
+ export function extract_value_from_path(obj, path, logger) {
45
+ let current = obj;
46
+ for (const key of path) {
47
+ if (current === null || current === undefined) {
48
+ logger.warn('Path traversal encountered null/undefined', {
49
+ file: FILE_NAME,
50
+ data: { path, failed_at: key },
51
+ });
52
+ return null;
53
+ }
54
+ if (typeof current !== 'object') {
55
+ logger.warn('Path traversal encountered non-object', {
56
+ file: FILE_NAME,
57
+ data: { path, failed_at: key, type: typeof current },
58
+ });
59
+ return null;
60
+ }
61
+ current = current[key];
62
+ }
63
+ // Convert result to string
64
+ if (current === null || current === undefined) {
65
+ return null;
66
+ }
67
+ if (typeof current === 'string') {
68
+ return current;
69
+ }
70
+ if (typeof current === 'number' || typeof current === 'boolean') {
71
+ return String(current);
72
+ }
73
+ // For objects/arrays, return JSON string
74
+ return JSON.stringify(current);
75
+ }
76
+ /**
77
+ * Extract a value from a ChainCallResult using a property path
78
+ * Supports both parsed_result fields and top-level image/text fields
79
+ *
80
+ * Examples:
81
+ * - "image_b64" -> returns result.image_b64
82
+ * - "image_mime_type" -> returns result.image_mime_type
83
+ * - "raw_text" -> returns result.raw_text
84
+ * - "country" -> traverses result.parsed_result.country
85
+ * - "data.nested.value" -> traverses result.parsed_result.data.nested.value
86
+ *
87
+ * @param result - The ChainCallResult to extract from
88
+ * @param property_path - Array of property names to traverse
89
+ * @param logger - Logger instance
90
+ * @returns The extracted value as a string, or null if not found
91
+ */
92
+ export function extract_value_from_result(result, property_path, logger) {
93
+ if (property_path.length === 0) {
94
+ logger.warn('Empty property path provided', { file: FILE_NAME });
95
+ return null;
96
+ }
97
+ const first_key = property_path[0];
98
+ // Handle top-level image fields directly
99
+ if (property_path.length === 1) {
100
+ if (first_key === 'image_b64' && result.image_b64) {
101
+ return result.image_b64;
102
+ }
103
+ if (first_key === 'image_mime_type' && result.image_mime_type) {
104
+ return result.image_mime_type;
105
+ }
106
+ if (first_key === 'raw_text' && result.raw_text) {
107
+ return result.raw_text;
108
+ }
109
+ }
110
+ // For paths starting with top-level fields that don't exist, try parsed_result
111
+ if (first_key === 'image_b64' || first_key === 'image_mime_type' || first_key === 'raw_text') {
112
+ // These are top-level only, no nesting
113
+ if (property_path.length === 1) {
114
+ logger.warn('Top-level field not found in result', {
115
+ file: FILE_NAME,
116
+ data: { field: first_key, has_field: false },
117
+ });
118
+ return null;
119
+ }
120
+ }
121
+ // Otherwise, extract from parsed_result
122
+ if (!result.parsed_result) {
123
+ logger.warn('No parsed_result available for path extraction', {
124
+ file: FILE_NAME,
125
+ data: { property_path },
126
+ });
127
+ return null;
128
+ }
129
+ return extract_value_from_path(result.parsed_result, property_path, logger);
130
+ }
131
+ // =============================================================================
132
+ // Value Resolution Functions
133
+ // =============================================================================
134
+ /**
135
+ * Resolve a chain field definition to its actual value
136
+ * Supports both parsed_result fields and top-level image/text fields
137
+ *
138
+ * @param field - The field definition to resolve
139
+ * @param previous_results - Array of previous call results
140
+ * @param logger - Logger instance
141
+ * @returns Resolved string value, or null if resolution failed
142
+ */
143
+ export function resolve_chain_field(field, previous_results, logger) {
144
+ if (field.match_type === 'direct') {
145
+ return field.value;
146
+ }
147
+ // match_type === 'call_chain'
148
+ const parsed = parse_call_chain_path(field.value, logger);
149
+ if (!parsed) {
150
+ return null;
151
+ }
152
+ // Check if referenced call exists
153
+ if (parsed.call_index >= previous_results.length) {
154
+ logger.error('call_chain references future or non-existent call', {
155
+ file: FILE_NAME,
156
+ data: {
157
+ call_index: parsed.call_index,
158
+ available_calls: previous_results.length,
159
+ },
160
+ });
161
+ return null;
162
+ }
163
+ const referenced_result = previous_results[parsed.call_index];
164
+ // Check if referenced call was successful
165
+ if (!referenced_result.success) {
166
+ logger.warn('call_chain references failed call', {
167
+ file: FILE_NAME,
168
+ data: {
169
+ call_index: parsed.call_index,
170
+ success: referenced_result.success,
171
+ },
172
+ });
173
+ return null;
174
+ }
175
+ // Extract value from result (supports both image fields and parsed_result)
176
+ const value = extract_value_from_result(referenced_result, parsed.property_path, logger);
177
+ if (value === null) {
178
+ logger.warn('Could not extract value from call_chain path', {
179
+ file: FILE_NAME,
180
+ data: {
181
+ path: field.value,
182
+ call_index: parsed.call_index,
183
+ },
184
+ });
185
+ }
186
+ return value;
187
+ }
188
+ // =============================================================================
189
+ // Variable Building Functions
190
+ // =============================================================================
191
+ /**
192
+ * Resolve a chain variable definition to its actual value
193
+ * Supports both parsed_result fields and top-level image/text fields
194
+ *
195
+ * @param variable - The variable definition to resolve
196
+ * @param previous_results - Array of previous call results
197
+ * @param logger - Logger instance
198
+ * @returns Resolved string value, or null if resolution failed
199
+ */
200
+ export function resolve_chain_variable(variable, previous_results, logger) {
201
+ if (variable.match_type === 'direct') {
202
+ return variable.value;
203
+ }
204
+ // match_type === 'call_chain'
205
+ const parsed = parse_call_chain_path(variable.value, logger);
206
+ if (!parsed) {
207
+ return null;
208
+ }
209
+ // Check if referenced call exists
210
+ if (parsed.call_index >= previous_results.length) {
211
+ logger.error('call_chain references future or non-existent call', {
212
+ file: FILE_NAME,
213
+ data: {
214
+ call_index: parsed.call_index,
215
+ available_calls: previous_results.length,
216
+ variable_name: variable.variable_name,
217
+ },
218
+ });
219
+ return null;
220
+ }
221
+ const referenced_result = previous_results[parsed.call_index];
222
+ // Check if referenced call was successful
223
+ if (!referenced_result.success) {
224
+ logger.warn('call_chain references failed call', {
225
+ file: FILE_NAME,
226
+ data: {
227
+ call_index: parsed.call_index,
228
+ success: referenced_result.success,
229
+ variable_name: variable.variable_name,
230
+ },
231
+ });
232
+ return null;
233
+ }
234
+ // Extract value from result (supports both image fields and parsed_result)
235
+ const value = extract_value_from_result(referenced_result, parsed.property_path, logger);
236
+ if (value === null) {
237
+ logger.warn('Could not extract value from call_chain path', {
238
+ file: FILE_NAME,
239
+ data: {
240
+ path: variable.value,
241
+ call_index: parsed.call_index,
242
+ variable_name: variable.variable_name,
243
+ },
244
+ });
245
+ }
246
+ return value;
247
+ }
248
+ /**
249
+ * Build prompt variables from a variables array in a chain call definition
250
+ *
251
+ * @param variables_array - Array of variable definitions
252
+ * @param previous_results - Array of previous call results
253
+ * @param logger - Logger instance
254
+ * @returns PromptVariables array for substitution
255
+ */
256
+ export function build_prompt_variables(variables_array, previous_results, logger) {
257
+ if (!variables_array || variables_array.length === 0) {
258
+ return [];
259
+ }
260
+ const variables = {};
261
+ variables_array.forEach((variable, index) => {
262
+ if (!variable.variable_name) {
263
+ logger.warn('Variable definition missing variable_name', {
264
+ file: FILE_NAME,
265
+ data: { index },
266
+ });
267
+ return;
268
+ }
269
+ const resolved_value = resolve_chain_variable(variable, previous_results, logger);
270
+ if (resolved_value !== null) {
271
+ variables[variable.variable_name] = resolved_value;
272
+ logger.debug('Built variable from definition', {
273
+ file: FILE_NAME,
274
+ data: {
275
+ index,
276
+ variable_name: variable.variable_name,
277
+ match_type: variable.match_type,
278
+ value_preview: resolved_value.substring(0, 50),
279
+ },
280
+ });
281
+ }
282
+ else {
283
+ logger.warn('Could not resolve variable value', {
284
+ file: FILE_NAME,
285
+ data: {
286
+ index,
287
+ variable_name: variable.variable_name,
288
+ match_type: variable.match_type,
289
+ value: variable.value,
290
+ },
291
+ });
292
+ }
293
+ });
294
+ return Object.keys(variables).length > 0 ? [variables] : [];
295
+ }
296
+ /**
297
+ * Resolve a ChainImageDefinition to actual image data
298
+ *
299
+ * @param image_def - The image definition to resolve
300
+ * @param previous_results - Array of previous call results
301
+ * @param logger - Logger instance
302
+ * @returns Resolved image data or null if resolution failed
303
+ */
304
+ export function resolve_chain_image_definition(image_def, previous_results, logger) {
305
+ const image_b64 = resolve_chain_field(image_def.image_b64, previous_results, logger);
306
+ const image_mime_type = resolve_chain_field(image_def.image_mime_type, previous_results, logger);
307
+ if (!image_b64) {
308
+ logger.error('Could not resolve image_b64 from definition', {
309
+ file: FILE_NAME,
310
+ data: {
311
+ match_type: image_def.image_b64.match_type,
312
+ value: image_def.image_b64.value,
313
+ },
314
+ });
315
+ return null;
316
+ }
317
+ if (!image_mime_type) {
318
+ logger.error('Could not resolve image_mime_type from definition', {
319
+ file: FILE_NAME,
320
+ data: {
321
+ match_type: image_def.image_mime_type.match_type,
322
+ value: image_def.image_mime_type.value,
323
+ },
324
+ });
325
+ return null;
326
+ }
327
+ logger.debug('Resolved image definition', {
328
+ file: FILE_NAME,
329
+ data: {
330
+ image_b64_length: image_b64.length,
331
+ image_mime_type,
332
+ },
333
+ });
334
+ return { image_b64, image_mime_type };
335
+ }
336
+ // =============================================================================
337
+ // Deep Merge Functions
338
+ // =============================================================================
339
+ /**
340
+ * Deep merge two objects, with source values overwriting target values
341
+ *
342
+ * @param target - Target object
343
+ * @param source - Source object to merge in
344
+ * @returns New merged object
345
+ */
346
+ export function deep_merge(target, source) {
347
+ const result = { ...target };
348
+ for (const key of Object.keys(source)) {
349
+ const source_value = source[key];
350
+ const target_value = result[key];
351
+ if (source_value !== null &&
352
+ typeof source_value === 'object' &&
353
+ !Array.isArray(source_value) &&
354
+ target_value !== null &&
355
+ typeof target_value === 'object' &&
356
+ !Array.isArray(target_value)) {
357
+ // Both are objects - recurse
358
+ result[key] = deep_merge(target_value, source_value);
359
+ }
360
+ else {
361
+ // Overwrite with source value
362
+ result[key] = source_value;
363
+ }
364
+ }
365
+ return result;
366
+ }
367
+ /**
368
+ * Merge multiple call results into a single object
369
+ *
370
+ * @param results - Array of chain call results
371
+ * @param logger - Logger instance
372
+ * @returns Deep-merged object from all successful calls
373
+ */
374
+ export function merge_chain_results(results, logger) {
375
+ let merged = {};
376
+ for (const result of results) {
377
+ if (result.success && result.parsed_result) {
378
+ merged = deep_merge(merged, result.parsed_result);
379
+ logger.debug('Merged result from call', {
380
+ file: FILE_NAME,
381
+ data: { call_index: result.call_index },
382
+ });
383
+ }
384
+ }
385
+ return merged;
386
+ }
387
+ // =============================================================================
388
+ // JSON Parsing Functions
389
+ // =============================================================================
390
+ /**
391
+ * Attempt to parse LLM response text as JSON
392
+ * Handles common LLM output formats (with markdown code blocks, etc.)
393
+ *
394
+ * @param text - Raw text response from LLM
395
+ * @param logger - Logger instance
396
+ * @returns Parsed JSON object or null if parsing fails
397
+ */
398
+ export function parse_llm_json_response(text, logger) {
399
+ // Try direct JSON parse first
400
+ try {
401
+ const parsed = JSON.parse(text);
402
+ if (typeof parsed === 'object' && parsed !== null) {
403
+ return parsed;
404
+ }
405
+ }
406
+ catch {
407
+ // Continue to try other formats
408
+ }
409
+ // Try extracting JSON from markdown code block
410
+ const code_block_match = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
411
+ if (code_block_match) {
412
+ try {
413
+ const parsed = JSON.parse(code_block_match[1].trim());
414
+ if (typeof parsed === 'object' && parsed !== null) {
415
+ logger.debug('Extracted JSON from code block', { file: FILE_NAME });
416
+ return parsed;
417
+ }
418
+ }
419
+ catch {
420
+ // Continue
421
+ }
422
+ }
423
+ // Try finding first { to last }
424
+ const first_brace = text.indexOf('{');
425
+ const last_brace = text.lastIndexOf('}');
426
+ if (first_brace !== -1 && last_brace > first_brace) {
427
+ try {
428
+ const json_substr = text.substring(first_brace, last_brace + 1);
429
+ const parsed = JSON.parse(json_substr);
430
+ if (typeof parsed === 'object' && parsed !== null) {
431
+ logger.debug('Extracted JSON by brace matching', { file: FILE_NAME });
432
+ return parsed;
433
+ }
434
+ }
435
+ catch {
436
+ // Continue
437
+ }
438
+ }
439
+ logger.warn('Could not parse LLM response as JSON', {
440
+ file: FILE_NAME,
441
+ data: { text_preview: text.substring(0, 100) },
442
+ });
443
+ return null;
444
+ }
445
+ //# sourceMappingURL=chain_helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain_helpers.js","sourceRoot":"","sources":["../../../src/lib/llm_api/chain_helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * hazo_llm_prompt_chain Function
3
+ *
4
+ * Executes a sequence of LLM calls where each call can reference
5
+ * values from previous call results. Supports all 4 service types:
6
+ * text_text, image_text, text_image, image_image.
7
+ */
8
+ import type { Database as SqlJsDatabase } from 'sql.js';
9
+ import type { PromptChainParams, PromptChainResponse, LLMApiConfig } from './types.js';
10
+ /**
11
+ * Execute a chain of prompt calls with dynamic value resolution
12
+ *
13
+ * @param params - Chain parameters including call definitions
14
+ * @param db - Database instance for prompt retrieval
15
+ * @param config - LLM API configuration
16
+ * @param llm - Optional LLM provider name
17
+ * @returns Chain response with merged results and individual call outcomes
18
+ */
19
+ export declare function hazo_llm_prompt_chain(params: PromptChainParams, db: SqlJsDatabase | null, config: LLMApiConfig, llm?: string): Promise<PromptChainResponse>;
20
+ //# sourceMappingURL=hazo_llm_prompt_chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hazo_llm_prompt_chain.d.ts","sourceRoot":"","sources":["../../../src/lib/llm_api/hazo_llm_prompt_chain.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EAGnB,YAAY,EASb,MAAM,YAAY,CAAC;AA+OpB;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,iBAAiB,EACzB,EAAE,EAAE,aAAa,GAAG,IAAI,EACxB,MAAM,EAAE,YAAY,EACpB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,mBAAmB,CAAC,CA4O9B"}