A wrapper around AsyncOpenAI that provides a unified interface for OpenAI responses API. This class is specifically designed for GPT-5 and o-series models that use the responses API endpoint.
| 28 | |
| 29 | |
| 30 | class ResponseOpenAI(BaseModel): |
| 31 | """ |
| 32 | A wrapper around AsyncOpenAI that provides a unified interface for OpenAI responses API. |
| 33 | |
| 34 | This class is specifically designed for GPT-5 and o-series models that use the responses API endpoint. |
| 35 | """ |
| 36 | |
| 37 | model_config = ConfigDict(arbitrary_types_allowed=True, extra="allow") |
| 38 | |
| 39 | # Model configuration |
| 40 | model: Union[ChatModel, str] |
| 41 | |
| 42 | # Model params for responses API |
| 43 | reasoning: Optional[Dict[str, Any]] = None |
| 44 | max_output_tokens: Optional[int] = 16384 |
| 45 | temperature: Optional[float] = None # Not used for reasoning models, but kept for compatibility |
| 46 | |
| 47 | # Client initialization parameters |
| 48 | api_key: Optional[str] = None |
| 49 | organization: Optional[str] = None |
| 50 | project: Optional[str] = None |
| 51 | base_url: Optional[Union[str, httpx.URL]] = None |
| 52 | websocket_base_url: Optional[Union[str, httpx.URL]] = None |
| 53 | timeout: Optional[Union[float, httpx.Timeout]] = None |
| 54 | max_retries: int = 5 |
| 55 | default_headers: Optional[Mapping[str, str]] = None |
| 56 | default_query: Optional[Mapping[str, object]] = None |
| 57 | http_client: Optional[httpx.AsyncClient] = None |
| 58 | _strict_response_validation: bool = False |
| 59 | |
| 60 | @property |
| 61 | def provider(self) -> str: |
| 62 | return 'openai' |
| 63 | |
| 64 | def _get_client_params(self) -> dict[str, Any]: |
| 65 | """Prepare client parameters dictionary.""" |
| 66 | base_params = { |
| 67 | 'api_key': self.api_key, |
| 68 | 'organization': self.organization, |
| 69 | 'project': self.project, |
| 70 | 'base_url': self.base_url, |
| 71 | 'websocket_base_url': self.websocket_base_url, |
| 72 | 'timeout': self.timeout, |
| 73 | 'max_retries': self.max_retries, |
| 74 | 'default_headers': self.default_headers, |
| 75 | 'default_query': self.default_query, |
| 76 | '_strict_response_validation': self._strict_response_validation, |
| 77 | } |
| 78 | |
| 79 | # Create client_params dict with non-None values |
| 80 | client_params = {k: v for k, v in base_params.items() if v is not None} |
| 81 | |
| 82 | # Add http_client if provided |
| 83 | if self.http_client is not None: |
| 84 | client_params['http_client'] = self.http_client |
| 85 | |
| 86 | return client_params |
| 87 |