fixed ai workspace voice google issue
This commit is contained in:
parent
50107a91ba
commit
24ff6058d5
3 changed files with 48 additions and 21 deletions
|
|
@ -562,15 +562,33 @@ class ConnectorGoogleSpeech:
|
||||||
"""Google TTS WaveNet cost: ~$0.000004/char."""
|
"""Google TTS WaveNet cost: ~$0.000004/char."""
|
||||||
return round(characterCount * 0.000004, 8)
|
return round(characterCount * 0.000004, 8)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _normalizeLanguageCode(code: Optional[str]) -> Optional[str]:
|
||||||
|
"""Normalize a user/LLM-supplied language hint to an ISO-639-1 code or None.
|
||||||
|
|
||||||
|
Google Cloud Translation v2 only accepts ISO codes (e.g. 'de', 'en') or
|
||||||
|
an omitted source for auto-detection. Strings like 'auto', '' or full
|
||||||
|
BCP-47 tags ('de-DE') would otherwise reach the API and trigger
|
||||||
|
'400 Invalid Value'. Centralising the mapping here keeps every caller
|
||||||
|
(tools, interface, internal pipelines) safe.
|
||||||
|
"""
|
||||||
|
if not code:
|
||||||
|
return None
|
||||||
|
normalized = code.strip().lower()
|
||||||
|
if not normalized or normalized in ("auto", "detect", "any", "*"):
|
||||||
|
return None
|
||||||
|
return normalized.split("-")[0]
|
||||||
|
|
||||||
async def translateText(self, text: str, targetLanguage: str = "en",
|
async def translateText(self, text: str, targetLanguage: str = "en",
|
||||||
sourceLanguage: str = "de") -> Dict:
|
sourceLanguage: Optional[str] = None) -> Dict:
|
||||||
"""
|
"""
|
||||||
Translate text using Google Cloud Translation API.
|
Translate text using Google Cloud Translation API.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
text: Text to translate
|
text: Text to translate
|
||||||
target_language: Target language code (e.g., 'en', 'de')
|
targetLanguage: Target language code (e.g., 'en', 'de')
|
||||||
source_language: Source language code (e.g., 'de', 'en')
|
sourceLanguage: Source language code (e.g., 'de', 'en'); pass None
|
||||||
|
or 'auto' for Google's auto-detection.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Dict containing translated text and metadata
|
Dict containing translated text and metadata
|
||||||
|
|
@ -584,13 +602,17 @@ class ConnectorGoogleSpeech:
|
||||||
"error": "Empty text provided"
|
"error": "Empty text provided"
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info(f"🌐 Translating: '{text}' ({sourceLanguage} -> {targetLanguage})")
|
normalizedSource = self._normalizeLanguageCode(sourceLanguage)
|
||||||
|
normalizedTarget = self._normalizeLanguageCode(targetLanguage) or "en"
|
||||||
|
logger.info(
|
||||||
|
f"🌐 Translating: '{text}' "
|
||||||
|
f"({normalizedSource or 'auto'} -> {normalizedTarget})"
|
||||||
|
)
|
||||||
|
|
||||||
# Perform translation
|
|
||||||
result = self.translate_client.translate(
|
result = self.translate_client.translate(
|
||||||
text,
|
text,
|
||||||
source_language=sourceLanguage,
|
source_language=normalizedSource,
|
||||||
target_language=targetLanguage
|
target_language=normalizedTarget,
|
||||||
)
|
)
|
||||||
|
|
||||||
translatedText = result['translatedText']
|
translatedText = result['translatedText']
|
||||||
|
|
@ -708,8 +730,8 @@ class ConnectorGoogleSpeech:
|
||||||
# Step 2: Translation
|
# Step 2: Translation
|
||||||
translationResult = await self.translateText(
|
translationResult = await self.translateText(
|
||||||
text=originalText,
|
text=originalText,
|
||||||
sourceLanguage=fromLanguage.split('-')[0], # Convert 'de-DE' to 'de'
|
sourceLanguage=fromLanguage,
|
||||||
targetLanguage=toLanguage.split('-')[0] # Convert 'en-US' to 'en'
|
targetLanguage=toLanguage,
|
||||||
)
|
)
|
||||||
|
|
||||||
if not translationResult["success"]:
|
if not translationResult["success"]:
|
||||||
|
|
|
||||||
|
|
@ -181,21 +181,26 @@ class VoiceObjects:
|
||||||
"error": str(e)
|
"error": str(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
async def translateText(self, text: str, sourceLanguage: str = "de",
|
async def translateText(self, text: str,
|
||||||
|
sourceLanguage: Optional[str] = None,
|
||||||
targetLanguage: str = "en") -> Dict[str, Any]:
|
targetLanguage: str = "en") -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Translate text using Google Cloud Translation API.
|
Translate text using Google Cloud Translation API.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
text: Text to translate
|
text: Text to translate
|
||||||
sourceLanguage: Source language code (e.g., 'de', 'en')
|
sourceLanguage: Source language ISO code (e.g. 'de', 'en'); pass None
|
||||||
targetLanguage: Target language code (e.g., 'en', 'de')
|
or 'auto' to let Google auto-detect.
|
||||||
|
targetLanguage: Target language ISO code (e.g. 'en', 'de')
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Dict containing translated text and metadata
|
Dict containing translated text and metadata
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
logger.info(f"🌐 Translation request: '{text}' ({sourceLanguage} -> {targetLanguage})")
|
logger.info(
|
||||||
|
f"🌐 Translation request: '{text}' "
|
||||||
|
f"({sourceLanguage or 'auto'} -> {targetLanguage})"
|
||||||
|
)
|
||||||
|
|
||||||
if not text.strip():
|
if not text.strip():
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -670,7 +670,7 @@ def _registerWorkspaceTools(registry: ToolRegistry, services):
|
||||||
from modules.interfaces.interfaceVoiceObjects import getVoiceInterface
|
from modules.interfaces.interfaceVoiceObjects import getVoiceInterface
|
||||||
mandateId = context.get("mandateId", "")
|
mandateId = context.get("mandateId", "")
|
||||||
voiceInterface = getVoiceInterface(currentUser=None, mandateId=mandateId)
|
voiceInterface = getVoiceInterface(currentUser=None, mandateId=mandateId)
|
||||||
sourceLanguage = args.get("sourceLanguage", "auto")
|
sourceLanguage = args.get("sourceLanguage") or None
|
||||||
result = await voiceInterface.translateText(text, sourceLanguage=sourceLanguage, targetLanguage=targetLanguage)
|
result = await voiceInterface.translateText(text, sourceLanguage=sourceLanguage, targetLanguage=targetLanguage)
|
||||||
if result and result.get("success"):
|
if result and result.get("success"):
|
||||||
translated = result.get("translated_text", "")
|
translated = result.get("translated_text", "")
|
||||||
|
|
@ -735,7 +735,7 @@ def _registerWorkspaceTools(registry: ToolRegistry, services):
|
||||||
"properties": {
|
"properties": {
|
||||||
"text": {"type": "string", "description": "Text to translate"},
|
"text": {"type": "string", "description": "Text to translate"},
|
||||||
"targetLanguage": {"type": "string", "description": "Target language ISO code (e.g. 'en', 'de', 'fr')"},
|
"targetLanguage": {"type": "string", "description": "Target language ISO code (e.g. 'en', 'de', 'fr')"},
|
||||||
"sourceLanguage": {"type": "string", "description": "Source language ISO code (default: auto-detect)"},
|
"sourceLanguage": {"type": "string", "description": "Source language ISO code (e.g. 'de', 'en'). Omit or leave empty for auto-detection."},
|
||||||
},
|
},
|
||||||
"required": ["text", "targetLanguage"]
|
"required": ["text", "targetLanguage"]
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue