from abc import ABC, abstractmethod from typing import AsyncGenerator class LLMProvider(ABC): """Abstract base class for all LLM providers.""" @abstractmethod async def generate_response(self, prompt: str) -> str: """Generates a response from the LLM.""" pass class TTSProvider(ABC): """Abstract base class for all Text-to-Speech providers.""" @abstractmethod async def generate_speech(self, text: str) -> AsyncGenerator[bytes, None]: """Generates speech from text and streams the audio data.""" pass class STTProvider(ABC): """Abstract base class for all Speech-to-Text providers.""" @abstractmethod async def transcribe_audio(self, audio_data: bytes) -> str: """Transcribes audio data into text.""" pass