|
@@ -1,18 +1,16 @@
|
|
|
-import hashlib
|
|
|
import logging
|
|
|
import re
|
|
|
-import subprocess
|
|
|
-import uuid
|
|
|
from abc import abstractmethod
|
|
|
from typing import Optional
|
|
|
|
|
|
from pydantic import ConfigDict
|
|
|
|
|
|
from core.model_runtime.entities.model_entities import ModelPropertyKey, ModelType
|
|
|
-from core.model_runtime.errors.invoke import InvokeBadRequestError
|
|
|
from core.model_runtime.model_providers.__base.ai_model import AIModel
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
+
|
|
|
+
|
|
|
class TTSModel(AIModel):
|
|
|
"""
|
|
|
Model class for ttstext model.
|
|
@@ -37,8 +35,6 @@ class TTSModel(AIModel):
|
|
|
:return: translated audio file
|
|
|
"""
|
|
|
try:
|
|
|
- logger.info(f"Invoke TTS model: {model} , invoke content : {content_text}")
|
|
|
- self._is_ffmpeg_installed()
|
|
|
return self._invoke(model=model, credentials=credentials, user=user,
|
|
|
content_text=content_text, voice=voice, tenant_id=tenant_id)
|
|
|
except Exception as e:
|
|
@@ -75,7 +71,8 @@ class TTSModel(AIModel):
|
|
|
if model_schema and ModelPropertyKey.VOICES in model_schema.model_properties:
|
|
|
voices = model_schema.model_properties[ModelPropertyKey.VOICES]
|
|
|
if language:
|
|
|
- return [{'name': d['name'], 'value': d['mode']} for d in voices if language and language in d.get('language')]
|
|
|
+ return [{'name': d['name'], 'value': d['mode']} for d in voices if
|
|
|
+ language and language in d.get('language')]
|
|
|
else:
|
|
|
return [{'name': d['name'], 'value': d['mode']} for d in voices]
|
|
|
|
|
@@ -146,28 +143,3 @@ class TTSModel(AIModel):
|
|
|
if one_sentence != '':
|
|
|
result.append(one_sentence)
|
|
|
return result
|
|
|
-
|
|
|
- @staticmethod
|
|
|
- def _is_ffmpeg_installed():
|
|
|
- try:
|
|
|
- output = subprocess.check_output("ffmpeg -version", shell=True)
|
|
|
- if "ffmpeg version" in output.decode("utf-8"):
|
|
|
- return True
|
|
|
- else:
|
|
|
- raise InvokeBadRequestError("ffmpeg is not installed, "
|
|
|
- "details: https://docs.dify.ai/getting-started/install-self-hosted"
|
|
|
- "/install-faq#id-14.-what-to-do-if-this-error-occurs-in-text-to-speech")
|
|
|
- except Exception:
|
|
|
- raise InvokeBadRequestError("ffmpeg is not installed, "
|
|
|
- "details: https://docs.dify.ai/getting-started/install-self-hosted"
|
|
|
- "/install-faq#id-14.-what-to-do-if-this-error-occurs-in-text-to-speech")
|
|
|
-
|
|
|
- # Todo: To improve the streaming function
|
|
|
- @staticmethod
|
|
|
- def _get_file_name(file_content: str) -> str:
|
|
|
- hash_object = hashlib.sha256(file_content.encode())
|
|
|
- hex_digest = hash_object.hexdigest()
|
|
|
-
|
|
|
- namespace_uuid = uuid.UUID('a5da6ef9-b303-596f-8e88-bf8fa40f4b31')
|
|
|
- unique_uuid = uuid.uuid5(namespace_uuid, hex_digest)
|
|
|
- return str(unique_uuid)
|