audio.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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_asr(
  27. tenant_id=app_model.tenant_id,
  28. file=file,
  29. end_user=None
  30. )
  31. return response
  32. except services.errors.app_model_config.AppModelConfigBrokenError:
  33. logging.exception("App model config broken.")
  34. raise AppUnavailableError()
  35. except NoAudioUploadedServiceError:
  36. raise NoAudioUploadedError()
  37. except AudioTooLargeServiceError as e:
  38. raise AudioTooLargeError(str(e))
  39. except UnsupportedAudioTypeServiceError:
  40. raise UnsupportedAudioTypeError()
  41. except ProviderNotSupportSpeechToTextServiceError:
  42. raise ProviderNotSupportSpeechToTextError()
  43. except ProviderTokenNotInitError as ex:
  44. raise ProviderNotInitializeError(ex.description)
  45. except QuotaExceededError:
  46. raise ProviderQuotaExceededError()
  47. except ModelCurrentlyNotSupportError:
  48. raise ProviderModelCurrentlyNotSupportError()
  49. except InvokeError as e:
  50. raise CompletionRequestError(e.description)
  51. except ValueError as e:
  52. raise e
  53. except Exception as e:
  54. logging.exception("internal server error.")
  55. raise InternalServerError()
  56. class ChatTextApi(InstalledAppResource):
  57. def post(self, installed_app):
  58. app_model = installed_app.app
  59. app_model_config: AppModelConfig = app_model.app_model_config
  60. if not app_model_config.text_to_speech_dict['enabled']:
  61. raise AppUnavailableError()
  62. try:
  63. response = AudioService.transcript_tts(
  64. tenant_id=app_model.tenant_id,
  65. text=request.form['text'],
  66. streaming=False
  67. )
  68. return {'data': response.data.decode('latin1')}
  69. except services.errors.app_model_config.AppModelConfigBrokenError:
  70. logging.exception("App model config broken.")
  71. raise AppUnavailableError()
  72. except NoAudioUploadedServiceError:
  73. raise NoAudioUploadedError()
  74. except AudioTooLargeServiceError as e:
  75. raise AudioTooLargeError(str(e))
  76. except UnsupportedAudioTypeServiceError:
  77. raise UnsupportedAudioTypeError()
  78. except ProviderNotSupportSpeechToTextServiceError:
  79. raise ProviderNotSupportSpeechToTextError()
  80. except ProviderTokenNotInitError as ex:
  81. raise ProviderNotInitializeError(ex.description)
  82. except QuotaExceededError:
  83. raise ProviderQuotaExceededError()
  84. except ModelCurrentlyNotSupportError:
  85. raise ProviderModelCurrentlyNotSupportError()
  86. except InvokeError as e:
  87. raise CompletionRequestError(e.description)
  88. except ValueError as e:
  89. raise e
  90. except Exception as e:
  91. logging.exception("internal server error.")
  92. raise InternalServerError()
  93. api.add_resource(ChatAudioApi, '/installed-apps/<uuid:installed_app_id>/audio-to-text', endpoint='installed_app_audio')
  94. api.add_resource(ChatTextApi, '/installed-apps/<uuid:installed_app_id>/text-to-audio', endpoint='installed_app_text')