| | """ |
| | Base model interface for LLM interactions. |
| | """ |
| |
|
| | from abc import ABC, abstractmethod |
| | from typing import List, Dict, Any, Optional |
| | import logging |
| |
|
| | logger = logging.getLogger(__name__) |
| |
|
| |
|
| | class BaseModel(ABC): |
| | """Abstract base class for LLM models.""" |
| | |
| | def __init__(self, model_name: str, **kwargs): |
| | self.model_name = model_name |
| | self.name = model_name |
| | |
| | @abstractmethod |
| | def generate( |
| | self, |
| | prompt: str, |
| | max_tokens: int = 512, |
| | temperature: float = 0.7, |
| | **kwargs |
| | ) -> str: |
| | """Generate a response from the model.""" |
| | pass |
| | |
| | @abstractmethod |
| | def generate_batch( |
| | self, |
| | prompts: List[str], |
| | max_tokens: int = 512, |
| | temperature: float = 0.7, |
| | **kwargs |
| | ) -> List[str]: |
| | """Generate responses for a batch of prompts.""" |
| | pass |
| | |
| | def wrap_as_chat_message(self, content: str, role: str = "user") -> Dict[str, str]: |
| | """Wrap content as a chat message.""" |
| | return {"role": role, "content": content} |
| | |
| | def format_chat_messages(self, messages: List[Dict[str, str]]) -> str: |
| | """Format chat messages into a prompt string.""" |
| | formatted = "" |
| | for msg in messages: |
| | role = msg.get("role", "user") |
| | content = msg.get("content", "") |
| | if role == "system": |
| | formatted += f"System: {content}\n\n" |
| | elif role == "user": |
| | formatted += f"User: {content}\n\n" |
| | elif role == "assistant": |
| | formatted += f"Assistant: {content}\n\n" |
| | formatted += "Assistant:" |
| | return formatted |
| |
|