Fix custom component build error and import statement
This commit is contained in:
parent
2930b4ed1a
commit
716b6cf4b7
2 changed files with 18 additions and 10 deletions
|
|
@ -20,6 +20,7 @@ from langflow.interface.custom.directory_reader.utils import (
|
||||||
merge_nested_dicts_with_renaming,
|
merge_nested_dicts_with_renaming,
|
||||||
)
|
)
|
||||||
from langflow.interface.custom.eval import eval_custom_component_code
|
from langflow.interface.custom.eval import eval_custom_component_code
|
||||||
|
from langflow.schema import dotdict
|
||||||
from langflow.template.field.base import TemplateField
|
from langflow.template.field.base import TemplateField
|
||||||
from langflow.template.frontend_node.custom_components import (
|
from langflow.template.frontend_node.custom_components import (
|
||||||
CustomComponentFrontendNode,
|
CustomComponentFrontendNode,
|
||||||
|
|
@ -245,7 +246,7 @@ def add_extra_fields(frontend_node, field_config, function_args):
|
||||||
def get_field_dict(field: Union[TemplateField, dict]):
|
def get_field_dict(field: Union[TemplateField, dict]):
|
||||||
"""Get the field dictionary from a TemplateField or a dict"""
|
"""Get the field dictionary from a TemplateField or a dict"""
|
||||||
if isinstance(field, TemplateField):
|
if isinstance(field, TemplateField):
|
||||||
return field.model_dump(by_alias=True, exclude_none=True)
|
return dotdict(field.model_dump(by_alias=True, exclude_none=True))
|
||||||
return field
|
return field
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -284,6 +285,7 @@ def run_build_config(
|
||||||
# Allow user to build TemplateField as well
|
# Allow user to build TemplateField as well
|
||||||
# as a dict with the same keys as TemplateField
|
# as a dict with the same keys as TemplateField
|
||||||
field_dict = get_field_dict(field)
|
field_dict = get_field_dict(field)
|
||||||
|
build_config[field_name] = field_dict
|
||||||
# This has to be done to set refresh if options or value are callable
|
# This has to be done to set refresh if options or value are callable
|
||||||
if update_field is not None and field_name != update_field:
|
if update_field is not None and field_name != update_field:
|
||||||
build_config = update_field_dict(
|
build_config = update_field_dict(
|
||||||
|
|
@ -320,7 +322,11 @@ def run_build_config(
|
||||||
return build_config, custom_instance
|
return build_config, custom_instance
|
||||||
|
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
|
|
||||||
logger.error(f"Error while building field config: {str(exc)}")
|
logger.error(f"Error while building field config: {str(exc)}")
|
||||||
|
if hasattr(exc, "detail") and "traceback" in exc.detail:
|
||||||
|
logger.error(exc.detail["traceback"])
|
||||||
|
|
||||||
raise exc
|
raise exc
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -345,6 +351,7 @@ def build_frontend_node(template_config):
|
||||||
|
|
||||||
|
|
||||||
def add_code_field(frontend_node: CustomComponentFrontendNode, raw_code, field_config):
|
def add_code_field(frontend_node: CustomComponentFrontendNode, raw_code, field_config):
|
||||||
|
|
||||||
code_field = TemplateField(
|
code_field = TemplateField(
|
||||||
dynamic=True,
|
dynamic=True,
|
||||||
required=True,
|
required=True,
|
||||||
|
|
@ -353,7 +360,7 @@ def add_code_field(frontend_node: CustomComponentFrontendNode, raw_code, field_c
|
||||||
value=raw_code,
|
value=raw_code,
|
||||||
password=False,
|
password=False,
|
||||||
name="code",
|
name="code",
|
||||||
advanced=field_config.pop("advanced", False),
|
advanced=True,
|
||||||
field_type="code",
|
field_type="code",
|
||||||
is_list=False,
|
is_list=False,
|
||||||
)
|
)
|
||||||
|
|
@ -404,7 +411,7 @@ def build_custom_component_template(
|
||||||
status_code=400,
|
status_code=400,
|
||||||
detail={
|
detail={
|
||||||
"error": (
|
"error": (
|
||||||
"Invalid type convertion. Please check your code and try again."
|
f"Something went wrong while building the custom component. Hints: {str(exc)}"
|
||||||
),
|
),
|
||||||
"traceback": traceback.format_exc(),
|
"traceback": traceback.format_exc(),
|
||||||
},
|
},
|
||||||
|
|
@ -415,7 +422,6 @@ def create_component_template(component):
|
||||||
"""Create a template for a component."""
|
"""Create a template for a component."""
|
||||||
component_code = component["code"]
|
component_code = component["code"]
|
||||||
component_output_types = component["output_types"]
|
component_output_types = component["output_types"]
|
||||||
# remove
|
|
||||||
|
|
||||||
component_extractor = CustomComponent(code=component_code)
|
component_extractor = CustomComponent(code=component_code)
|
||||||
|
|
||||||
|
|
@ -431,9 +437,7 @@ def build_custom_components(components_paths: List[str]):
|
||||||
if not components_paths:
|
if not components_paths:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
logger.info(
|
logger.info(f"Building custom components from {components_paths}")
|
||||||
f"Building custom components from {components_paths}"
|
|
||||||
)
|
|
||||||
custom_components_from_file = {}
|
custom_components_from_file = {}
|
||||||
processed_paths = set()
|
processed_paths = set()
|
||||||
for path in components_paths:
|
for path in components_paths:
|
||||||
|
|
@ -467,9 +471,11 @@ def update_field_dict(
|
||||||
if "refresh" in field_dict:
|
if "refresh" in field_dict:
|
||||||
if call:
|
if call:
|
||||||
try:
|
try:
|
||||||
|
dd_build_config = dotdict(build_config)
|
||||||
custom_component_instance.update_build_config(
|
custom_component_instance.update_build_config(
|
||||||
build_config, update_field, update_field_value
|
dd_build_config, update_field, update_field_value
|
||||||
)
|
)
|
||||||
|
build_config = dd_build_config
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
logger.error(f"Error while running update_build_config: {str(exc)}")
|
logger.error(f"Error while running update_build_config: {str(exc)}")
|
||||||
raise UpdateBuildConfigError(
|
raise UpdateBuildConfigError(
|
||||||
|
|
@ -483,8 +489,10 @@ def update_field_dict(
|
||||||
return build_config
|
return build_config
|
||||||
|
|
||||||
|
|
||||||
def sanitize_field_config(field_config: Dict):
|
def sanitize_field_config(field_config: Union[Dict, TemplateField]):
|
||||||
# If any of the already existing keys are in field_config, remove them
|
# If any of the already existing keys are in field_config, remove them
|
||||||
|
if isinstance(field_config, TemplateField):
|
||||||
|
field_config = field_config.to_dict()
|
||||||
for key in [
|
for key in [
|
||||||
"name",
|
"name",
|
||||||
"field_type",
|
"field_type",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
from langchain_core.documents import Document # Assumed import
|
from langchain_core.documents import Document
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue