Pārlūkot izejas kodu

fix: add type hints for App model and improve error handling in audio services (#12677)

Signed-off-by: -LAN- <laipz8200@outlook.com>
-LAN- 3 mēneši atpakaļ
vecāks
revīzija
cb34991663

+ 6 - 2
api/controllers/console/app/audio.py

@@ -22,7 +22,7 @@ from controllers.console.wraps import account_initialization_required, setup_req
 from core.errors.error import ModelCurrentlyNotSupportError, ProviderTokenNotInitError, QuotaExceededError
 from core.model_runtime.errors.invoke import InvokeError
 from libs.login import login_required
-from models.model import AppMode
+from models import App, AppMode
 from services.audio_service import AudioService
 from services.errors.audio import (
     AudioTooLargeServiceError,
@@ -79,7 +79,7 @@ class ChatMessageTextApi(Resource):
     @login_required
     @account_initialization_required
     @get_app_model
-    def post(self, app_model):
+    def post(self, app_model: App):
         from werkzeug.exceptions import InternalServerError
 
         try:
@@ -98,9 +98,13 @@ class ChatMessageTextApi(Resource):
                 and app_model.workflow.features_dict
             ):
                 text_to_speech = app_model.workflow.features_dict.get("text_to_speech")
+                if text_to_speech is None:
+                    raise ValueError("TTS is not enabled")
                 voice = args.get("voice") or text_to_speech.get("voice")
             else:
                 try:
+                    if app_model.app_model_config is None:
+                        raise ValueError("AppModelConfig not found")
                     voice = args.get("voice") or app_model.app_model_config.text_to_speech_dict.get("voice")
                 except Exception:
                     voice = None

+ 3 - 1
api/services/audio_service.py

@@ -82,7 +82,7 @@ class AudioService:
         from app import app
         from extensions.ext_database import db
 
-        def invoke_tts(text_content: str, app_model, voice: Optional[str] = None):
+        def invoke_tts(text_content: str, app_model: App, voice: Optional[str] = None):
             with app.app_context():
                 if app_model.mode in {AppMode.ADVANCED_CHAT.value, AppMode.WORKFLOW.value}:
                     workflow = app_model.workflow
@@ -95,6 +95,8 @@ class AudioService:
 
                     voice = features_dict["text_to_speech"].get("voice") if voice is None else voice
                 else:
+                    if app_model.app_model_config is None:
+                        raise ValueError("AppModelConfig not found")
                     text_to_speech_dict = app_model.app_model_config.text_to_speech_dict
 
                     if not text_to_speech_dict.get("enabled"):