🐛 fix(loading.py): fix formatting of input variables in instantiate_prompt function

The instantiate_prompt function now properly formats the input variables before passing them to the prompt object. If the input variable is a string, it is passed as is. If the input variable is a list of Document objects, it is formatted to contain the page_content and metadata as one string separated by a newline. This ensures that the prompt object receives the correct input format.
This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-06-29 11:44:51 -03:00
commit 2876afa79a

View file

@ -1,5 +1,5 @@
import json import json
from typing import Any, Callable, Dict, Sequence from typing import Any, Callable, Dict, List, Sequence
from langchain.agents import ZeroShotAgent from langchain.agents import ZeroShotAgent
from langchain.agents import agent as agent_module from langchain.agents import agent as agent_module
@ -7,7 +7,7 @@ from langchain.agents.agent import AgentExecutor
from langchain.agents.agent_toolkits.base import BaseToolkit from langchain.agents.agent_toolkits.base import BaseToolkit
from langchain.agents.tools import BaseTool from langchain.agents.tools import BaseTool
from langflow.interface.initialize.vector_store import vecstore_initializer from langflow.interface.initialize.vector_store import vecstore_initializer
from langchain.schema import Document
from pydantic import ValidationError from pydantic import ValidationError
from langflow.interface.custom_lists import CUSTOM_NODES from langflow.interface.custom_lists import CUSTOM_NODES
@ -112,13 +112,24 @@ def instantiate_prompt(node_type, class_object, params):
prompt = class_object(**params) prompt = class_object(**params)
format_kwargs = { format_kwargs = {}
input_variable: params[input_variable] for input_variable in prompt.input_variables:
for input_variable in prompt.input_variables if input_variable in params:
if input_variable in params variable = params[input_variable]
} if isinstance(variable, str):
# if format_kwargs: format_kwargs[input_variable] = variable
# prompt = prompt.partial(**format_kwargs) # check if is a list of Document
elif isinstance(variable, List) and all(
isinstance(item, Document) for item in variable
):
# Format document to contain page_content and metadata
# as one string separated by a newline
format_kwargs[input_variable] = "\n".join(
[
f"Document:{item.page_content}\nMetadata:{item.metadata}"
for item in variable
]
)
return prompt, format_kwargs return prompt, format_kwargs