@mujian/js-sdk 0.0.6-beta.9 → 0.0.6-beta.mjv.67
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/dist/events/index.d.ts +30 -2
- package/dist/index.d.ts +13 -39
- package/dist/index.js +323 -15
- package/dist/modules/ai/chat/chat.d.ts +46 -4
- package/dist/modules/ai/chat/index.d.ts +1 -1
- package/dist/modules/ai/chat/message/index.d.ts +4 -0
- package/dist/modules/ai/index.d.ts +3 -2
- package/dist/modules/ai/openai/chat.d.ts +25 -0
- package/dist/modules/ai/openai/completions.d.ts +19 -0
- package/dist/modules/ai/openai/images.d.ts +19 -0
- package/dist/modules/ai/openai/index.d.ts +4 -0
- package/dist/modules/ai/openai/responses.d.ts +20 -0
- package/dist/modules/ai/text/index.d.ts +9 -2
- package/dist/modules/utils/clipboard.d.ts +5 -0
- package/dist/modules/utils/index.d.ts +4 -0
- package/dist/react/chat/useChat/index.d.ts +7 -3
- package/dist/react/chat/useChat/inner/chatStreaming.d.ts +1 -1
- package/dist/react/chat/useChat/message.d.ts +25 -13
- package/dist/react/components/MdRenderer/index.d.ts +4 -3
- package/dist/react/components/MdRenderer/utils/height.d.ts +0 -0
- package/dist/react/components/MdRenderer/utils/iframe.d.ts +9 -0
- package/dist/react/components/MdRenderer/utils/scripts.d.ts +4 -0
- package/dist/react/components/MujianSpinner/index.d.ts +7 -0
- package/dist/react/components/index.d.ts +1 -0
- package/dist/react.css +65 -4
- package/dist/react.js +687 -112
- package/dist/types/index.d.ts +38 -0
- package/dist/umd/index.js +792 -0
- package/dist/umd/index.js.LICENSE.txt +7 -0
- package/dist/umd/react.css +343 -0
- package/dist/umd/react.js +8881 -0
- package/dist/umd/react.js.LICENSE.txt +31 -0
- package/dist/utils/log.d.ts +4 -0
- package/package.json +4 -1
- /package/dist/react/components/MdRenderer/{utils.d.ts → utils/md.d.ts} +0 -0
package/dist/events/index.d.ts
CHANGED
|
@@ -21,13 +21,33 @@ export declare enum EVENT {
|
|
|
21
21
|
*/
|
|
22
22
|
MUJIAN_AI_CHAT_APPLY_REGEX = "mujian:ai:chat:applyRegex",
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* 对消息应用正则表达式并渲染模板
|
|
25
|
+
*/
|
|
26
|
+
MUJIAN_AI_CHAT_RENDER_MESSAGE = "mujian:ai:chat:renderMessage",
|
|
27
|
+
/**
|
|
28
|
+
* 文本补全
|
|
25
29
|
*/
|
|
26
30
|
MUJIAN_AI_TEXT_GENERATE = "mujian:ai:text:generate",
|
|
31
|
+
/**
|
|
32
|
+
* OpenAI 文本补全
|
|
33
|
+
*/
|
|
34
|
+
MUJIAN_AI_OPENAI_COMPLETIONS_CREATE = "mujian:ai:openai:completions:create",
|
|
35
|
+
/**
|
|
36
|
+
* OpenAI 聊天补全
|
|
37
|
+
*/
|
|
38
|
+
MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE = "mujian:ai:openai:chat:completions:create",
|
|
39
|
+
/**
|
|
40
|
+
* OpenAI 响应创建
|
|
41
|
+
*/
|
|
42
|
+
MUJIAN_AI_OPENAI_RESPONSES_CREATE = "mujian:ai:openai:responses:create",
|
|
27
43
|
/**
|
|
28
44
|
* 获取对话
|
|
29
45
|
*/
|
|
30
46
|
MUJIAN_AI_CHAT_MESSAGE_GET_ALL = "mujian:ai:chat:message:getAll",
|
|
47
|
+
/**
|
|
48
|
+
* 获取对话分页
|
|
49
|
+
*/
|
|
50
|
+
MUJIAN_AI_CHAT_MESSAGE_GET_PAGE = "mujian:ai:chat:message:getPage",
|
|
31
51
|
/**
|
|
32
52
|
* 获取项目信息
|
|
33
53
|
*/
|
|
@@ -67,5 +87,13 @@ export declare enum EVENT {
|
|
|
67
87
|
/**
|
|
68
88
|
* 获取消息提示词
|
|
69
89
|
*/
|
|
70
|
-
MUJIAN_AI_CHAT_MESSAGE_GET_PROMPT = "mujian:ai:chat:message:getPrompt"
|
|
90
|
+
MUJIAN_AI_CHAT_MESSAGE_GET_PROMPT = "mujian:ai:chat:message:getPrompt",
|
|
91
|
+
/**
|
|
92
|
+
* 生成图像
|
|
93
|
+
*/
|
|
94
|
+
MUJIAN_AI_OPENAI_IMAGES_GENERATE = "mujian:ai:openai:images:generate",
|
|
95
|
+
/**
|
|
96
|
+
* 写入剪贴版
|
|
97
|
+
*/
|
|
98
|
+
MUJIAN_UTILS_CLIPBOARD_WRITE_TEXT = "mujian:utils:clipboard:writeText"
|
|
71
99
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,7 +14,13 @@ declare global {
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
declare class MujianSdk {
|
|
17
|
+
/** @hidden */
|
|
17
18
|
private constructor();
|
|
19
|
+
/**
|
|
20
|
+
* 事件
|
|
21
|
+
* @enum {string}
|
|
22
|
+
*/
|
|
23
|
+
static EVENT: typeof EVENT;
|
|
18
24
|
/** @hidden */
|
|
19
25
|
static getInstance(): MujianSdk;
|
|
20
26
|
/** @hidden */
|
|
@@ -40,47 +46,15 @@ declare class MujianSdk {
|
|
|
40
46
|
/** @hidden */
|
|
41
47
|
call<Req, Resp>(event: EVENT, data?: Req, controller?: Pick<Call<Resp>, 'onData' | 'onComplete' | 'signal'>): Promise<Resp>;
|
|
42
48
|
/**
|
|
43
|
-
*
|
|
49
|
+
* @namespace ai
|
|
50
|
+
* @description AI
|
|
44
51
|
*/
|
|
45
|
-
ai:
|
|
46
|
-
chat: {
|
|
47
|
-
project: {
|
|
48
|
-
getInfo: () => Promise<import("./types").ProjectInfo>;
|
|
49
|
-
};
|
|
50
|
-
settings: {
|
|
51
|
-
model: {
|
|
52
|
-
getAll: () => Promise<import("./types").ModelInfo[]>;
|
|
53
|
-
getActive: () => Promise<string>;
|
|
54
|
-
setActive: (modelId: string) => Promise<string>;
|
|
55
|
-
};
|
|
56
|
-
persona: {
|
|
57
|
-
getActive: () => Promise<import("./types").PersonaInfo>;
|
|
58
|
-
setActive: (personaId: string) => Promise<void>;
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
complete: (message: string, onData: (data: string) => void, signal?: AbortSignal | undefined) => Promise<string>;
|
|
62
|
-
applyRegex: (props: {
|
|
63
|
-
message: import("./react").Message;
|
|
64
|
-
index: number;
|
|
65
|
-
depth: number;
|
|
66
|
-
}) => Promise<import("./react").Message>;
|
|
67
|
-
continue: (onData: (data: string) => void, signal?: AbortSignal | undefined) => Promise<string>;
|
|
68
|
-
regenerate: (onData: (data: string) => void, signal?: AbortSignal | undefined) => Promise<string>;
|
|
69
|
-
message: {
|
|
70
|
-
getAll: () => Promise<import("./react").Message[]>;
|
|
71
|
-
deleteOne: (messageId: string) => Promise<unknown>;
|
|
72
|
-
editOne: (messageId: string, content: string) => Promise<unknown>;
|
|
73
|
-
swipe: (messageId: string, swipeId: number) => Promise<unknown>;
|
|
74
|
-
getPrompt: (messageId: string) => Promise<unknown>;
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
|
-
text: {
|
|
78
|
-
complete: () => Promise<void>;
|
|
79
|
-
};
|
|
80
|
-
};
|
|
52
|
+
ai: any;
|
|
81
53
|
ui: {};
|
|
82
|
-
|
|
83
|
-
|
|
54
|
+
utils: {
|
|
55
|
+
clipboard: {
|
|
56
|
+
writeText: (text: string) => Promise<unknown>;
|
|
57
|
+
};
|
|
84
58
|
};
|
|
85
59
|
hybrid: {};
|
|
86
60
|
player: {};
|
package/dist/index.js
CHANGED
|
@@ -4,8 +4,13 @@ var events_EVENT = /*#__PURE__*/ function(EVENT) {
|
|
|
4
4
|
EVENT["MUJIAN_AI_CHAT_STOP"] = "mujian:ai:chat:stop";
|
|
5
5
|
EVENT["MUJIAN_AI_CHAT_COMPLETE"] = "mujian:ai:chat:complete";
|
|
6
6
|
EVENT["MUJIAN_AI_CHAT_APPLY_REGEX"] = "mujian:ai:chat:applyRegex";
|
|
7
|
+
EVENT["MUJIAN_AI_CHAT_RENDER_MESSAGE"] = "mujian:ai:chat:renderMessage";
|
|
7
8
|
EVENT["MUJIAN_AI_TEXT_GENERATE"] = "mujian:ai:text:generate";
|
|
9
|
+
EVENT["MUJIAN_AI_OPENAI_COMPLETIONS_CREATE"] = "mujian:ai:openai:completions:create";
|
|
10
|
+
EVENT["MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE"] = "mujian:ai:openai:chat:completions:create";
|
|
11
|
+
EVENT["MUJIAN_AI_OPENAI_RESPONSES_CREATE"] = "mujian:ai:openai:responses:create";
|
|
8
12
|
EVENT["MUJIAN_AI_CHAT_MESSAGE_GET_ALL"] = "mujian:ai:chat:message:getAll";
|
|
13
|
+
EVENT["MUJIAN_AI_CHAT_MESSAGE_GET_PAGE"] = "mujian:ai:chat:message:getPage";
|
|
9
14
|
EVENT["MUJIAN_AI_CHAT_PROJECT_GET_INFO"] = "mujian:ai:chat:project:getInfo";
|
|
10
15
|
EVENT["MUJIAN_AI_SETTINGS_PERSONA_GET_ACTIVE"] = "mujian:ai:settings:persona:getActive";
|
|
11
16
|
EVENT["MUJIAN_AI_SETTINGS_PERSONA_SET_ACTIVE"] = "mujian:ai:settings:persona:setActive";
|
|
@@ -16,19 +21,68 @@ var events_EVENT = /*#__PURE__*/ function(EVENT) {
|
|
|
16
21
|
EVENT["MUJIAN_AI_CHAT_MESSAGE_EDIT_ONE"] = "mujian:ai:chat:message:editOne";
|
|
17
22
|
EVENT["MUJIAN_AI_CHAT_MESSAGE_SWIPE"] = "mujian:ai:chat:message:swipe";
|
|
18
23
|
EVENT["MUJIAN_AI_CHAT_MESSAGE_GET_PROMPT"] = "mujian:ai:chat:message:getPrompt";
|
|
24
|
+
EVENT["MUJIAN_AI_OPENAI_IMAGES_GENERATE"] = "mujian:ai:openai:images:generate";
|
|
25
|
+
EVENT["MUJIAN_UTILS_CLIPBOARD_WRITE_TEXT"] = "mujian:utils:clipboard:writeText";
|
|
19
26
|
return EVENT;
|
|
20
27
|
}({});
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
function wrapOnData(onData) {
|
|
29
|
+
let fullContent = '';
|
|
30
|
+
let buffer = '';
|
|
31
|
+
let questionId;
|
|
32
|
+
let replyId;
|
|
33
|
+
return function(data) {
|
|
34
|
+
buffer += data;
|
|
35
|
+
const lines = buffer.split('\n');
|
|
36
|
+
buffer = lines.pop() || '';
|
|
37
|
+
for (const line of lines)if (line.startsWith('data: ')) try {
|
|
38
|
+
const parsedData = JSON.parse(line.slice(6));
|
|
39
|
+
if (parsedData.question_id) questionId = parsedData.question_id;
|
|
40
|
+
if (parsedData.reply_id) replyId = parsedData.reply_id;
|
|
41
|
+
if (parsedData.isFinished) return void onData({
|
|
42
|
+
isFinished: true,
|
|
43
|
+
deltaContent: '',
|
|
44
|
+
fullContent,
|
|
45
|
+
questionId,
|
|
46
|
+
replyId
|
|
47
|
+
});
|
|
48
|
+
const deltaContent = parsedData?.choices?.[0]?.delta?.content;
|
|
49
|
+
if (deltaContent?.length > 0) {
|
|
50
|
+
fullContent += deltaContent;
|
|
51
|
+
onData({
|
|
52
|
+
isFinished: false,
|
|
53
|
+
deltaContent: deltaContent,
|
|
54
|
+
fullContent,
|
|
55
|
+
questionId,
|
|
56
|
+
replyId
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
} catch (e) {
|
|
60
|
+
onData({
|
|
61
|
+
isFinished: true,
|
|
62
|
+
error: e,
|
|
63
|
+
deltaContent: '',
|
|
64
|
+
fullContent,
|
|
65
|
+
questionId,
|
|
66
|
+
replyId
|
|
67
|
+
});
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const chat_complete = async function(message, onData, signal, option = {}) {
|
|
73
|
+
await this.call(events_EVENT.MUJIAN_AI_CHAT_COMPLETE, {
|
|
23
74
|
content: message
|
|
24
75
|
}, {
|
|
25
|
-
onData,
|
|
76
|
+
onData: option.parseContent ? wrapOnData(onData) : onData,
|
|
26
77
|
signal
|
|
27
78
|
});
|
|
28
79
|
};
|
|
29
80
|
const applyRegex = async function(props) {
|
|
30
81
|
return await this.call(events_EVENT.MUJIAN_AI_CHAT_APPLY_REGEX, props);
|
|
31
82
|
};
|
|
83
|
+
const renderMessage = async function(props) {
|
|
84
|
+
return await this.call(events_EVENT.MUJIAN_AI_CHAT_RENDER_MESSAGE, props);
|
|
85
|
+
};
|
|
32
86
|
const continueComplete = async function(onData, signal) {
|
|
33
87
|
return await this.call(events_EVENT.MUJIAN_AI_CHAT_COMPLETE, {
|
|
34
88
|
isContinue: true
|
|
@@ -70,6 +124,12 @@ const getPrompt = async function(messageId) {
|
|
|
70
124
|
messageId
|
|
71
125
|
});
|
|
72
126
|
};
|
|
127
|
+
async function getPage(fromCursor, pageSize) {
|
|
128
|
+
return await this.call(events_EVENT.MUJIAN_AI_CHAT_MESSAGE_GET_PAGE, {
|
|
129
|
+
fromCursor,
|
|
130
|
+
pageSize
|
|
131
|
+
});
|
|
132
|
+
}
|
|
73
133
|
const getInfo = async function() {
|
|
74
134
|
return await this.call(events_EVENT.MUJIAN_AI_CHAT_PROJECT_GET_INFO);
|
|
75
135
|
};
|
|
@@ -92,15 +152,22 @@ const model_setActive = async function(modelId) {
|
|
|
92
152
|
const model_getAll = async function() {
|
|
93
153
|
return await this.call(events_EVENT.MUJIAN_AI_SETTINGS_MODEL_GET_ALL);
|
|
94
154
|
};
|
|
95
|
-
const generate = async function() {
|
|
96
|
-
return await this.call(events_EVENT.MUJIAN_AI_TEXT_GENERATE, {
|
|
97
|
-
content: 'q'
|
|
98
|
-
});
|
|
99
|
-
};
|
|
100
155
|
const saveGame = async function() {};
|
|
101
156
|
const loadGame = async function() {};
|
|
157
|
+
async function writeText(text) {
|
|
158
|
+
return await this.call(events_EVENT.MUJIAN_UTILS_CLIPBOARD_WRITE_TEXT, text);
|
|
159
|
+
}
|
|
160
|
+
const Log = {
|
|
161
|
+
i (...msg) {
|
|
162
|
+
console.log('[MujianSDK] ', ...msg);
|
|
163
|
+
},
|
|
164
|
+
e (...msg) {
|
|
165
|
+
console.error('[MujianSDK] ', ...msg);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
102
168
|
class MujianSdk {
|
|
103
169
|
constructor(){}
|
|
170
|
+
static EVENT = events_EVENT;
|
|
104
171
|
static getInstance() {
|
|
105
172
|
if (!window.$mujian) window.$mujian = new MujianSdk();
|
|
106
173
|
return window.$mujian;
|
|
@@ -133,10 +200,233 @@ class MujianSdk {
|
|
|
133
200
|
const parent = await handshake;
|
|
134
201
|
this.ready = true;
|
|
135
202
|
this.parent = parent;
|
|
136
|
-
|
|
203
|
+
Log.i('mujian sdk client init');
|
|
204
|
+
await this.call(events_EVENT.MUJIAN_INIT);
|
|
205
|
+
const projectInfo = await this.ai.chat.project.getInfo();
|
|
206
|
+
if (projectInfo.config?.customCss) {
|
|
207
|
+
const style = document.createElement('style');
|
|
208
|
+
style.setAttribute('type', 'text/css');
|
|
209
|
+
style.setAttribute('id', 'mujian-custom-css');
|
|
210
|
+
style.textContent = projectInfo.config.customCss;
|
|
211
|
+
document.head.appendChild(style);
|
|
212
|
+
}
|
|
213
|
+
if (projectInfo.config?.customJs) {
|
|
214
|
+
const script = document.createElement("script");
|
|
215
|
+
script.setAttribute('type', "text/javascript");
|
|
216
|
+
script.setAttribute('id', 'mujian-custom-js');
|
|
217
|
+
script.textContent = projectInfo.config.customJs;
|
|
218
|
+
document.head.appendChild(script);
|
|
219
|
+
}
|
|
220
|
+
} catch (error) {
|
|
221
|
+
Log.e('init error', error);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
emit(event, data) {
|
|
225
|
+
if (!this.ready) throw new Error('Mujian is not initialized');
|
|
226
|
+
this.parent?.emit(event, data);
|
|
227
|
+
}
|
|
228
|
+
nextCallId = 0;
|
|
229
|
+
getCallId() {
|
|
230
|
+
const id = this.nextCallId;
|
|
231
|
+
this.nextCallId += 1;
|
|
232
|
+
return id;
|
|
233
|
+
}
|
|
234
|
+
async call(event, data, controller) {
|
|
235
|
+
if (!this.ready) throw new Error('Mujian is not initialized');
|
|
236
|
+
const callId = this.getCallId();
|
|
237
|
+
return new Promise((resolve, reject)=>{
|
|
238
|
+
this.pendingRequests.set(callId, {
|
|
239
|
+
resolve,
|
|
240
|
+
reject,
|
|
241
|
+
...controller
|
|
242
|
+
});
|
|
243
|
+
this.emit(event, {
|
|
244
|
+
id: callId,
|
|
245
|
+
data
|
|
246
|
+
});
|
|
247
|
+
controller?.signal?.addEventListener('abort', ()=>{
|
|
248
|
+
this.emit(events_EVENT.MUJIAN_AI_CHAT_STOP, {
|
|
249
|
+
id: callId
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
ai = {
|
|
255
|
+
chat: {
|
|
256
|
+
project: {
|
|
257
|
+
getInfo: getInfo.bind(this)
|
|
258
|
+
},
|
|
259
|
+
settings: {
|
|
260
|
+
model: {
|
|
261
|
+
getAll: model_getAll.bind(this),
|
|
262
|
+
getActive: model_getActive.bind(this),
|
|
263
|
+
setActive: model_setActive.bind(this)
|
|
264
|
+
},
|
|
265
|
+
persona: {
|
|
266
|
+
getActive: getActive.bind(this),
|
|
267
|
+
setActive: setActive.bind(this)
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
complete: chat_complete.bind(this),
|
|
271
|
+
applyRegex: applyRegex.bind(this),
|
|
272
|
+
renderMessage: renderMessage.bind(this),
|
|
273
|
+
continue: continueComplete.bind(this),
|
|
274
|
+
regenerate: regenerate.bind(this),
|
|
275
|
+
message: {
|
|
276
|
+
getAll: getAll.bind(this),
|
|
277
|
+
deleteOne: messageDeleteOne.bind(this),
|
|
278
|
+
editOne: messageEditOne.bind(this),
|
|
279
|
+
swipe: messageSwipe.bind(this),
|
|
280
|
+
getPrompt: getPrompt.bind(this),
|
|
281
|
+
getPage: getPage.bind(this)
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
text: {
|
|
285
|
+
complete: generate.bind(this)
|
|
286
|
+
},
|
|
287
|
+
openai: {
|
|
288
|
+
completions: {
|
|
289
|
+
create: completions.create.bind(this)
|
|
290
|
+
},
|
|
291
|
+
chat: {
|
|
292
|
+
completions: {
|
|
293
|
+
create: chat.completions.create.bind(this)
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
responses: {
|
|
297
|
+
create: responses.create.bind(this)
|
|
298
|
+
},
|
|
299
|
+
images: {
|
|
300
|
+
generate: images_images.generate.bind(this)
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
ui = {};
|
|
305
|
+
utils = {
|
|
306
|
+
clipboard: {
|
|
307
|
+
writeText: writeText.bind(this)
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
hybrid = {};
|
|
311
|
+
player = {};
|
|
312
|
+
game = {
|
|
313
|
+
assets: ()=>{
|
|
314
|
+
console.log('assets');
|
|
315
|
+
},
|
|
316
|
+
saves: {
|
|
317
|
+
saveGame: saveGame.bind(this),
|
|
318
|
+
loadGame: loadGame.bind(this)
|
|
319
|
+
},
|
|
320
|
+
ranking: ()=>{
|
|
321
|
+
console.log('ranking');
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
const generate = async function(content) {
|
|
326
|
+
return await this.call(MujianSdk.EVENT.MUJIAN_AI_TEXT_GENERATE, {
|
|
327
|
+
content
|
|
328
|
+
});
|
|
329
|
+
};
|
|
330
|
+
const chat = {
|
|
331
|
+
completions: {
|
|
332
|
+
create: async function(params, options, onData, signal) {
|
|
333
|
+
return await this.call(MujianSdk.EVENT.MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE, {
|
|
334
|
+
params,
|
|
335
|
+
options
|
|
336
|
+
}, {
|
|
337
|
+
onData,
|
|
338
|
+
signal
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
};
|
|
343
|
+
const completions = {
|
|
344
|
+
create: async function(params, options, onData, signal) {
|
|
345
|
+
return await this.call(MujianSdk.EVENT.MUJIAN_AI_OPENAI_COMPLETIONS_CREATE, {
|
|
346
|
+
params,
|
|
347
|
+
options
|
|
348
|
+
}, {
|
|
349
|
+
onData,
|
|
350
|
+
signal
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
const responses = {
|
|
355
|
+
create: async function(params, options, onData, signal) {
|
|
356
|
+
return await this.call(MujianSdk.EVENT.MUJIAN_AI_OPENAI_RESPONSES_CREATE, {
|
|
357
|
+
params,
|
|
358
|
+
options
|
|
359
|
+
}, {
|
|
360
|
+
onData,
|
|
361
|
+
signal
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
const images_images = {
|
|
366
|
+
generate: async function(params, options, onData, signal) {
|
|
367
|
+
return await this.call(MujianSdk.EVENT.MUJIAN_AI_OPENAI_IMAGES_GENERATE, {
|
|
368
|
+
params,
|
|
369
|
+
options
|
|
370
|
+
}, {
|
|
371
|
+
onData,
|
|
372
|
+
signal
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
class src_MujianSdk {
|
|
377
|
+
constructor(){}
|
|
378
|
+
static EVENT = events_EVENT;
|
|
379
|
+
static getInstance() {
|
|
380
|
+
if (!window.$mujian) window.$mujian = new src_MujianSdk();
|
|
381
|
+
return window.$mujian;
|
|
382
|
+
}
|
|
383
|
+
parent = null;
|
|
384
|
+
ready = false;
|
|
385
|
+
get isReady() {
|
|
386
|
+
return this.ready;
|
|
387
|
+
}
|
|
388
|
+
pendingRequests = new Map();
|
|
389
|
+
async init() {
|
|
390
|
+
const handshake = new postmate.Model({
|
|
391
|
+
reply: ({ id, complete, data, error })=>{
|
|
392
|
+
const call = this.pendingRequests.get(id);
|
|
393
|
+
if (!call) return;
|
|
394
|
+
if (error) {
|
|
395
|
+
call.reject(error);
|
|
396
|
+
this.pendingRequests.delete(id);
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
call.onData?.(data);
|
|
400
|
+
if (complete) {
|
|
401
|
+
call.onComplete?.();
|
|
402
|
+
call.resolve(data);
|
|
403
|
+
this.pendingRequests.delete(id);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
try {
|
|
408
|
+
const parent = await handshake;
|
|
409
|
+
this.ready = true;
|
|
410
|
+
this.parent = parent;
|
|
411
|
+
Log.i('mujian sdk client init');
|
|
137
412
|
await this.call(events_EVENT.MUJIAN_INIT);
|
|
413
|
+
const projectInfo = await this.ai.chat.project.getInfo();
|
|
414
|
+
if (projectInfo.config?.customCss) {
|
|
415
|
+
const style = document.createElement('style');
|
|
416
|
+
style.setAttribute('type', 'text/css');
|
|
417
|
+
style.setAttribute('id', 'mujian-custom-css');
|
|
418
|
+
style.textContent = projectInfo.config.customCss;
|
|
419
|
+
document.head.appendChild(style);
|
|
420
|
+
}
|
|
421
|
+
if (projectInfo.config?.customJs) {
|
|
422
|
+
const script = document.createElement("script");
|
|
423
|
+
script.setAttribute('type', "text/javascript");
|
|
424
|
+
script.setAttribute('id', 'mujian-custom-js');
|
|
425
|
+
script.textContent = projectInfo.config.customJs;
|
|
426
|
+
document.head.appendChild(script);
|
|
427
|
+
}
|
|
138
428
|
} catch (error) {
|
|
139
|
-
|
|
429
|
+
Log.e('init error', error);
|
|
140
430
|
}
|
|
141
431
|
}
|
|
142
432
|
emit(event, data) {
|
|
@@ -187,6 +477,7 @@ class MujianSdk {
|
|
|
187
477
|
},
|
|
188
478
|
complete: chat_complete.bind(this),
|
|
189
479
|
applyRegex: applyRegex.bind(this),
|
|
480
|
+
renderMessage: renderMessage.bind(this),
|
|
190
481
|
continue: continueComplete.bind(this),
|
|
191
482
|
regenerate: regenerate.bind(this),
|
|
192
483
|
message: {
|
|
@@ -194,17 +485,34 @@ class MujianSdk {
|
|
|
194
485
|
deleteOne: messageDeleteOne.bind(this),
|
|
195
486
|
editOne: messageEditOne.bind(this),
|
|
196
487
|
swipe: messageSwipe.bind(this),
|
|
197
|
-
getPrompt: getPrompt.bind(this)
|
|
488
|
+
getPrompt: getPrompt.bind(this),
|
|
489
|
+
getPage: getPage.bind(this)
|
|
198
490
|
}
|
|
199
491
|
},
|
|
200
492
|
text: {
|
|
201
493
|
complete: generate.bind(this)
|
|
494
|
+
},
|
|
495
|
+
openai: {
|
|
496
|
+
completions: {
|
|
497
|
+
create: completions.create.bind(this)
|
|
498
|
+
},
|
|
499
|
+
chat: {
|
|
500
|
+
completions: {
|
|
501
|
+
create: chat.completions.create.bind(this)
|
|
502
|
+
}
|
|
503
|
+
},
|
|
504
|
+
responses: {
|
|
505
|
+
create: responses.create.bind(this)
|
|
506
|
+
},
|
|
507
|
+
images: {
|
|
508
|
+
generate: images_images.generate.bind(this)
|
|
509
|
+
}
|
|
202
510
|
}
|
|
203
511
|
};
|
|
204
512
|
ui = {};
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
513
|
+
utils = {
|
|
514
|
+
clipboard: {
|
|
515
|
+
writeText: writeText.bind(this)
|
|
208
516
|
}
|
|
209
517
|
};
|
|
210
518
|
hybrid = {};
|
|
@@ -222,4 +530,4 @@ class MujianSdk {
|
|
|
222
530
|
}
|
|
223
531
|
};
|
|
224
532
|
}
|
|
225
|
-
export { events_EVENT as EVENT, MujianSdk };
|
|
533
|
+
export { events_EVENT as EVENT, src_MujianSdk as MujianSdk };
|
|
@@ -1,20 +1,62 @@
|
|
|
1
1
|
import type { MujianSdk } from '../../../index.ts';
|
|
2
2
|
import { Message } from '../../../react';
|
|
3
|
+
/**
|
|
4
|
+
* LLM生成返回的数据
|
|
5
|
+
*/
|
|
6
|
+
export type ParsedData = {
|
|
7
|
+
/** 是否已完成生成,最后一块数据时为true */
|
|
8
|
+
isFinished: boolean;
|
|
9
|
+
/** LLM生成的delta content */
|
|
10
|
+
deltaContent: string;
|
|
11
|
+
/** LLM生成的累积内容 */
|
|
12
|
+
fullContent: string;
|
|
13
|
+
/** 出错时非空 */
|
|
14
|
+
error?: unknown;
|
|
15
|
+
/** 用户发送消息的ID */
|
|
16
|
+
questionId?: string;
|
|
17
|
+
/** AI返回消息的ID */
|
|
18
|
+
replyId?: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* 对话补全配置
|
|
22
|
+
*/
|
|
23
|
+
export type CompleteOption = {
|
|
24
|
+
/** 给onData传递的数据是否是解析后的,推荐true */
|
|
25
|
+
parseContent?: boolean;
|
|
26
|
+
};
|
|
3
27
|
/**
|
|
4
28
|
* 对话补全
|
|
5
|
-
* @param {string} message 消息
|
|
6
|
-
* @param {Function} onData 数据
|
|
7
|
-
* @param {AbortSignal} signal 信号
|
|
8
29
|
* @returns {Promise<string>} 返回值
|
|
9
30
|
*/
|
|
10
31
|
export declare const complete: (
|
|
11
32
|
/** @hidden */
|
|
12
|
-
this: MujianSdk,
|
|
33
|
+
this: MujianSdk,
|
|
34
|
+
/**
|
|
35
|
+
* 消息
|
|
36
|
+
*/
|
|
37
|
+
message: string,
|
|
38
|
+
/**
|
|
39
|
+
* 数据生成时的回调
|
|
40
|
+
*/
|
|
41
|
+
onData: (data: string | ParsedData) => void,
|
|
42
|
+
/**
|
|
43
|
+
* 停止生成的信号
|
|
44
|
+
*/
|
|
45
|
+
signal?: AbortSignal | undefined,
|
|
46
|
+
/**
|
|
47
|
+
* 对话补全配置
|
|
48
|
+
*/
|
|
49
|
+
option?: CompleteOption | undefined) => Promise<void>;
|
|
13
50
|
export declare const applyRegex: (this: MujianSdk, props: {
|
|
14
51
|
message: Message;
|
|
15
52
|
index: number;
|
|
16
53
|
depth: number;
|
|
17
54
|
}) => Promise<Message>;
|
|
55
|
+
export declare const renderMessage: (this: MujianSdk, props: {
|
|
56
|
+
message: Message;
|
|
57
|
+
index: number;
|
|
58
|
+
depth: number;
|
|
59
|
+
}) => Promise<Message>;
|
|
18
60
|
/**
|
|
19
61
|
* 继续
|
|
20
62
|
* @param onData 数据
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { applyRegex, complete, continueComplete, regenerate } from './chat';
|
|
1
|
+
export { applyRegex, type CompleteOption, complete, continueComplete, type ParsedData, regenerate, renderMessage, } from './chat';
|
|
2
2
|
export * as message from './message';
|
|
3
3
|
export * as project from './project';
|
|
4
4
|
export * as settings from './settings';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { MujianSdk } from '../../../../index.ts';
|
|
2
2
|
import type { Message } from '../../../../react/chat/useChat/message';
|
|
3
|
+
import { Cursor } from '../../../../types';
|
|
3
4
|
/**
|
|
4
5
|
* 获取消息列表
|
|
5
6
|
* @returns 消息当前列表
|
|
@@ -41,3 +42,6 @@ this: MujianSdk, messageId: string, swipeId: number) => Promise<unknown>;
|
|
|
41
42
|
export declare const getPrompt: (
|
|
42
43
|
/** @hidden */
|
|
43
44
|
this: MujianSdk, messageId: string) => Promise<unknown>;
|
|
45
|
+
export declare function getPage(
|
|
46
|
+
/** @hidden */
|
|
47
|
+
this: MujianSdk, fromCursor: Cursor, pageSize: number): Promise<unknown>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { MujianSdk } from '../../../index';
|
|
2
|
+
import type OpenAI from 'openai';
|
|
3
|
+
/**
|
|
4
|
+
* @namespace openai.chat
|
|
5
|
+
* @description OpenAI 聊天补全
|
|
6
|
+
*/
|
|
7
|
+
export declare const chat: {
|
|
8
|
+
/**
|
|
9
|
+
* @namespace openai.chat.completions
|
|
10
|
+
* @description OpenAI 聊天补全
|
|
11
|
+
*/
|
|
12
|
+
completions: {
|
|
13
|
+
/**
|
|
14
|
+
* OpenAI 聊天补全
|
|
15
|
+
* @function openai.chat.completions.create
|
|
16
|
+
* @async
|
|
17
|
+
* @param {OpenAI.ChatCompletionCreateParams} params - 聊天补全参数
|
|
18
|
+
* @param {OpenAI.RequestOptions} options - 聊天补全选项
|
|
19
|
+
* @param {Function} onData - 数据生成时的回调
|
|
20
|
+
* @param {AbortSignal} signal - 停止生成的信号
|
|
21
|
+
* @returns {Promise<void>} 聊天补全结果
|
|
22
|
+
*/
|
|
23
|
+
create: (this: MujianSdk, params: OpenAI.ChatCompletionCreateParams, options?: OpenAI.RequestOptions, onData?: (data: unknown) => void, signal?: AbortSignal | undefined) => Promise<OpenAI.ChatCompletion>;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { MujianSdk } from '../../../index';
|
|
2
|
+
import type OpenAI from 'openai';
|
|
3
|
+
/**
|
|
4
|
+
* @namespace openai.completions
|
|
5
|
+
* @description OpenAI 文本补全
|
|
6
|
+
*/
|
|
7
|
+
export declare const completions: {
|
|
8
|
+
/**
|
|
9
|
+
* OpenAI 文本补全
|
|
10
|
+
* @function openai.completions.create
|
|
11
|
+
* @async
|
|
12
|
+
* @param {OpenAI.CompletionCreateParams} params - 文本补全参数
|
|
13
|
+
* @param {OpenAI.RequestOptions} options - 文本补全选项
|
|
14
|
+
* @param {Function} onData - 数据生成时的回调
|
|
15
|
+
* @param {AbortSignal} signal - 停止生成的信号
|
|
16
|
+
* @returns {Promise<void>} 文本补全结果
|
|
17
|
+
*/
|
|
18
|
+
create: (this: MujianSdk, params: OpenAI.CompletionCreateParams, options?: OpenAI.RequestOptions, onData?: (data: unknown) => void, signal?: AbortSignal | undefined) => Promise<OpenAI.Completion>;
|
|
19
|
+
};
|