audio.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # -*- coding:utf-8 -*-
  2. import logging
  3. from flask import request
  4. from werkzeug.exceptions import InternalServerError
  5. import services
  6. from controllers.console import api
  7. from controllers.console.app.error import AppUnavailableError, ProviderNotInitializeError, \
  8. ProviderQuotaExceededError, ProviderModelCurrentlyNotSupportError, CompletionRequestError, \
  9. NoAudioUploadedError, AudioTooLargeError, \
  10. UnsupportedAudioTypeError, ProviderNotSupportSpeechToTextError
  11. from controllers.console.explore.wraps import InstalledAppResource
  12. from core.model_providers.error import LLMBadRequestError, LLMAPIUnavailableError, LLMAuthorizationError, LLMAPIConnectionError, \
  13. LLMRateLimitError, ProviderTokenNotInitError, QuotaExceededError, ModelCurrentlyNotSupportError
  14. from services.audio_service import AudioService
  15. from services.errors.audio import NoAudioUploadedServiceError, AudioTooLargeServiceError, \
  16. UnsupportedAudioTypeServiceError, ProviderNotSupportSpeechToTextServiceError
  17. from models.model import AppModelConfig
  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 (LLMBadRequestError, LLMAPIConnectionError, LLMAPIUnavailableError,
  49. LLMRateLimitError, LLMAuthorizationError) as e:
  50. raise CompletionRequestError(str(e))
  51. except ValueError as e:
  52. raise e
  53. except Exception as e:
  54. logging.exception("internal server error.")
  55. raise InternalServerError()
  56. api.add_resource(ChatAudioApi, '/installed-apps/<uuid:installed_app_id>/audio-to-text', endpoint='installed_app_audio')