Ошибка шаблона чата при использовании HuggingFace и LangGraphPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка шаблона чата при использовании HuggingFace и LangGraph

Сообщение Anonymous »

Я следую инструкциям LangGraph и LangChain по созданию чат-бота и получил успешный результат на первом этапе. После привязки инструментов и завершения второго шага возникает следующая ошибка:

Код: Выделить всё

Traceback (most recent call last):
File "[CENSORED]\beegmodel.py", line 111, in 
stream_graph_updates('Who is Elon Musk?')
File "[CENSORED]\beegmodel.py", line 106, in stream_graph_updates
for event in graph.stream({"messages": [("user", user_input)]}):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "[CENSORED]\Lib\site-packages\langgraph\pregel\__init__.py", line 1315, in stream
for _ in runner.tick(
^^^^^^^^^^^^
File "[CENSORED]\Lib\site-packages\langgraph\pregel\runner.py", line 56, in tick
run_with_retry(t, retry_policy)
File "[CENSORED]\Lib\site-packages\langgraph\pregel\retry.py", line 29, in run_with_retry
task.proc.invoke(task.input, config)
File "[CENSORED]\Lib\site-packages\langgraph\utils\runnable.py", line 410, in invoke
input = context.run(step.invoke, input, config, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "[CENSORED]\Lib\site-packages\langgraph\utils\runnable.py", line 184, in invoke
ret = context.run(self.func, input, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "[CENSORED]\beegmodel.py", line 87, in chatbot
return {"messages": [llm_with_tools.invoke(state["messages"])]}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "[CENSORED]\Lib\site-packages\langchain_core\runnables\base.py", line 5354, in invoke
return self.bound.invoke(
^^^^^^^^^^^^^^^^^^
File "[CENSORED]\Lib\site-packages\langchain_core\language_models\chat_models.py", line 286, in invoke
self.generate_prompt(
File "[CENSORED]\Lib\site-packages\langchain_core\language_models\chat_models.py", line 786, in generate_prompt
return self.generate(prompt_messages, stop=stop, callbacks=callbacks, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "[CENSORED]\Lib\site-packages\langchain_core\language_models\chat_models.py", line 643, in generate
raise e
File "[CENSORED]\Lib\site-packages\langchain_core\language_models\chat_models.py", line 633, in generate
self._generate_with_cache(
File "[CENSORED]\Lib\site-packages\langchain_core\language_models\chat_models.py", line 851, in _generate_with_cache
result = self._generate(
^^^^^^^^^^^^^^^
File "[CENSORED]\Lib\site-packages\langchain_huggingface\chat_models\huggingface.py", line 373, in _generate
llm_input = self._to_chat_prompt(messages)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "[CENSORED]\Lib\site-packages\langchain_huggingface\chat_models\huggingface.py", line 410, in _to_chat_prompt
return self.tokenizer.apply_chat_template(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "[CENSORED]\Lib\site-packages\transformers\tokenization_utils_base.py", line 1801, in apply_chat_template
chat_template = self.get_chat_template(chat_template, tools)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "[CENSORED]\Lib\site-packages\transformers\tokenization_utils_base.py", line 1962, in get_chat_template
raise ValueError(
ValueError: Cannot use chat template functions because tokenizer.chat_template is not set and no template argument was passed! For information about writing templates and setting the tokenizer.chat_template attribute, please see the documentation at https://huggingface.co/docs/transformers/main/en/chat_templating
Однако в файле tokenizer_config.json есть полеchat_template. Вот мой сценарий (хотя и не очень хорошо отформатированный, но опять же, это просто для понимания основ):

Код: Выделить всё

import torch
from transformers import (
AutoConfig, MistralForCausalLM, AutoTokenizer, pipeline
)
from huggingface_hub import snapshot_download
from accelerate import (
init_empty_weights,
load_checkpoint_and_dispatch,
infer_auto_device_map
)
from pprint import pprint
from collections import Counter
import time

# https://github.com/huggingface/transformers/issues/31544#issuecomment-2188510876

torch.cuda.empty_cache()
torch.backends.cuda.matmul.allow_tf32 = True
torch.backends.cudnn.allow_tf32 = True

checkpoint = 'mistralai/Mistral-7B-Instruct-v0.2'
weights_location = snapshot_download(
repo_id=checkpoint,
allow_patterns=[
'*.safetensors',
'*.json'
],
ignore_patterns=[
'*pytorch*',
'consolidated.safetensors'
]
)

config = AutoConfig.from_pretrained(checkpoint)

with init_empty_weights():
model = MistralForCausalLM._from_config(config, torch_dtype=torch.bfloat16)

# Much better than 'device_map="auto"'
device_map = infer_auto_device_map(model, dtype=torch.bfloat16)
model = load_checkpoint_and_dispatch(
model, checkpoint=weights_location, device_map=device_map
)
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
pipe = pipeline(
'text-generation',
model=model,
tokenizer=tokenizer,
max_new_tokens=512,
do_sample=False,
repetition_penalty=1.03,
)

from langchain_huggingface import HuggingFacePipeline, ChatHuggingFace

llm = HuggingFacePipeline(pipeline=pipe)

from langchain_community.tools import WikipediaQueryRun, BaseTool, Tool
from langchain_community.utilities import WikipediaAPIWrapper

from typing import Annotated

from langchain_anthropic import ChatAnthropic
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.messages import BaseMessage
from typing_extensions import TypedDict

from langgraph.graph import StateGraph
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode, tools_condition

class State(TypedDict):
messages: Annotated[list, add_messages]

graph_builder = StateGraph(State)

wikipedia_tool = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper(top_k_results=1, doc_content_chars_max=2500))
tools = [wikipedia_tool]
llm = ChatHuggingFace(llm=llm, verbose=True)
llm_with_tools = llm.bind_tools(tools)

def chatbot(state: State):
return {"messages": [llm_with_tools.invoke(state["messages"])]}

graph_builder.add_node("chatbot", chatbot)

tool_node = ToolNode(tools=tools)
graph_builder.add_node("tools", tool_node)

graph_builder.add_conditional_edges(
"chatbot",
tools_condition,
)
# Any time a tool is called, we return to the chatbot to decide the next step
graph_builder.add_edge("tools", "chatbot")
graph_builder.set_entry_point("chatbot")
graph = graph_builder.compile()

def stream_graph_updates(user_input: str):
for event in graph.stream({"messages": [("user", user_input)]}):
for value in event.values():
print("Assistant:", value)

stream_graph_updates('Who is Elon Musk?')
Почему это работает на первом этапе обучения, но не работает на втором?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -langgraph
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»