Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from openai import OpenAI | |
| from macg.llm_base import LLMClient | |
| class OpenAIResponsesLLM(LLMClient): | |
| def __init__( | |
| self, | |
| api_key: str, | |
| model: str = "gpt-5", | |
| base_url: str = "https://api.openai.com/v1", | |
| temperature: float | None = 0.2, | |
| max_output_tokens: int = 900, | |
| ) -> None: | |
| if not api_key: | |
| raise ValueError("OpenAI api_key is required.") | |
| self.model = model | |
| self.temperature = temperature | |
| self.max_output_tokens = max_output_tokens | |
| self.client = OpenAI(api_key=api_key, base_url=base_url) | |
| def complete(self, system: str, prompt: str) -> str: | |
| params = { | |
| "model": self.model, | |
| "instructions": system, | |
| "input": prompt, | |
| "max_output_tokens": self.max_output_tokens, | |
| } | |
| # Some models reject temperature; include it only if set | |
| if self.temperature is not None: | |
| params["temperature"] = self.temperature | |
| try: | |
| resp = self.client.responses.create(**params) | |
| return resp.output_text | |
| except Exception as e: | |
| msg = str(e) | |
| # If the model doesn't support temperature, retry without it | |
| if "Unsupported parameter" in msg and "temperature" in msg: | |
| params.pop("temperature", None) | |
| resp = self.client.responses.create(**params) | |
| return resp.output_text | |
| raise | |