Spaces:
Sleeping
Sleeping
from langchain_huggingface import ChatHuggingFace, HuggingFaceEndpoint | |
from langchain_openai import ChatOpenAI | |
from typing import Optional | |
from args import LLMInterface, Args | |
class AgentPreset: | |
def __init__(self, interface: LLMInterface, model_name: str, temperature: Optional[float] = None, | |
max_tokens: Optional[int] = None, repeat_penalty: Optional[float] = None): | |
""" | |
Initialize an AgentPreset with LLM configuration parameters. | |
Args: | |
interface: The model interface to use (e.g., OPENAI, HUGGINGFACE) | |
model_name: Name of the model to use | |
temperature: Controls randomness in responses (0.0-1.0) | |
max_tokens: Maximum number of tokens to generate in response | |
repeat_penalty: Penalty for token repetition | |
""" | |
self.interface = interface | |
self.model_name = model_name | |
self.temperature = temperature | |
self.max_tokens = max_tokens | |
self.repeat_penalty = repeat_penalty | |
def get_interface(self) -> LLMInterface: | |
""" | |
Get the model interface. | |
Returns: | |
LLMInterface: The interface used for this agent. | |
""" | |
return self.interface | |
def get_model_name(self) -> str: | |
""" | |
Get the model name. | |
Returns: | |
str: The name of the model. | |
""" | |
return self.model_name | |
def get_temperature(self) -> float: | |
""" | |
Get the temperature setting. | |
Returns: | |
float: The temperature value controlling randomness. | |
""" | |
return self.temperature | |
def get_max_tokens(self) -> int: | |
""" | |
Get the maximum tokens setting. | |
Returns: | |
int: The maximum number of tokens for generation. | |
""" | |
return self.max_tokens | |
def get_repeat_penalty(self) -> float: | |
""" | |
Get the repeat penalty setting. | |
Returns: | |
float: The penalty value for token repetition. | |
""" | |
return self.repeat_penalty | |
class LLMFactory(): | |
def create(cls, agent_preset: AgentPreset): | |
interface = agent_preset.get_interface() | |
if interface == LLMInterface.OPENAI: | |
model = cls._create_openai_model(agent_preset) | |
elif interface == LLMInterface.HUGGINGFACE: | |
model = cls._create_huggingface_model(agent_preset) | |
else: | |
raise ValueError(f"Interface '{interface}' is not supported !") | |
return model | |
def _create_openai_model(agent_preset: AgentPreset): | |
model_name = agent_preset.get_model_name() | |
temperature = agent_preset.get_temperature() | |
max_tokens = agent_preset.get_max_tokens() | |
repeat_penalty = agent_preset.get_repeat_penalty() | |
kwargs = { | |
"model": model_name, | |
"base_url": Args.api_base, | |
"api_key": Args.api_key, | |
"temperature": temperature, | |
"max_completion_tokens": max_tokens, | |
# "presence_penalty": repeat_penalty, | |
"frequency_penalty": repeat_penalty | |
} | |
model = ChatOpenAI(**kwargs) | |
return model | |
def _create_huggingface_model(agent_preset: AgentPreset): | |
model_name = agent_preset.get_model_name() | |
temperature = agent_preset.get_temperature() | |
max_tokens = agent_preset.get_max_tokens() | |
repeat_penalty = agent_preset.get_repeat_penalty() | |
kwargs = { | |
"model": model_name, | |
"temperature": temperature, | |
"max_new_tokens": max_tokens, | |
"repetition_penalty": repeat_penalty | |
} | |
llm = HuggingFaceEndpoint(**kwargs) | |
model = ChatHuggingFace(llm=llm) | |
return model | |