@mujian/js-sdk 0.0.6-beta.50 → 0.0.6-beta.52

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.
@@ -40,6 +40,10 @@ export declare enum EVENT {
40
40
  * 获取对话
41
41
  */
42
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",
43
47
  /**
44
48
  * 获取项目信息
45
49
  */
package/dist/index.js CHANGED
@@ -9,6 +9,7 @@ var events_EVENT = /*#__PURE__*/ function(EVENT) {
9
9
  EVENT["MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE"] = "mujian:ai:openai:chat:completions:create";
10
10
  EVENT["MUJIAN_AI_OPENAI_RESPONSES_CREATE"] = "mujian:ai:openai:responses:create";
11
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";
12
13
  EVENT["MUJIAN_AI_CHAT_PROJECT_GET_INFO"] = "mujian:ai:chat:project:getInfo";
13
14
  EVENT["MUJIAN_AI_SETTINGS_PERSONA_GET_ACTIVE"] = "mujian:ai:settings:persona:getActive";
14
15
  EVENT["MUJIAN_AI_SETTINGS_PERSONA_SET_ACTIVE"] = "mujian:ai:settings:persona:setActive";
@@ -118,6 +119,12 @@ const getPrompt = async function(messageId) {
118
119
  messageId
119
120
  });
120
121
  };
122
+ async function getPage(fromCursor, pageSize) {
123
+ return await this.call(events_EVENT.MUJIAN_AI_CHAT_MESSAGE_GET_PAGE, {
124
+ fromCursor,
125
+ pageSize
126
+ });
127
+ }
121
128
  const getInfo = async function() {
122
129
  return await this.call(events_EVENT.MUJIAN_AI_CHAT_PROJECT_GET_INFO);
123
130
  };
@@ -254,7 +261,8 @@ class MujianSdk {
254
261
  deleteOne: messageDeleteOne.bind(this),
255
262
  editOne: messageEditOne.bind(this),
256
263
  swipe: messageSwipe.bind(this),
257
- getPrompt: getPrompt.bind(this)
264
+ getPrompt: getPrompt.bind(this),
265
+ getPage: getPage.bind(this)
258
266
  }
259
267
  },
260
268
  text: {
@@ -453,7 +461,8 @@ class src_MujianSdk {
453
461
  deleteOne: messageDeleteOne.bind(this),
454
462
  editOne: messageEditOne.bind(this),
455
463
  swipe: messageSwipe.bind(this),
456
- getPrompt: getPrompt.bind(this)
464
+ getPrompt: getPrompt.bind(this),
465
+ getPage: getPage.bind(this)
457
466
  }
458
467
  },
459
468
  text: {
@@ -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>;
@@ -12,6 +12,8 @@ export type UseChatProps = {
12
12
  body?: object;
13
13
  onError?: (e: unknown) => void;
14
14
  onFinish?: (message: Message) => void;
15
+ /** 消息分页大小,不传时不分页 */
16
+ pageSize?: number;
15
17
  };
16
18
  /**
17
19
  * Use chat return
@@ -39,6 +41,8 @@ export type UseChatReturn = {
39
41
  setSwipe: (messageId: string, swipeId: number) => Promise<void>;
40
42
  editMessage: (messageId: string, content: string) => Promise<void>;
41
43
  deleteMessage: (messageId: string) => Promise<void>;
44
+ loadMoreMessage: () => Promise<void>;
45
+ messagesStatus: 'all-loaded' | 'loading' | 'has-more' | 'error';
42
46
  };
43
47
  /**
44
48
  * Use chat common
@@ -52,4 +56,4 @@ export type UseChatCommon = {
52
56
  * Use chat
53
57
  * @returns {UseChatReturn} The chat.
54
58
  */
55
- export declare const useChat: ({ body, onError, onFinish, }: UseChatProps) => UseChatReturn;
59
+ export declare const useChat: ({ body, onError, onFinish, pageSize, }: UseChatProps) => UseChatReturn;
package/dist/react.js CHANGED
@@ -1,4 +1,4 @@
1
- import { useMount, useRequest, useUpdateEffect } from "ahooks";
1
+ import { useInfiniteScroll, useRequest, useUpdateEffect } from "ahooks";
2
2
  import react, { createContext, forwardRef, useCallback, useContext, useEffect, useRef, useState } from "react";
3
3
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
4
  import css_tools from "@adobe/css-tools";
@@ -507,6 +507,7 @@ var events_EVENT = /*#__PURE__*/ function(EVENT) {
507
507
  EVENT["MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE"] = "mujian:ai:openai:chat:completions:create";
508
508
  EVENT["MUJIAN_AI_OPENAI_RESPONSES_CREATE"] = "mujian:ai:openai:responses:create";
509
509
  EVENT["MUJIAN_AI_CHAT_MESSAGE_GET_ALL"] = "mujian:ai:chat:message:getAll";
510
+ EVENT["MUJIAN_AI_CHAT_MESSAGE_GET_PAGE"] = "mujian:ai:chat:message:getPage";
510
511
  EVENT["MUJIAN_AI_CHAT_PROJECT_GET_INFO"] = "mujian:ai:chat:project:getInfo";
511
512
  EVENT["MUJIAN_AI_SETTINGS_PERSONA_GET_ACTIVE"] = "mujian:ai:settings:persona:getActive";
512
513
  EVENT["MUJIAN_AI_SETTINGS_PERSONA_SET_ACTIVE"] = "mujian:ai:settings:persona:setActive";
@@ -616,6 +617,12 @@ const getPrompt = async function(messageId) {
616
617
  messageId
617
618
  });
618
619
  };
620
+ async function getPage(fromCursor, pageSize) {
621
+ return await this.call(events_EVENT.MUJIAN_AI_CHAT_MESSAGE_GET_PAGE, {
622
+ fromCursor,
623
+ pageSize
624
+ });
625
+ }
619
626
  const getInfo = async function() {
620
627
  return await this.call(events_EVENT.MUJIAN_AI_CHAT_PROJECT_GET_INFO);
621
628
  };
@@ -795,7 +802,8 @@ class MujianSdk {
795
802
  deleteOne: messageDeleteOne.bind(this),
796
803
  editOne: messageEditOne.bind(this),
797
804
  swipe: messageSwipe.bind(this),
798
- getPrompt: getPrompt.bind(this)
805
+ getPrompt: getPrompt.bind(this),
806
+ getPage: getPage.bind(this)
799
807
  }
800
808
  },
801
809
  text: {
@@ -1170,9 +1178,8 @@ const useChatStreaming = ({ common, setError, setMessages, mujian })=>{
1170
1178
  isStreaming
1171
1179
  };
1172
1180
  };
1173
- const useChat = ({ body, onError, onFinish })=>{
1181
+ const useChat = ({ body, onError, onFinish, pageSize })=>{
1174
1182
  const [error, _setError] = useState();
1175
- const [messages, setMessages] = useState([]);
1176
1183
  const [input, setInput] = useState('');
1177
1184
  const [abortController, setAbortController] = useState();
1178
1185
  const mujian = useMujian();
@@ -1180,6 +1187,45 @@ const useChat = ({ body, onError, onFinish })=>{
1180
1187
  _setError(error);
1181
1188
  if (error) onError?.(error);
1182
1189
  };
1190
+ const isLoadingMore = useRef(false);
1191
+ const { data, loadMoreAsync, loadingMore, loading, mutate, error: messageLoadError } = useInfiniteScroll(async (current)=>{
1192
+ isLoadingMore.current = true;
1193
+ if (current?.noMore) return {
1194
+ noMore: true,
1195
+ list: []
1196
+ };
1197
+ try {
1198
+ const resp = await mujian.ai.chat.message.getPage(current?.cursor, pageSize);
1199
+ return {
1200
+ cursor: resp.nextCursor,
1201
+ list: resp.messages,
1202
+ noMore: !resp.nextCursor
1203
+ };
1204
+ } finally{
1205
+ isLoadingMore.current = false;
1206
+ }
1207
+ }, {
1208
+ direction: 'top'
1209
+ });
1210
+ const loadMoreMessage = async ()=>{
1211
+ if (isLoadingMore.current) return;
1212
+ try {
1213
+ isLoadingMore.current = true;
1214
+ await loadMoreAsync();
1215
+ } finally{
1216
+ isLoadingMore.current = false;
1217
+ }
1218
+ };
1219
+ const messages = data?.list ?? [];
1220
+ const setMessages = (messages)=>{
1221
+ 'function' == typeof messages ? mutate({
1222
+ cursor: data?.cursor,
1223
+ list: messages(data?.list ?? [])
1224
+ }) : mutate({
1225
+ cursor: data?.cursor,
1226
+ list: messages
1227
+ });
1228
+ };
1183
1229
  const { chatStreaming, isStreaming } = useChatStreaming({
1184
1230
  common: {
1185
1231
  body
@@ -1188,10 +1234,6 @@ const useChat = ({ body, onError, onFinish })=>{
1188
1234
  setMessages,
1189
1235
  mujian
1190
1236
  });
1191
- useMount(async ()=>{
1192
- const resp = await mujian.ai.chat.message.getAll();
1193
- setMessages(resp);
1194
- });
1195
1237
  useUpdateEffect(()=>{
1196
1238
  if (!isStreaming) {
1197
1239
  const lastMessage = messages[messages.length - 1];
@@ -1316,7 +1358,9 @@ const useChat = ({ body, onError, onFinish })=>{
1316
1358
  },
1317
1359
  setSwipe,
1318
1360
  editMessage,
1319
- deleteMessage
1361
+ deleteMessage,
1362
+ loadMoreMessage,
1363
+ messagesStatus: messageLoadError ? 'error' : loadingMore || loading ? 'loading' : data?.noMore ? 'all-loaded' : 'has-more'
1320
1364
  };
1321
1365
  };
1322
1366
  export { MdRenderer, MujianProvider, MujianSpinner, Thread, useChat, useMujian };
@@ -58,3 +58,7 @@ export type QuickReplyConfig = {
58
58
  qrList: Array<QuickReply>;
59
59
  idIndex: number;
60
60
  };
61
+ export type Cursor = {
62
+ index: number;
63
+ messageId: string;
64
+ };
package/dist/umd/index.js CHANGED
@@ -267,6 +267,7 @@
267
267
  EVENT["MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE"] = "mujian:ai:openai:chat:completions:create";
268
268
  EVENT["MUJIAN_AI_OPENAI_RESPONSES_CREATE"] = "mujian:ai:openai:responses:create";
269
269
  EVENT["MUJIAN_AI_CHAT_MESSAGE_GET_ALL"] = "mujian:ai:chat:message:getAll";
270
+ EVENT["MUJIAN_AI_CHAT_MESSAGE_GET_PAGE"] = "mujian:ai:chat:message:getPage";
270
271
  EVENT["MUJIAN_AI_CHAT_PROJECT_GET_INFO"] = "mujian:ai:chat:project:getInfo";
271
272
  EVENT["MUJIAN_AI_SETTINGS_PERSONA_GET_ACTIVE"] = "mujian:ai:settings:persona:getActive";
272
273
  EVENT["MUJIAN_AI_SETTINGS_PERSONA_SET_ACTIVE"] = "mujian:ai:settings:persona:setActive";
@@ -376,6 +377,12 @@
376
377
  messageId
377
378
  });
378
379
  };
380
+ async function getPage(fromCursor, pageSize) {
381
+ return await this.call(events_EVENT.MUJIAN_AI_CHAT_MESSAGE_GET_PAGE, {
382
+ fromCursor,
383
+ pageSize
384
+ });
385
+ }
379
386
  const getInfo = async function() {
380
387
  return await this.call(events_EVENT.MUJIAN_AI_CHAT_PROJECT_GET_INFO);
381
388
  };
@@ -512,7 +519,8 @@
512
519
  deleteOne: messageDeleteOne.bind(this),
513
520
  editOne: messageEditOne.bind(this),
514
521
  swipe: messageSwipe.bind(this),
515
- getPrompt: getPrompt.bind(this)
522
+ getPrompt: getPrompt.bind(this),
523
+ getPage: getPage.bind(this)
516
524
  }
517
525
  },
518
526
  text: {
@@ -711,7 +719,8 @@
711
719
  deleteOne: messageDeleteOne.bind(this),
712
720
  editOne: messageEditOne.bind(this),
713
721
  swipe: messageSwipe.bind(this),
714
- getPrompt: getPrompt.bind(this)
722
+ getPrompt: getPrompt.bind(this),
723
+ getPage: getPage.bind(this)
715
724
  }
716
725
  },
717
726
  text: {