audio.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # -*- coding:utf-8 -*-
  2. import logging
  3. import services
  4. from controllers.console import api
  5. from controllers.console.app.error import (AppUnavailableError, AudioTooLargeError, CompletionRequestError,
  6. NoAudioUploadedError, ProviderModelCurrentlyNotSupportError,
  7. ProviderNotInitializeError, ProviderNotSupportSpeechToTextError,
  8. ProviderQuotaExceededError, UnsupportedAudioTypeError)
  9. from controllers.console.explore.wraps import InstalledAppResource
  10. from core.errors.error import ModelCurrentlyNotSupportError, ProviderTokenNotInitError, QuotaExceededError
  11. from core.model_runtime.errors.invoke import InvokeError
  12. from flask import request
  13. from models.model import AppModelConfig
  14. from services.audio_service import AudioService
  15. from services.errors.audio import (AudioTooLargeServiceError, NoAudioUploadedServiceError,
  16. ProviderNotSupportSpeechToTextServiceError, UnsupportedAudioTypeServiceError)
  17. from werkzeug.exceptions import InternalServerError
  18. class ChatAudioApi(InstalledAppResource):
  19. def post(self, installed_app):
  20. app_model = installed_app.app
  21. app_model_config: AppModelConfig = app_model.app_model_config
  22. if not app_model_config.speech_to_text_dict['enabled']:
  23. raise AppUnavailableError()
  24. file = request.files['file']
  25. try:
  26. response = AudioService.transcript(
  27. tenant_id=app_model.tenant_id,
  28. file=file,
  29. )
  30. return response
  31. except services.errors.app_model_config.AppModelConfigBrokenError:
  32. logging.exception("App model config broken.")
  33. raise AppUnavailableError()
  34. except NoAudioUploadedServiceError:
  35. raise NoAudioUploadedError()
  36. except AudioTooLargeServiceError as e:
  37. raise AudioTooLargeError(str(e))
  38. except UnsupportedAudioTypeServiceError:
  39. raise UnsupportedAudioTypeError()
  40. except ProviderNotSupportSpeechToTextServiceError:
  41. raise ProviderNotSupportSpeechToTextError()
  42. except ProviderTokenNotInitError as ex:
  43. raise ProviderNotInitializeError(ex.description)
  44. except QuotaExceededError:
  45. raise ProviderQuotaExceededError()
  46. except ModelCurrentlyNotSupportError:
  47. raise ProviderModelCurrentlyNotSupportError()
  48. except InvokeError as e:
  49. raise CompletionRequestError(e.description)
  50. except ValueError as e:
  51. raise e
  52. except Exception as e:
  53. logging.exception("internal server error.")
  54. raise InternalServerError()
  55. api.add_resource(ChatAudioApi, '/installed-apps/<uuid:installed_app_id>/audio-to-text', endpoint='installed_app_audio')