Я заметил, что HuggingFacePipeline работает только локально.
Я искал альтернативы и нашел HuggingFaceEndpoint (старый класс HuggingFaceHub).
Почему HuggingFaceEndpoint не нужна конфигурация квантования или токенизатор?
Все примеры, которые я видел на носителе (например, Medium0, Medium1, Medium2, Medium3) и документации (например, Langchain HuggingFace Endpoint, Documentation HuggingFaceEndpoint, HuggingFace about Langchain) не задает никаких аргументов, которые можно было бы считать «важными» для HuggingFacePipeline (например, токенизатор и некоторые настройки битов и байтов).
Фрагмент кода, чтобы понять, о чем я думал что делать:
(ПРИМЕЧАНИЕ. Приведенный ниже код был создан как псевдокод, не пытайтесь запустить его, поскольку он, вероятно, не сработает)
Код: Выделить всё
class BaseAgentChain:
def __init__(self, model_name="gpt-4o-mini", temperature=0, system_prompt_shell=None, user_prompt_shell=None, tools=None, **agent_kwargs):
self.model_name = model_name
self.temperature = temperature
self.tools = tools if tools is not None else []
self.system_prompt = system_prompt_shell
self.user_prompt = user_prompt_shell
self.memory = ConversationBufferMemory()
self.agent_kwargs = agent_kwargs if agent_kwargs is not None else {}
self.task = agent_kwargs.get('task', None)
self.quant = agent_kwargs.get('quant_config', None)
# Initialize the LLM model
try:
print(f"Initializing BaseAgent with model: {model_name} and temperature: {temperature}")
self.llm = self._set_llm()
print("Model initialized successfully.")
except Exception as e:
print(f"Error initializing model: {e}")
raise RuntimeError(f"Failed to initialize the model: {e}")
def _set_llm(self):
try:
available_llm_apis = os.getenv("AVAILABLE_LLM_APIS", "openai").split(',')
print(f"Current available LLM APIs as LLM sources to BaseAgentChain: {available_llm_apis}")
source_by = os.getenv("LLM_SOURCE", "openai")
print(f"Initializing model `{self.model_name}` with `{source_by}`")
if source_by == 'openai':
llm = ChatOpenAI(
model=self.model_name,
temperature=self.temperature,
openai_api_key=os.getenv('OPENAI_API_KEY')
)
return llm
elif source_by == 'hugging_face':
from transformers import (
AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig, pipeline
)
HF_TOKEN = os.getenv('HF_TOKEN')
tokenizer = AutoTokenizer.from_pretrained(
self.model_name,
use_auth_token=HF_TOKEN
)
quant_config = BitsAndBytesConfig(**self.quant) if self.quant else None
model = AutoModelForCausalLM.from_pretrained(
self.model_name,
device_map="auto",
quantization_config=quant_config,
use_auth_token=HF_TOKEN
)
pipe = pipeline(
self.task,
model=model,
tokenizer=tokenizer,
max_new_tokens=128
)
llm = HuggingFacePipeline(pipeline=pipe)
return llm
else:
raise ValueError(f"Unsupported LLM source: {source_by}")
except Exception as e:
raise RuntimeError(f"LLM was not defined. Error: {e}")
Подробнее здесь: https://stackoverflow.com/questions/793 ... er-nor-aut
Мобильная версия