@cloudbase/ai 2.7.3-beta.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/.eslintignore +2 -0
- package/.eslintrc.js +15 -0
- package/LICENSE +202 -0
- package/dist/cjs/index.d.ts +40 -0
- package/dist/cjs/index.js +171 -0
- package/dist/cjs/models/HunYuan/index.d.ts +25 -0
- package/dist/cjs/models/HunYuan/index.js +191 -0
- package/dist/cjs/models/HunYuan/type.d.ts +52 -0
- package/dist/cjs/models/HunYuan/type.js +3 -0
- package/dist/cjs/models/HunYuanPreview/index.d.ts +25 -0
- package/dist/cjs/models/HunYuanPreview/index.js +191 -0
- package/dist/cjs/models/HunYuanPreview/type.d.ts +52 -0
- package/dist/cjs/models/HunYuanPreview/type.js +3 -0
- package/dist/cjs/models/HuoShan/index.d.ts +24 -0
- package/dist/cjs/models/HuoShan/index.js +163 -0
- package/dist/cjs/models/HuoShan/type.d.ts +38 -0
- package/dist/cjs/models/HuoShan/type.js +3 -0
- package/dist/cjs/models/LingJi/index.d.ts +24 -0
- package/dist/cjs/models/LingJi/index.js +163 -0
- package/dist/cjs/models/LingJi/type.d.ts +43 -0
- package/dist/cjs/models/LingJi/type.js +3 -0
- package/dist/cjs/models/LingYi/index.d.ts +24 -0
- package/dist/cjs/models/LingYi/index.js +163 -0
- package/dist/cjs/models/LingYi/type.d.ts +49 -0
- package/dist/cjs/models/LingYi/type.js +3 -0
- package/dist/cjs/models/YueZhi/index.d.ts +24 -0
- package/dist/cjs/models/YueZhi/index.js +163 -0
- package/dist/cjs/models/YueZhi/type.d.ts +31 -0
- package/dist/cjs/models/YueZhi/type.js +3 -0
- package/dist/cjs/models/ZhiPu/index.d.ts +24 -0
- package/dist/cjs/models/ZhiPu/index.js +163 -0
- package/dist/cjs/models/ZhiPu/type.d.ts +71 -0
- package/dist/cjs/models/ZhiPu/type.js +3 -0
- package/dist/cjs/models/index.d.ts +17 -0
- package/dist/cjs/models/index.js +27 -0
- package/dist/cjs/type.d.ts +37 -0
- package/dist/cjs/type.js +16 -0
- package/dist/cjs/utils.d.ts +28 -0
- package/dist/cjs/utils.js +152 -0
- package/dist/esm/index.d.ts +40 -0
- package/dist/esm/index.js +141 -0
- package/dist/esm/models/HunYuan/index.d.ts +25 -0
- package/dist/esm/models/HunYuan/index.js +188 -0
- package/dist/esm/models/HunYuan/type.d.ts +52 -0
- package/dist/esm/models/HunYuan/type.js +2 -0
- package/dist/esm/models/HunYuanPreview/index.d.ts +25 -0
- package/dist/esm/models/HunYuanPreview/index.js +188 -0
- package/dist/esm/models/HunYuanPreview/type.d.ts +52 -0
- package/dist/esm/models/HunYuanPreview/type.js +2 -0
- package/dist/esm/models/HuoShan/index.d.ts +24 -0
- package/dist/esm/models/HuoShan/index.js +160 -0
- package/dist/esm/models/HuoShan/type.d.ts +38 -0
- package/dist/esm/models/HuoShan/type.js +2 -0
- package/dist/esm/models/LingJi/index.d.ts +24 -0
- package/dist/esm/models/LingJi/index.js +160 -0
- package/dist/esm/models/LingJi/type.d.ts +43 -0
- package/dist/esm/models/LingJi/type.js +2 -0
- package/dist/esm/models/LingYi/index.d.ts +24 -0
- package/dist/esm/models/LingYi/index.js +160 -0
- package/dist/esm/models/LingYi/type.d.ts +49 -0
- package/dist/esm/models/LingYi/type.js +2 -0
- package/dist/esm/models/YueZhi/index.d.ts +24 -0
- package/dist/esm/models/YueZhi/index.js +160 -0
- package/dist/esm/models/YueZhi/type.d.ts +31 -0
- package/dist/esm/models/YueZhi/type.js +2 -0
- package/dist/esm/models/ZhiPu/index.d.ts +24 -0
- package/dist/esm/models/ZhiPu/index.js +160 -0
- package/dist/esm/models/ZhiPu/type.d.ts +71 -0
- package/dist/esm/models/ZhiPu/type.js +2 -0
- package/dist/esm/models/index.d.ts +17 -0
- package/dist/esm/models/index.js +18 -0
- package/dist/esm/type.d.ts +37 -0
- package/dist/esm/type.js +13 -0
- package/dist/esm/utils.d.ts +28 -0
- package/dist/esm/utils.js +147 -0
- package/package.json +36 -0
- package/src/index.ts +77 -0
- package/src/models/HunYuan/index.ts +110 -0
- package/src/models/HunYuan/type.ts +61 -0
- package/src/models/HunYuanPreview/index.ts +110 -0
- package/src/models/HunYuanPreview/type.ts +61 -0
- package/src/models/HuoShan/index.ts +92 -0
- package/src/models/HuoShan/type.ts +41 -0
- package/src/models/LingJi/index.ts +92 -0
- package/src/models/LingJi/type.ts +34 -0
- package/src/models/LingYi/index.ts +92 -0
- package/src/models/LingYi/type.ts +49 -0
- package/src/models/YueZhi/index.ts +92 -0
- package/src/models/YueZhi/type.ts +28 -0
- package/src/models/ZhiPu/index.ts +92 -0
- package/src/models/ZhiPu/type.ts +60 -0
- package/src/models/index.ts +19 -0
- package/src/type.ts +42 -0
- package/src/utils.ts +110 -0
- package/tsconfig.esm.json +16 -0
- package/tsconfig.json +16 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { TransformStream as _TransformStream, ReadableStream as _ReadableStream } from 'web-streams-polyfill';
|
|
38
|
+
import { createReadableStreamWrapper } from '@mattiasbuelens/web-streams-adapter';
|
|
39
|
+
import { createParser } from 'eventsource-parser';
|
|
40
|
+
export var ReadableStream = _ReadableStream;
|
|
41
|
+
export var TransformStream = _TransformStream;
|
|
42
|
+
export var createEventSourceParserTransformStream = function () {
|
|
43
|
+
var parser;
|
|
44
|
+
return new TransformStream({
|
|
45
|
+
start: function (controller) {
|
|
46
|
+
parser = createParser(function (event) {
|
|
47
|
+
if (event.type === 'event') {
|
|
48
|
+
controller.enqueue(event);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
transform: function (chunk) {
|
|
53
|
+
parser.feed(chunk);
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
export var toPolyfillReadable = createReadableStreamWrapper(ReadableStream);
|
|
58
|
+
var TextDecoderStream = (function () {
|
|
59
|
+
function TextDecoderStream(encoding, options) {
|
|
60
|
+
if (encoding === void 0) { encoding = 'utf-8'; }
|
|
61
|
+
if (options === void 0) { options = {}; }
|
|
62
|
+
var _this = this;
|
|
63
|
+
this.transform = new TransformStream({
|
|
64
|
+
transform: function (chunk, controller) {
|
|
65
|
+
var value = _this.handle.decode(chunk, { stream: true });
|
|
66
|
+
if (value) {
|
|
67
|
+
controller.enqueue(value);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
flush: function (controller) {
|
|
71
|
+
var value = _this.handle.decode();
|
|
72
|
+
if (value) {
|
|
73
|
+
controller.enqueue(value);
|
|
74
|
+
}
|
|
75
|
+
controller.terminate();
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
this.handle = new TextDecoder(encoding, options);
|
|
79
|
+
}
|
|
80
|
+
Object.defineProperty(TextDecoderStream.prototype, "encoding", {
|
|
81
|
+
get: function () {
|
|
82
|
+
return this.handle.encoding;
|
|
83
|
+
},
|
|
84
|
+
enumerable: false,
|
|
85
|
+
configurable: true
|
|
86
|
+
});
|
|
87
|
+
Object.defineProperty(TextDecoderStream.prototype, "fatal", {
|
|
88
|
+
get: function () {
|
|
89
|
+
return this.handle.fatal;
|
|
90
|
+
},
|
|
91
|
+
enumerable: false,
|
|
92
|
+
configurable: true
|
|
93
|
+
});
|
|
94
|
+
Object.defineProperty(TextDecoderStream.prototype, "ignoreBOM", {
|
|
95
|
+
get: function () {
|
|
96
|
+
return this.handle.ignoreBOM;
|
|
97
|
+
},
|
|
98
|
+
enumerable: false,
|
|
99
|
+
configurable: true
|
|
100
|
+
});
|
|
101
|
+
Object.defineProperty(TextDecoderStream.prototype, "readable", {
|
|
102
|
+
get: function () {
|
|
103
|
+
return this.transform.readable;
|
|
104
|
+
},
|
|
105
|
+
enumerable: false,
|
|
106
|
+
configurable: true
|
|
107
|
+
});
|
|
108
|
+
Object.defineProperty(TextDecoderStream.prototype, "writable", {
|
|
109
|
+
get: function () {
|
|
110
|
+
return this.transform.writable;
|
|
111
|
+
},
|
|
112
|
+
enumerable: false,
|
|
113
|
+
configurable: true
|
|
114
|
+
});
|
|
115
|
+
Object.defineProperty(TextDecoderStream.prototype, Symbol.toStringTag, {
|
|
116
|
+
get: function () {
|
|
117
|
+
return 'TextDecoderStream';
|
|
118
|
+
},
|
|
119
|
+
enumerable: false,
|
|
120
|
+
configurable: true
|
|
121
|
+
});
|
|
122
|
+
return TextDecoderStream;
|
|
123
|
+
}());
|
|
124
|
+
export { TextDecoderStream };
|
|
125
|
+
export function createAsyncIterable(stream) {
|
|
126
|
+
var _stream = stream;
|
|
127
|
+
_stream[Symbol.asyncIterator] = function () {
|
|
128
|
+
var reader = stream.getReader();
|
|
129
|
+
return {
|
|
130
|
+
next: function () {
|
|
131
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
132
|
+
var _a, done, value;
|
|
133
|
+
return __generator(this, function (_b) {
|
|
134
|
+
switch (_b.label) {
|
|
135
|
+
case 0: return [4, reader.read()];
|
|
136
|
+
case 1:
|
|
137
|
+
_a = _b.sent(), done = _a.done, value = _a.value;
|
|
138
|
+
return [2, done ? { done: true, value: undefined } : { done: false, value: value }];
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
return _stream;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRSxjQUFjLElBQUksZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDN0csT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scUNBQXFDLENBQUE7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBNEMsTUFBTSxvQkFBb0IsQ0FBQTtBQUczRixNQUFNLENBQUMsSUFBTSxjQUFjLEdBQUcsZUFXN0IsQ0FBQTtBQUVELE1BQU0sQ0FBQyxJQUFNLGVBQWUsR0FBRyxnQkFROUIsQ0FBQTtBQUVELE1BQU0sQ0FBQyxJQUFNLHNDQUFzQyxHQUFHO0lBQ3BELElBQUksTUFBMEIsQ0FBQTtJQUU5QixPQUFPLElBQUksZUFBZSxDQUFzQjtRQUM5QyxLQUFLLFlBQUMsVUFBVTtZQUNkLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBQyxLQUFLO2dCQUMxQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO29CQUMxQixVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2lCQUMxQjtZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUNELFNBQVMsWUFBQyxLQUFLO1lBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNwQixDQUFDO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLElBQU0sa0JBQWtCLEdBQUcsMkJBQTJCLENBQUMsY0FBYyxDQUFDLENBQUE7QUFFN0U7SUFxQkUsMkJBQVksUUFBa0IsRUFBRSxPQUFnQztRQUFwRCx5QkFBQSxFQUFBLGtCQUFrQjtRQUFFLHdCQUFBLEVBQUEsWUFBZ0M7UUFBaEUsaUJBRUM7UUFwQk8sY0FBUyxHQUFHLElBQUksZUFBZSxDQUFDO1lBQ3RDLFNBQVMsRUFBRSxVQUFDLEtBQUssRUFBRSxVQUFVO2dCQUMzQixJQUFNLEtBQUssR0FBRyxLQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtnQkFFekQsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtpQkFDMUI7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLFVBQUMsVUFBVTtnQkFDaEIsSUFBTSxLQUFLLEdBQUcsS0FBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtnQkFDbEMsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtpQkFDMUI7Z0JBRUQsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFBO1lBQ3hCLENBQUM7U0FDRixDQUFDLENBQUE7UUFHQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBRUQsc0JBQUksdUNBQVE7YUFBWjtZQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUE7UUFDN0IsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSxvQ0FBSzthQUFUO1lBQ0UsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQTtRQUMxQixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLHdDQUFTO2FBQWI7WUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFBO1FBQzlCLENBQUM7OztPQUFBO0lBRUQsc0JBQUksdUNBQVE7YUFBWjtZQUNFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUE7UUFDaEMsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSx1Q0FBUTthQUFaO1lBQ0UsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQTtRQUNoQyxDQUFDOzs7T0FBQTtJQUVELHNCQUFJLDZCQUFDLE1BQU0sQ0FBQyxXQUFZO2FBQXhCO1lBQ0UsT0FBTyxtQkFBbUIsQ0FBQTtRQUM1QixDQUFDOzs7T0FBQTtJQUNILHdCQUFDO0FBQUQsQ0FBQyxBQWhERCxJQWdEQzs7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUksTUFBeUI7SUFDOUQsSUFBTSxPQUFPLEdBQUcsTUFBd0MsQ0FBQTtJQUN4RCxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHO1FBQzlCLElBQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUNqQyxPQUFPO1lBQ0MsSUFBSTs7Ozs7b0NBQ2dCLFdBQU0sTUFBTSxDQUFDLElBQUksRUFBRSxFQUFBOztnQ0FBckMsS0FBa0IsU0FBbUIsRUFBbkMsSUFBSSxVQUFBLEVBQUUsS0FBSyxXQUFBO2dDQUNuQixXQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssT0FBQSxFQUFFLEVBQUE7Ozs7YUFDeEU7U0FDRixDQUFBO0lBQ0gsQ0FBQyxDQUFBO0lBQ0QsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zZm9ybVN0cmVhbSBhcyBfVHJhbnNmb3JtU3RyZWFtLCBSZWFkYWJsZVN0cmVhbSBhcyBfUmVhZGFibGVTdHJlYW0gfSBmcm9tICd3ZWItc3RyZWFtcy1wb2x5ZmlsbCdcbmltcG9ydCB7IGNyZWF0ZVJlYWRhYmxlU3RyZWFtV3JhcHBlciB9IGZyb20gJ0BtYXR0aWFzYnVlbGVucy93ZWItc3RyZWFtcy1hZGFwdGVyJ1xuaW1wb3J0IHsgY3JlYXRlUGFyc2VyLCB0eXBlIEV2ZW50U291cmNlUGFyc2VyLCB0eXBlIFBhcnNlZEV2ZW50IH0gZnJvbSAnZXZlbnRzb3VyY2UtcGFyc2VyJ1xuaW1wb3J0IHR5cGUgeyBBc3luY0l0ZXJhYmxlUmVhZGFibGVTdHJlYW0gfSBmcm9tICcuL3R5cGUnXG5cbmV4cG9ydCBjb25zdCBSZWFkYWJsZVN0cmVhbSA9IF9SZWFkYWJsZVN0cmVhbSBhcyB7XG4gIHByb3RvdHlwZTogUmVhZGFibGVTdHJlYW1cblxuICBuZXcgKFxuICAgIHVuZGVybHlpbmdTb3VyY2U6IFVuZGVybHlpbmdCeXRlU291cmNlLFxuICAgIHN0cmF0ZWd5Pzoge1xuICAgICAgaGlnaFdhdGVyTWFyaz86IG51bWJlclxuICAgIH0sXG4gICk6IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+XG4gIG5ldyA8UiA9IGFueT4odW5kZXJseWluZ1NvdXJjZTogVW5kZXJseWluZ0RlZmF1bHRTb3VyY2U8Uj4sIHN0cmF0ZWd5PzogUXVldWluZ1N0cmF0ZWd5PFI+KTogUmVhZGFibGVTdHJlYW08Uj5cbiAgbmV3IDxSID0gYW55Pih1bmRlcmx5aW5nU291cmNlPzogVW5kZXJseWluZ1NvdXJjZTxSPiwgc3RyYXRlZ3k/OiBRdWV1aW5nU3RyYXRlZ3k8Uj4pOiBSZWFkYWJsZVN0cmVhbTxSPlxufVxuXG5leHBvcnQgY29uc3QgVHJhbnNmb3JtU3RyZWFtID0gX1RyYW5zZm9ybVN0cmVhbSBhcyB7XG4gIHByb3RvdHlwZTogVHJhbnNmb3JtU3RyZWFtXG5cbiAgbmV3IDxJID0gYW55LCBPID0gYW55PihcbiAgICB0cmFuc2Zvcm1lcj86IFRyYW5zZm9ybWVyPEksIE8+LFxuICAgIHdyaXRhYmxlU3RyYXRlZ3k/OiBRdWV1aW5nU3RyYXRlZ3k8ST4sXG4gICAgcmVhZGFibGVTdHJhdGVneT86IFF1ZXVpbmdTdHJhdGVneTxPPixcbiAgKTogVHJhbnNmb3JtU3RyZWFtPEksIE8+XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVFdmVudFNvdXJjZVBhcnNlclRyYW5zZm9ybVN0cmVhbSA9ICgpID0+IHtcbiAgbGV0IHBhcnNlciE6IEV2ZW50U291cmNlUGFyc2VyXG5cbiAgcmV0dXJuIG5ldyBUcmFuc2Zvcm1TdHJlYW08c3RyaW5nLCBQYXJzZWRFdmVudD4oe1xuICAgIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgIHBhcnNlciA9IGNyZWF0ZVBhcnNlcigoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdldmVudCcpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcbiAgICB0cmFuc2Zvcm0oY2h1bmspIHtcbiAgICAgIHBhcnNlci5mZWVkKGNodW5rKVxuICAgIH0sXG4gIH0pXG59XG5cbmV4cG9ydCBjb25zdCB0b1BvbHlmaWxsUmVhZGFibGUgPSBjcmVhdGVSZWFkYWJsZVN0cmVhbVdyYXBwZXIoUmVhZGFibGVTdHJlYW0pXG5cbmV4cG9ydCBjbGFzcyBUZXh0RGVjb2RlclN0cmVhbSB7XG4gIHByaXZhdGUgaGFuZGxlOiBUZXh0RGVjb2RlclxuXG4gIHByaXZhdGUgdHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7XG4gICAgdHJhbnNmb3JtOiAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGUuZGVjb2RlKGNodW5rLCB7IHN0cmVhbTogdHJ1ZSB9KVxuXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG4gICAgZmx1c2g6IChjb250cm9sbGVyKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaGFuZGxlLmRlY29kZSgpXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKHZhbHVlKVxuICAgICAgfVxuXG4gICAgICBjb250cm9sbGVyLnRlcm1pbmF0ZSgpXG4gICAgfSxcbiAgfSlcblxuICBjb25zdHJ1Y3RvcihlbmNvZGluZyA9ICd1dGYtOCcsIG9wdGlvbnM6IFRleHREZWNvZGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5oYW5kbGUgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZW5jb2RpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlLmVuY29kaW5nXG4gIH1cblxuICBnZXQgZmF0YWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlLmZhdGFsXG4gIH1cblxuICBnZXQgaWdub3JlQk9NKCkge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZS5pZ25vcmVCT01cbiAgfVxuXG4gIGdldCByZWFkYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVhZGFibGVcbiAgfVxuXG4gIGdldCB3cml0YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ud3JpdGFibGVcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ1RleHREZWNvZGVyU3RyZWFtJ1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBc3luY0l0ZXJhYmxlPFQ+KHN0cmVhbTogUmVhZGFibGVTdHJlYW08VD4pIHtcbiAgY29uc3QgX3N0cmVhbSA9IHN0cmVhbSBhcyBBc3luY0l0ZXJhYmxlUmVhZGFibGVTdHJlYW08VD5cbiAgX3N0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSAoKSA9PiB7XG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpXG4gICAgcmV0dXJuIHtcbiAgICAgIGFzeW5jIG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxUPj4ge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgICAgIHJldHVybiBkb25lID8geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0gOiB7IGRvbmU6IGZhbHNlLCB2YWx1ZSB9XG4gICAgICB9LFxuICAgIH1cbiAgfVxuICByZXR1cm4gX3N0cmVhbVxufVxuIl19
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cloudbase/ai",
|
|
3
|
+
"version": "2.7.3-beta.0",
|
|
4
|
+
"description": "cloudbase js sdk ai module",
|
|
5
|
+
"main": "dist/cjs/index.js",
|
|
6
|
+
"module": "dist/esm/index.js",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"tsc": "rm -rf dist/ && tsc -p tsconfig.esm.json && tsc -p tsconfig.json",
|
|
9
|
+
"lint": "eslint --fix \"./src/**/*.ts\"",
|
|
10
|
+
"build": "npm run lint && npm run tsc",
|
|
11
|
+
"precommit": "npm run lint"
|
|
12
|
+
},
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public"
|
|
15
|
+
},
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "https://github.com/TencentCloudBase/cloudbase-js-sdk"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"tcb",
|
|
22
|
+
"cloudbase",
|
|
23
|
+
"javascript",
|
|
24
|
+
"typescript",
|
|
25
|
+
"serverless"
|
|
26
|
+
],
|
|
27
|
+
"author": "",
|
|
28
|
+
"license": "Apache-2.0",
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@cloudbase/types": "^2.7.3-beta.0",
|
|
31
|
+
"@mattiasbuelens/web-streams-adapter": "^0.1.0",
|
|
32
|
+
"eventsource-parser": "^1.1.2",
|
|
33
|
+
"web-streams-polyfill": "^4.0.0"
|
|
34
|
+
},
|
|
35
|
+
"gitHead": "ba281f964f720e4f87e79e9f87c7cda352fd4eb2"
|
|
36
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { ICloudbase } from '@cloudbase/types'
|
|
2
|
+
import type { ICloudbaseComponent } from '@cloudbase/types/component'
|
|
3
|
+
import type { SDKRequestInterface } from '@cloudbase/adapter-interface'
|
|
4
|
+
import * as models from './models'
|
|
5
|
+
import * as types from './type'
|
|
6
|
+
import * as utils from './utils'
|
|
7
|
+
|
|
8
|
+
const { MODELS, ...restModels } = models
|
|
9
|
+
|
|
10
|
+
class AI {
|
|
11
|
+
constructor(private req: SDKRequestInterface, public baseUrl: string) {}
|
|
12
|
+
|
|
13
|
+
request: types.ModelReq = async ({ url, data, headers, stream }) => (
|
|
14
|
+
await this.req.fetch({
|
|
15
|
+
method: 'post',
|
|
16
|
+
headers: {
|
|
17
|
+
...headers,
|
|
18
|
+
},
|
|
19
|
+
body: JSON.stringify(data),
|
|
20
|
+
url,
|
|
21
|
+
stream,
|
|
22
|
+
})
|
|
23
|
+
).data
|
|
24
|
+
|
|
25
|
+
createModel<T extends keyof typeof MODELS>(model: T) {
|
|
26
|
+
return new MODELS[model](this.request, this.baseUrl) as InstanceType<(typeof MODELS)[T]>
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
registerModel(name: string, model: types.ChatModelConstructor) {
|
|
30
|
+
if (MODELS[name] != null) {
|
|
31
|
+
console.warn(`AI model ${name} already exists!`)
|
|
32
|
+
return
|
|
33
|
+
}
|
|
34
|
+
MODELS[name] = model
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const COMPONENT_NAME = 'ai'
|
|
39
|
+
|
|
40
|
+
interface AIInitOption {
|
|
41
|
+
env?: string
|
|
42
|
+
region?: string
|
|
43
|
+
baseUrl?: string
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async function ai(this: ICloudbase, options?: AIInitOption) {
|
|
47
|
+
const req = this.request
|
|
48
|
+
|
|
49
|
+
if (req.fetch == null) {
|
|
50
|
+
throw new Error('cloudbase.request.fetch() unimplemented!')
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const accessTokenFromAuth = this.authInstance
|
|
54
|
+
? await this.authInstance!.getAccessToken()
|
|
55
|
+
: { accessToken: '', env: '' }
|
|
56
|
+
|
|
57
|
+
const env = options?.env ?? accessTokenFromAuth.env
|
|
58
|
+
const region = options?.region ?? 'ap-shanghai'
|
|
59
|
+
const baseUrl = options?.baseUrl ?? `https://${env}.${region}.ai.tcloudbasegateway.com/v1/ai`
|
|
60
|
+
|
|
61
|
+
return new AI(req, baseUrl)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const component: ICloudbaseComponent = {
|
|
65
|
+
name: COMPONENT_NAME,
|
|
66
|
+
entity: { ai },
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function registerAi(app: ICloudbase) {
|
|
70
|
+
try {
|
|
71
|
+
app.registerComponent(component)
|
|
72
|
+
} catch (e) {
|
|
73
|
+
console.warn(e)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export { types, utils, restModels as models, registerAi, AI }
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { type ParsedEvent } from 'eventsource-parser/stream'
|
|
2
|
+
import {
|
|
3
|
+
createAsyncIterable,
|
|
4
|
+
TransformStream,
|
|
5
|
+
TextDecoderStream,
|
|
6
|
+
createEventSourceParserTransformStream,
|
|
7
|
+
toPolyfillReadable,
|
|
8
|
+
} from '../../utils'
|
|
9
|
+
import type { HunYuanInputData, HunYaunGenerateTextOutput, HunYaunStreamTextOutput } from './type'
|
|
10
|
+
import type { ChatModel, StreamTextResult, ModelReq, BaseChatModelInput } from '../../type'
|
|
11
|
+
|
|
12
|
+
export class HunYuanModel implements ChatModel {
|
|
13
|
+
public subUrl = 'tencent_hunyuan/'
|
|
14
|
+
constructor(private req: ModelReq, public baseUrl: string, subUrl?: string) {
|
|
15
|
+
if (subUrl != null) {
|
|
16
|
+
this.subUrl = subUrl
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
private get url() {
|
|
21
|
+
return `${this.baseUrl}/${this.subUrl}`
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async generateText(data: BaseChatModelInput) {
|
|
25
|
+
const processedData = this.processInput(data)
|
|
26
|
+
const res = (await this.req({
|
|
27
|
+
url: this.url,
|
|
28
|
+
headers: {
|
|
29
|
+
'X-Tc-Action': 'ChatCompletions',
|
|
30
|
+
},
|
|
31
|
+
data: {
|
|
32
|
+
...processedData,
|
|
33
|
+
Stream: false,
|
|
34
|
+
},
|
|
35
|
+
stream: false,
|
|
36
|
+
})) as HunYaunGenerateTextOutput
|
|
37
|
+
return {
|
|
38
|
+
text: (res?.choices?.[0]?.message?.content as string) ?? '',
|
|
39
|
+
rawResponse: res,
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async streamText(data: BaseChatModelInput) {
|
|
44
|
+
const processedData = this.processInput(data)
|
|
45
|
+
const stream = await this.req({
|
|
46
|
+
url: this.url,
|
|
47
|
+
headers: {
|
|
48
|
+
'X-Tc-Action': 'ChatCompletions',
|
|
49
|
+
},
|
|
50
|
+
data: {
|
|
51
|
+
...processedData,
|
|
52
|
+
Stream: true,
|
|
53
|
+
},
|
|
54
|
+
stream: true,
|
|
55
|
+
})
|
|
56
|
+
return new HunyuanModelStreamResult(stream)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private processInput({ messages, model, temperature, top_p, ...rest }: BaseChatModelInput): HunYuanInputData {
|
|
60
|
+
return {
|
|
61
|
+
Messages: messages.map(({ content, role }) => ({ Content: content, Role: role })),
|
|
62
|
+
Model: model as any,
|
|
63
|
+
Temperature: temperature,
|
|
64
|
+
TopP: top_p,
|
|
65
|
+
...rest,
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
class HunyuanModelStreamResult implements StreamTextResult {
|
|
71
|
+
private _eventSourceStream: ReadableStream<ParsedEvent>
|
|
72
|
+
|
|
73
|
+
constructor(_stream: ReadableStream<Uint8Array>) {
|
|
74
|
+
const stream = toPolyfillReadable(_stream) as typeof _stream
|
|
75
|
+
this._eventSourceStream = stream
|
|
76
|
+
.pipeThrough(new TextDecoderStream())
|
|
77
|
+
.pipeThrough(createEventSourceParserTransformStream())
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private get teeedStream() {
|
|
81
|
+
const [s1, s2] = this._eventSourceStream.tee()
|
|
82
|
+
this._eventSourceStream = s2
|
|
83
|
+
return s1
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
get eventSourceStream() {
|
|
87
|
+
return createAsyncIterable(this.teeedStream)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
get dataStream() {
|
|
91
|
+
return createAsyncIterable(this.eventSourceStream.pipeThrough(new TransformStream<ParsedEvent, HunYaunStreamTextOutput>({
|
|
92
|
+
transform(chunk, controller) {
|
|
93
|
+
try {
|
|
94
|
+
const data = JSON.parse(chunk.data) as HunYaunStreamTextOutput
|
|
95
|
+
controller.enqueue(data)
|
|
96
|
+
} catch (e) {
|
|
97
|
+
console.warn('Error when transforming event source data to json', e)
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
}),),)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
get textStream() {
|
|
104
|
+
return createAsyncIterable(this.dataStream.pipeThrough(new TransformStream<HunYaunStreamTextOutput, string>({
|
|
105
|
+
transform(chunk, controller) {
|
|
106
|
+
controller.enqueue(chunk?.choices?.[0]?.delta?.content ?? '')
|
|
107
|
+
},
|
|
108
|
+
}),),)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
type HunYuanMessage = {
|
|
2
|
+
Role: 'user' | 'system' | 'assistant' | 'tool'
|
|
3
|
+
Content?: string
|
|
4
|
+
Contents?: Array<{
|
|
5
|
+
Type: 'text' | 'image_url'
|
|
6
|
+
Text?: string
|
|
7
|
+
ImageUrl?: string
|
|
8
|
+
}>
|
|
9
|
+
ToolCallId?: string
|
|
10
|
+
ToolCalls?: Array<{
|
|
11
|
+
Id: string
|
|
12
|
+
Type: 'function'
|
|
13
|
+
Function: {
|
|
14
|
+
Name: string
|
|
15
|
+
Arguments: string
|
|
16
|
+
}
|
|
17
|
+
}>
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
type HunYuanTool = {
|
|
21
|
+
Type: 'function'
|
|
22
|
+
Function: {
|
|
23
|
+
Name: string
|
|
24
|
+
Arguments: string
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type HunYuanInputData = {
|
|
29
|
+
Model:
|
|
30
|
+
| 'hunyuan-lite'
|
|
31
|
+
| 'hunyuan-standard'
|
|
32
|
+
| 'hunyuan-standard-256K'
|
|
33
|
+
| 'hunyuan-pro'
|
|
34
|
+
| 'hunyuan-code'
|
|
35
|
+
| 'hunyuan-role'
|
|
36
|
+
| 'hunyuan-functioncall'
|
|
37
|
+
| 'hunyuan-vision'
|
|
38
|
+
Messages: Array<HunYuanMessage>
|
|
39
|
+
StreamModeration?: boolean
|
|
40
|
+
TopP?: number
|
|
41
|
+
Temperature?: number
|
|
42
|
+
EnableEnhancement?: boolean
|
|
43
|
+
Tools?: Array<HunYuanTool>
|
|
44
|
+
ToolChoice?: 'none' | 'auto' | 'custom'
|
|
45
|
+
CustomTool?: HunYuanTool
|
|
46
|
+
SearchInfo?: boolean
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// todo: more precise
|
|
50
|
+
export type HunYaunGenerateTextOutput = {
|
|
51
|
+
choices?: Array<{
|
|
52
|
+
message?: { content?: string }
|
|
53
|
+
}>
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// todo: more precise
|
|
57
|
+
export type HunYaunStreamTextOutput = {
|
|
58
|
+
choices?: Array<{
|
|
59
|
+
delta?: { content?: string }
|
|
60
|
+
}>
|
|
61
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { type ParsedEvent } from 'eventsource-parser/stream'
|
|
2
|
+
import {
|
|
3
|
+
createAsyncIterable,
|
|
4
|
+
TransformStream,
|
|
5
|
+
TextDecoderStream,
|
|
6
|
+
createEventSourceParserTransformStream,
|
|
7
|
+
toPolyfillReadable,
|
|
8
|
+
} from '../../utils'
|
|
9
|
+
import type { HunYuanInputData, HunYaunGenerateTextOutput, HunYaunStreamTextOutput } from './type'
|
|
10
|
+
import type { ChatModel, StreamTextResult, ModelReq, BaseChatModelInput } from '../../type'
|
|
11
|
+
|
|
12
|
+
export class HunYuanPreviewModel implements ChatModel {
|
|
13
|
+
public subUrl = 'tencent_default/openapi/v1/chat/completions'
|
|
14
|
+
constructor(private req: ModelReq, public baseUrl: string, subUrl?: string) {
|
|
15
|
+
if (subUrl != null) {
|
|
16
|
+
this.subUrl = subUrl
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
private get url() {
|
|
21
|
+
return `${this.baseUrl}/${this.subUrl}`
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async generateText(data: BaseChatModelInput) {
|
|
25
|
+
const processedData = this.processInput(data)
|
|
26
|
+
const res = (await this.req({
|
|
27
|
+
url: this.url,
|
|
28
|
+
headers: {
|
|
29
|
+
'X-Tc-Action': 'ChatCompletions',
|
|
30
|
+
},
|
|
31
|
+
data: {
|
|
32
|
+
...processedData,
|
|
33
|
+
Stream: false,
|
|
34
|
+
},
|
|
35
|
+
stream: false,
|
|
36
|
+
})) as HunYaunGenerateTextOutput
|
|
37
|
+
return {
|
|
38
|
+
text: (res?.choices?.[0]?.message?.content as string) ?? '',
|
|
39
|
+
rawResponse: res,
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async streamText(data: BaseChatModelInput) {
|
|
44
|
+
const processedData = this.processInput(data)
|
|
45
|
+
const stream = await this.req({
|
|
46
|
+
url: this.url,
|
|
47
|
+
headers: {
|
|
48
|
+
'X-Tc-Action': 'ChatCompletions',
|
|
49
|
+
},
|
|
50
|
+
data: {
|
|
51
|
+
...processedData,
|
|
52
|
+
Stream: true,
|
|
53
|
+
},
|
|
54
|
+
stream: true,
|
|
55
|
+
})
|
|
56
|
+
return new HunyuanModelStreamResult(stream)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private processInput({ messages, model, temperature, top_p, ...rest }: BaseChatModelInput): HunYuanInputData {
|
|
60
|
+
return {
|
|
61
|
+
Messages: messages.map(({ content, role }) => ({ Content: content, Role: role })),
|
|
62
|
+
Model: model as any,
|
|
63
|
+
Temperature: temperature,
|
|
64
|
+
TopP: top_p,
|
|
65
|
+
...rest,
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
class HunyuanModelStreamResult implements StreamTextResult {
|
|
71
|
+
private _eventSourceStream: ReadableStream<ParsedEvent>
|
|
72
|
+
|
|
73
|
+
constructor(_stream: ReadableStream<Uint8Array>) {
|
|
74
|
+
const stream = toPolyfillReadable(_stream) as typeof _stream
|
|
75
|
+
this._eventSourceStream = stream
|
|
76
|
+
.pipeThrough(new TextDecoderStream())
|
|
77
|
+
.pipeThrough(createEventSourceParserTransformStream())
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private get teeedStream() {
|
|
81
|
+
const [s1, s2] = this._eventSourceStream.tee()
|
|
82
|
+
this._eventSourceStream = s2
|
|
83
|
+
return s1
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
get eventSourceStream() {
|
|
87
|
+
return createAsyncIterable(this.teeedStream)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
get dataStream() {
|
|
91
|
+
return createAsyncIterable(this.eventSourceStream.pipeThrough(new TransformStream<ParsedEvent, HunYaunStreamTextOutput>({
|
|
92
|
+
transform(chunk, controller) {
|
|
93
|
+
try {
|
|
94
|
+
const data = JSON.parse(chunk.data) as HunYaunStreamTextOutput
|
|
95
|
+
controller.enqueue(data)
|
|
96
|
+
} catch (e) {
|
|
97
|
+
console.warn('Error when transforming event source data to json', e)
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
}),),)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
get textStream() {
|
|
104
|
+
return createAsyncIterable(this.dataStream.pipeThrough(new TransformStream<HunYaunStreamTextOutput, string>({
|
|
105
|
+
transform(chunk, controller) {
|
|
106
|
+
controller.enqueue(chunk?.choices?.[0]?.delta?.content ?? '')
|
|
107
|
+
},
|
|
108
|
+
}),),)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
type HunYuanMessage = {
|
|
2
|
+
Role: 'user' | 'system' | 'assistant' | 'tool'
|
|
3
|
+
Content?: string
|
|
4
|
+
Contents?: Array<{
|
|
5
|
+
Type: 'text' | 'image_url'
|
|
6
|
+
Text?: string
|
|
7
|
+
ImageUrl?: string
|
|
8
|
+
}>
|
|
9
|
+
ToolCallId?: string
|
|
10
|
+
ToolCalls?: Array<{
|
|
11
|
+
Id: string
|
|
12
|
+
Type: 'function'
|
|
13
|
+
Function: {
|
|
14
|
+
Name: string
|
|
15
|
+
Arguments: string
|
|
16
|
+
}
|
|
17
|
+
}>
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
type HunYuanTool = {
|
|
21
|
+
Type: 'function'
|
|
22
|
+
Function: {
|
|
23
|
+
Name: string
|
|
24
|
+
Arguments: string
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type HunYuanInputData = {
|
|
29
|
+
Model:
|
|
30
|
+
| 'hunyuan-lite'
|
|
31
|
+
| 'hunyuan-standard'
|
|
32
|
+
| 'hunyuan-standard-256K'
|
|
33
|
+
| 'hunyuan-pro'
|
|
34
|
+
| 'hunyuan-code'
|
|
35
|
+
| 'hunyuan-role'
|
|
36
|
+
| 'hunyuan-functioncall'
|
|
37
|
+
| 'hunyuan-vision'
|
|
38
|
+
Messages: Array<HunYuanMessage>
|
|
39
|
+
StreamModeration?: boolean
|
|
40
|
+
TopP?: number
|
|
41
|
+
Temperature?: number
|
|
42
|
+
EnableEnhancement?: boolean
|
|
43
|
+
Tools?: Array<HunYuanTool>
|
|
44
|
+
ToolChoice?: 'none' | 'auto' | 'custom'
|
|
45
|
+
CustomTool?: HunYuanTool
|
|
46
|
+
SearchInfo?: boolean
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// todo: more precise
|
|
50
|
+
export type HunYaunGenerateTextOutput = {
|
|
51
|
+
choices?: Array<{
|
|
52
|
+
message?: { content?: string }
|
|
53
|
+
}>
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// todo: more precise
|
|
57
|
+
export type HunYaunStreamTextOutput = {
|
|
58
|
+
choices?: Array<{
|
|
59
|
+
delta?: { content?: string }
|
|
60
|
+
}>
|
|
61
|
+
}
|