@llumiverse/core 1.2.0 → 1.4.0-dev.20260629.090753Z

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 (145) hide show
  1. package/lib/CompletionStream.d.ts +48 -0
  2. package/lib/CompletionStream.d.ts.map +1 -0
  3. package/lib/{esm/CompletionStream.js → CompletionStream.js} +142 -67
  4. package/lib/CompletionStream.js.map +1 -0
  5. package/lib/{types/Driver.d.ts → Driver.d.ts} +38 -5
  6. package/lib/Driver.d.ts.map +1 -0
  7. package/lib/{esm/Driver.js → Driver.js} +152 -107
  8. package/lib/Driver.js.map +1 -0
  9. package/lib/{types/async.d.ts → async.d.ts} +3 -3
  10. package/lib/async.d.ts.map +1 -0
  11. package/lib/{esm/async.js → async.js} +4 -4
  12. package/lib/async.js.map +1 -0
  13. package/lib/{types/conversation-utils.d.ts → conversation-utils.d.ts} +9 -0
  14. package/lib/conversation-utils.d.ts.map +1 -0
  15. package/lib/{esm/conversation-utils.js → conversation-utils.js} +78 -15
  16. package/lib/conversation-utils.js.map +1 -0
  17. package/lib/embeddings.d.ts +58 -0
  18. package/lib/embeddings.d.ts.map +1 -0
  19. package/lib/embeddings.js +131 -0
  20. package/lib/embeddings.js.map +1 -0
  21. package/lib/formatters/commons.d.ts +3 -0
  22. package/lib/formatters/commons.d.ts.map +1 -0
  23. package/lib/formatters/commons.js +4 -0
  24. package/lib/formatters/commons.js.map +1 -0
  25. package/lib/{types/formatters → formatters}/generic.d.ts +2 -2
  26. package/lib/formatters/generic.d.ts.map +1 -0
  27. package/lib/{esm/formatters → formatters}/generic.js +8 -8
  28. package/lib/formatters/generic.js.map +1 -0
  29. package/lib/formatters/index.d.ts +4 -0
  30. package/lib/formatters/index.d.ts.map +1 -0
  31. package/lib/formatters/index.js +4 -0
  32. package/lib/formatters/index.js.map +1 -0
  33. package/lib/{types/formatters → formatters}/nova.d.ts +4 -4
  34. package/lib/formatters/nova.d.ts.map +1 -0
  35. package/lib/{esm/formatters → formatters}/nova.js +19 -17
  36. package/lib/formatters/nova.js.map +1 -0
  37. package/lib/http-agent.d.ts +53 -0
  38. package/lib/http-agent.d.ts.map +1 -0
  39. package/lib/http-agent.js +141 -0
  40. package/lib/http-agent.js.map +1 -0
  41. package/lib/index.d.ts +8 -0
  42. package/lib/index.d.ts.map +1 -0
  43. package/lib/index.js +7 -0
  44. package/lib/index.js.map +1 -0
  45. package/lib/{types/json.d.ts → json.d.ts} +1 -1
  46. package/lib/json.d.ts.map +1 -0
  47. package/lib/{esm/json.js → json.js} +4 -3
  48. package/lib/json.js.map +1 -0
  49. package/lib/logger.d.ts +3 -0
  50. package/lib/logger.d.ts.map +1 -0
  51. package/lib/logger.js +42 -0
  52. package/lib/logger.js.map +1 -0
  53. package/lib/resolver.d.ts +2 -0
  54. package/lib/resolver.d.ts.map +1 -0
  55. package/lib/{esm/resolver.js → resolver.js} +7 -4
  56. package/lib/resolver.js.map +1 -0
  57. package/lib/stream.d.ts.map +1 -0
  58. package/lib/stream.js.map +1 -0
  59. package/lib/{types/validation.d.ts → validation.d.ts} +1 -1
  60. package/lib/validation.d.ts.map +1 -0
  61. package/lib/validation.js +100 -0
  62. package/lib/validation.js.map +1 -0
  63. package/package.json +29 -38
  64. package/src/CompletionStream.ts +208 -115
  65. package/src/Driver.error.test.ts +101 -72
  66. package/src/Driver.ts +208 -152
  67. package/src/async.ts +30 -30
  68. package/src/conversation-utils.ts +92 -16
  69. package/src/embeddings.ts +157 -0
  70. package/src/formatters/commons.ts +2 -2
  71. package/src/formatters/generic.ts +20 -17
  72. package/src/formatters/index.ts +3 -3
  73. package/src/formatters/nova.ts +53 -51
  74. package/src/http-agent.test.ts +281 -0
  75. package/src/http-agent.ts +177 -0
  76. package/src/index.ts +7 -5
  77. package/src/json.ts +6 -5
  78. package/src/logger.ts +42 -0
  79. package/src/resolver.ts +12 -9
  80. package/src/stream.ts +4 -5
  81. package/src/validation.ts +42 -29
  82. package/lib/cjs/CompletionStream.js +0 -293
  83. package/lib/cjs/CompletionStream.js.map +0 -1
  84. package/lib/cjs/Driver.js +0 -300
  85. package/lib/cjs/Driver.js.map +0 -1
  86. package/lib/cjs/async.js +0 -131
  87. package/lib/cjs/async.js.map +0 -1
  88. package/lib/cjs/conversation-utils.js +0 -579
  89. package/lib/cjs/conversation-utils.js.map +0 -1
  90. package/lib/cjs/formatters/commons.js +0 -7
  91. package/lib/cjs/formatters/commons.js.map +0 -1
  92. package/lib/cjs/formatters/generic.js +0 -59
  93. package/lib/cjs/formatters/generic.js.map +0 -1
  94. package/lib/cjs/formatters/index.js +0 -20
  95. package/lib/cjs/formatters/index.js.map +0 -1
  96. package/lib/cjs/formatters/nova.js +0 -99
  97. package/lib/cjs/formatters/nova.js.map +0 -1
  98. package/lib/cjs/index.js +0 -22
  99. package/lib/cjs/index.js.map +0 -1
  100. package/lib/cjs/json.js +0 -29
  101. package/lib/cjs/json.js.map +0 -1
  102. package/lib/cjs/package.json +0 -3
  103. package/lib/cjs/resolver.js +0 -45
  104. package/lib/cjs/resolver.js.map +0 -1
  105. package/lib/cjs/stream.js +0 -30
  106. package/lib/cjs/stream.js.map +0 -1
  107. package/lib/cjs/validation.js +0 -96
  108. package/lib/cjs/validation.js.map +0 -1
  109. package/lib/esm/CompletionStream.js.map +0 -1
  110. package/lib/esm/Driver.js.map +0 -1
  111. package/lib/esm/async.js.map +0 -1
  112. package/lib/esm/conversation-utils.js.map +0 -1
  113. package/lib/esm/formatters/commons.js +0 -4
  114. package/lib/esm/formatters/commons.js.map +0 -1
  115. package/lib/esm/formatters/generic.js.map +0 -1
  116. package/lib/esm/formatters/index.js +0 -4
  117. package/lib/esm/formatters/index.js.map +0 -1
  118. package/lib/esm/formatters/nova.js.map +0 -1
  119. package/lib/esm/index.js +0 -6
  120. package/lib/esm/index.js.map +0 -1
  121. package/lib/esm/json.js.map +0 -1
  122. package/lib/esm/resolver.js.map +0 -1
  123. package/lib/esm/stream.js.map +0 -1
  124. package/lib/esm/validation.js +0 -88
  125. package/lib/esm/validation.js.map +0 -1
  126. package/lib/types/CompletionStream.d.ts +0 -20
  127. package/lib/types/CompletionStream.d.ts.map +0 -1
  128. package/lib/types/Driver.d.ts.map +0 -1
  129. package/lib/types/async.d.ts.map +0 -1
  130. package/lib/types/conversation-utils.d.ts.map +0 -1
  131. package/lib/types/formatters/commons.d.ts +0 -3
  132. package/lib/types/formatters/commons.d.ts.map +0 -1
  133. package/lib/types/formatters/generic.d.ts.map +0 -1
  134. package/lib/types/formatters/index.d.ts +0 -4
  135. package/lib/types/formatters/index.d.ts.map +0 -1
  136. package/lib/types/formatters/nova.d.ts.map +0 -1
  137. package/lib/types/index.d.ts +0 -6
  138. package/lib/types/index.d.ts.map +0 -1
  139. package/lib/types/json.d.ts.map +0 -1
  140. package/lib/types/resolver.d.ts +0 -2
  141. package/lib/types/resolver.d.ts.map +0 -1
  142. package/lib/types/stream.d.ts.map +0 -1
  143. package/lib/types/validation.d.ts.map +0 -1
  144. /package/lib/{types/stream.d.ts → stream.d.ts} +0 -0
  145. /package/lib/{esm/stream.js → stream.js} +0 -0
package/src/validation.ts CHANGED
@@ -1,67 +1,76 @@
1
- import { CompletionResult, ResultValidationError } from "@llumiverse/common";
1
+ import type { CompletionResult, JSONValue, ResultValidationError } from '@llumiverse/common';
2
2
  import { Ajv } from 'ajv';
3
3
  import addFormats from 'ajv-formats';
4
- import { extractAndParseJSON } from "./json.js";
4
+ import { extractAndParseJSON } from './json.js';
5
5
  import { resolveField } from './resolver.js';
6
6
 
7
-
8
7
  const ajv = new Ajv({
9
8
  coerceTypes: 'array',
10
9
  allowDate: true,
11
10
  strict: false,
12
11
  useDefaults: true,
13
- removeAdditional: "failing"
12
+ removeAdditional: 'failing',
14
13
  });
15
14
 
16
- //use ts ignore to avoid error with ESM and ajv-formats
17
- // @ts-ignore This expression is not callable
18
- addFormats(ajv)
15
+ // biome-ignore lint/suspicious/noTsIgnore: ajv-formats default export inconsistently callable under ESM/CJS interop
16
+ // @ts-ignore - ajv-formats default export is not callable under one of the TS configs in this monorepo
17
+ addFormats(ajv);
18
+
19
+ function errorMessage(error: unknown): string {
20
+ return error instanceof Error ? error.message : String(error);
21
+ }
19
22
 
23
+ function getRequiredFields(schemaField: unknown): string[] {
24
+ if (!schemaField || typeof schemaField !== 'object') {
25
+ return [];
26
+ }
27
+ const required = (schemaField as Record<string, unknown>).required;
28
+ return Array.isArray(required) ? required.filter((field): field is string => typeof field === 'string') : [];
29
+ }
20
30
 
21
31
  export class ValidationError extends Error implements ResultValidationError {
22
32
  constructor(
23
33
  public code: 'validation_error' | 'json_error',
24
- message: string
34
+ message: string,
25
35
  ) {
26
- super(message)
27
- this.name = 'ValidationError'
36
+ super(message);
37
+ this.name = 'ValidationError';
28
38
  }
29
39
  }
30
40
 
31
41
  function parseCompletionAsJson(data: CompletionResult[]) {
32
42
  let lastError: ValidationError | undefined;
33
43
  for (const part of data) {
34
- if (part.type === "text") {
44
+ if (part.type === 'text') {
35
45
  const text = part.value.trim();
36
46
  try {
37
47
  return extractAndParseJSON(text);
38
- } catch (error: any) {
39
- lastError = new ValidationError("json_error", error.message);
48
+ } catch (error: unknown) {
49
+ lastError = new ValidationError('json_error', errorMessage(error));
40
50
  }
41
51
  }
42
52
  }
43
53
  if (!lastError) {
44
- lastError = new ValidationError("json_error", "No JSON compatible response found in completion result");
54
+ lastError = new ValidationError('json_error', 'No JSON compatible response found in completion result');
45
55
  }
46
56
  throw lastError;
47
57
  }
48
58
 
49
-
50
59
  export function validateResult(data: CompletionResult[], schema: object): CompletionResult[] {
51
- let json;
60
+ let json: JSONValue;
52
61
  if (Array.isArray(data)) {
53
- const jsonResults = data.filter(r => r.type === "json");
62
+ const jsonResults = data.filter((r) => r.type === 'json');
54
63
  if (jsonResults.length > 0) {
55
64
  json = jsonResults[0].value;
56
65
  } else {
57
66
  try {
58
67
  json = parseCompletionAsJson(data);
59
- } catch (error: any) {
60
- throw new ValidationError("json_error", error.message)
68
+ } catch (error: unknown) {
69
+ throw new ValidationError('json_error', errorMessage(error));
61
70
  }
62
71
  }
63
72
  } else {
64
- throw new Error("Data to validate must be an array")
73
+ throw new Error('Data to validate must be an array');
65
74
  }
66
75
 
67
76
  const validate = ajv.compile(schema);
@@ -71,17 +80,19 @@ export function validateResult(data: CompletionResult[], schema: object): Comple
71
80
  const errors = [];
72
81
 
73
82
  for (const e of validate.errors) {
74
- const path = e.instancePath.split("/").slice(1);
83
+ const path = e.instancePath.split('/').slice(1);
75
84
  const value = resolveField(json, path);
76
- const schemaPath = e.schemaPath.split("/").slice(1);
85
+ const schemaPath = e.schemaPath.split('/').slice(1);
77
86
  const schemaFieldFormat = resolveField(schema, schemaPath);
78
87
  const schemaField = resolveField(schema, schemaPath.slice(0, -3));
79
88
 
80
89
  //ignore date if empty or null
81
- if (!value
82
- && ["date", "date-time"].includes(schemaFieldFormat)
83
- && !schemaField?.required?.includes(path[path.length - 1])) {
84
- continue;
90
+ if (
91
+ !value &&
92
+ typeof schemaFieldFormat === 'string' &&
93
+ ['date', 'date-time'].includes(schemaFieldFormat) &&
94
+ !getRequiredFields(schemaField).includes(path[path.length - 1])
95
+ ) {
85
96
  } else {
86
97
  errors.push(e);
87
98
  }
@@ -89,10 +100,12 @@ export function validateResult(data: CompletionResult[], schema: object): Comple
89
100
 
90
101
  //console.log("Errors", errors)
91
102
  if (errors.length > 0) {
92
- const errorsMessage = errors.map(e => `${e.instancePath}: ${e.message}\n${JSON.stringify(e.params)}`).join(",\n\n");
93
- throw new ValidationError("validation_error", errorsMessage)
103
+ const errorsMessage = errors
104
+ .map((e) => `${e.instancePath}: ${e.message}\n${JSON.stringify(e.params)}`)
105
+ .join(',\n\n');
106
+ throw new ValidationError('validation_error', errorsMessage);
94
107
  }
95
108
  }
96
109
 
97
- return [{ type: "json", value: json }];
110
+ return [{ type: 'json', value: json }];
98
111
  }
@@ -1,293 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FallbackCompletionStream = exports.DefaultCompletionStream = void 0;
4
- const common_1 = require("@llumiverse/common");
5
- class DefaultCompletionStream {
6
- driver;
7
- prompt;
8
- options;
9
- chunks; // Counter for number of chunks instead of storing strings
10
- completion;
11
- constructor(driver, prompt, options) {
12
- this.driver = driver;
13
- this.prompt = prompt;
14
- this.options = options;
15
- this.chunks = 0;
16
- }
17
- async *[Symbol.asyncIterator]() {
18
- // reset state
19
- this.completion = undefined;
20
- this.chunks = 0;
21
- const accumulatedResults = []; // Accumulate CompletionResult[] from chunks
22
- const accumulatedToolUse = new Map(); // Accumulate tool_use by id
23
- this.driver.logger.debug(`[${this.driver.provider}] Streaming Execution of ${this.options.model} with prompt`);
24
- const start = Date.now();
25
- let finish_reason = undefined;
26
- let promptTokens = 0;
27
- let resultTokens = undefined;
28
- let promptCachedTokens = undefined;
29
- let promptCacheWriteTokens = undefined;
30
- let promptNewTokens = undefined;
31
- try {
32
- const stream = await this.driver.requestTextCompletionStream(this.prompt, this.options);
33
- for await (const chunk of stream) {
34
- if (chunk) {
35
- if (typeof chunk === 'string') {
36
- this.chunks++;
37
- yield chunk;
38
- }
39
- else {
40
- if (chunk.finish_reason) { //Do not replace non-null values with null values
41
- finish_reason = chunk.finish_reason; //Used to skip empty finish_reason chunks coming after "stop" or "length"
42
- }
43
- if (chunk.token_usage) {
44
- //Tokens returned include prior parts of stream,
45
- //so overwrite rather than accumulate
46
- //Math.max used as some models report final token count at beginning of stream
47
- promptTokens = Math.max(promptTokens, chunk.token_usage.prompt ?? 0);
48
- resultTokens = Math.max(resultTokens ?? 0, chunk.token_usage.result ?? 0);
49
- if (chunk.token_usage.prompt_cached != null)
50
- promptCachedTokens = chunk.token_usage.prompt_cached;
51
- if (chunk.token_usage.prompt_cache_write != null)
52
- promptCacheWriteTokens = chunk.token_usage.prompt_cache_write;
53
- if (chunk.token_usage.prompt_new != null)
54
- promptNewTokens = chunk.token_usage.prompt_new;
55
- }
56
- // Accumulate tool_use from chunks
57
- // Note: During streaming, tool_input comes as string chunks that need concatenation
58
- if (chunk.tool_use && chunk.tool_use.length > 0) {
59
- for (const tool of chunk.tool_use) {
60
- const existing = accumulatedToolUse.get(tool.id);
61
- if (existing) {
62
- // Merge tool input (for streaming where arguments come as string pieces)
63
- if (tool.tool_input !== null && tool.tool_input !== undefined) {
64
- const existingInput = existing.tool_input;
65
- const newInput = tool.tool_input;
66
- if (typeof existingInput === 'string' && typeof newInput === 'string') {
67
- // Concatenate string arguments
68
- existing.tool_input = existingInput + newInput;
69
- }
70
- else if (existingInput && typeof existingInput === 'object' && newInput && typeof newInput === 'object') {
71
- // Merge objects
72
- existing.tool_input = { ...existingInput, ...newInput };
73
- }
74
- else {
75
- existing.tool_input = tool.tool_input;
76
- }
77
- }
78
- // Update tool name if provided (might come in later chunk)
79
- if (tool.tool_name) {
80
- existing.tool_name = tool.tool_name;
81
- }
82
- // Update actual ID if provided (OpenAI sends id only in first chunk)
83
- if (tool._actual_id) {
84
- existing._actual_id = tool._actual_id;
85
- }
86
- }
87
- else {
88
- // New tool call
89
- accumulatedToolUse.set(tool.id, { ...tool });
90
- }
91
- }
92
- }
93
- if (Array.isArray(chunk.result) && chunk.result.length > 0) {
94
- // Process each result in the chunk, combining consecutive text/JSON
95
- for (const result of chunk.result) {
96
- // Check if we can combine with the last accumulated result
97
- const lastResult = accumulatedResults[accumulatedResults.length - 1];
98
- if (lastResult &&
99
- ((lastResult.type === 'text' && result.type === 'text') ||
100
- (lastResult.type === 'json' && result.type === 'json'))) {
101
- // Combine consecutive text or JSON results
102
- if (result.type === 'text') {
103
- lastResult.value += result.value;
104
- }
105
- else if (result.type === 'json') {
106
- // For JSON, combine the parsed objects directly
107
- try {
108
- const lastParsed = lastResult.value;
109
- const currentParsed = result.value;
110
- if (lastParsed !== null && typeof lastParsed === 'object' &&
111
- currentParsed !== null && typeof currentParsed === 'object') {
112
- const combined = { ...lastParsed, ...currentParsed };
113
- lastResult.value = combined;
114
- }
115
- else {
116
- // If not objects, convert to string and concatenate
117
- const lastStr = typeof lastParsed === 'string' ? lastParsed : JSON.stringify(lastParsed);
118
- const currentStr = typeof currentParsed === 'string' ? currentParsed : JSON.stringify(currentParsed);
119
- lastResult.value = lastStr + currentStr;
120
- }
121
- }
122
- catch {
123
- // If anything fails, just concatenate string representations
124
- lastResult.value = String(lastResult.value) + String(result.value);
125
- }
126
- }
127
- }
128
- else {
129
- // Add as new result
130
- accumulatedResults.push(result);
131
- }
132
- }
133
- // Convert CompletionResult[] to string for streaming
134
- // Only yield if we have results to show
135
- const resultText = chunk.result.map(r => {
136
- switch (r.type) {
137
- case 'text':
138
- return r.value;
139
- case 'json':
140
- return JSON.stringify(r.value);
141
- case 'image':
142
- // Show truncated image placeholder for streaming
143
- const truncatedValue = typeof r.value === 'string' ? r.value.slice(0, 10) : String(r.value).slice(0, 10);
144
- return `\n[Image: ${truncatedValue}...]\n`;
145
- default:
146
- return String(r.value || '');
147
- }
148
- }).join('');
149
- if (resultText) {
150
- this.chunks++;
151
- yield resultText;
152
- }
153
- }
154
- }
155
- }
156
- }
157
- }
158
- catch (error) {
159
- // Don't wrap if already a LlumiverseError
160
- if (common_1.LlumiverseError.isLlumiverseError(error)) {
161
- throw error;
162
- }
163
- throw this.driver.formatLlumiverseError(error, {
164
- provider: this.driver.provider,
165
- model: this.options.model,
166
- operation: 'stream',
167
- });
168
- }
169
- // Return undefined only if we never received any token data from the provider.
170
- // Use !== undefined (not truthiness) because resultTokens === 0 is valid (e.g. empty output with stop).
171
- const tokens = resultTokens !== undefined ? {
172
- prompt: promptTokens,
173
- result: resultTokens,
174
- total: resultTokens + promptTokens,
175
- ...(promptCachedTokens != null && { prompt_cached: promptCachedTokens }),
176
- ...(promptCacheWriteTokens != null && { prompt_cache_write: promptCacheWriteTokens }),
177
- ...(promptNewTokens != null && { prompt_new: promptNewTokens }),
178
- } : undefined;
179
- // Convert accumulated tool_use Map to array
180
- let toolUseArray = accumulatedToolUse.size > 0 ? Array.from(accumulatedToolUse.values()) : undefined;
181
- // Finalize tool calls: restore actual IDs and parse JSON arguments
182
- if (toolUseArray) {
183
- const truncatedToolIds = new Set();
184
- for (const tool of toolUseArray) {
185
- // Restore actual ID from OpenAI (was stored in _actual_id during streaming)
186
- if (tool._actual_id) {
187
- tool.id = tool._actual_id;
188
- delete tool._actual_id;
189
- }
190
- // Parse tool_input strings as JSON if needed (streaming sends arguments as string chunks)
191
- if (typeof tool.tool_input === 'string') {
192
- try {
193
- tool.tool_input = JSON.parse(tool.tool_input);
194
- }
195
- catch {
196
- // JSON parse failed — tool_input was likely truncated by max_tokens.
197
- // Set to empty object to prevent string tool_input from corrupting the conversation.
198
- tool.tool_input = {};
199
- truncatedToolIds.add(tool.id);
200
- }
201
- }
202
- }
203
- // If finish_reason is "length" (max_tokens hit), drop truncated tool calls entirely —
204
- // they were cut off mid-generation and would produce invalid results.
205
- if (finish_reason === 'length' && truncatedToolIds.size > 0) {
206
- toolUseArray = toolUseArray.filter(t => !truncatedToolIds.has(t.id));
207
- if (toolUseArray.length === 0) {
208
- toolUseArray = undefined;
209
- }
210
- }
211
- }
212
- this.completion = {
213
- result: accumulatedResults, // Return the accumulated CompletionResult[] instead of text
214
- prompt: this.prompt,
215
- execution_time: Date.now() - start,
216
- token_usage: tokens,
217
- finish_reason: finish_reason,
218
- chunks: this.chunks,
219
- tool_use: toolUseArray,
220
- };
221
- // Build conversation context for multi-turn support
222
- const conversation = this.driver.buildStreamingConversation(this.prompt, accumulatedResults, toolUseArray, this.options);
223
- if (conversation !== undefined) {
224
- this.completion.conversation = conversation;
225
- }
226
- try {
227
- if (this.completion) {
228
- this.driver.validateResult(this.completion, this.options);
229
- }
230
- }
231
- catch (error) {
232
- // Don't wrap if already a LlumiverseError
233
- if (common_1.LlumiverseError.isLlumiverseError(error)) {
234
- throw error;
235
- }
236
- throw this.driver.formatLlumiverseError(error, {
237
- provider: this.driver.provider,
238
- model: this.options.model,
239
- operation: 'stream',
240
- });
241
- }
242
- }
243
- }
244
- exports.DefaultCompletionStream = DefaultCompletionStream;
245
- class FallbackCompletionStream {
246
- driver;
247
- prompt;
248
- options;
249
- completion;
250
- constructor(driver, prompt, options) {
251
- this.driver = driver;
252
- this.prompt = prompt;
253
- this.options = options;
254
- }
255
- async *[Symbol.asyncIterator]() {
256
- // reset state
257
- this.completion = undefined;
258
- this.driver.logger.debug(`[${this.driver.provider}] Streaming is not supported, falling back to blocking execution`);
259
- try {
260
- const completion = await this.driver._execute(this.prompt, this.options);
261
- // For fallback streaming, yield the text content but keep the original completion
262
- const content = completion.result.map(r => {
263
- switch (r.type) {
264
- case 'text':
265
- return r.value;
266
- case 'json':
267
- return JSON.stringify(r.value);
268
- case 'image':
269
- // Show truncated image placeholder for streaming
270
- const truncatedValue = typeof r.value === 'string' ? r.value.slice(0, 10) : String(r.value).slice(0, 10);
271
- return `[Image: ${truncatedValue}...]`;
272
- default:
273
- return String(r.value || '');
274
- }
275
- }).join('');
276
- yield content;
277
- this.completion = completion; // Return the original completion with untouched CompletionResult[]
278
- }
279
- catch (error) {
280
- // Don't wrap if already a LlumiverseError
281
- if (common_1.LlumiverseError.isLlumiverseError(error)) {
282
- throw error;
283
- }
284
- throw this.driver.formatLlumiverseError(error, {
285
- provider: this.driver.provider,
286
- model: this.options.model,
287
- operation: 'stream',
288
- });
289
- }
290
- }
291
- }
292
- exports.FallbackCompletionStream = FallbackCompletionStream;
293
- //# sourceMappingURL=CompletionStream.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CompletionStream.js","sourceRoot":"","sources":["../../src/CompletionStream.ts"],"names":[],"mappings":"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"}