audio.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import logging
  2. from flask import request
  3. from werkzeug.exceptions import InternalServerError
  4. import services
  5. from controllers.service_api import api
  6. from controllers.service_api.app.error import AppUnavailableError, ProviderNotInitializeError, CompletionRequestError, ProviderQuotaExceededError, \
  7. ProviderModelCurrentlyNotSupportError, NoAudioUploadedError, AudioTooLargeError, UnsupportedAudioTypeError, \
  8. ProviderNotSupportSpeechToTextError
  9. from controllers.service_api.wraps import AppApiResource
  10. from core.model_providers.error import LLMBadRequestError, LLMAuthorizationError, LLMAPIUnavailableError, LLMAPIConnectionError, \
  11. LLMRateLimitError, ProviderTokenNotInitError, QuotaExceededError, ModelCurrentlyNotSupportError
  12. from models.model import App, AppModelConfig
  13. from services.audio_service import AudioService
  14. from services.errors.audio import NoAudioUploadedServiceError, AudioTooLargeServiceError, \
  15. UnsupportedAudioTypeServiceError, ProviderNotSupportSpeechToTextServiceError
  16. class AudioApi(AppApiResource):
  17. def post(self, app_model: App, end_user):
  18. app_model_config: AppModelConfig = app_model.app_model_config
  19. if not app_model_config.speech_to_text_dict['enabled']:
  20. raise AppUnavailableError()
  21. file = request.files['file']
  22. try:
  23. response = AudioService.transcript(
  24. tenant_id=app_model.tenant_id,
  25. file=file,
  26. )
  27. return response
  28. except services.errors.app_model_config.AppModelConfigBrokenError:
  29. logging.exception("App model config broken.")
  30. raise AppUnavailableError()
  31. except NoAudioUploadedServiceError:
  32. raise NoAudioUploadedError()
  33. except AudioTooLargeServiceError as e:
  34. raise AudioTooLargeError(str(e))
  35. except UnsupportedAudioTypeServiceError:
  36. raise UnsupportedAudioTypeError()
  37. except ProviderNotSupportSpeechToTextServiceError:
  38. raise ProviderNotSupportSpeechToTextError()
  39. except ProviderTokenNotInitError as ex:
  40. raise ProviderNotInitializeError(ex.description)
  41. except QuotaExceededError:
  42. raise ProviderQuotaExceededError()
  43. except ModelCurrentlyNotSupportError:
  44. raise ProviderModelCurrentlyNotSupportError()
  45. except (LLMBadRequestError, LLMAPIConnectionError, LLMAPIUnavailableError,
  46. LLMRateLimitError, LLMAuthorizationError) as e:
  47. raise CompletionRequestError(str(e))
  48. except ValueError as e:
  49. raise e
  50. except Exception as e:
  51. logging.exception("internal server error.")
  52. raise InternalServerError()
  53. api.add_resource(AudioApi, '/audio-to-text')