Просмотр исходного кода

Fix chat dialogue (#3024)

* fix: update chatInputToChatCompletion return value to fit user use

* fix: add chat dialogue & input all interface export

* fix: remove useless import
YannLynn 1 неделя назад
Родитель
Сommit
020ee73380

+ 7 - 4
packages/semi-foundation/aiChatDialogue/dataAdapter/chatInputToChatCompletion.ts

@@ -39,10 +39,13 @@ export default function chatInputToChatCompletion(inputContent: any): ChatComple
 
     return {
         role: "user",
-        content: inputs,
-        // createdAt: created_at, // todo: 产生消息时给 createdat 还是发送时?
-        // model: model, // todo: inputContent 中未包含 model 信息
-        references
+        messages: [{
+            role: "user",
+            content: inputs,
+        }],
+        model: setup?.model,
+        references,
+        setup: setup ?? {}
     };
 
 }

+ 36 - 1
packages/semi-ui/aiChatDialogue/_story/aiChatDialogue.stories.jsx

@@ -1,5 +1,5 @@
 import React, { useState, useCallback, useRef, useEffect } from 'react';
-import { AIChatDialogue, RadioGroup, Radio, Button, Input, Toast } from '../../index';
+import { AIChatDialogue, RadioGroup, Radio, Button, Input, Toast, chatInputToChatCompletion, chatInputToMessage, AIChatInput } from '../../index';
 import CustomRenderContentItem from './CustomRenderContentItem';
 import RenderConfigContentItem from './RenderConfig';
 import AIChatInputWithDialogueDemo from './AIChatInputWithDialogue';
@@ -583,3 +583,38 @@ StreamingResponseToMessageStory.storyName =  'adapter: streaming response';
 
 export const StreamingChatCompletionToMessageStory = () => <StreamingChatCompletionToMessageDemo />;
 StreamingChatCompletionToMessageStory.storyName =  'adapter: streaming chatCompletion';
+
+export const ChatInputToChatCompletionStory = () => {
+  const [generating, setGenerating] = useState(false);
+  const [messages, setMessages] = useState([]);
+
+  const onContentChange = useCallback((content) => {
+    // console.log('onContentChange', content);
+  }, []);
+
+  const onMessageSend = useCallback((props) => {
+    // console.log('onMessageSend', props);
+    const userMessage = chatInputToMessage(props);
+    const chatCompletion = chatInputToChatCompletion(props);
+    setGenerating(true);
+    setMessages((messages) => [...messages, {
+        id: `message-${Date.now()}`,
+        ...userMessage
+    }]);
+    console.log('chatCompletion', chatCompletion);
+    
+  }, []);
+
+  return (
+    <AIChatInput 
+      placeholder={'发送后查看控制台输出的结果'} 
+      defaultContent={'帮我写一个关于<input-slot placeholder="[主题]">独角兽</input-slot>的故事'}
+      skills={[]}
+      generating={generating}
+      uploadProps={{ action: "https://api.semi.design/upload" }}
+      onContentChange={onContentChange}
+      onMessageSend={onMessageSend}
+      onStopGenerate={() => setGenerating(false)}
+    />
+  )
+};

+ 5 - 0
packages/semi-ui/aiChatDialogue/index.tsx

@@ -15,6 +15,9 @@ import Hint from './widgets/dialogueHint';
 import { Button } from "../index";
 import { IconChevronDown } from '@douyinfe/semi-icons';
 
+export * from '@douyinfe/semi-foundation/aiChatDialogue/foundation';
+export * from './interface';
+
 
 export interface AIChatDialogueStates {
     chats?: Message[];
@@ -347,3 +350,5 @@ class AIChatDialogue extends BaseComponent<AIChatDialogueProps, AIChatDialogueSt
 }
 
 export default AIChatDialogue;
+
+

+ 2 - 0
packages/semi-ui/aiChatInput/index.tsx

@@ -30,7 +30,9 @@ import { Locale } from '../locale/interface';
 import LocaleConsumer from '../locale/localeConsumer';
 import SkillItem from './skillItem';
 import SuggestionItem from './suggestionItem';
+
 export { getConfigureItem };
+export * from './interface';
 
 const prefixCls = cssClasses.PREFIX;