@mujian/js-sdk 0.0.6-beta.8 → 0.0.6-beta.mjv.66
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 +329 -16
- 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 +2 -1
- package/dist/react/chat/useChat/message.d.ts +25 -13
- package/dist/react/components/MdRenderer/index.d.ts +5 -4
- 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 +697 -146
- 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 +8880 -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;
|
|
@@ -113,9 +180,222 @@ class MujianSdk {
|
|
|
113
180
|
pendingRequests = new Map();
|
|
114
181
|
async init() {
|
|
115
182
|
const handshake = new postmate.Model({
|
|
116
|
-
reply: ({ id, complete, data })=>{
|
|
183
|
+
reply: ({ id, complete, data, error })=>{
|
|
184
|
+
const call = this.pendingRequests.get(id);
|
|
185
|
+
if (!call) return;
|
|
186
|
+
if (error) {
|
|
187
|
+
call.reject(error);
|
|
188
|
+
this.pendingRequests.delete(id);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
call.onData?.(data);
|
|
192
|
+
if (complete) {
|
|
193
|
+
call.onComplete?.();
|
|
194
|
+
call.resolve(data);
|
|
195
|
+
this.pendingRequests.delete(id);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
try {
|
|
200
|
+
const parent = await handshake;
|
|
201
|
+
this.ready = true;
|
|
202
|
+
this.parent = parent;
|
|
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 })=>{
|
|
117
392
|
const call = this.pendingRequests.get(id);
|
|
118
393
|
if (!call) return;
|
|
394
|
+
if (error) {
|
|
395
|
+
call.reject(error);
|
|
396
|
+
this.pendingRequests.delete(id);
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
119
399
|
call.onData?.(data);
|
|
120
400
|
if (complete) {
|
|
121
401
|
call.onComplete?.();
|
|
@@ -128,10 +408,25 @@ class MujianSdk {
|
|
|
128
408
|
const parent = await handshake;
|
|
129
409
|
this.ready = true;
|
|
130
410
|
this.parent = parent;
|
|
131
|
-
|
|
411
|
+
Log.i('mujian sdk client init');
|
|
132
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
|
+
}
|
|
133
428
|
} catch (error) {
|
|
134
|
-
|
|
429
|
+
Log.e('init error', error);
|
|
135
430
|
}
|
|
136
431
|
}
|
|
137
432
|
emit(event, data) {
|
|
@@ -182,6 +477,7 @@ class MujianSdk {
|
|
|
182
477
|
},
|
|
183
478
|
complete: chat_complete.bind(this),
|
|
184
479
|
applyRegex: applyRegex.bind(this),
|
|
480
|
+
renderMessage: renderMessage.bind(this),
|
|
185
481
|
continue: continueComplete.bind(this),
|
|
186
482
|
regenerate: regenerate.bind(this),
|
|
187
483
|
message: {
|
|
@@ -189,17 +485,34 @@ class MujianSdk {
|
|
|
189
485
|
deleteOne: messageDeleteOne.bind(this),
|
|
190
486
|
editOne: messageEditOne.bind(this),
|
|
191
487
|
swipe: messageSwipe.bind(this),
|
|
192
|
-
getPrompt: getPrompt.bind(this)
|
|
488
|
+
getPrompt: getPrompt.bind(this),
|
|
489
|
+
getPage: getPage.bind(this)
|
|
193
490
|
}
|
|
194
491
|
},
|
|
195
492
|
text: {
|
|
196
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
|
+
}
|
|
197
510
|
}
|
|
198
511
|
};
|
|
199
512
|
ui = {};
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
513
|
+
utils = {
|
|
514
|
+
clipboard: {
|
|
515
|
+
writeText: writeText.bind(this)
|
|
203
516
|
}
|
|
204
517
|
};
|
|
205
518
|
hybrid = {};
|
|
@@ -217,4 +530,4 @@ class MujianSdk {
|
|
|
217
530
|
}
|
|
218
531
|
};
|
|
219
532
|
}
|
|
220
|
-
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
|
+
};
|