@mujian/js-sdk 0.0.6-beta.6 → 0.0.6-beta.61
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 +26 -2
- package/dist/index.d.ts +13 -39
- package/dist/index.js +309 -16
- package/dist/modules/ai/chat/chat.d.ts +41 -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 +2 -1
- package/dist/react/components/MdRenderer/index.d.ts +3 -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 +619 -87
- package/dist/types/index.d.ts +37 -0
- package/dist/umd/index.js +772 -0
- package/dist/umd/index.js.LICENSE.txt +7 -0
- package/dist/umd/react.css +343 -0
- package/dist/umd/react.js +8832 -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,29 @@ export declare enum EVENT {
|
|
|
21
21
|
*/
|
|
22
22
|
MUJIAN_AI_CHAT_APPLY_REGEX = "mujian:ai:chat:applyRegex",
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* 文本补全
|
|
25
25
|
*/
|
|
26
26
|
MUJIAN_AI_TEXT_GENERATE = "mujian:ai:text:generate",
|
|
27
|
+
/**
|
|
28
|
+
* OpenAI 文本补全
|
|
29
|
+
*/
|
|
30
|
+
MUJIAN_AI_OPENAI_COMPLETIONS_CREATE = "mujian:ai:openai:completions:create",
|
|
31
|
+
/**
|
|
32
|
+
* OpenAI 聊天补全
|
|
33
|
+
*/
|
|
34
|
+
MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE = "mujian:ai:openai:chat:completions:create",
|
|
35
|
+
/**
|
|
36
|
+
* OpenAI 响应创建
|
|
37
|
+
*/
|
|
38
|
+
MUJIAN_AI_OPENAI_RESPONSES_CREATE = "mujian:ai:openai:responses:create",
|
|
27
39
|
/**
|
|
28
40
|
* 获取对话
|
|
29
41
|
*/
|
|
30
42
|
MUJIAN_AI_CHAT_MESSAGE_GET_ALL = "mujian:ai:chat:message:getAll",
|
|
43
|
+
/**
|
|
44
|
+
* 获取对话分页
|
|
45
|
+
*/
|
|
46
|
+
MUJIAN_AI_CHAT_MESSAGE_GET_PAGE = "mujian:ai:chat:message:getPage",
|
|
31
47
|
/**
|
|
32
48
|
* 获取项目信息
|
|
33
49
|
*/
|
|
@@ -67,5 +83,13 @@ export declare enum EVENT {
|
|
|
67
83
|
/**
|
|
68
84
|
* 获取消息提示词
|
|
69
85
|
*/
|
|
70
|
-
MUJIAN_AI_CHAT_MESSAGE_GET_PROMPT = "mujian:ai:chat:message:getPrompt"
|
|
86
|
+
MUJIAN_AI_CHAT_MESSAGE_GET_PROMPT = "mujian:ai:chat:message:getPrompt",
|
|
87
|
+
/**
|
|
88
|
+
* 生成图像
|
|
89
|
+
*/
|
|
90
|
+
MUJIAN_AI_OPENAI_IMAGES_GENERATE = "mujian:ai:openai:images:generate",
|
|
91
|
+
/**
|
|
92
|
+
* 写入剪贴版
|
|
93
|
+
*/
|
|
94
|
+
MUJIAN_UTILS_CLIPBOARD_WRITE_TEXT = "mujian:utils:clipboard:writeText"
|
|
71
95
|
}
|
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
|
@@ -5,7 +5,11 @@ var events_EVENT = /*#__PURE__*/ function(EVENT) {
|
|
|
5
5
|
EVENT["MUJIAN_AI_CHAT_COMPLETE"] = "mujian:ai:chat:complete";
|
|
6
6
|
EVENT["MUJIAN_AI_CHAT_APPLY_REGEX"] = "mujian:ai:chat:applyRegex";
|
|
7
7
|
EVENT["MUJIAN_AI_TEXT_GENERATE"] = "mujian:ai:text:generate";
|
|
8
|
+
EVENT["MUJIAN_AI_OPENAI_COMPLETIONS_CREATE"] = "mujian:ai:openai:completions:create";
|
|
9
|
+
EVENT["MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE"] = "mujian:ai:openai:chat:completions:create";
|
|
10
|
+
EVENT["MUJIAN_AI_OPENAI_RESPONSES_CREATE"] = "mujian:ai:openai:responses:create";
|
|
8
11
|
EVENT["MUJIAN_AI_CHAT_MESSAGE_GET_ALL"] = "mujian:ai:chat:message:getAll";
|
|
12
|
+
EVENT["MUJIAN_AI_CHAT_MESSAGE_GET_PAGE"] = "mujian:ai:chat:message:getPage";
|
|
9
13
|
EVENT["MUJIAN_AI_CHAT_PROJECT_GET_INFO"] = "mujian:ai:chat:project:getInfo";
|
|
10
14
|
EVENT["MUJIAN_AI_SETTINGS_PERSONA_GET_ACTIVE"] = "mujian:ai:settings:persona:getActive";
|
|
11
15
|
EVENT["MUJIAN_AI_SETTINGS_PERSONA_SET_ACTIVE"] = "mujian:ai:settings:persona:setActive";
|
|
@@ -16,13 +20,59 @@ var events_EVENT = /*#__PURE__*/ function(EVENT) {
|
|
|
16
20
|
EVENT["MUJIAN_AI_CHAT_MESSAGE_EDIT_ONE"] = "mujian:ai:chat:message:editOne";
|
|
17
21
|
EVENT["MUJIAN_AI_CHAT_MESSAGE_SWIPE"] = "mujian:ai:chat:message:swipe";
|
|
18
22
|
EVENT["MUJIAN_AI_CHAT_MESSAGE_GET_PROMPT"] = "mujian:ai:chat:message:getPrompt";
|
|
23
|
+
EVENT["MUJIAN_AI_OPENAI_IMAGES_GENERATE"] = "mujian:ai:openai:images:generate";
|
|
24
|
+
EVENT["MUJIAN_UTILS_CLIPBOARD_WRITE_TEXT"] = "mujian:utils:clipboard:writeText";
|
|
19
25
|
return EVENT;
|
|
20
26
|
}({});
|
|
21
|
-
|
|
22
|
-
|
|
27
|
+
function wrapOnData(onData) {
|
|
28
|
+
let fullContent = '';
|
|
29
|
+
let buffer = '';
|
|
30
|
+
let questionId;
|
|
31
|
+
let replyId;
|
|
32
|
+
return function(data) {
|
|
33
|
+
buffer += data;
|
|
34
|
+
const lines = buffer.split('\n');
|
|
35
|
+
buffer = lines.pop() || '';
|
|
36
|
+
for (const line of lines)if (line.startsWith('data: ')) try {
|
|
37
|
+
const parsedData = JSON.parse(line.slice(6));
|
|
38
|
+
if (parsedData.question_id) questionId = parsedData.question_id;
|
|
39
|
+
if (parsedData.reply_id) replyId = parsedData.reply_id;
|
|
40
|
+
if (parsedData.isFinished) return void onData({
|
|
41
|
+
isFinished: true,
|
|
42
|
+
deltaContent: '',
|
|
43
|
+
fullContent,
|
|
44
|
+
questionId,
|
|
45
|
+
replyId
|
|
46
|
+
});
|
|
47
|
+
const deltaContent = parsedData?.choices?.[0]?.delta?.content;
|
|
48
|
+
if (deltaContent?.length > 0) {
|
|
49
|
+
fullContent += deltaContent;
|
|
50
|
+
onData({
|
|
51
|
+
isFinished: false,
|
|
52
|
+
deltaContent: deltaContent,
|
|
53
|
+
fullContent,
|
|
54
|
+
questionId,
|
|
55
|
+
replyId
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
} catch (e) {
|
|
59
|
+
onData({
|
|
60
|
+
isFinished: true,
|
|
61
|
+
error: e,
|
|
62
|
+
deltaContent: '',
|
|
63
|
+
fullContent,
|
|
64
|
+
questionId,
|
|
65
|
+
replyId
|
|
66
|
+
});
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const chat_complete = async function(message, onData, signal, option = {}) {
|
|
72
|
+
await this.call(events_EVENT.MUJIAN_AI_CHAT_COMPLETE, {
|
|
23
73
|
content: message
|
|
24
74
|
}, {
|
|
25
|
-
onData,
|
|
75
|
+
onData: option.parseContent ? wrapOnData(onData) : onData,
|
|
26
76
|
signal
|
|
27
77
|
});
|
|
28
78
|
};
|
|
@@ -70,6 +120,12 @@ const getPrompt = async function(messageId) {
|
|
|
70
120
|
messageId
|
|
71
121
|
});
|
|
72
122
|
};
|
|
123
|
+
async function getPage(fromCursor, pageSize) {
|
|
124
|
+
return await this.call(events_EVENT.MUJIAN_AI_CHAT_MESSAGE_GET_PAGE, {
|
|
125
|
+
fromCursor,
|
|
126
|
+
pageSize
|
|
127
|
+
});
|
|
128
|
+
}
|
|
73
129
|
const getInfo = async function() {
|
|
74
130
|
return await this.call(events_EVENT.MUJIAN_AI_CHAT_PROJECT_GET_INFO);
|
|
75
131
|
};
|
|
@@ -92,15 +148,22 @@ const model_setActive = async function(modelId) {
|
|
|
92
148
|
const model_getAll = async function() {
|
|
93
149
|
return await this.call(events_EVENT.MUJIAN_AI_SETTINGS_MODEL_GET_ALL);
|
|
94
150
|
};
|
|
95
|
-
const generate = async function() {
|
|
96
|
-
return await this.call(events_EVENT.MUJIAN_AI_TEXT_GENERATE, {
|
|
97
|
-
content: 'q'
|
|
98
|
-
});
|
|
99
|
-
};
|
|
100
151
|
const saveGame = async function() {};
|
|
101
152
|
const loadGame = async function() {};
|
|
153
|
+
async function writeText(text) {
|
|
154
|
+
return await this.call(events_EVENT.MUJIAN_UTILS_CLIPBOARD_WRITE_TEXT, text);
|
|
155
|
+
}
|
|
156
|
+
const Log = {
|
|
157
|
+
i (...msg) {
|
|
158
|
+
console.log('[MujianSDK] ', ...msg);
|
|
159
|
+
},
|
|
160
|
+
e (...msg) {
|
|
161
|
+
console.error('[MujianSDK] ', ...msg);
|
|
162
|
+
}
|
|
163
|
+
};
|
|
102
164
|
class MujianSdk {
|
|
103
165
|
constructor(){}
|
|
166
|
+
static EVENT = events_EVENT;
|
|
104
167
|
static getInstance() {
|
|
105
168
|
if (!window.$mujian) window.$mujian = new MujianSdk();
|
|
106
169
|
return window.$mujian;
|
|
@@ -113,9 +176,14 @@ class MujianSdk {
|
|
|
113
176
|
pendingRequests = new Map();
|
|
114
177
|
async init() {
|
|
115
178
|
const handshake = new postmate.Model({
|
|
116
|
-
reply: ({ id, complete, data })=>{
|
|
179
|
+
reply: ({ id, complete, data, error })=>{
|
|
117
180
|
const call = this.pendingRequests.get(id);
|
|
118
181
|
if (!call) return;
|
|
182
|
+
if (error) {
|
|
183
|
+
call.reject(error);
|
|
184
|
+
this.pendingRequests.delete(id);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
119
187
|
call.onData?.(data);
|
|
120
188
|
if (complete) {
|
|
121
189
|
call.onComplete?.();
|
|
@@ -128,10 +196,18 @@ class MujianSdk {
|
|
|
128
196
|
const parent = await handshake;
|
|
129
197
|
this.ready = true;
|
|
130
198
|
this.parent = parent;
|
|
131
|
-
|
|
199
|
+
Log.i('mujian sdk client init');
|
|
132
200
|
await this.call(events_EVENT.MUJIAN_INIT);
|
|
201
|
+
const projectInfo = await this.ai.chat.project.getInfo();
|
|
202
|
+
if (projectInfo.config?.customCss) {
|
|
203
|
+
const style = document.createElement('style');
|
|
204
|
+
style.setAttribute('type', 'text/css');
|
|
205
|
+
style.setAttribute('id', 'mujian-custom-css');
|
|
206
|
+
style.textContent = projectInfo.config.customCss;
|
|
207
|
+
document.head.appendChild(style);
|
|
208
|
+
}
|
|
133
209
|
} catch (error) {
|
|
134
|
-
|
|
210
|
+
Log.e('init error', error);
|
|
135
211
|
}
|
|
136
212
|
}
|
|
137
213
|
emit(event, data) {
|
|
@@ -189,17 +265,234 @@ class MujianSdk {
|
|
|
189
265
|
deleteOne: messageDeleteOne.bind(this),
|
|
190
266
|
editOne: messageEditOne.bind(this),
|
|
191
267
|
swipe: messageSwipe.bind(this),
|
|
192
|
-
getPrompt: getPrompt.bind(this)
|
|
268
|
+
getPrompt: getPrompt.bind(this),
|
|
269
|
+
getPage: getPage.bind(this)
|
|
193
270
|
}
|
|
194
271
|
},
|
|
195
272
|
text: {
|
|
196
273
|
complete: generate.bind(this)
|
|
274
|
+
},
|
|
275
|
+
openai: {
|
|
276
|
+
completions: {
|
|
277
|
+
create: completions.create.bind(this)
|
|
278
|
+
},
|
|
279
|
+
chat: {
|
|
280
|
+
completions: {
|
|
281
|
+
create: chat.completions.create.bind(this)
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
responses: {
|
|
285
|
+
create: responses.create.bind(this)
|
|
286
|
+
},
|
|
287
|
+
images: {
|
|
288
|
+
generate: images_images.generate.bind(this)
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
ui = {};
|
|
293
|
+
utils = {
|
|
294
|
+
clipboard: {
|
|
295
|
+
writeText: writeText.bind(this)
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
hybrid = {};
|
|
299
|
+
player = {};
|
|
300
|
+
game = {
|
|
301
|
+
assets: ()=>{
|
|
302
|
+
console.log('assets');
|
|
303
|
+
},
|
|
304
|
+
saves: {
|
|
305
|
+
saveGame: saveGame.bind(this),
|
|
306
|
+
loadGame: loadGame.bind(this)
|
|
307
|
+
},
|
|
308
|
+
ranking: ()=>{
|
|
309
|
+
console.log('ranking');
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
const generate = async function(content) {
|
|
314
|
+
return await this.call(MujianSdk.EVENT.MUJIAN_AI_TEXT_GENERATE, {
|
|
315
|
+
content
|
|
316
|
+
});
|
|
317
|
+
};
|
|
318
|
+
const chat = {
|
|
319
|
+
completions: {
|
|
320
|
+
create: async function(params, options, onData, signal) {
|
|
321
|
+
return await this.call(MujianSdk.EVENT.MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE, {
|
|
322
|
+
params,
|
|
323
|
+
options
|
|
324
|
+
}, {
|
|
325
|
+
onData,
|
|
326
|
+
signal
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
const completions = {
|
|
332
|
+
create: async function(params, options, onData, signal) {
|
|
333
|
+
return await this.call(MujianSdk.EVENT.MUJIAN_AI_OPENAI_COMPLETIONS_CREATE, {
|
|
334
|
+
params,
|
|
335
|
+
options
|
|
336
|
+
}, {
|
|
337
|
+
onData,
|
|
338
|
+
signal
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
};
|
|
342
|
+
const responses = {
|
|
343
|
+
create: async function(params, options, onData, signal) {
|
|
344
|
+
return await this.call(MujianSdk.EVENT.MUJIAN_AI_OPENAI_RESPONSES_CREATE, {
|
|
345
|
+
params,
|
|
346
|
+
options
|
|
347
|
+
}, {
|
|
348
|
+
onData,
|
|
349
|
+
signal
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
const images_images = {
|
|
354
|
+
generate: async function(params, options, onData, signal) {
|
|
355
|
+
return await this.call(MujianSdk.EVENT.MUJIAN_AI_OPENAI_IMAGES_GENERATE, {
|
|
356
|
+
params,
|
|
357
|
+
options
|
|
358
|
+
}, {
|
|
359
|
+
onData,
|
|
360
|
+
signal
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
};
|
|
364
|
+
class src_MujianSdk {
|
|
365
|
+
constructor(){}
|
|
366
|
+
static EVENT = events_EVENT;
|
|
367
|
+
static getInstance() {
|
|
368
|
+
if (!window.$mujian) window.$mujian = new src_MujianSdk();
|
|
369
|
+
return window.$mujian;
|
|
370
|
+
}
|
|
371
|
+
parent = null;
|
|
372
|
+
ready = false;
|
|
373
|
+
get isReady() {
|
|
374
|
+
return this.ready;
|
|
375
|
+
}
|
|
376
|
+
pendingRequests = new Map();
|
|
377
|
+
async init() {
|
|
378
|
+
const handshake = new postmate.Model({
|
|
379
|
+
reply: ({ id, complete, data, error })=>{
|
|
380
|
+
const call = this.pendingRequests.get(id);
|
|
381
|
+
if (!call) return;
|
|
382
|
+
if (error) {
|
|
383
|
+
call.reject(error);
|
|
384
|
+
this.pendingRequests.delete(id);
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
call.onData?.(data);
|
|
388
|
+
if (complete) {
|
|
389
|
+
call.onComplete?.();
|
|
390
|
+
call.resolve(data);
|
|
391
|
+
this.pendingRequests.delete(id);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
try {
|
|
396
|
+
const parent = await handshake;
|
|
397
|
+
this.ready = true;
|
|
398
|
+
this.parent = parent;
|
|
399
|
+
Log.i('mujian sdk client init');
|
|
400
|
+
await this.call(events_EVENT.MUJIAN_INIT);
|
|
401
|
+
const projectInfo = await this.ai.chat.project.getInfo();
|
|
402
|
+
if (projectInfo.config?.customCss) {
|
|
403
|
+
const style = document.createElement('style');
|
|
404
|
+
style.setAttribute('type', 'text/css');
|
|
405
|
+
style.setAttribute('id', 'mujian-custom-css');
|
|
406
|
+
style.textContent = projectInfo.config.customCss;
|
|
407
|
+
document.head.appendChild(style);
|
|
408
|
+
}
|
|
409
|
+
} catch (error) {
|
|
410
|
+
Log.e('init error', error);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
emit(event, data) {
|
|
414
|
+
if (!this.ready) throw new Error('Mujian is not initialized');
|
|
415
|
+
this.parent?.emit(event, data);
|
|
416
|
+
}
|
|
417
|
+
nextCallId = 0;
|
|
418
|
+
getCallId() {
|
|
419
|
+
const id = this.nextCallId;
|
|
420
|
+
this.nextCallId += 1;
|
|
421
|
+
return id;
|
|
422
|
+
}
|
|
423
|
+
async call(event, data, controller) {
|
|
424
|
+
if (!this.ready) throw new Error('Mujian is not initialized');
|
|
425
|
+
const callId = this.getCallId();
|
|
426
|
+
return new Promise((resolve, reject)=>{
|
|
427
|
+
this.pendingRequests.set(callId, {
|
|
428
|
+
resolve,
|
|
429
|
+
reject,
|
|
430
|
+
...controller
|
|
431
|
+
});
|
|
432
|
+
this.emit(event, {
|
|
433
|
+
id: callId,
|
|
434
|
+
data
|
|
435
|
+
});
|
|
436
|
+
controller?.signal?.addEventListener('abort', ()=>{
|
|
437
|
+
this.emit(events_EVENT.MUJIAN_AI_CHAT_STOP, {
|
|
438
|
+
id: callId
|
|
439
|
+
});
|
|
440
|
+
});
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
ai = {
|
|
444
|
+
chat: {
|
|
445
|
+
project: {
|
|
446
|
+
getInfo: getInfo.bind(this)
|
|
447
|
+
},
|
|
448
|
+
settings: {
|
|
449
|
+
model: {
|
|
450
|
+
getAll: model_getAll.bind(this),
|
|
451
|
+
getActive: model_getActive.bind(this),
|
|
452
|
+
setActive: model_setActive.bind(this)
|
|
453
|
+
},
|
|
454
|
+
persona: {
|
|
455
|
+
getActive: getActive.bind(this),
|
|
456
|
+
setActive: setActive.bind(this)
|
|
457
|
+
}
|
|
458
|
+
},
|
|
459
|
+
complete: chat_complete.bind(this),
|
|
460
|
+
applyRegex: applyRegex.bind(this),
|
|
461
|
+
continue: continueComplete.bind(this),
|
|
462
|
+
regenerate: regenerate.bind(this),
|
|
463
|
+
message: {
|
|
464
|
+
getAll: getAll.bind(this),
|
|
465
|
+
deleteOne: messageDeleteOne.bind(this),
|
|
466
|
+
editOne: messageEditOne.bind(this),
|
|
467
|
+
swipe: messageSwipe.bind(this),
|
|
468
|
+
getPrompt: getPrompt.bind(this),
|
|
469
|
+
getPage: getPage.bind(this)
|
|
470
|
+
}
|
|
471
|
+
},
|
|
472
|
+
text: {
|
|
473
|
+
complete: generate.bind(this)
|
|
474
|
+
},
|
|
475
|
+
openai: {
|
|
476
|
+
completions: {
|
|
477
|
+
create: completions.create.bind(this)
|
|
478
|
+
},
|
|
479
|
+
chat: {
|
|
480
|
+
completions: {
|
|
481
|
+
create: chat.completions.create.bind(this)
|
|
482
|
+
}
|
|
483
|
+
},
|
|
484
|
+
responses: {
|
|
485
|
+
create: responses.create.bind(this)
|
|
486
|
+
},
|
|
487
|
+
images: {
|
|
488
|
+
generate: images_images.generate.bind(this)
|
|
489
|
+
}
|
|
197
490
|
}
|
|
198
491
|
};
|
|
199
492
|
ui = {};
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
493
|
+
utils = {
|
|
494
|
+
clipboard: {
|
|
495
|
+
writeText: writeText.bind(this)
|
|
203
496
|
}
|
|
204
497
|
};
|
|
205
498
|
hybrid = {};
|
|
@@ -217,4 +510,4 @@ class MujianSdk {
|
|
|
217
510
|
}
|
|
218
511
|
};
|
|
219
512
|
}
|
|
220
|
-
export { events_EVENT as EVENT, MujianSdk };
|
|
513
|
+
export { events_EVENT as EVENT, src_MujianSdk as MujianSdk };
|
|
@@ -1,15 +1,52 @@
|
|
|
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;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { applyRegex, complete, continueComplete, regenerate } from './chat';
|
|
1
|
+
export { applyRegex, type CompleteOption, complete, continueComplete, type ParsedData, regenerate, } 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
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { MujianSdk } from '../../../index';
|
|
2
|
+
import type OpenAI from 'openai';
|
|
3
|
+
/**
|
|
4
|
+
* @namespace openai.images
|
|
5
|
+
* @description OpenAI 图像生成
|
|
6
|
+
*/
|
|
7
|
+
export declare const images: {
|
|
8
|
+
/**
|
|
9
|
+
* OpenAI 图像生成
|
|
10
|
+
* @function openai.images.generate
|
|
11
|
+
* @async
|
|
12
|
+
* @param {OpenAI.ImageGenerateParams} params - 图像生成参数
|
|
13
|
+
* @param {OpenAI.RequestOptions} options - 图像生成选项
|
|
14
|
+
* @param {Function} onData - 数据生成时的回调
|
|
15
|
+
* @param {AbortSignal} signal - 停止生成的信号
|
|
16
|
+
* @returns {Promise<OpenAI.ImagesResponse>} 图像生成结果
|
|
17
|
+
*/
|
|
18
|
+
generate: (this: MujianSdk, params: OpenAI.ImageGenerateParams, options?: OpenAI.RequestOptions, onData?: (data: unknown) => void, signal?: AbortSignal | undefined) => Promise<OpenAI.ImagesResponse>;
|
|
19
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { MujianSdk } from '../../../index';
|
|
2
|
+
import type OpenAI from 'openai';
|
|
3
|
+
import type { ResponseCreateParams } from 'openai/resources/responses/responses.mjs';
|
|
4
|
+
/**
|
|
5
|
+
* @namespace openai.responses
|
|
6
|
+
* @description OpenAI 响应创建
|
|
7
|
+
*/
|
|
8
|
+
export declare const responses: {
|
|
9
|
+
/**
|
|
10
|
+
* OpenAI 响应创建
|
|
11
|
+
* @function openai.responses.create
|
|
12
|
+
* @async
|
|
13
|
+
* @param {ResponseCreateParams} params - 响应创建参数
|
|
14
|
+
* @param {OpenAI.RequestOptions} options - 响应创建选项
|
|
15
|
+
* @param {Function} onData - 数据生成时的回调
|
|
16
|
+
* @param {AbortSignal} signal - 停止生成的信号
|
|
17
|
+
* @returns {Promise<void>} 响应创建结果
|
|
18
|
+
*/
|
|
19
|
+
create: (this: MujianSdk, params: ResponseCreateParams, options?: OpenAI.RequestOptions, onData?: (data: unknown) => void, signal?: AbortSignal | undefined) => Promise<OpenAI.Responses>;
|
|
20
|
+
};
|