@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.
Files changed (35) hide show
  1. package/dist/events/index.d.ts +30 -2
  2. package/dist/index.d.ts +13 -39
  3. package/dist/index.js +323 -15
  4. package/dist/modules/ai/chat/chat.d.ts +46 -4
  5. package/dist/modules/ai/chat/index.d.ts +1 -1
  6. package/dist/modules/ai/chat/message/index.d.ts +4 -0
  7. package/dist/modules/ai/index.d.ts +3 -2
  8. package/dist/modules/ai/openai/chat.d.ts +25 -0
  9. package/dist/modules/ai/openai/completions.d.ts +19 -0
  10. package/dist/modules/ai/openai/images.d.ts +19 -0
  11. package/dist/modules/ai/openai/index.d.ts +4 -0
  12. package/dist/modules/ai/openai/responses.d.ts +20 -0
  13. package/dist/modules/ai/text/index.d.ts +9 -2
  14. package/dist/modules/utils/clipboard.d.ts +5 -0
  15. package/dist/modules/utils/index.d.ts +4 -0
  16. package/dist/react/chat/useChat/index.d.ts +7 -3
  17. package/dist/react/chat/useChat/inner/chatStreaming.d.ts +1 -1
  18. package/dist/react/chat/useChat/message.d.ts +25 -13
  19. package/dist/react/components/MdRenderer/index.d.ts +4 -3
  20. package/dist/react/components/MdRenderer/utils/height.d.ts +0 -0
  21. package/dist/react/components/MdRenderer/utils/iframe.d.ts +9 -0
  22. package/dist/react/components/MdRenderer/utils/scripts.d.ts +4 -0
  23. package/dist/react/components/MujianSpinner/index.d.ts +7 -0
  24. package/dist/react/components/index.d.ts +1 -0
  25. package/dist/react.css +65 -4
  26. package/dist/react.js +687 -112
  27. package/dist/types/index.d.ts +38 -0
  28. package/dist/umd/index.js +792 -0
  29. package/dist/umd/index.js.LICENSE.txt +7 -0
  30. package/dist/umd/react.css +343 -0
  31. package/dist/umd/react.js +8881 -0
  32. package/dist/umd/react.js.LICENSE.txt +31 -0
  33. package/dist/utils/log.d.ts +4 -0
  34. package/package.json +4 -1
  35. /package/dist/react/components/MdRenderer/{utils.d.ts → utils/md.d.ts} +0 -0
@@ -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
- * AI
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
- util: {
83
- cn: () => void;
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
- const chat_complete = async function(message, onData, signal) {
22
- return await this.call(events_EVENT.MUJIAN_AI_CHAT_COMPLETE, {
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
- console.log('mujian sdk client init');
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
- console.log('init error', error);
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
- util = {
206
- cn: ()=>{
207
- console.log('cn');
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, message: string, onData: (data: string) => void, signal?: AbortSignal) => Promise<string>;
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>;
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * @module ai
3
3
  */
4
- export * as chat from './chat';
5
- export * as text from './text';
4
+ export * as chat from "./chat";
5
+ export * as text from "./text";
6
+ export * as openai from "./openai";
@@ -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
+ };