Newer
Older
cortex-hub / ai-hub / app / core / services / stt.py
import logging
from fastapi import HTTPException
from app.core.providers.base import STTProvider

# Configure logging
logger = logging.getLogger(__name__)

class STTService:
    """
    Service class for transcribing audio into text using an STT provider.
    """

    def __init__(self, stt_provider: STTProvider):
        """
        Initializes the STTService with a concrete STT provider.
        """
        self.stt_provider = stt_provider

    async def transcribe(self, audio_bytes: bytes) -> str:
        """
        Transcribes the provided audio bytes into text using the STT provider.
        """
        logger.info(f"Starting transcription for audio data ({len(audio_bytes)} bytes).")

        if not audio_bytes:
            logger.warning("No audio data provided for transcription.")
            raise HTTPException(status_code=400, detail="No audio data provided.")

        try:
            transcript = await self.stt_provider.transcribe_audio(audio_bytes)
            if not transcript:
                logger.warning("STT provider returned an empty transcript.")
                raise HTTPException(status_code=500, detail="Failed to transcribe audio.")
            
            logger.info(f"Successfully transcribed audio. Transcript length: {len(transcript)} characters.")
            return transcript

        except HTTPException:
            raise  # Pass through existing HTTPException without wrapping
        except Exception as e:
            logger.error(f"Unexpected error during transcription: {e}")
            raise HTTPException(
                status_code=500,
                detail=f"Error during transcription: {e}"
            ) from e