From 29f99a8622fddaa88bb12579966ccfb5a4d1e9d2 Mon Sep 17 00:00:00 2001 From: Jamie Pine Date: Sat, 25 Apr 2026 10:24:51 -0700 Subject: [PATCH] fix(mcp): preserve speak engine defaults --- backend/mcp_server/tools.py | 18 ++++++++++++------ backend/routes/speak.py | 18 ++++++++++++------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/backend/mcp_server/tools.py b/backend/mcp_server/tools.py index 45391f06..fcf3b6a2 100644 --- a/backend/mcp_server/tools.py +++ b/backend/mcp_server/tools.py @@ -75,22 +75,28 @@ def register_tools(mcp: FastMCP) -> None: "Voicebox → Settings → MCP." ) - resolved_personality = personality - if resolved_personality is None and client_id: + binding = None + if client_id: binding = ( db.query(MCPClientBinding) .filter(MCPClientBinding.client_id == client_id) .first() ) - if binding is not None: - resolved_personality = bool(binding.default_personality) + + resolved_personality = personality + if resolved_personality is None and binding is not None: + resolved_personality = bool(binding.default_personality) + + resolved_engine = engine + if resolved_engine is None and binding is not None: + resolved_engine = binding.default_engine use_persona = bool(resolved_personality) and bool(vp.personality) return await _speak( profile_id=vp.id, profile_name=vp.name, text=text, - engine=engine, + engine=resolved_engine, language=language, personality=use_persona, db=db, @@ -232,7 +238,7 @@ async def _speak( profile_id=profile_id, text=text, language=language or "en", - engine=engine or "qwen", + engine=engine, personality=personality, ) generation = await generate_speech(req, db) diff --git a/backend/routes/speak.py b/backend/routes/speak.py index 5afb2de5..0c81846c 100644 --- a/backend/routes/speak.py +++ b/backend/routes/speak.py @@ -52,16 +52,22 @@ async def speak( ), ) - # Resolve per-client personality default when the caller didn't pin it. - personality_flag = data.personality - if personality_flag is None and client_id: + binding = None + if client_id: binding = ( db.query(MCPClientBinding) .filter(MCPClientBinding.client_id == client_id) .first() ) - if binding is not None: - personality_flag = bool(binding.default_personality) + + # Resolve per-client personality default when the caller didn't pin it. + personality_flag = data.personality + if personality_flag is None and binding is not None: + personality_flag = bool(binding.default_personality) + + engine = data.engine + if engine is None and binding is not None: + engine = binding.default_engine from .generations import generate_speech @@ -70,7 +76,7 @@ async def speak( profile_id=profile.id, text=data.text, language=data.language or "en", - engine=data.engine or "qwen", + engine=engine, personality=bool(personality_flag), ), db,