OpenAI implementation of the BaseModel interface.
| 19 | |
| 20 | |
| 21 | class OpenAIModel(BaseModel): |
| 22 | """OpenAI implementation of the BaseModel interface.""" |
| 23 | |
| 24 | def __init__(self, |
| 25 | api_key: Optional[str] = None, |
| 26 | model_name: str = "gpt-4o", |
| 27 | max_tokens: int = 4096, |
| 28 | temperature: float = 0.7, |
| 29 | timeout: int = 600): |
| 30 | """ |
| 31 | Initialize the OpenAI model adapter. |
| 32 | |
| 33 | Args: |
| 34 | api_key: OpenAI API key (defaults to OPENAI_API_KEY environment variable) |
| 35 | model_name: Model identifier to use (e.g., "gpt-4o") |
| 36 | max_tokens: Maximum tokens to generate by default |
| 37 | temperature: Default temperature setting (0 to 1) |
| 38 | timeout: Timeout in seconds for API calls |
| 39 | """ |
| 40 | self.api_key = api_key or os.environ.get("OPENAI_API_KEY") |
| 41 | self.base_url = os.environ.get("OPENAI_API_BASE_URL", "https://api.openai.com/v1") |
| 42 | if not self.api_key: |
| 43 | logger.warning("OpenAI API key not provided. Please set OPENAI_API_KEY environment variable.") |
| 44 | |
| 45 | self.model_name = model_name |
| 46 | self.max_tokens = max_tokens |
| 47 | self.temperature = temperature |
| 48 | self.timeout = timeout |
| 49 | |
| 50 | try: |
| 51 | |
| 52 | self.client = AsyncOpenAI(api_key=self.api_key, base_url=self.base_url, timeout=self.timeout) |
| 53 | logger.info(f"OpenAI client initialized with model: {self.model_name} via {self.base_url}") |
| 54 | except TypeError as e: |
| 55 | logger.warning(f"Error initializing OpenAI client: {e}") |
| 56 | self.client = None |
| 57 | |
| 58 | async def generate(self, |
| 59 | prompt: str, |
| 60 | system_prompt: Optional[str] = None, |
| 61 | temperature: Optional[float] = None, |
| 62 | max_tokens: Optional[int] = None, |
| 63 | stop_sequences: Optional[List[str]] = None, |
| 64 | **kwargs) -> str: |
| 65 | """ |
| 66 | Generate text based on the provided prompt using OpenAI API. |
| 67 | |
| 68 | Args: |
| 69 | prompt: The user prompt to send to the model |
| 70 | system_prompt: Optional system prompt to guide the model |
| 71 | temperature: Controls randomness (0 to 1) |
| 72 | max_tokens: Maximum number of tokens to generate |
| 73 | stop_sequences: List of sequences at which to stop generation |
| 74 | **kwargs: Additional model-specific parameters |
| 75 | |
| 76 | Returns: |
| 77 | Generated text response from the model |
| 78 | """ |