From 77151df0f433c02e7914bddc863d1406719f3674 Mon Sep 17 00:00:00 2001 From: patrick-motsch Date: Fri, 13 Feb 2026 18:03:23 +0100 Subject: [PATCH] fix: STT audioFormat scoping, automation import name, orphan FK cleanup Co-authored-by: Cursor --- modules/connectors/connectorVoiceGoogle.py | 3 +++ modules/features/automation/mainAutomation.py | 4 ++-- modules/shared/dbMultiTenantOptimizations.py | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/modules/connectors/connectorVoiceGoogle.py b/modules/connectors/connectorVoiceGoogle.py index b9d9bf2c..c32b7fa4 100644 --- a/modules/connectors/connectorVoiceGoogle.py +++ b/modules/connectors/connectorVoiceGoogle.py @@ -86,6 +86,9 @@ class ConnectorGoogleSpeech: channels = validation["channels"] audioFormat = validation["format"] logger.info(f"Auto-detected audio: {audioFormat}, {sampleRate}Hz, {channels}ch") + else: + # When sampleRate and channels are explicitly provided, assume raw PCM (LINEAR16) + audioFormat = "linear16" logger.info(f"Processing audio with Google Cloud Speech-to-Text") logger.info(f"Audio: {len(audioContent)} bytes, {sampleRate}Hz, {channels}ch") diff --git a/modules/features/automation/mainAutomation.py b/modules/features/automation/mainAutomation.py index 503e7b41..e23b320f 100644 --- a/modules/features/automation/mainAutomation.py +++ b/modules/features/automation/mainAutomation.py @@ -301,12 +301,12 @@ def _migrateExistingTemplates() -> None: as system templates (isSystem=True). This runs idempotently during feature registration. """ try: - from modules.features.automation.interfaceFeatureAutomation import getAutomationInterface + from modules.features.automation.interfaceFeatureAutomation import getInterface from modules.security.rootAccess import getRootUser from modules.features.automation.datamodelFeatureAutomation import AutomationTemplate rootUser = getRootUser() - automationInterface = getAutomationInterface(rootUser) + automationInterface = getInterface(rootUser) # Get all templates from DB allTemplates = automationInterface.db.getRecordset(AutomationTemplate) diff --git a/modules/shared/dbMultiTenantOptimizations.py b/modules/shared/dbMultiTenantOptimizations.py index ff8d7e8f..f3c2de98 100644 --- a/modules/shared/dbMultiTenantOptimizations.py +++ b/modules/shared/dbMultiTenantOptimizations.py @@ -390,6 +390,22 @@ def _applyForeignKeys(cursor, tables: Optional[List[str]]) -> int: logger.warning(f"Failed to drop FK {constraintName}: {e}") continue + # Clean up orphaned rows before applying FK constraint + try: + cursor.execute(f""" + DELETE FROM "{tableName}" + WHERE "{column}" IS NOT NULL + AND "{column}" NOT IN (SELECT "id" FROM "{refTable}") + """) + orphanCount = cursor.rowcount + if orphanCount > 0: + logger.info( + f"Cleaned {orphanCount} orphaned row(s) from {tableName} " + f"(missing {refTable} reference via {column})" + ) + except Exception as e: + logger.warning(f"Failed to clean orphans for FK {constraintName}: {e}") + try: cursor.execute(f""" ALTER TABLE "{tableName}"