diff --git a/src/pages/playground/components/message-input.tsx b/src/pages/playground/components/message-input.tsx index 772f69a7..93ab1284 100644 --- a/src/pages/playground/components/message-input.tsx +++ b/src/pages/playground/components/message-input.tsx @@ -35,6 +35,7 @@ const audioTypeMap: Record = { }; const AudioWrapper = styled.div` + padding-block: 10px; audio { padding-top: 10px; } @@ -297,17 +298,19 @@ const MessageInput: React.FC = forwardRef( try { const base64Audio = await convertFileToBase64(data.file); const audioData = await readAudioFile(data.file); - console.log('audioData====', audioData); - setMessage({ - ...message, - audio: [ - { - uid: updateUidCount(), - format: audioTypeMap[data.file.type] as AudioFormat, - base64: base64Audio.split(',')[1], - data: _.pick(audioData, ['url', 'name', 'duration']) - } - ] + console.log('audioData====', message.imgs); + setMessage((pre) => { + return { + ...pre, + audio: [ + { + uid: updateUidCount(), + format: audioTypeMap[data.file.type] as AudioFormat, + base64: base64Audio.split(',')[1], + data: _.pick(audioData, ['url', 'name', 'duration']) + } + ] + }; }); } catch (error) { console.error('Error converting audio to Base64:', error); diff --git a/src/pages/playground/components/multiple-chat/message-actions.tsx b/src/pages/playground/components/multiple-chat/message-actions.tsx index 9f10a928..fe854a9a 100644 --- a/src/pages/playground/components/multiple-chat/message-actions.tsx +++ b/src/pages/playground/components/multiple-chat/message-actions.tsx @@ -1,12 +1,29 @@ import CopyButton from '@/components/copy-button'; -import { EditOutlined, MinusCircleOutlined } from '@ant-design/icons'; +import UploadAudio from '@/components/upload-audio'; +import { convertFileToBase64, readAudioFile } from '@/utils/load-audio-file'; +import { + CustomerServiceOutlined, + EditOutlined, + MinusCircleOutlined +} from '@ant-design/icons'; import { useIntl } from '@umijs/max'; import { Button, Tooltip } from 'antd'; +import _ from 'lodash'; import React, { useCallback } from 'react'; import { Roles } from '../../config'; -import { MessageItem, MessageItemAction } from '../../config/types'; +import { + AudioFormat, + MessageItem, + MessageItemAction +} from '../../config/types'; import UploadImg from '../upload-img'; +const audioTypeMap: Record = { + 'audio/wav': 'wav', + 'audio/mp3': 'mp3', + 'audio/mpeg': 'mp3' +}; + interface MessageActionsProps { data: MessageItem; actions: MessageItemAction[]; @@ -32,12 +49,35 @@ const MessageActions: React.FC = ({ role: data.role, content: data.content, uid: data.uid, + audio: data.audio || [], imgs: [...(data.imgs || []), ...list] }); }, [data, updateMessage] ); + const handleUploadAudioChange = async (audio: { + file: any; + fileList: any[]; + }) => { + const base64Audio = await convertFileToBase64(audio.file); + const audioData = await readAudioFile(audio.file); + updateMessage?.({ + role: data.role, + content: data.content, + uid: data.uid, + imgs: data.imgs || [], + audio: [ + { + uid: audio.file.uid || audio.fileList[0].uid, + format: audioTypeMap[audio.file.type] as AudioFormat, + base64: base64Audio.split(',')[1], + data: _.pick(audioData, ['url', 'name', 'duration']) + } + ] + }); + }; + return ( <> {actions.length > 1 && !loading ? ( @@ -46,6 +86,16 @@ const MessageActions: React.FC = ({ {actions.includes('upload') && data.role === Roles.User && ( )} + {actions.includes('upload') && data.role === Roles.User && ( + } + onChange={handleUploadAudioChange} + > + )} {actions.includes('edit') && data.role === Roles.Assistant && (