Source code for council.llm.llm_configuration_base

import abc
from typing import Any

from council.utils.parameter import Parameter


def _tv(x: float):
    """
    Temperature Validator
    Sampling temperature to use, between 0. and 2.
    """
    if x < 0.0 or x > 2.0:
        raise Exception("must be in the range [0.0..2.0]")


def _pv(x: float):
    """
    Penalty Validator
    Penalty must be between -2.0 and 2.0
    """
    if x < -2.0 or x > 2.0:
        raise Exception("must be in the range [-2.0..2.0]")


def _mtv(x: int):
    """
    Max Token Validator
    Must be positive
    """
    if x <= 0:
        raise Exception("must be positive")


[docs] class LLMConfigurationBase(abc.ABC): """ Configuration for OpenAI LLM Chat Completion GPT Model Args: temperature (float): optional temperature settings for the LLM max_tokens (int): optional limit on number of tokens top_p (int): optional he model only takes into account the tokens with the highest probability mass n (int): optional How many completions to generate for each prompt presence_penalty (float): optional, impacts how the model penalizes new tokens based on whether they have appeared in the text so far frequency_penalty (float): optional, impacts how the model penalizes new tokens based on their existing frequency in the text. """ temperature: Parameter[float] max_tokens: Parameter[int] top_p: Parameter[float] n: Parameter[int] presence_penalty: Parameter[float] frequency_penalty: Parameter[float] def __init__(self): self.temperature = Parameter.float(name="temperature", required=False, default=0.0, validator=_tv) self.max_tokens = Parameter.int(name="max_tokens", required=False, validator=_mtv) self.top_p = Parameter.float(name="top_p", required=False) self.n = Parameter.int(name="n", required=False, default=1) self.presence_penalty = Parameter.float(name="presence_penalty", required=False, validator=_pv) self.frequency_penalty = Parameter.float(name="frequency_penalty", required=False, validator=_pv) def read_env(self, env_var_prefix: str): self.temperature.from_env(env_var_prefix + "LLM_TEMPERATURE") self.max_tokens.from_env(env_var_prefix + "LLM_MAX_TOKENS") self.top_p.from_env(env_var_prefix + "LLM_TOP_P") self.n.from_env(env_var_prefix + "LLM_N") self.presence_penalty.from_env(env_var_prefix + "LLM_PRESENCE_PENALTY") self.frequency_penalty.from_env(env_var_prefix + "LLM_FREQUENCY_PENALTY") def build_default_payload(self) -> dict[str, Any]: payload: dict[str, Any] = {} if self.temperature.is_some(): payload.setdefault(self.temperature.name, self.temperature.unwrap()) if self.max_tokens.is_some(): payload.setdefault(self.max_tokens.name, self.max_tokens.unwrap()) if self.top_p.is_some(): payload.setdefault(self.top_p.name, self.top_p.unwrap()) if self.n.is_some(): payload.setdefault(self.n.name, self.n.unwrap()) if self.presence_penalty.is_some(): payload.setdefault(self.presence_penalty.name, self.presence_penalty.unwrap()) if self.frequency_penalty.is_some(): payload.setdefault(self.frequency_penalty.name, self.frequency_penalty.unwrap()) return payload