diff --git a/apps/application/serializers/application_serializers.py b/apps/application/serializers/application_serializers.py index 629d118a9..4dd65d122 100644 --- a/apps/application/serializers/application_serializers.py +++ b/apps/application/serializers/application_serializers.py @@ -690,6 +690,10 @@ class ApplicationSerializer(serializers.Serializer): raise AppUnauthorizedFailed(500, "非法用户") return ApplicationSerializer.Query.reset_application( {**ApplicationSerializer.ApplicationModel(application).data, + 'stt_model_id': application.stt_model_id, + 'tts_model_id': application.tts_model_id, + 'stt_model_enable': application.stt_model_enable, + 'tts_model_enable': application.tts_model_enable, 'show_source': application_access_token.show_source}) @transaction.atomic diff --git a/apps/application/views/application_views.py b/apps/application/views/application_views.py index a9dd2fe4d..0c8333566 100644 --- a/apps/application/views/application_views.py +++ b/apps/application/views/application_views.py @@ -539,7 +539,7 @@ class Application(APIView): authentication_classes = [TokenAuth] @action(methods=['POST'], detail=False) - @has_permissions(ViewPermission([RoleConstants.ADMIN, RoleConstants.USER], + @has_permissions(ViewPermission([RoleConstants.ADMIN, RoleConstants.USER, RoleConstants.APPLICATION_ACCESS_TOKEN], [lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE, dynamic_tag=keywords.get( @@ -554,7 +554,7 @@ class Application(APIView): authentication_classes = [TokenAuth] @action(methods=['POST'], detail=False) - @has_permissions(ViewPermission([RoleConstants.ADMIN, RoleConstants.USER], + @has_permissions(ViewPermission([RoleConstants.ADMIN, RoleConstants.USER, RoleConstants.APPLICATION_ACCESS_TOKEN], [lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE, dynamic_tag=keywords.get( diff --git a/ui/src/components/ai-chat/index.vue b/ui/src/components/ai-chat/index.vue index 074cb86d2..1d5a94269 100644 --- a/ui/src/components/ai-chat/index.vue +++ b/ui/src/components/ai-chat/index.vue @@ -666,15 +666,12 @@ const uploadRecording = async (audioBlob: Blob) => { try { const formData = new FormData() formData.append('file', audioBlob, 'recording.mp3') - - if (id) { - applicationApi.postSpeechToText(id as string, formData, loading) - .then((response) => { - console.log('上传成功:', response.data) - inputValue.value = response.data - // chatMessage(null, res.data) - }) - } + applicationApi.postSpeechToText(props.data.id as string, formData, loading) + .then((response) => { + console.log('上传成功:', response.data) + inputValue.value = response.data + // chatMessage(null, res.data) + }) } catch (error) { console.error('上传失败:', error) @@ -682,36 +679,33 @@ const uploadRecording = async (audioBlob: Blob) => { } const playAnswerText = (text: string) => { - if (id) { - console.log(text) - applicationApi.postTextToSpeech(id as string, { 'text': text }, loading) - .then((res: any) => { + applicationApi.postTextToSpeech(props.data.id as string, { 'text': text }, loading) + .then((res: any) => { - // 假设我们有一个 MP3 文件的字节数组 - // 创建 Blob 对象 - const blob = new Blob([res], { type: 'audio/mp3' }) + // 假设我们有一个 MP3 文件的字节数组 + // 创建 Blob 对象 + const blob = new Blob([res], { type: 'audio/mp3' }) - // 创建对象 URL - const url = URL.createObjectURL(blob) + // 创建对象 URL + const url = URL.createObjectURL(blob) - // 测试blob是否能正常播放 - // const link = document.createElement('a') - // link.href = window.URL.createObjectURL(blob) - // link.download = "abc.mp3" - // link.click() + // 测试blob是否能正常播放 + // const link = document.createElement('a') + // link.href = window.URL.createObjectURL(blob) + // link.download = "abc.mp3" + // link.click() - // 检查 audioPlayer 是否已经引用了 DOM 元素 - if (audioPlayer.value instanceof HTMLAudioElement) { - audioPlayer.value.src = url; - audioPlayer.value.play(); // 自动播放音频 - } else { - console.error("audioPlayer.value is not an instance of HTMLAudioElement"); - } - }) - .catch((err) => { - console.log('err: ', err) - }) - } + // 检查 audioPlayer 是否已经引用了 DOM 元素 + if (audioPlayer.value instanceof HTMLAudioElement) { + audioPlayer.value.src = url; + audioPlayer.value.play(); // 自动播放音频 + } else { + console.error("audioPlayer.value is not an instance of HTMLAudioElement"); + } + }) + .catch((err) => { + console.log('err: ', err) + }) } function setScrollBottom() {