TherapyNote / utils /transcription.py
abagherp's picture
Upload folder using huggingface_hub
6830eb0 verified
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)}")