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 (
|
from .inputs import (
|
||||||
BoolInput,
|
BoolInput,
|
||||||
CodeInput,
|
CodeInput,
|
||||||
|
DataFrameInput,
|
||||||
DataInput,
|
DataInput,
|
||||||
DefaultPromptField,
|
DefaultPromptField,
|
||||||
DictInput,
|
DictInput,
|
||||||
|
|
@ -51,4 +52,5 @@ __all__ = [
|
||||||
"SliderInput",
|
"SliderInput",
|
||||||
"StrInput",
|
"StrInput",
|
||||||
"TableInput",
|
"TableInput",
|
||||||
|
"DataFrameInput",
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ from loguru import logger
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from langflow.schema.data import Data
|
from langflow.schema.data import Data
|
||||||
|
from langflow.schema.dataframe import DataFrame
|
||||||
from langflow.schema.encoders import CUSTOM_ENCODERS
|
from langflow.schema.encoders import CUSTOM_ENCODERS
|
||||||
from langflow.schema.message import Message
|
from langflow.schema.message import Message
|
||||||
from langflow.schema.serialize import recursive_serialize_or_str
|
from langflow.schema.serialize import recursive_serialize_or_str
|
||||||
|
|
@ -40,9 +41,8 @@ def get_artifact_type(value, build_result=None) -> str:
|
||||||
case dict():
|
case dict():
|
||||||
result = ArtifactType.OBJECT
|
result = ArtifactType.OBJECT
|
||||||
|
|
||||||
case list():
|
case list() | DataFrame():
|
||||||
result = ArtifactType.ARRAY
|
result = ArtifactType.ARRAY
|
||||||
|
|
||||||
if result == ArtifactType.UNKNOWN and (
|
if result == ArtifactType.UNKNOWN and (
|
||||||
(build_result and isinstance(build_result, Generator))
|
(build_result and isinstance(build_result, Generator))
|
||||||
or (isinstance(value, Message) and isinstance(value.text, 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
|
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):
|
def post_process_raw(raw, artifact_type: str):
|
||||||
if artifact_type == ArtifactType.STREAM.value:
|
if artifact_type == ArtifactType.STREAM.value:
|
||||||
raw = ""
|
raw = ""
|
||||||
elif artifact_type == ArtifactType.ARRAY.value:
|
elif artifact_type == ArtifactType.ARRAY.value:
|
||||||
_raw = []
|
raw = raw.to_dict(orient="records") if isinstance(raw, DataFrame) else _to_list_of_dicts(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
|
|
||||||
elif artifact_type == ArtifactType.UNKNOWN.value and raw is not None:
|
elif artifact_type == ArtifactType.UNKNOWN.value and raw is not None:
|
||||||
if isinstance(raw, BaseModel | dict):
|
if isinstance(raw, BaseModel | dict):
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
|
|
@ -96,3 +96,10 @@ class DataFrame(pandas_DataFrame):
|
||||||
return DataFrame(*args, **kwargs).__finalize__(self)
|
return DataFrame(*args, **kwargs).__finalize__(self)
|
||||||
|
|
||||||
return _c
|
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