fix(edge): Handle invalid input types when creating TargetHandle (#3368)
* fix(edge): Handle invalid input types when creating TargetHandle * test(edge): add test for raising error on invalid target handle * fix: mypy error union-attr --------- Co-authored-by: italojohnny <italojohnnydosanjos@gmail.com>
This commit is contained in:
parent
8de100eae3
commit
c4d2dc56c7
2 changed files with 52 additions and 1 deletions
|
|
@ -23,7 +23,23 @@ class Edge:
|
||||||
self._target_handle = cast(TargetHandleDict, data.get("targetHandle", {}))
|
self._target_handle = cast(TargetHandleDict, data.get("targetHandle", {}))
|
||||||
self.source_handle: SourceHandle = SourceHandle(**self._source_handle)
|
self.source_handle: SourceHandle = SourceHandle(**self._source_handle)
|
||||||
if isinstance(self._target_handle, dict):
|
if isinstance(self._target_handle, dict):
|
||||||
self.target_handle: TargetHandle = TargetHandle(**self._target_handle)
|
try:
|
||||||
|
self.target_handle: TargetHandle = TargetHandle(**self._target_handle)
|
||||||
|
except Exception as e:
|
||||||
|
if "inputTypes" in self._target_handle and self._target_handle["inputTypes"] is None:
|
||||||
|
# Check if self._target_handle['fieldName']
|
||||||
|
if hasattr(target, "_custom_component"):
|
||||||
|
display_name = getattr(target._custom_component, "display_name", "")
|
||||||
|
raise ValueError(
|
||||||
|
f"Component {display_name} field '{self._target_handle['fieldName']}' might not be a valid input."
|
||||||
|
) from e
|
||||||
|
else:
|
||||||
|
raise ValueError(
|
||||||
|
f"Field '{self._target_handle['fieldName']}' on {target.display_name} might not be a valid input."
|
||||||
|
) from e
|
||||||
|
else:
|
||||||
|
raise e
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise ValueError("Target handle is not a dictionary")
|
raise ValueError("Target handle is not a dictionary")
|
||||||
self.target_param = self.target_handle.field_name
|
self.target_param = self.target_handle.field_name
|
||||||
|
|
|
||||||
35
src/backend/tests/unit/graph/edge/test_edge_base.py
Normal file
35
src/backend/tests/unit/graph/edge/test_edge_base.py
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from langflow.components.inputs.ChatInput import ChatInput
|
||||||
|
from langflow.components.models.OpenAIModel import OpenAIModelComponent
|
||||||
|
from langflow.components.outputs.ChatOutput import ChatOutput
|
||||||
|
from langflow.components.prompts.Prompt import PromptComponent
|
||||||
|
from langflow.graph.graph.base import Graph
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def client():
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def test_edge_raises_error_on_invalid_target_handle(client):
|
||||||
|
template = """Answer the user as if you were a pirate.
|
||||||
|
|
||||||
|
User: {user_input}
|
||||||
|
|
||||||
|
Answer:
|
||||||
|
"""
|
||||||
|
chat_input = ChatInput()
|
||||||
|
prompt_component = PromptComponent()
|
||||||
|
prompt_component.set(
|
||||||
|
template=template,
|
||||||
|
user_input=chat_input.message_response,
|
||||||
|
)
|
||||||
|
|
||||||
|
openai_component = OpenAIModelComponent()
|
||||||
|
openai_component.set(input_values=prompt_component.build_prompt)
|
||||||
|
|
||||||
|
chat_output = ChatOutput()
|
||||||
|
chat_output.set(input_value=openai_component.text_response)
|
||||||
|
with pytest.raises(ValueError, match="Component OpenAI field 'input_values' might not be a valid input."):
|
||||||
|
Graph(start=chat_input, end=chat_output)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue