From 2876afa79a5f5db7c8e5d7de90217416fa780527 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Thu, 29 Jun 2023 11:44:51 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(loading.py):=20fix=20formatt?= =?UTF-8?q?ing=20of=20input=20variables=20in=20instantiate=5Fprompt=20func?= =?UTF-8?q?tion=20The=20instantiate=5Fprompt=20function=20now=20properly?= =?UTF-8?q?=20formats=20the=20input=20variables=20before=20passing=20them?= =?UTF-8?q?=20to=20the=20prompt=20object.=20If=20the=20input=20variable=20?= =?UTF-8?q?is=20a=20string,=20it=20is=20passed=20as=20is.=20If=20the=20inp?= =?UTF-8?q?ut=20variable=20is=20a=20list=20of=20Document=20objects,=20it?= =?UTF-8?q?=20is=20formatted=20to=20contain=20the=20page=5Fcontent=20and?= =?UTF-8?q?=20metadata=20as=20one=20string=20separated=20by=20a=20newline.?= =?UTF-8?q?=20This=20ensures=20that=20the=20prompt=20object=20receives=20t?= =?UTF-8?q?he=20correct=20input=20format.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../langflow/interface/initialize/loading.py | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/backend/langflow/interface/initialize/loading.py b/src/backend/langflow/interface/initialize/loading.py index 4c24843d4..896ee1837 100644 --- a/src/backend/langflow/interface/initialize/loading.py +++ b/src/backend/langflow/interface/initialize/loading.py @@ -1,5 +1,5 @@ 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 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.tools import BaseTool from langflow.interface.initialize.vector_store import vecstore_initializer - +from langchain.schema import Document from pydantic import ValidationError from langflow.interface.custom_lists import CUSTOM_NODES @@ -112,13 +112,24 @@ def instantiate_prompt(node_type, class_object, params): prompt = class_object(**params) - format_kwargs = { - input_variable: params[input_variable] - for input_variable in prompt.input_variables - if input_variable in params - } - # if format_kwargs: - # prompt = prompt.partial(**format_kwargs) + format_kwargs = {} + for input_variable in prompt.input_variables: + if input_variable in params: + variable = params[input_variable] + if isinstance(variable, str): + format_kwargs[input_variable] = variable + # 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