@bowenqt/qiniu-ai-sdk 0.5.0 → 0.9.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 +85 -7
- package/dist/ai/generate-text.d.ts +48 -0
- package/dist/ai/generate-text.d.ts.map +1 -0
- package/dist/ai/generate-text.js +169 -0
- package/dist/ai/generate-text.js.map +1 -0
- package/dist/ai/generate-text.mjs +165 -0
- package/dist/ai-tools/index.d.ts +17 -0
- package/dist/ai-tools/index.d.ts.map +1 -0
- package/dist/ai-tools/index.js +77 -0
- package/dist/ai-tools/index.js.map +1 -0
- package/dist/ai-tools/index.mjs +73 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -0
- package/dist/lib/errors.d.ts +12 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +27 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/errors.mjs +21 -0
- package/dist/lib/messages.d.ts +18 -0
- package/dist/lib/messages.d.ts.map +1 -0
- package/dist/lib/messages.js +66 -0
- package/dist/lib/messages.js.map +1 -0
- package/dist/lib/messages.mjs +62 -0
- package/dist/modules/image/index.d.ts +55 -0
- package/dist/modules/image/index.d.ts.map +1 -1
- package/dist/modules/image/index.js +61 -1
- package/dist/modules/image/index.js.map +1 -1
- package/dist/modules/image/index.mjs +61 -1
- package/package.json +25 -4
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export function tool(definition) {
|
|
2
|
+
return definition;
|
|
3
|
+
}
|
|
4
|
+
export function zodToJsonSchema(schema) {
|
|
5
|
+
return convertSchema(schema);
|
|
6
|
+
}
|
|
7
|
+
function convertSchema(schema) {
|
|
8
|
+
const def = schema._def;
|
|
9
|
+
const typeName = def?.typeName;
|
|
10
|
+
switch (typeName) {
|
|
11
|
+
case 'ZodString':
|
|
12
|
+
return { type: 'string' };
|
|
13
|
+
case 'ZodNumber':
|
|
14
|
+
return { type: 'number' };
|
|
15
|
+
case 'ZodBoolean':
|
|
16
|
+
return { type: 'boolean' };
|
|
17
|
+
case 'ZodArray':
|
|
18
|
+
return { type: 'array', items: convertSchema(def.type) };
|
|
19
|
+
case 'ZodEnum':
|
|
20
|
+
return { type: 'string', enum: def.values };
|
|
21
|
+
case 'ZodLiteral':
|
|
22
|
+
return literalSchema(def.value);
|
|
23
|
+
case 'ZodObject':
|
|
24
|
+
return objectSchema(schema);
|
|
25
|
+
case 'ZodUnion':
|
|
26
|
+
return { oneOf: def.options.map(convertSchema) };
|
|
27
|
+
case 'ZodOptional':
|
|
28
|
+
return convertSchema(def.innerType);
|
|
29
|
+
case 'ZodNullable':
|
|
30
|
+
return convertSchema(def.innerType);
|
|
31
|
+
case 'ZodDefault':
|
|
32
|
+
return convertSchema(def.innerType);
|
|
33
|
+
default:
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function objectSchema(schema) {
|
|
38
|
+
const def = schema._def;
|
|
39
|
+
const shapeSource = def?.shape;
|
|
40
|
+
const shape = typeof shapeSource === 'function' ? shapeSource() : shapeSource || {};
|
|
41
|
+
const properties = {};
|
|
42
|
+
const required = [];
|
|
43
|
+
for (const [key, value] of Object.entries(shape)) {
|
|
44
|
+
const { inner, optional } = unwrapOptional(value);
|
|
45
|
+
properties[key] = convertSchema(inner);
|
|
46
|
+
if (!optional) {
|
|
47
|
+
required.push(key);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const schemaResult = { type: 'object', properties };
|
|
51
|
+
if (required.length) {
|
|
52
|
+
schemaResult.required = required;
|
|
53
|
+
}
|
|
54
|
+
return schemaResult;
|
|
55
|
+
}
|
|
56
|
+
function unwrapOptional(schema) {
|
|
57
|
+
const def = schema._def;
|
|
58
|
+
if (!def?.typeName) {
|
|
59
|
+
return { inner: schema, optional: false };
|
|
60
|
+
}
|
|
61
|
+
if (def.typeName === 'ZodOptional' || def.typeName === 'ZodDefault') {
|
|
62
|
+
return { inner: def.innerType, optional: true };
|
|
63
|
+
}
|
|
64
|
+
return { inner: schema, optional: false };
|
|
65
|
+
}
|
|
66
|
+
function literalSchema(value) {
|
|
67
|
+
const valueType = typeof value;
|
|
68
|
+
if (valueType === 'string' || valueType === 'number' || valueType === 'boolean') {
|
|
69
|
+
return { type: valueType, enum: [value] };
|
|
70
|
+
}
|
|
71
|
+
return { enum: [value] };
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=index.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -3,14 +3,19 @@ export { CHAT_MODELS, IMAGE_MODELS, VIDEO_MODELS, MODEL_CATALOG, } from './model
|
|
|
3
3
|
export type { ChatModel, ImageModel as ImageModelType, VideoModel as VideoModelType, Model, ModelInfo, } from './models';
|
|
4
4
|
export type { QiniuAIOptions, Logger, LogLevel, FetchAdapter, Middleware, MiddlewareRequest, MiddlewareResponse, RequestOptions, } from './client';
|
|
5
5
|
export { APIError } from './lib/request';
|
|
6
|
+
export { AIError, ToolExecutionError, MaxStepsExceededError } from './lib/errors';
|
|
6
7
|
export * from './lib/types';
|
|
8
|
+
export { appendMessages, truncateHistory } from './lib/messages';
|
|
9
|
+
export type { TruncateOptions } from './lib/messages';
|
|
10
|
+
export { generateText, serializeToolResult } from './ai/generate-text';
|
|
11
|
+
export type { GenerateTextOptions, GenerateTextResult, StepResult, Tool, ToolResult, } from './ai/generate-text';
|
|
7
12
|
export type { ChatCompletionRequest, ChatCompletionResponse, ChatCompletionChunk, ChatMessage, ContentPart, ToolCall, ChatDelta, ToolCallDelta, } from './lib/types';
|
|
8
13
|
export type { StreamOptions, StreamResult } from './modules/chat';
|
|
9
14
|
export { parseSSEStream, createStreamAccumulator, accumulateDelta } from './lib/sse';
|
|
10
15
|
export type { SSEParseOptions, StreamAccumulator } from './lib/sse';
|
|
11
16
|
export { pollUntilComplete, createPoller } from './lib/poller';
|
|
12
17
|
export type { PollerOptions, PollResult } from './lib/poller';
|
|
13
|
-
export type { ImageGenerationRequest, ImageTaskResponse, WaitOptions as ImageWaitOptions, ImageModel, ImageEditRequest, ImageEditResponse, ImageConfig, ImageReference, } from './modules/image';
|
|
18
|
+
export type { ImageGenerationRequest, ImageTaskResponse, ImageCreateResult, ImageGenerateResult, ImageUsage, SyncImageResponse, AsyncImageResponse, WaitOptions as ImageWaitOptions, ImageModel, ImageEditRequest, ImageEditResponse, ImageConfig, ImageReference, } from './modules/image';
|
|
14
19
|
export type { VideoGenerationRequest, VideoTaskResponse, WaitOptions as VideoWaitOptions, VideoModel, FrameInput, KlingImageListItem, VideoReference, VideoRemixRequest, } from './modules/video';
|
|
15
20
|
export type { WebSearchRequest, WebSearchResult } from './modules/tools';
|
|
16
21
|
export type { OcrRequest, OcrResponse, OcrBlock } from './modules/ocr';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACH,OAAO,EACP,aAAa,EACb,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GACnB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACH,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,GAChB,MAAM,UAAU,CAAC;AAElB,YAAY,EACR,SAAS,EACT,UAAU,IAAI,cAAc,EAC5B,UAAU,IAAI,cAAc,EAC5B,KAAK,EACL,SAAS,GACZ,MAAM,UAAU,CAAC;AAElB,YAAY,EACR,cAAc,EACd,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACjB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACH,OAAO,EACP,aAAa,EACb,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GACnB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACH,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,GAChB,MAAM,UAAU,CAAC;AAElB,YAAY,EACR,SAAS,EACT,UAAU,IAAI,cAAc,EAC5B,UAAU,IAAI,cAAc,EAC5B,KAAK,EACL,SAAS,GACZ,MAAM,UAAU,CAAC;AAElB,YAAY,EACR,cAAc,EACd,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACjB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAGlF,cAAc,aAAa,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACvE,YAAY,EACR,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,IAAI,EACJ,UAAU,GACb,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACR,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,QAAQ,EACR,SAAS,EACT,aAAa,GAChB,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACrF,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGpE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG9D,YAAY,EACR,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,IAAI,gBAAgB,EAC/B,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,cAAc,GACjB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACR,sBAAsB,EACtB,iBAAiB,EACjB,WAAW,IAAI,gBAAgB,EAC/B,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,iBAAiB,GACpB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGzE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGvE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGtF,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGnG,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGzH,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.createPoller = exports.pollUntilComplete = exports.accumulateDelta = exports.createStreamAccumulator = exports.parseSSEStream = exports.APIError = exports.MODEL_CATALOG = exports.VIDEO_MODELS = exports.IMAGE_MODELS = exports.CHAT_MODELS = exports.timingMiddleware = exports.headersMiddleware = exports.retryMiddleware = exports.composeMiddleware = exports.defaultFetchAdapter = exports.createFilteredLogger = exports.noopLogger = exports.consoleLogger = exports.QiniuAI = void 0;
|
|
17
|
+
exports.createPoller = exports.pollUntilComplete = exports.accumulateDelta = exports.createStreamAccumulator = exports.parseSSEStream = exports.serializeToolResult = exports.generateText = exports.truncateHistory = exports.appendMessages = exports.MaxStepsExceededError = exports.ToolExecutionError = exports.AIError = exports.APIError = exports.MODEL_CATALOG = exports.VIDEO_MODELS = exports.IMAGE_MODELS = exports.CHAT_MODELS = exports.timingMiddleware = exports.headersMiddleware = exports.retryMiddleware = exports.composeMiddleware = exports.defaultFetchAdapter = exports.createFilteredLogger = exports.noopLogger = exports.consoleLogger = exports.QiniuAI = void 0;
|
|
18
18
|
// Main client
|
|
19
19
|
var client_1 = require("./client");
|
|
20
20
|
Object.defineProperty(exports, "QiniuAI", { enumerable: true, get: function () { return client_1.QiniuAI; } });
|
|
@@ -35,8 +35,20 @@ Object.defineProperty(exports, "MODEL_CATALOG", { enumerable: true, get: functio
|
|
|
35
35
|
// Error types
|
|
36
36
|
var request_1 = require("./lib/request");
|
|
37
37
|
Object.defineProperty(exports, "APIError", { enumerable: true, get: function () { return request_1.APIError; } });
|
|
38
|
+
var errors_1 = require("./lib/errors");
|
|
39
|
+
Object.defineProperty(exports, "AIError", { enumerable: true, get: function () { return errors_1.AIError; } });
|
|
40
|
+
Object.defineProperty(exports, "ToolExecutionError", { enumerable: true, get: function () { return errors_1.ToolExecutionError; } });
|
|
41
|
+
Object.defineProperty(exports, "MaxStepsExceededError", { enumerable: true, get: function () { return errors_1.MaxStepsExceededError; } });
|
|
38
42
|
// Shared types
|
|
39
43
|
__exportStar(require("./lib/types"), exports);
|
|
44
|
+
// Message helpers
|
|
45
|
+
var messages_1 = require("./lib/messages");
|
|
46
|
+
Object.defineProperty(exports, "appendMessages", { enumerable: true, get: function () { return messages_1.appendMessages; } });
|
|
47
|
+
Object.defineProperty(exports, "truncateHistory", { enumerable: true, get: function () { return messages_1.truncateHistory; } });
|
|
48
|
+
// Native generateText
|
|
49
|
+
var generate_text_1 = require("./ai/generate-text");
|
|
50
|
+
Object.defineProperty(exports, "generateText", { enumerable: true, get: function () { return generate_text_1.generateText; } });
|
|
51
|
+
Object.defineProperty(exports, "serializeToolResult", { enumerable: true, get: function () { return generate_text_1.serializeToolResult; } });
|
|
40
52
|
// SSE utilities (for advanced users who want to parse streams manually)
|
|
41
53
|
var sse_1 = require("./lib/sse");
|
|
42
54
|
Object.defineProperty(exports, "parseSSEStream", { enumerable: true, get: function () { return sse_1.parseSSEStream; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,cAAc;AACd,mCAUkB;AATd,iGAAA,OAAO,OAAA;AACP,uGAAA,aAAa,OAAA;AACb,oGAAA,UAAU,OAAA;AACV,8GAAA,oBAAoB,OAAA;AACpB,6GAAA,mBAAmB,OAAA;AACnB,2GAAA,iBAAiB,OAAA;AACjB,yGAAA,eAAe,OAAA;AACf,2GAAA,iBAAiB,OAAA;AACjB,0GAAA,gBAAgB,OAAA;AAGpB,gBAAgB;AAChB,mCAKkB;AAJd,qGAAA,WAAW,OAAA;AACX,sGAAA,YAAY,OAAA;AACZ,sGAAA,YAAY,OAAA;AACZ,uGAAA,aAAa,OAAA;AAsBjB,cAAc;AACd,yCAAyC;AAAhC,mGAAA,QAAQ,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,cAAc;AACd,mCAUkB;AATd,iGAAA,OAAO,OAAA;AACP,uGAAA,aAAa,OAAA;AACb,oGAAA,UAAU,OAAA;AACV,8GAAA,oBAAoB,OAAA;AACpB,6GAAA,mBAAmB,OAAA;AACnB,2GAAA,iBAAiB,OAAA;AACjB,yGAAA,eAAe,OAAA;AACf,2GAAA,iBAAiB,OAAA;AACjB,0GAAA,gBAAgB,OAAA;AAGpB,gBAAgB;AAChB,mCAKkB;AAJd,qGAAA,WAAW,OAAA;AACX,sGAAA,YAAY,OAAA;AACZ,sGAAA,YAAY,OAAA;AACZ,uGAAA,aAAa,OAAA;AAsBjB,cAAc;AACd,yCAAyC;AAAhC,mGAAA,QAAQ,OAAA;AACjB,uCAAkF;AAAzE,iGAAA,OAAO,OAAA;AAAE,4GAAA,kBAAkB,OAAA;AAAE,+GAAA,qBAAqB,OAAA;AAE3D,eAAe;AACf,8CAA4B;AAE5B,kBAAkB;AAClB,2CAAiE;AAAxD,0GAAA,cAAc,OAAA;AAAE,2GAAA,eAAe,OAAA;AAGxC,sBAAsB;AACtB,oDAAuE;AAA9D,6GAAA,YAAY,OAAA;AAAE,oHAAA,mBAAmB,OAAA;AAwB1C,wEAAwE;AACxE,iCAAqF;AAA5E,qGAAA,cAAc,OAAA;AAAE,8GAAA,uBAAuB,OAAA;AAAE,sGAAA,eAAe,OAAA;AAGjE,2EAA2E;AAC3E,uCAA+D;AAAtD,2GAAA,iBAAiB,OAAA;AAAE,sGAAA,YAAY,OAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -4,8 +4,13 @@ export { QiniuAI, consoleLogger, noopLogger, createFilteredLogger, defaultFetchA
|
|
|
4
4
|
export { CHAT_MODELS, IMAGE_MODELS, VIDEO_MODELS, MODEL_CATALOG, } from './models.mjs';
|
|
5
5
|
// Error types
|
|
6
6
|
export { APIError } from './lib/request.mjs';
|
|
7
|
+
export { AIError, ToolExecutionError, MaxStepsExceededError } from './lib/errors.mjs';
|
|
7
8
|
// Shared types
|
|
8
9
|
export * from './lib/types.mjs';
|
|
10
|
+
// Message helpers
|
|
11
|
+
export { appendMessages, truncateHistory } from './lib/messages.mjs';
|
|
12
|
+
// Native generateText
|
|
13
|
+
export { generateText, serializeToolResult } from './ai/generate-text.mjs';
|
|
9
14
|
// SSE utilities (for advanced users who want to parse streams manually)
|
|
10
15
|
export { parseSSEStream, createStreamAccumulator, accumulateDelta } from './lib/sse.mjs';
|
|
11
16
|
// Polling utilities (for advanced users who want to create custom pollers)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class AIError extends Error {
|
|
2
|
+
constructor(message: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class ToolExecutionError extends AIError {
|
|
5
|
+
toolName: string;
|
|
6
|
+
constructor(toolName: string, message: string);
|
|
7
|
+
}
|
|
8
|
+
export declare class MaxStepsExceededError extends AIError {
|
|
9
|
+
maxSteps: number;
|
|
10
|
+
constructor(maxSteps: number);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,OAAQ,SAAQ,KAAK;gBAClB,OAAO,EAAE,MAAM;CAI9B;AAED,qBAAa,kBAAmB,SAAQ,OAAO;IAC3C,QAAQ,EAAE,MAAM,CAAC;gBAEL,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAKhD;AAED,qBAAa,qBAAsB,SAAQ,OAAO;IAC9C,QAAQ,EAAE,MAAM,CAAC;gBAEL,QAAQ,EAAE,MAAM;CAK/B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MaxStepsExceededError = exports.ToolExecutionError = exports.AIError = void 0;
|
|
4
|
+
class AIError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'AIError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.AIError = AIError;
|
|
11
|
+
class ToolExecutionError extends AIError {
|
|
12
|
+
constructor(toolName, message) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.name = 'ToolExecutionError';
|
|
15
|
+
this.toolName = toolName;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.ToolExecutionError = ToolExecutionError;
|
|
19
|
+
class MaxStepsExceededError extends AIError {
|
|
20
|
+
constructor(maxSteps) {
|
|
21
|
+
super(`Max steps (${maxSteps}) exceeded while handling tool calls.`);
|
|
22
|
+
this.name = 'MaxStepsExceededError';
|
|
23
|
+
this.maxSteps = maxSteps;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.MaxStepsExceededError = MaxStepsExceededError;
|
|
27
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,OAAQ,SAAQ,KAAK;IAC9B,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IAC1B,CAAC;CACJ;AALD,0BAKC;AAED,MAAa,kBAAmB,SAAQ,OAAO;IAG3C,YAAY,QAAgB,EAAE,OAAe;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;CACJ;AARD,gDAQC;AAED,MAAa,qBAAsB,SAAQ,OAAO;IAG9C,YAAY,QAAgB;QACxB,KAAK,CAAC,cAAc,QAAQ,uCAAuC,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;CACJ;AARD,sDAQC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export class AIError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = 'AIError';
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class ToolExecutionError extends AIError {
|
|
8
|
+
constructor(toolName, message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = 'ToolExecutionError';
|
|
11
|
+
this.toolName = toolName;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class MaxStepsExceededError extends AIError {
|
|
15
|
+
constructor(maxSteps) {
|
|
16
|
+
super(`Max steps (${maxSteps}) exceeded while handling tool calls.`);
|
|
17
|
+
this.name = 'MaxStepsExceededError';
|
|
18
|
+
this.maxSteps = maxSteps;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ChatMessage } from './types';
|
|
2
|
+
export interface TruncateOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Whether to keep the first system message when truncating.
|
|
5
|
+
* Default: false
|
|
6
|
+
*/
|
|
7
|
+
keepSystem?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Append one or multiple messages to a history without mutating it.
|
|
11
|
+
*/
|
|
12
|
+
export declare function appendMessages(history: ChatMessage[], newMessage: ChatMessage | ChatMessage[]): ChatMessage[];
|
|
13
|
+
/**
|
|
14
|
+
* Truncate a message list to fit within an approximate token budget.
|
|
15
|
+
* Uses a lightweight heuristic based on character length.
|
|
16
|
+
*/
|
|
17
|
+
export declare function truncateHistory(messages: ChatMessage[], maxTokens: number, options?: TruncateOptions): ChatMessage[];
|
|
18
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/lib/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;AAExD,MAAM,WAAW,eAAe;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,EAAE,WAAW,GAAG,WAAW,EAAE,GACxC,WAAW,EAAE,CAGf;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,eAAoB,GAC9B,WAAW,EAAE,CAiCf"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.appendMessages = appendMessages;
|
|
4
|
+
exports.truncateHistory = truncateHistory;
|
|
5
|
+
/**
|
|
6
|
+
* Append one or multiple messages to a history without mutating it.
|
|
7
|
+
*/
|
|
8
|
+
function appendMessages(history, newMessage) {
|
|
9
|
+
const next = Array.isArray(newMessage) ? newMessage : [newMessage];
|
|
10
|
+
return [...history, ...next];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Truncate a message list to fit within an approximate token budget.
|
|
14
|
+
* Uses a lightweight heuristic based on character length.
|
|
15
|
+
*/
|
|
16
|
+
function truncateHistory(messages, maxTokens, options = {}) {
|
|
17
|
+
if (maxTokens <= 0) {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
const keepSystem = options.keepSystem ?? false;
|
|
21
|
+
const systemMessage = keepSystem ? messages.find((msg) => msg.role === 'system') : undefined;
|
|
22
|
+
const trimmed = [];
|
|
23
|
+
let totalTokens = 0;
|
|
24
|
+
for (let i = messages.length - 1; i >= 0; i -= 1) {
|
|
25
|
+
const message = messages[i];
|
|
26
|
+
if (keepSystem && message.role === 'system') {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const messageTokens = estimateMessageTokens(message);
|
|
30
|
+
if (totalTokens + messageTokens > maxTokens) {
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
trimmed.push(message);
|
|
34
|
+
totalTokens += messageTokens;
|
|
35
|
+
}
|
|
36
|
+
trimmed.reverse();
|
|
37
|
+
if (systemMessage && !trimmed.includes(systemMessage)) {
|
|
38
|
+
trimmed.unshift(systemMessage);
|
|
39
|
+
}
|
|
40
|
+
return trimmed;
|
|
41
|
+
}
|
|
42
|
+
function estimateMessageTokens(message) {
|
|
43
|
+
if (typeof message.content === 'string') {
|
|
44
|
+
return estimateTokensFromText(message.content);
|
|
45
|
+
}
|
|
46
|
+
if (Array.isArray(message.content)) {
|
|
47
|
+
return message.content.reduce((sum, part) => sum + estimateTokensFromPart(part), 0);
|
|
48
|
+
}
|
|
49
|
+
return 0;
|
|
50
|
+
}
|
|
51
|
+
function estimateTokensFromPart(part) {
|
|
52
|
+
if (part.type === 'text') {
|
|
53
|
+
return estimateTokensFromText(part.text ?? '');
|
|
54
|
+
}
|
|
55
|
+
if (part.type === 'image_url') {
|
|
56
|
+
return 50;
|
|
57
|
+
}
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
function estimateTokensFromText(text) {
|
|
61
|
+
if (!text) {
|
|
62
|
+
return 0;
|
|
63
|
+
}
|
|
64
|
+
return Math.ceil(text.length / 4);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/lib/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Append one or multiple messages to a history without mutating it.
|
|
3
|
+
*/
|
|
4
|
+
export function appendMessages(history, newMessage) {
|
|
5
|
+
const next = Array.isArray(newMessage) ? newMessage : [newMessage];
|
|
6
|
+
return [...history, ...next];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Truncate a message list to fit within an approximate token budget.
|
|
10
|
+
* Uses a lightweight heuristic based on character length.
|
|
11
|
+
*/
|
|
12
|
+
export function truncateHistory(messages, maxTokens, options = {}) {
|
|
13
|
+
if (maxTokens <= 0) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
const keepSystem = options.keepSystem ?? false;
|
|
17
|
+
const systemMessage = keepSystem ? messages.find((msg) => msg.role === 'system') : undefined;
|
|
18
|
+
const trimmed = [];
|
|
19
|
+
let totalTokens = 0;
|
|
20
|
+
for (let i = messages.length - 1; i >= 0; i -= 1) {
|
|
21
|
+
const message = messages[i];
|
|
22
|
+
if (keepSystem && message.role === 'system') {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const messageTokens = estimateMessageTokens(message);
|
|
26
|
+
if (totalTokens + messageTokens > maxTokens) {
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
trimmed.push(message);
|
|
30
|
+
totalTokens += messageTokens;
|
|
31
|
+
}
|
|
32
|
+
trimmed.reverse();
|
|
33
|
+
if (systemMessage && !trimmed.includes(systemMessage)) {
|
|
34
|
+
trimmed.unshift(systemMessage);
|
|
35
|
+
}
|
|
36
|
+
return trimmed;
|
|
37
|
+
}
|
|
38
|
+
function estimateMessageTokens(message) {
|
|
39
|
+
if (typeof message.content === 'string') {
|
|
40
|
+
return estimateTokensFromText(message.content);
|
|
41
|
+
}
|
|
42
|
+
if (Array.isArray(message.content)) {
|
|
43
|
+
return message.content.reduce((sum, part) => sum + estimateTokensFromPart(part), 0);
|
|
44
|
+
}
|
|
45
|
+
return 0;
|
|
46
|
+
}
|
|
47
|
+
function estimateTokensFromPart(part) {
|
|
48
|
+
if (part.type === 'text') {
|
|
49
|
+
return estimateTokensFromText(part.text ?? '');
|
|
50
|
+
}
|
|
51
|
+
if (part.type === 'image_url') {
|
|
52
|
+
return 50;
|
|
53
|
+
}
|
|
54
|
+
return 0;
|
|
55
|
+
}
|
|
56
|
+
function estimateTokensFromText(text) {
|
|
57
|
+
if (!text) {
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
return Math.ceil(text.length / 4);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -78,6 +78,49 @@ export interface ImageTaskResponse {
|
|
|
78
78
|
};
|
|
79
79
|
quantity?: number;
|
|
80
80
|
}
|
|
81
|
+
export interface ImageUsage {
|
|
82
|
+
total_tokens: number;
|
|
83
|
+
input_tokens: number;
|
|
84
|
+
output_tokens: number;
|
|
85
|
+
input_tokens_details?: {
|
|
86
|
+
text_tokens: number;
|
|
87
|
+
image_tokens: number;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export interface SyncImageResponse {
|
|
91
|
+
isSync: true;
|
|
92
|
+
created: number;
|
|
93
|
+
data: {
|
|
94
|
+
index: number;
|
|
95
|
+
b64_json: string;
|
|
96
|
+
}[];
|
|
97
|
+
output_format: 'png' | 'jpeg';
|
|
98
|
+
usage?: ImageUsage;
|
|
99
|
+
}
|
|
100
|
+
export interface AsyncImageResponse {
|
|
101
|
+
isSync: false;
|
|
102
|
+
task_id: string;
|
|
103
|
+
}
|
|
104
|
+
export type ImageCreateResult = SyncImageResponse | AsyncImageResponse;
|
|
105
|
+
export interface ImageGenerateResult {
|
|
106
|
+
task_id?: string;
|
|
107
|
+
created?: number;
|
|
108
|
+
/**
|
|
109
|
+
* Task status:
|
|
110
|
+
* - Async models: real status returned by the service
|
|
111
|
+
* - Sync models: SDK sets it to 'succeed' when data is returned
|
|
112
|
+
*/
|
|
113
|
+
status: 'succeed' | 'failed';
|
|
114
|
+
status_message?: string;
|
|
115
|
+
data: {
|
|
116
|
+
index: number;
|
|
117
|
+
url?: string;
|
|
118
|
+
b64_json?: string;
|
|
119
|
+
}[];
|
|
120
|
+
output_format?: 'png' | 'jpeg';
|
|
121
|
+
usage?: ImageUsage;
|
|
122
|
+
isSync: boolean;
|
|
123
|
+
}
|
|
81
124
|
export interface WaitOptions {
|
|
82
125
|
intervalMs?: number;
|
|
83
126
|
timeoutMs?: number;
|
|
@@ -89,10 +132,16 @@ export declare class Image {
|
|
|
89
132
|
constructor(client: IQiniuClient);
|
|
90
133
|
/**
|
|
91
134
|
* Create an image generation task
|
|
135
|
+
*
|
|
136
|
+
* @deprecated Use generate() for unified sync/async handling.
|
|
92
137
|
*/
|
|
93
138
|
create(params: ImageGenerationRequest): Promise<{
|
|
94
139
|
task_id: string;
|
|
95
140
|
}>;
|
|
141
|
+
/**
|
|
142
|
+
* Unified image generation API for both sync and async models.
|
|
143
|
+
*/
|
|
144
|
+
generate(params: ImageGenerationRequest): Promise<ImageCreateResult>;
|
|
96
145
|
/**
|
|
97
146
|
* Edit or transform images.
|
|
98
147
|
*/
|
|
@@ -103,7 +152,13 @@ export declare class Image {
|
|
|
103
152
|
get(taskId: string): Promise<ImageTaskResponse>;
|
|
104
153
|
/**
|
|
105
154
|
* Poll for completion with retry and cancellation support
|
|
155
|
+
*
|
|
156
|
+
* @deprecated Use waitForResult() for unified sync/async handling.
|
|
106
157
|
*/
|
|
107
158
|
waitForCompletion(taskId: string, options?: WaitOptions): Promise<ImageTaskResponse>;
|
|
159
|
+
/**
|
|
160
|
+
* Wait for a unified image generation result.
|
|
161
|
+
*/
|
|
162
|
+
waitForResult(result: ImageCreateResult, options?: WaitOptions): Promise<ImageGenerateResult>;
|
|
108
163
|
}
|
|
109
164
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/image/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/image/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,9 +9,24 @@ class Image {
|
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
11
|
* Create an image generation task
|
|
12
|
+
*
|
|
13
|
+
* @deprecated Use generate() for unified sync/async handling.
|
|
12
14
|
*/
|
|
13
15
|
async create(params) {
|
|
14
|
-
|
|
16
|
+
const response = await this.client.post('/images/generations', params);
|
|
17
|
+
const result = response;
|
|
18
|
+
if (!result.task_id || typeof result.task_id !== 'string') {
|
|
19
|
+
throw new Error('This model returns synchronous results without task_id. ' +
|
|
20
|
+
'Please use image.generate() instead of image.create() for unified handling.');
|
|
21
|
+
}
|
|
22
|
+
return { task_id: result.task_id };
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Unified image generation API for both sync and async models.
|
|
26
|
+
*/
|
|
27
|
+
async generate(params) {
|
|
28
|
+
const response = await this.client.post('/images/generations', params);
|
|
29
|
+
return normalizeCreateResponse(response);
|
|
15
30
|
}
|
|
16
31
|
/**
|
|
17
32
|
* Edit or transform images.
|
|
@@ -42,6 +57,8 @@ class Image {
|
|
|
42
57
|
}
|
|
43
58
|
/**
|
|
44
59
|
* Poll for completion with retry and cancellation support
|
|
60
|
+
*
|
|
61
|
+
* @deprecated Use waitForResult() for unified sync/async handling.
|
|
45
62
|
*/
|
|
46
63
|
async waitForCompletion(taskId, options = {}) {
|
|
47
64
|
const { intervalMs = 2000, timeoutMs = 120000, signal, maxRetries = 3, } = options;
|
|
@@ -64,6 +81,49 @@ class Image {
|
|
|
64
81
|
});
|
|
65
82
|
return result;
|
|
66
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Wait for a unified image generation result.
|
|
86
|
+
*/
|
|
87
|
+
async waitForResult(result, options = {}) {
|
|
88
|
+
if (result.isSync) {
|
|
89
|
+
return {
|
|
90
|
+
created: result.created,
|
|
91
|
+
status: 'succeed',
|
|
92
|
+
data: result.data,
|
|
93
|
+
output_format: result.output_format,
|
|
94
|
+
usage: result.usage,
|
|
95
|
+
isSync: true,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const taskResult = await this.waitForCompletion(result.task_id, options);
|
|
99
|
+
return {
|
|
100
|
+
task_id: taskResult.task_id,
|
|
101
|
+
created: taskResult.created,
|
|
102
|
+
status: taskResult.status === 'failed' ? 'failed' : 'succeed',
|
|
103
|
+
status_message: taskResult.status_message,
|
|
104
|
+
data: taskResult.data || [],
|
|
105
|
+
isSync: false,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
67
108
|
}
|
|
68
109
|
exports.Image = Image;
|
|
110
|
+
function normalizeCreateResponse(response) {
|
|
111
|
+
const res = response;
|
|
112
|
+
if (res.task_id && typeof res.task_id === 'string') {
|
|
113
|
+
return {
|
|
114
|
+
isSync: false,
|
|
115
|
+
task_id: res.task_id,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (res.data && Array.isArray(res.data)) {
|
|
119
|
+
return {
|
|
120
|
+
isSync: true,
|
|
121
|
+
data: res.data,
|
|
122
|
+
created: typeof res.created === 'number' ? res.created : 0,
|
|
123
|
+
output_format: res.output_format || 'png',
|
|
124
|
+
usage: res.usage,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
throw new Error('Unexpected image generation response format');
|
|
128
|
+
}
|
|
69
129
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/image/index.ts"],"names":[],"mappings":";;;AAEA,6CAAqD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/image/index.ts"],"names":[],"mappings":"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"}
|