@bowenqt/qiniu-ai-sdk 0.15.0 → 0.17.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 (68) hide show
  1. package/dist/ai/agent-graph.d.ts +5 -0
  2. package/dist/ai/agent-graph.d.ts.map +1 -1
  3. package/dist/ai/agent-graph.js +21 -2
  4. package/dist/ai/agent-graph.js.map +1 -1
  5. package/dist/ai/agent-graph.mjs +21 -2
  6. package/dist/ai/create-agent.d.ts +3 -0
  7. package/dist/ai/create-agent.d.ts.map +1 -1
  8. package/dist/ai/create-agent.js +6 -5
  9. package/dist/ai/create-agent.js.map +1 -1
  10. package/dist/ai/create-agent.mjs +6 -5
  11. package/dist/ai/generate-object.d.ts.map +1 -1
  12. package/dist/ai/generate-object.js +7 -1
  13. package/dist/ai/generate-object.js.map +1 -1
  14. package/dist/ai/generate-object.mjs +7 -1
  15. package/dist/ai/generate-text.d.ts +9 -1
  16. package/dist/ai/generate-text.d.ts.map +1 -1
  17. package/dist/ai/generate-text.js +25 -4
  18. package/dist/ai/generate-text.js.map +1 -1
  19. package/dist/ai/generate-text.mjs +25 -4
  20. package/dist/ai/internal-types.d.ts +11 -0
  21. package/dist/ai/internal-types.d.ts.map +1 -1
  22. package/dist/ai/internal-types.js +15 -0
  23. package/dist/ai/internal-types.js.map +1 -1
  24. package/dist/ai/internal-types.mjs +13 -0
  25. package/dist/ai/memory/index.d.ts +147 -0
  26. package/dist/ai/memory/index.d.ts.map +1 -0
  27. package/dist/ai/memory/index.js +240 -0
  28. package/dist/ai/memory/index.js.map +1 -0
  29. package/dist/ai/memory/index.mjs +234 -0
  30. package/dist/ai/nodes/memory-node.d.ts.map +1 -1
  31. package/dist/ai/nodes/memory-node.js +14 -16
  32. package/dist/ai/nodes/memory-node.js.map +1 -1
  33. package/dist/ai/nodes/memory-node.mjs +15 -17
  34. package/dist/ai/stream-object.d.ts +109 -0
  35. package/dist/ai/stream-object.d.ts.map +1 -0
  36. package/dist/ai/stream-object.js +383 -0
  37. package/dist/ai/stream-object.js.map +1 -0
  38. package/dist/ai/stream-object.mjs +347 -0
  39. package/dist/index.d.ts +8 -2
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +16 -2
  42. package/dist/index.js.map +1 -1
  43. package/dist/index.mjs +7 -1
  44. package/dist/lib/capability-cache.d.ts +72 -0
  45. package/dist/lib/capability-cache.d.ts.map +1 -0
  46. package/dist/lib/capability-cache.js +117 -0
  47. package/dist/lib/capability-cache.js.map +1 -0
  48. package/dist/lib/capability-cache.mjs +113 -0
  49. package/dist/lib/content-converter.d.ts +33 -0
  50. package/dist/lib/content-converter.d.ts.map +1 -0
  51. package/dist/lib/content-converter.js +166 -0
  52. package/dist/lib/content-converter.js.map +1 -0
  53. package/dist/lib/content-converter.mjs +161 -0
  54. package/dist/lib/messages.js +4 -3
  55. package/dist/lib/messages.js.map +1 -1
  56. package/dist/lib/messages.mjs +4 -3
  57. package/dist/lib/partial-json-parser.d.ts +63 -0
  58. package/dist/lib/partial-json-parser.d.ts.map +1 -0
  59. package/dist/lib/partial-json-parser.js +142 -0
  60. package/dist/lib/partial-json-parser.js.map +1 -0
  61. package/dist/lib/partial-json-parser.mjs +137 -0
  62. package/dist/lib/token-estimator.d.ts.map +1 -1
  63. package/dist/lib/token-estimator.js +3 -2
  64. package/dist/lib/token-estimator.js.map +1 -1
  65. package/dist/lib/token-estimator.mjs +3 -2
  66. package/dist/lib/types.d.ts +20 -4
  67. package/dist/lib/types.d.ts.map +1 -1
  68. package/package.json +1 -1
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ /**
3
+ * streamObject - Stream structured output with incremental parsing.
4
+ * Bypasses predict-node to enable streaming with JSON schema.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { streamObject } from '@bowenqt/qiniu-ai-sdk';
9
+ * import { z } from 'zod';
10
+ *
11
+ * const { partialObjectStream, object } = await streamObject({
12
+ * client,
13
+ * model: 'gemini-2.5-flash',
14
+ * schema: z.object({
15
+ * title: z.string(),
16
+ * chapters: z.array(z.object({
17
+ * title: z.string(),
18
+ * content: z.string(),
19
+ * })),
20
+ * }),
21
+ * prompt: 'Generate a book outline about AI',
22
+ * });
23
+ *
24
+ * // Stream partial objects
25
+ * for await (const partial of partialObjectStream) {
26
+ * console.log(partial);
27
+ * }
28
+ *
29
+ * // Get final validated object
30
+ * const result = await object;
31
+ * ```
32
+ */
33
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
34
+ if (k2 === undefined) k2 = k;
35
+ var desc = Object.getOwnPropertyDescriptor(m, k);
36
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
37
+ desc = { enumerable: true, get: function() { return m[k]; } };
38
+ }
39
+ Object.defineProperty(o, k2, desc);
40
+ }) : (function(o, m, k, k2) {
41
+ if (k2 === undefined) k2 = k;
42
+ o[k2] = m[k];
43
+ }));
44
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
45
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
46
+ }) : function(o, v) {
47
+ o["default"] = v;
48
+ });
49
+ var __importStar = (this && this.__importStar) || (function () {
50
+ var ownKeys = function(o) {
51
+ ownKeys = Object.getOwnPropertyNames || function (o) {
52
+ var ar = [];
53
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
54
+ return ar;
55
+ };
56
+ return ownKeys(o);
57
+ };
58
+ return function (mod) {
59
+ if (mod && mod.__esModule) return mod;
60
+ var result = {};
61
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
62
+ __setModuleDefault(result, mod);
63
+ return result;
64
+ };
65
+ })();
66
+ Object.defineProperty(exports, "__esModule", { value: true });
67
+ exports.streamObject = streamObject;
68
+ const errors_1 = require("../lib/errors");
69
+ const partial_json_parser_1 = require("../lib/partial-json-parser");
70
+ const capability_cache_1 = require("../lib/capability-cache");
71
+ const generate_object_1 = require("./generate-object");
72
+ const content_converter_1 = require("../lib/content-converter");
73
+ // ============================================================================
74
+ // JSON Schema Conversion (reuse from generate-object)
75
+ // ============================================================================
76
+ // Dynamic import cache for zod-to-json-schema
77
+ let loadAttempted = false;
78
+ let cachedZodToJsonSchema = null;
79
+ async function zodToJsonSchemaAsync(schema) {
80
+ if (!loadAttempted) {
81
+ loadAttempted = true;
82
+ try {
83
+ const zodToJsonSchemaModule = await Promise.resolve().then(() => __importStar(require('zod-to-json-schema')));
84
+ cachedZodToJsonSchema = zodToJsonSchemaModule.zodToJsonSchema;
85
+ }
86
+ catch {
87
+ cachedZodToJsonSchema = null;
88
+ }
89
+ }
90
+ if (cachedZodToJsonSchema) {
91
+ const result = cachedZodToJsonSchema(schema);
92
+ const { $schema, ...rest } = result;
93
+ return rest;
94
+ }
95
+ return parseZodSchemaToJsonSchema(schema);
96
+ }
97
+ function parseZodSchemaToJsonSchema(schema) {
98
+ const def = schema._def;
99
+ if (!def) {
100
+ return { type: 'object' };
101
+ }
102
+ const typeName = def.typeName;
103
+ switch (typeName) {
104
+ case 'ZodString':
105
+ return { type: 'string' };
106
+ case 'ZodNumber':
107
+ return { type: 'number' };
108
+ case 'ZodBoolean':
109
+ return { type: 'boolean' };
110
+ case 'ZodArray':
111
+ return {
112
+ type: 'array',
113
+ items: def.type ? parseZodSchemaToJsonSchema(def.type) : {},
114
+ };
115
+ case 'ZodObject': {
116
+ const shape = def.shape?.() ?? {};
117
+ const properties = {};
118
+ const required = [];
119
+ for (const [key, value] of Object.entries(shape)) {
120
+ properties[key] = parseZodSchemaToJsonSchema(value);
121
+ const innerDef = value?._def;
122
+ if (innerDef?.typeName !== 'ZodOptional') {
123
+ required.push(key);
124
+ }
125
+ }
126
+ return {
127
+ type: 'object',
128
+ properties,
129
+ ...(required.length > 0 ? { required } : {}),
130
+ };
131
+ }
132
+ default:
133
+ return { type: 'object' };
134
+ }
135
+ }
136
+ // ============================================================================
137
+ // Error Classification
138
+ // ============================================================================
139
+ /**
140
+ * Check if error indicates unsupported streaming format.
141
+ */
142
+ function isUnsupportedStreamError(error) {
143
+ // Check error code
144
+ const code = error?.code;
145
+ if (code === 'UNSUPPORTED_STREAM_FORMAT' ||
146
+ code === 'INVALID_RESPONSE_FORMAT' ||
147
+ code === 'unsupported_response_format') {
148
+ return true;
149
+ }
150
+ // Check HTTP status
151
+ const status = error?.status;
152
+ if (status === 400 || status === 422) {
153
+ const message = String(error?.message ?? '').toLowerCase();
154
+ if (message.includes('stream') ||
155
+ message.includes('response_format') ||
156
+ message.includes('json_schema')) {
157
+ return true;
158
+ }
159
+ }
160
+ return false;
161
+ }
162
+ // ============================================================================
163
+ // Main Function
164
+ // ============================================================================
165
+ /**
166
+ * Stream structured output with JSON schema validation.
167
+ */
168
+ async function streamObject(options) {
169
+ const { client, model, schema, allowFallback = false } = options;
170
+ // Check capability cache
171
+ if (capability_cache_1.capabilityCache.isNotSupported(client, model, 'stream_json_schema')) {
172
+ if (allowFallback) {
173
+ return createFallbackResult(options);
174
+ }
175
+ throw new Error(`Model ${model} does not support streaming JSON schema. Set allowFallback: true to use non-streaming.`);
176
+ }
177
+ // Try streaming
178
+ try {
179
+ return await streamObjectInternal(options);
180
+ }
181
+ catch (error) {
182
+ if (isUnsupportedStreamError(error)) {
183
+ // Cache the failure
184
+ capability_cache_1.capabilityCache.set(client, model, 'stream_json_schema', false);
185
+ if (allowFallback) {
186
+ console.warn('streamObject: API does not support streaming JSON schema, falling back to non-streaming');
187
+ return createFallbackResult(options);
188
+ }
189
+ }
190
+ throw error;
191
+ }
192
+ }
193
+ /**
194
+ * Internal streaming implementation.
195
+ */
196
+ async function streamObjectInternal(options) {
197
+ const { client, model, schema, prompt, messages, system, temperature, topP, maxTokens, abortSignal } = options;
198
+ // Build messages
199
+ const apiMessages = [];
200
+ if (system) {
201
+ apiMessages.push({ role: 'system', content: system });
202
+ }
203
+ if (messages) {
204
+ apiMessages.push(...messages);
205
+ }
206
+ if (prompt) {
207
+ apiMessages.push({ role: 'user', content: prompt });
208
+ }
209
+ // Convert schema to JSON Schema
210
+ const jsonSchema = await zodToJsonSchemaAsync(schema);
211
+ // Build response format
212
+ const responseFormat = {
213
+ type: 'json_schema',
214
+ json_schema: {
215
+ name: 'response',
216
+ strict: true,
217
+ schema: jsonSchema,
218
+ },
219
+ };
220
+ // Normalize multimodal content (image -> image_url) for API compatibility
221
+ const normalizedMessages = apiMessages.map(msg => ({
222
+ ...msg,
223
+ content: (0, content_converter_1.normalizeContent)(msg.content),
224
+ }));
225
+ // Create streaming request - bypass predict-node, go directly to client
226
+ const response = await client.chat.createStream({
227
+ model,
228
+ messages: normalizedMessages,
229
+ temperature,
230
+ top_p: topP,
231
+ max_tokens: maxTokens,
232
+ response_format: responseFormat,
233
+ }, { signal: abortSignal });
234
+ // NOTE: capabilityCache is set AFTER stream completes successfully (in background consumer)
235
+ // Create parser and state
236
+ const parser = new partial_json_parser_1.PartialJsonParser();
237
+ let rawText = '';
238
+ let usage;
239
+ let resolveObject;
240
+ let rejectObject;
241
+ let resolveRaw;
242
+ let resolveUsage;
243
+ const objectPromise = new Promise((resolve, reject) => {
244
+ resolveObject = resolve;
245
+ rejectObject = reject;
246
+ });
247
+ const rawTextPromise = new Promise((resolve) => {
248
+ resolveRaw = resolve;
249
+ });
250
+ const usagePromise = new Promise((resolve) => {
251
+ resolveUsage = resolve;
252
+ });
253
+ // Shared state for background consumer and partial stream
254
+ const partialValues = [];
255
+ let streamComplete = false;
256
+ let streamError = null;
257
+ const waiters = [];
258
+ // Background consumer - ensures object resolves even if partialObjectStream is not iterated
259
+ const backgroundConsumer = (async () => {
260
+ try {
261
+ for await (const chunk of response) {
262
+ const delta = chunk.choices?.[0]?.delta?.content ?? '';
263
+ if (delta) {
264
+ rawText += delta;
265
+ parser.append(delta);
266
+ // Try to parse partial object
267
+ const result = parser.parsePartial();
268
+ if (result.value !== null) {
269
+ partialValues.push(result.value);
270
+ // Wake up any waiting iterators
271
+ while (waiters.length > 0) {
272
+ waiters.shift().resolve(false);
273
+ }
274
+ }
275
+ }
276
+ // Capture usage from final chunk
277
+ if (chunk.usage) {
278
+ usage = chunk.usage;
279
+ }
280
+ }
281
+ // Stream complete - cache success
282
+ capability_cache_1.capabilityCache.set(client, model, 'stream_json_schema', true);
283
+ // Resolve final values
284
+ streamComplete = true;
285
+ resolveRaw(rawText);
286
+ resolveUsage(usage);
287
+ // Validate final object
288
+ try {
289
+ const parseResult = schema.safeParse(JSON.parse(rawText));
290
+ if (parseResult.success) {
291
+ resolveObject(parseResult.data);
292
+ }
293
+ else {
294
+ const validationErrors = parseResult.error.errors.map(e => ({
295
+ path: e.path.map(String),
296
+ message: e.message,
297
+ }));
298
+ const error = new errors_1.StructuredOutputError('Validation failed', rawText, validationErrors);
299
+ streamError = error; // Ensure partialObjectStream also throws
300
+ rejectObject(error);
301
+ }
302
+ }
303
+ catch (e) {
304
+ const error = e instanceof Error ? e : new Error(String(e));
305
+ streamError = error; // Ensure partialObjectStream also throws
306
+ rejectObject(error);
307
+ }
308
+ // Wake up any waiting iterators
309
+ while (waiters.length > 0) {
310
+ waiters.shift().resolve(true);
311
+ }
312
+ }
313
+ catch (error) {
314
+ streamError = error instanceof Error ? error : new Error(String(error));
315
+ streamComplete = true;
316
+ resolveRaw(rawText);
317
+ resolveUsage(usage);
318
+ rejectObject(streamError);
319
+ // Wake up any waiting iterators
320
+ while (waiters.length > 0) {
321
+ waiters.shift().resolve(true);
322
+ }
323
+ }
324
+ })();
325
+ // Create async generator for partial objects (consumes from shared state)
326
+ async function* generatePartials() {
327
+ let yieldedCount = 0;
328
+ while (true) {
329
+ // Yield any new partial values
330
+ while (yieldedCount < partialValues.length) {
331
+ yield partialValues[yieldedCount++];
332
+ }
333
+ // Check if stream is complete
334
+ if (streamComplete) {
335
+ if (streamError)
336
+ throw streamError;
337
+ break;
338
+ }
339
+ // Wait for more data
340
+ await new Promise((resolve) => {
341
+ waiters.push({ resolve });
342
+ });
343
+ }
344
+ }
345
+ return {
346
+ partialObjectStream: generatePartials(),
347
+ object: objectPromise,
348
+ rawText: rawTextPromise,
349
+ usage: usagePromise,
350
+ streamed: true,
351
+ };
352
+ }
353
+ /**
354
+ * Create fallback result using non-streaming generateObject.
355
+ */
356
+ async function createFallbackResult(options) {
357
+ // Use generateObject (non-streaming)
358
+ const result = await (0, generate_object_1.generateObject)({
359
+ client: options.client,
360
+ model: options.model,
361
+ schema: options.schema,
362
+ prompt: options.prompt,
363
+ messages: options.messages,
364
+ system: options.system,
365
+ temperature: options.temperature,
366
+ topP: options.topP,
367
+ maxTokens: options.maxTokens,
368
+ mode: 'strict',
369
+ abortSignal: options.abortSignal,
370
+ });
371
+ // Create single-yield async iterable
372
+ async function* singleYield() {
373
+ yield result.object;
374
+ }
375
+ return {
376
+ partialObjectStream: singleYield(),
377
+ object: Promise.resolve(result.object),
378
+ rawText: Promise.resolve(result.raw),
379
+ usage: Promise.resolve(result.usage),
380
+ streamed: false,
381
+ };
382
+ }
383
+ //# sourceMappingURL=stream-object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-object.js","sourceRoot":"","sources":["../../src/ai/stream-object.ts"],"names":[],"mappings":"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"}