Underground-Digital/Workflow-Engine
0
1import logging2 3from flask import request4from werkzeug.exceptions import InternalServerError5 6import services7from controllers.console import api8from controllers.console.app.error import (9 AppUnavailableError,10 AudioTooLargeError,11 CompletionRequestError,12 NoAudioUploadedError,13 ProviderModelCurrentlyNotSupportError,14 ProviderNotInitializeError,15 ProviderNotSupportSpeechToTextError,16 ProviderQuotaExceededError,17 UnsupportedAudioTypeError,18)19from controllers.console.explore.wraps import InstalledAppResource20from core.errors.error import ModelCurrentlyNotSupportError, ProviderTokenNotInitError, QuotaExceededError21from core.model_runtime.errors.invoke import InvokeError22from models.model import AppMode23from services.audio_service import AudioService24from services.errors.audio import (25 AudioTooLargeServiceError,26 NoAudioUploadedServiceError,27 ProviderNotSupportSpeechToTextServiceError,28 UnsupportedAudioTypeServiceError,29)30 31 32class ChatAudioApi(InstalledAppResource):33 def post(self, installed_app):34 app_model = installed_app.app35 36 file = request.files["file"]37 38 try:39 response = AudioService.transcript_asr(app_model=app_model, file=file, end_user=None)40 41 return response42 except services.errors.app_model_config.AppModelConfigBrokenError:43 logging.exception("App model config broken.")44 raise AppUnavailableError()45 except NoAudioUploadedServiceError:46 raise NoAudioUploadedError()47 except AudioTooLargeServiceError as e:48 raise AudioTooLargeError(str(e))49 except UnsupportedAudioTypeServiceError:50 raise UnsupportedAudioTypeError()51 except ProviderNotSupportSpeechToTextServiceError:52 raise ProviderNotSupportSpeechToTextError()53 except ProviderTokenNotInitError as ex:54 raise ProviderNotInitializeError(ex.description)55 except QuotaExceededError:56 raise ProviderQuotaExceededError()57 except ModelCurrentlyNotSupportError:58 raise ProviderModelCurrentlyNotSupportError()59 except InvokeError as e:60 raise CompletionRequestError(e.description)61 except ValueError as e:62 raise e63 except Exception as e:64 logging.exception("internal server error.")65 raise InternalServerError()66 67 68class ChatTextApi(InstalledAppResource):69 def post(self, installed_app):70 from flask_restful import reqparse71 72 app_model = installed_app.app73 try:74 parser = reqparse.RequestParser()75 parser.add_argument("message_id", type=str, required=False, location="json")76 parser.add_argument("voice", type=str, location="json")77 parser.add_argument("text", type=str, location="json")78 parser.add_argument("streaming", type=bool, location="json")79 args = parser.parse_args()80 81 message_id = args.get("message_id", None)82 text = args.get("text", None)83 if (84 app_model.mode in {AppMode.ADVANCED_CHAT.value, AppMode.WORKFLOW.value}85 and app_model.workflow86 and app_model.workflow.features_dict87 ):88 text_to_speech = app_model.workflow.features_dict.get("text_to_speech")89 voice = args.get("voice") or text_to_speech.get("voice")90 else:91 try:92 voice = args.get("voice") or app_model.app_model_config.text_to_speech_dict.get("voice")93 except Exception:94 voice = None95 response = AudioService.transcript_tts(app_model=app_model, message_id=message_id, voice=voice, text=text)96 return response97 except services.errors.app_model_config.AppModelConfigBrokenError:98 logging.exception("App model config broken.")99 raise AppUnavailableError()100 except NoAudioUploadedServiceError:101 raise NoAudioUploadedError()102 except AudioTooLargeServiceError as e:103 raise AudioTooLargeError(str(e))104 except UnsupportedAudioTypeServiceError:105 raise UnsupportedAudioTypeError()106 except ProviderNotSupportSpeechToTextServiceError:107 raise ProviderNotSupportSpeechToTextError()108 except ProviderTokenNotInitError as ex:109 raise ProviderNotInitializeError(ex.description)110 except QuotaExceededError:111 raise ProviderQuotaExceededError()112 except ModelCurrentlyNotSupportError:113 raise ProviderModelCurrentlyNotSupportError()114 except InvokeError as e:115 raise CompletionRequestError(e.description)116 except ValueError as e:117 raise e118 except Exception as e:119 logging.exception("internal server error.")120 raise InternalServerError()121 122 123api.add_resource(ChatAudioApi, "/installed-apps/<uuid:installed_app_id>/audio-to-text", endpoint="installed_app_audio")124api.add_resource(ChatTextApi, "/installed-apps/<uuid:installed_app_id>/text-to-audio", endpoint="installed_app_text")125# api.add_resource(ChatTextApiWithMessageId, '/installed-apps/<uuid:installed_app_id>/text-to-audio/message-id',126# endpoint='installed_app_text_with_message_id')127 