fix: adds better boolean check for DataFrame and fixes output display (#4933)
* feat: Add DataFrameInput to inputs module * feat: add DataFrame support and refactor array processing * feat: add truth value testing for DataFrame class * refactor: remove Python 2 compatibility method from DataFrame class
This commit is contained in:
parent
438c3afdc9
commit
c99f2a35bd
3 changed files with 22 additions and 9 deletions
|
|
@ -1,6 +1,7 @@
|
|||
from .inputs import (
|
||||
BoolInput,
|
||||
CodeInput,
|
||||
DataFrameInput,
|
||||
DataInput,
|
||||
DefaultPromptField,
|
||||
DictInput,
|
||||
|
|
@ -51,4 +52,5 @@ __all__ = [
|
|||
"SliderInput",
|
||||
"StrInput",
|
||||
"TableInput",
|
||||
"DataFrameInput",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ from loguru import logger
|
|||
from pydantic import BaseModel
|
||||
|
||||
from langflow.schema.data import Data
|
||||
from langflow.schema.dataframe import DataFrame
|
||||
from langflow.schema.encoders import CUSTOM_ENCODERS
|
||||
from langflow.schema.message import Message
|
||||
from langflow.schema.serialize import recursive_serialize_or_str
|
||||
|
|
@ -40,9 +41,8 @@ def get_artifact_type(value, build_result=None) -> str:
|
|||
case dict():
|
||||
result = ArtifactType.OBJECT
|
||||
|
||||
case list():
|
||||
case list() | DataFrame():
|
||||
result = ArtifactType.ARRAY
|
||||
|
||||
if result == ArtifactType.UNKNOWN and (
|
||||
(build_result and isinstance(build_result, Generator))
|
||||
or (isinstance(value, Message) and isinstance(value.text, Generator))
|
||||
|
|
@ -52,17 +52,21 @@ def get_artifact_type(value, build_result=None) -> str:
|
|||
return result.value
|
||||
|
||||
|
||||
def _to_list_of_dicts(raw):
|
||||
_raw = []
|
||||
for item in raw:
|
||||
if hasattr(item, "dict") or hasattr(item, "model_dump"):
|
||||
_raw.append(recursive_serialize_or_str(item))
|
||||
else:
|
||||
_raw.append(str(item))
|
||||
return _raw
|
||||
|
||||
|
||||
def post_process_raw(raw, artifact_type: str):
|
||||
if artifact_type == ArtifactType.STREAM.value:
|
||||
raw = ""
|
||||
elif artifact_type == ArtifactType.ARRAY.value:
|
||||
_raw = []
|
||||
for item in raw:
|
||||
if hasattr(item, "dict") or hasattr(item, "model_dump"):
|
||||
_raw.append(recursive_serialize_or_str(item))
|
||||
else:
|
||||
_raw.append(str(item))
|
||||
raw = _raw
|
||||
raw = raw.to_dict(orient="records") if isinstance(raw, DataFrame) else _to_list_of_dicts(raw)
|
||||
elif artifact_type == ArtifactType.UNKNOWN.value and raw is not None:
|
||||
if isinstance(raw, BaseModel | dict):
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -96,3 +96,10 @@ class DataFrame(pandas_DataFrame):
|
|||
return DataFrame(*args, **kwargs).__finalize__(self)
|
||||
|
||||
return _c
|
||||
|
||||
def __bool__(self):
|
||||
"""Truth value testing for the DataFrame.
|
||||
|
||||
Returns True if the DataFrame has at least one row, False otherwise.
|
||||
"""
|
||||
return not self.empty
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue