Source code for council.llm.openai_llm_configuration
from typing import Any, Optional
from council.llm import LLMConfigurationBase
from council.utils import read_env_str, read_env_int, Option
[docs]class OpenAILLMConfiguration(LLMConfigurationBase):
"""
Configuration for :class:OpenAILLM
Args:
api_key (str): the OpenAI api key
model (str): optional model version to use
timeout (int): seconds to wait for response from OpenAI before timing out
Notes:
* see https://platform.openai.com/docs/api-reference/chat
"""
api_key: str
authorization: str # not a parameter - used to optimize calls
model: Option[str]
timeout: int
def __init__(self, model: Optional[str] = None, timeout: Optional[int] = None, api_key: Optional[str] = None):
super().__init__()
self.model = Option(model)
self.timeout = timeout or 30
if api_key is not None:
self._set_api_key(api_key)
def build_default_payload(self) -> dict[str, Any]:
payload = super().build_default_payload()
if self.model.is_some():
payload.setdefault("model", self.model.unwrap())
return payload
@staticmethod
def from_env(model: Optional[str] = None) -> "OpenAILLMConfiguration":
config = OpenAILLMConfiguration(model=model)
config.read_env(env_var_prefix="OPENAI_")
config._set_api_key(read_env_str("OPENAI_API_KEY").unwrap())
if config.model.is_none():
config.model = read_env_str("OPENAI_LLM_MODEL", required=False, default="gpt-3.5-turbo")
config.timeout = read_env_int("OPENAI_LLM_TIMEOUT", required=False, default=30).unwrap()
return config
def _set_api_key(self, key: str) -> None:
self.api_key = key
self.authorization = f"Bearer {key}"