@fe-free/ai 4.2.0 → 4.2.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @fe-free/ai
2
2
 
3
+ ## 4.2.2
4
+
5
+ ### Patch Changes
6
+
7
+ - feat: ai
8
+ - @fe-free/core@4.2.2
9
+ - @fe-free/icons@4.2.2
10
+ - @fe-free/tool@4.2.2
11
+
12
+ ## 4.2.1
13
+
14
+ ### Patch Changes
15
+
16
+ - feat: ai
17
+ - @fe-free/core@4.2.1
18
+ - @fe-free/icons@4.2.1
19
+ - @fe-free/tool@4.2.1
20
+
3
21
  ## 4.2.0
4
22
 
5
23
  ### minor Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fe-free/ai",
3
- "version": "4.2.0",
3
+ "version": "4.2.2",
4
4
  "description": "",
5
5
  "main": "./src/index.ts",
6
6
  "author": "",
@@ -18,7 +18,7 @@
18
18
  "lodash-es": "^4.17.21",
19
19
  "uuid": "^13.0.0",
20
20
  "zustand": "^4.5.7",
21
- "@fe-free/core": "4.2.0"
21
+ "@fe-free/core": "4.2.2"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "antd": "^5.27.1",
@@ -28,8 +28,8 @@
28
28
  "i18next-icu": "^2.4.1",
29
29
  "react": "^19.2.0",
30
30
  "react-i18next": "^16.4.0",
31
- "@fe-free/icons": "4.2.0",
32
- "@fe-free/tool": "4.2.0"
31
+ "@fe-free/icons": "4.2.2",
32
+ "@fe-free/tool": "4.2.2"
33
33
  },
34
34
  "scripts": {
35
35
  "test": "echo \"Error: no test specified\" && exit 1",
@@ -197,12 +197,7 @@ function Sender(originProps: SenderProps) {
197
197
  />
198
198
  )}
199
199
  </div>
200
- <div className="mt-1 text-center text-xs text-03">
201
- {t(
202
- '@fe-free/ai.sender.aiGeneratedDisclaimer',
203
- '内容由 AI 生成,无法确保信息的真实准确,仅供参考',
204
- )}
205
- </div>
200
+ {props.statement && <div className="mt-1 text-center text-xs text-03">{props.statement}</div>}
206
201
  </div>
207
202
  );
208
203
  }
@@ -66,4 +66,11 @@ export const AllowSpeech: Story = {
66
66
  },
67
67
  };
68
68
 
69
+ export const Statement: Story = {
70
+ args: {
71
+ statement: '内容由 AI 生成,无法确保信息的真实准确,仅供参考',
72
+ },
73
+ render: (props) => <Component {...props} />,
74
+ };
75
+
69
76
  export default meta;
@@ -30,6 +30,8 @@ interface SenderProps {
30
30
  /** 录音状态变化时回调 */
31
31
  onRecordingChange?: (recording: boolean) => void;
32
32
  };
33
+
34
+ statement?: string;
33
35
  }
34
36
 
35
37
  export type { SenderProps, SenderRef, SenderValue };
@@ -11,14 +11,6 @@ interface ChatStore<
11
11
  AIData,
12
12
  ContextData extends Record<string, any>,
13
13
  > {
14
- /** 存放Chat的上下文数据 */
15
- contextData?: ContextData;
16
- setContextData: (contextData?: ContextData) => void;
17
- setContextDataWithField: (
18
- field: keyof ContextData,
19
- contextDataValue: ContextData[keyof ContextData],
20
- ) => void;
21
-
22
14
  senderValue?: UserData;
23
15
  setSenderValue: (senderValue?: UserData) => void;
24
16
 
@@ -27,6 +19,16 @@ interface ChatStore<
27
19
  addMessage: (message: ChatMessage<UserData, AIData>) => void;
28
20
  updateMessage: (message: ChatMessage<UserData, AIData>) => void;
29
21
  setMessagesBefore: (messages: ChatMessage<UserData, AIData>[]) => void;
22
+ setMessagesAfter: (messages: ChatMessage<UserData, AIData>[]) => void;
23
+
24
+ /** 存放Chat的上下文数据 */
25
+ contextData?: ContextData;
26
+ setContextData: (contextData?: ContextData) => void;
27
+ setContextDataWithField: (
28
+ field: keyof ContextData,
29
+ contextDataValue: ContextData[keyof ContextData],
30
+ ) => void;
31
+ setContextDataPartial: (contextDataPartial: Partial<ContextData>) => void;
30
32
 
31
33
  reset: () => void;
32
34
  }
@@ -37,19 +39,6 @@ function createChatStore<
37
39
  ContextData extends Record<string, any> = any,
38
40
  >() {
39
41
  const useChatStore = create<ChatStore<UserData, AIData, ContextData>>((set, get, store) => ({
40
- contextData: undefined,
41
- setContextData: (contextData) => {
42
- set({ contextData });
43
- },
44
- setContextDataWithField: (field, contextDataValue) => {
45
- const preContextData = get().contextData;
46
- set({
47
- contextData: {
48
- ...preContextData,
49
- [field]: contextDataValue,
50
- } as ContextData,
51
- });
52
- },
53
42
  senderValue: undefined,
54
43
  setSenderValue: (senderValue) => {
55
44
  set(() => ({ senderValue }));
@@ -111,6 +100,46 @@ function createChatStore<
111
100
  messages: newMessages,
112
101
  });
113
102
  },
103
+ setMessagesAfter: (messagesAfter) => {
104
+ if (messagesAfter.length === 0) {
105
+ return;
106
+ }
107
+
108
+ const messages = get().messages;
109
+
110
+ const firstMessageAfter = messagesAfter[0];
111
+ const index = messages.findIndex((message) => message.uuid === firstMessageAfter.uuid);
112
+
113
+ // 如果 index 非 -1,则合并
114
+ // 如果 index -1,-1 + 1 为 0,即全取 message,也适用
115
+ const newMessages = [...messages.slice(0, index), ...messagesAfter];
116
+
117
+ set({
118
+ messages: newMessages,
119
+ });
120
+ },
121
+ contextData: undefined,
122
+ setContextData: (contextData) => {
123
+ set({ contextData });
124
+ },
125
+ setContextDataWithField: (field, contextDataValue) => {
126
+ const preContextData = get().contextData;
127
+ set({
128
+ contextData: {
129
+ ...preContextData,
130
+ [field]: contextDataValue,
131
+ } as ContextData,
132
+ });
133
+ },
134
+ setContextDataPartial: (contextDataPartial) => {
135
+ const preContextData = get().contextData;
136
+ set({
137
+ contextData: {
138
+ ...preContextData,
139
+ ...contextDataPartial,
140
+ } as ContextData,
141
+ });
142
+ },
114
143
  reset: () => {
115
144
  set(store.getInitialState());
116
145
  },