Refactor PromptComponent to convert dictionary values to strings
This commit is contained in:
parent
0c1703de9a
commit
03d7bce95d
3 changed files with 61 additions and 8 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
from langchain_core.prompts import PromptTemplate
|
from langchain_core.prompts import PromptTemplate
|
||||||
|
|
||||||
from langflow import CustomComponent
|
from langflow import CustomComponent
|
||||||
|
from langflow.components.prompts.base.utils import dict_values_to_string
|
||||||
from langflow.field_typing import Prompt, TemplateField, Text
|
from langflow.field_typing import Prompt, TemplateField, Text
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -21,16 +22,13 @@ class PromptComponent(CustomComponent):
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> Text:
|
) -> Text:
|
||||||
prompt_template = PromptTemplate.from_template(Text(template))
|
prompt_template = PromptTemplate.from_template(Text(template))
|
||||||
|
kwargs = dict_values_to_string(kwargs)
|
||||||
attributes_to_check = ["text", "page_content"]
|
kwargs = {
|
||||||
for key, value in kwargs.copy().items():
|
k: "\n".join(v) if isinstance(v, list) else v for k, v in kwargs.items()
|
||||||
for attribute in attributes_to_check:
|
}
|
||||||
if hasattr(value, attribute):
|
|
||||||
kwargs[key] = getattr(value, attribute)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
formated_prompt = prompt_template.format(**kwargs)
|
formated_prompt = prompt_template.format(**kwargs)
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
raise ValueError(f"Error formatting prompt: {exc}") from exc
|
raise ValueError(f"Error formatting prompt: {exc}") from exc
|
||||||
self.status = f'Prompt: "{formated_prompt}"'
|
self.status = f'Prompt:\n"{formated_prompt}"'
|
||||||
return formated_prompt
|
return formated_prompt
|
||||||
|
|
|
||||||
0
src/backend/langflow/components/prompts/base/__init__.py
Normal file
0
src/backend/langflow/components/prompts/base/__init__.py
Normal file
55
src/backend/langflow/components/prompts/base/utils.py
Normal file
55
src/backend/langflow/components/prompts/base/utils.py
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
from langchain_core.documents import Document
|
||||||
|
|
||||||
|
from langflow.schema import Record
|
||||||
|
|
||||||
|
|
||||||
|
def dict_values_to_string(d: dict) -> dict:
|
||||||
|
"""
|
||||||
|
Converts the values of a dictionary to strings.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
d (dict): The dictionary whose values need to be converted.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: The dictionary with values converted to strings.
|
||||||
|
"""
|
||||||
|
# Do something similar to the above
|
||||||
|
for key, value in d.items():
|
||||||
|
# it could be a list of records or documents or strings
|
||||||
|
if isinstance(value, list):
|
||||||
|
for i, item in enumerate(value):
|
||||||
|
if isinstance(item, Record):
|
||||||
|
d[key][i] = record_to_string(item)
|
||||||
|
elif isinstance(item, Document):
|
||||||
|
d[key][i] = document_to_string(item)
|
||||||
|
elif isinstance(value, Record):
|
||||||
|
d[key] = record_to_string(value)
|
||||||
|
elif isinstance(value, Document):
|
||||||
|
d[key] = document_to_string(value)
|
||||||
|
return d
|
||||||
|
|
||||||
|
|
||||||
|
def record_to_string(record: Record) -> str:
|
||||||
|
"""
|
||||||
|
Convert a record to a string.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
record (Record): The record to convert.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: The record as a string.
|
||||||
|
"""
|
||||||
|
return record.text
|
||||||
|
|
||||||
|
|
||||||
|
def document_to_string(document: Document) -> str:
|
||||||
|
"""
|
||||||
|
Convert a document to a string.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
document (Document): The document to convert.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: The document as a string.
|
||||||
|
"""
|
||||||
|
return document.page_content
|
||||||
Loading…
Add table
Add a link
Reference in a new issue