| 
                        12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | 
                        - import logging
 - from typing import Optional, Union
 - 
 - import openai
 - from openai.error import AuthenticationError, OpenAIError
 - 
 - from core import hosted_llm_credentials
 - from core.llm.error import ProviderTokenNotInitError
 - from core.llm.moderation import Moderation
 - from core.llm.provider.base import BaseProvider
 - from core.llm.provider.errors import ValidateFailedError
 - from models.provider import ProviderName
 - 
 - 
 - class OpenAIProvider(BaseProvider):
 -     def get_models(self, model_id: Optional[str] = None) -> list[dict]:
 -         credentials = self.get_credentials(model_id)
 -         response = openai.Model.list(**credentials)
 - 
 -         return [{
 -             'id': model['id'],
 -             'name': model['id'],
 -         } for model in response['data']]
 - 
 -     def get_credentials(self, model_id: Optional[str] = None) -> dict:
 -         """
 -         Returns the credentials for the given tenant_id and provider_name.
 -         """
 -         return {
 -             'openai_api_key': self.get_provider_api_key(model_id=model_id)
 -         }
 - 
 -     def get_provider_name(self):
 -         return ProviderName.OPENAI
 - 
 -     def config_validate(self, config: Union[dict | str]):
 -         """
 -         Validates the given config.
 -         """
 -         try:
 -             Moderation(self.get_provider_name().value, config).moderate('test')
 -         except (AuthenticationError, OpenAIError) as ex:
 -             raise ValidateFailedError(str(ex))
 -         except Exception as ex:
 -             logging.exception('OpenAI config validation failed')
 -             raise ex
 - 
 -     def get_hosted_credentials(self) -> Union[str | dict]:
 -         if not hosted_llm_credentials.openai or not hosted_llm_credentials.openai.api_key:
 -             raise ProviderTokenNotInitError(
 -                 f"No valid {self.get_provider_name().value} model provider credentials found. "
 -                 f"Please go to Settings -> Model Provider to complete your provider credentials."
 -             )
 - 
 -         return hosted_llm_credentials.openai.api_key
 
 
  |