Spaces:
Sleeping
Sleeping
from __future__ import annotations | |
from pathlib import Path | |
import httpx | |
from deepgram import ( | |
DeepgramClient, | |
DeepgramClientOptions, | |
PrerecordedOptions, | |
FileSource, | |
) | |
from config.settings import settings | |
class TranscriptionService: | |
def __init__(self): | |
if not settings.DEEPGRAM_API_KEY: | |
raise ValueError("DEEPGRAM_API_KEY is not set in environment variables") | |
# Initialize Deepgram client with options | |
config = DeepgramClientOptions( | |
verbose=False, # Set to True for debugging | |
) | |
self.client = DeepgramClient(settings.DEEPGRAM_API_KEY, config) | |
def transcribe_file(self, audio_path: str | Path) -> str: | |
""" | |
Transcribe an audio file using Deepgram. | |
Args: | |
audio_path: Path to the audio file | |
Returns: | |
Transcribed text with proper formatting | |
""" | |
try: | |
print(f"Transcribing audio file: {audio_path}") | |
# Read file into buffer | |
with open(audio_path, "rb") as file: | |
buffer_data = file.read() | |
# Create payload | |
payload: FileSource = { | |
"buffer": buffer_data, | |
} | |
# Configure transcription options | |
options = PrerecordedOptions( | |
model="nova-2", | |
smart_format=True, | |
language="en-US", | |
utterances=True, | |
punctuate=True, | |
diarize=True | |
) | |
# Transcribe with timeout | |
response = self.client.listen.rest.v("1").transcribe_file( | |
payload, | |
options, | |
timeout=httpx.Timeout(300.0, connect=10.0) | |
) | |
# Extract the transcript from the response | |
transcript = response.results.channels[0].alternatives[0].transcript | |
return transcript.strip() | |
except Exception as e: | |
raise Exception(f"Error transcribing with Deepgram: {str(e)}") |