Skip to content

Commit b200c15

Browse files
committed
refactor: TextToSpeech接口实现
1 parent 3faba75 commit b200c15

File tree

3 files changed

+49
-7
lines changed

3 files changed

+49
-7
lines changed

apps/application/serializers/application_serializers.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ def list(self, with_valid=True):
516516
@staticmethod
517517
def reset_application(application: Dict):
518518
application['multiple_rounds_dialogue'] = True if application.get('dialogue_number') > 0 else False
519-
del application['dialogue_number']
519+
520520
if 'dataset_setting' in application:
521521
application['dataset_setting'] = {'search_mode': 'embedding', 'no_references_setting': {
522522
'status': 'ai_questioning',
@@ -717,14 +717,11 @@ def edit(self, instance: Dict, with_valid=True):
717717
self.update_reverse_search_node(instance.get('work_flow'), application_dataset_id_list)
718718

719719
update_keys = ['name', 'desc', 'model_id', 'multiple_rounds_dialogue', 'prologue', 'status',
720-
'dataset_setting', 'model_setting', 'problem_optimization',
720+
'dataset_setting', 'model_setting', 'problem_optimization', 'dialogue_number',
721721
'api_key_is_active', 'icon', 'work_flow', 'model_params_setting']
722722
for update_key in update_keys:
723723
if update_key in instance and instance.get(update_key) is not None:
724-
if update_key == 'multiple_rounds_dialogue':
725-
application.__setattr__('dialogue_number', 0 if not instance.get(update_key) else 3)
726-
else:
727-
application.__setattr__(update_key, instance.get(update_key))
724+
application.__setattr__(update_key, instance.get(update_key))
728725
application.save()
729726

730727
if 'dataset_id_list' in instance:
@@ -823,6 +820,16 @@ def save_other_config(self, data):
823820

824821
application.save()
825822

823+
def speech_to_text(self, filelist):
824+
# todo 找到模型 mp3转text
825+
print(self.application_id)
826+
print(filelist)
827+
828+
def text_to_speech(self, text):
829+
# todo 找到模型 text转bytes
830+
print(self.application_id)
831+
print(text)
832+
826833
class ApplicationKeySerializerModel(serializers.ModelSerializer):
827834
class Meta:
828835
model = ApplicationApiKey

apps/application/urls.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,8 @@
6363
path(
6464
'application/<str:application_id>/chat/<chat_id>/chat_record/<str:chat_record_id>/dataset/<str:dataset_id>/document_id/<str:document_id>/improve/<str:paragraph_id>',
6565
views.ChatView.ChatRecord.Improve.Operate.as_view(),
66-
name='')
66+
name=''),
67+
path('application/<str:application_id>/<str:model_id>/speech_to_text', views.Application.SpeechToText.as_view(), name='application/audio'),
68+
path('application/<str:application_id>/<str:model_id>/text_to_speech', views.Application.TextToSpeech.as_view(), name='application/audio'),
69+
6770
]

apps/application/views/application_views.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,3 +534,35 @@ def get(self, request: Request, current_page: int, page_size: int):
534534
ApplicationSerializer.Query(
535535
data={**query_params_to_single_dict(request.query_params), 'user_id': request.user.id}).page(
536536
current_page, page_size))
537+
538+
class SpeechToText(APIView):
539+
authentication_classes = [TokenAuth]
540+
541+
@action(methods=['POST'], detail=False)
542+
@has_permissions(ViewPermission([RoleConstants.ADMIN, RoleConstants.USER],
543+
[lambda r, keywords: Permission(group=Group.APPLICATION,
544+
operate=Operate.USE,
545+
dynamic_tag=keywords.get(
546+
'application_id'))],
547+
compare=CompareConstants.AND))
548+
def post(self, request: Request, application_id: str, model_id: str):
549+
return result.success(
550+
ApplicationSerializer.Operate(
551+
data={'application_id': application_id, 'user_id': request.user.id, 'model_id': model_id})
552+
.speech_to_text(request.FILES.getlist('file')[0]))
553+
554+
class TextToSpeech(APIView):
555+
authentication_classes = [TokenAuth]
556+
557+
@action(methods=['POST'], detail=False)
558+
@has_permissions(ViewPermission([RoleConstants.ADMIN, RoleConstants.USER],
559+
[lambda r, keywords: Permission(group=Group.APPLICATION,
560+
operate=Operate.USE,
561+
dynamic_tag=keywords.get(
562+
'application_id'))],
563+
compare=CompareConstants.AND))
564+
def post(self, request: Request, application_id: str, model_id: str):
565+
return result.success(
566+
ApplicationSerializer.Operate(
567+
data={'application_id': application_id, 'user_id': request.user.id, 'model_id': model_id})
568+
.text_to_speech(request.data.get('text')))

0 commit comments

Comments
 (0)