53 lines
1.1 KiB
Python
53 lines
1.1 KiB
Python
"""Abstract base class for AI providers."""
|
|
|
|
from abc import ABC, abstractmethod
|
|
from dataclasses import dataclass
|
|
|
|
|
|
@dataclass
|
|
class Message:
|
|
"""A chat message."""
|
|
|
|
role: str # "user", "assistant", "system"
|
|
content: str
|
|
|
|
|
|
@dataclass
|
|
class AIResponse:
|
|
"""Response from an AI provider."""
|
|
|
|
content: str
|
|
model: str
|
|
usage: dict[str, int] # Token usage info
|
|
|
|
|
|
class AIProvider(ABC):
|
|
"""Abstract base class for AI providers."""
|
|
|
|
@abstractmethod
|
|
async def generate(
|
|
self,
|
|
messages: list[Message],
|
|
system_prompt: str | None = None,
|
|
max_tokens: int = 1024,
|
|
temperature: float = 0.7,
|
|
) -> AIResponse:
|
|
"""Generate a response from the AI model.
|
|
|
|
Args:
|
|
messages: List of conversation messages
|
|
system_prompt: Optional system prompt
|
|
max_tokens: Maximum tokens in response
|
|
temperature: Sampling temperature
|
|
|
|
Returns:
|
|
AIResponse with the generated content
|
|
"""
|
|
pass
|
|
|
|
@property
|
|
@abstractmethod
|
|
def provider_name(self) -> str:
|
|
"""Return the name of this provider."""
|
|
pass
|