31 lines
966 B
Python
31 lines
966 B
Python
"""
|
|
Base LLM Provider interface with hard async timeout enforcement.
|
|
"""
|
|
|
|
import asyncio
|
|
from abc import ABC, abstractmethod
|
|
from typing import Optional
|
|
|
|
|
|
class LLMProvider(ABC):
|
|
"""
|
|
Abstract LLM Provider interface.
|
|
Enforces a strict hard timeout (default 4 seconds).
|
|
"""
|
|
def __init__(self, timeout_seconds: float = 4.0):
|
|
self.timeout_seconds = timeout_seconds
|
|
|
|
async def generate_response_with_timeout(self, system_prompt: str, user_message: str) -> Optional[str]:
|
|
try:
|
|
return await asyncio.wait_for(
|
|
self._generate_internal(system_prompt, user_message),
|
|
timeout=self.timeout_seconds
|
|
)
|
|
except (asyncio.TimeoutError, Exception) as e:
|
|
print(f"[{self.__class__.__name__} Failed / Timed out]: {e}")
|
|
return None
|
|
|
|
@abstractmethod
|
|
async def _generate_internal(self, system_prompt: str, user_message: str) -> Optional[str]:
|
|
pass
|