Team Ai
Apppublic

Underground-Digital/Workflow-Engine

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
audio.py126 linesDownload Raw Back to web
1import logging2 3from flask import request4from werkzeug.exceptions import InternalServerError5 6import services7from controllers.web import api8from controllers.web.error import (9    AppUnavailableError,10    AudioTooLargeError,11    CompletionRequestError,12    NoAudioUploadedError,13    ProviderModelCurrentlyNotSupportError,14    ProviderNotInitializeError,15    ProviderNotSupportSpeechToTextError,16    ProviderQuotaExceededError,17    UnsupportedAudioTypeError,18)19from controllers.web.wraps import WebApiResource20from core.errors.error import ModelCurrentlyNotSupportError, ProviderTokenNotInitError, QuotaExceededError21from core.model_runtime.errors.invoke import InvokeError22from models.model import App, AppMode23from services.audio_service import AudioService24from services.errors.audio import (25    AudioTooLargeServiceError,26    NoAudioUploadedServiceError,27    ProviderNotSupportSpeechToTextServiceError,28    UnsupportedAudioTypeServiceError,29)30 31 32class AudioApi(WebApiResource):33    def post(self, app_model: App, end_user):34        file = request.files["file"]35 36        try:37            response = AudioService.transcript_asr(app_model=app_model, file=file, end_user=end_user)38 39            return response40        except services.errors.app_model_config.AppModelConfigBrokenError:41            logging.exception("App model config broken.")42            raise AppUnavailableError()43        except NoAudioUploadedServiceError:44            raise NoAudioUploadedError()45        except AudioTooLargeServiceError as e:46            raise AudioTooLargeError(str(e))47        except UnsupportedAudioTypeServiceError:48            raise UnsupportedAudioTypeError()49        except ProviderNotSupportSpeechToTextServiceError:50            raise ProviderNotSupportSpeechToTextError()51        except ProviderTokenNotInitError as ex:52            raise ProviderNotInitializeError(ex.description)53        except QuotaExceededError:54            raise ProviderQuotaExceededError()55        except ModelCurrentlyNotSupportError:56            raise ProviderModelCurrentlyNotSupportError()57        except InvokeError as e:58            raise CompletionRequestError(e.description)59        except ValueError as e:60            raise e61        except Exception as e:62            logging.exception(f"internal server error: {str(e)}")63            raise InternalServerError()64 65 66class TextApi(WebApiResource):67    def post(self, app_model: App, end_user):68        from flask_restful import reqparse69 70        try:71            parser = reqparse.RequestParser()72            parser.add_argument("message_id", type=str, required=False, location="json")73            parser.add_argument("voice", type=str, location="json")74            parser.add_argument("text", type=str, location="json")75            parser.add_argument("streaming", type=bool, location="json")76            args = parser.parse_args()77 78            message_id = args.get("message_id", None)79            text = args.get("text", None)80            if (81                app_model.mode in {AppMode.ADVANCED_CHAT.value, AppMode.WORKFLOW.value}82                and app_model.workflow83                and app_model.workflow.features_dict84            ):85                text_to_speech = app_model.workflow.features_dict.get("text_to_speech")86                voice = args.get("voice") or text_to_speech.get("voice")87            else:88                try:89                    voice = args.get("voice") or app_model.app_model_config.text_to_speech_dict.get("voice")90                except Exception:91                    voice = None92 93            response = AudioService.transcript_tts(94                app_model=app_model, message_id=message_id, end_user=end_user.external_user_id, voice=voice, text=text95            )96 97            return response98        except services.errors.app_model_config.AppModelConfigBrokenError:99            logging.exception("App model config broken.")100            raise AppUnavailableError()101        except NoAudioUploadedServiceError:102            raise NoAudioUploadedError()103        except AudioTooLargeServiceError as e:104            raise AudioTooLargeError(str(e))105        except UnsupportedAudioTypeServiceError:106            raise UnsupportedAudioTypeError()107        except ProviderNotSupportSpeechToTextServiceError:108            raise ProviderNotSupportSpeechToTextError()109        except ProviderTokenNotInitError as ex:110            raise ProviderNotInitializeError(ex.description)111        except QuotaExceededError:112            raise ProviderQuotaExceededError()113        except ModelCurrentlyNotSupportError:114            raise ProviderModelCurrentlyNotSupportError()115        except InvokeError as e:116            raise CompletionRequestError(e.description)117        except ValueError as e:118            raise e119        except Exception as e:120            logging.exception(f"internal server error: {str(e)}")121            raise InternalServerError()122 123 124api.add_resource(AudioApi, "/audio-to-text")125api.add_resource(TextApi, "/text-to-audio")126