🐛 fix(utils.py): refactor update_template function to improve readability and maintainability
✨ feat(utils.py): add support for nested proxy dictionary in template to handle field and id separately ✅ test(test_graph.py): add test cases for process_flow function to ensure correct processing of grouped chat data ✅ test(test_graph.py): add test cases for update_template function to ensure correct updating of template
This commit is contained in:
parent
533edf48f9
commit
de7c80de3f
2 changed files with 44 additions and 5 deletions
|
|
@ -80,8 +80,11 @@ def update_template(template, g_nodes):
|
||||||
Returns:
|
Returns:
|
||||||
None
|
None
|
||||||
"""
|
"""
|
||||||
for key in template.keys():
|
for _, value in template.items():
|
||||||
field, id_ = template[key]["proxy"]
|
if not value.get("proxy"):
|
||||||
|
continue
|
||||||
|
proxy_dict = value["proxy"]
|
||||||
|
field, id_ = proxy_dict["field"], proxy_dict["id"]
|
||||||
node_index = next((i for i, n in enumerate(g_nodes) if n["id"] == id_), -1)
|
node_index = next((i for i, n in enumerate(g_nodes) if n["id"] == id_), -1)
|
||||||
if node_index != -1:
|
if node_index != -1:
|
||||||
display_name = None
|
display_name = None
|
||||||
|
|
@ -98,7 +101,7 @@ def update_template(template, g_nodes):
|
||||||
"name"
|
"name"
|
||||||
]
|
]
|
||||||
|
|
||||||
g_nodes[node_index]["data"]["node"]["template"][field] = template[key]
|
g_nodes[node_index]["data"]["node"]["template"][field] = value
|
||||||
g_nodes[node_index]["data"]["node"]["template"][field]["show"] = show
|
g_nodes[node_index]["data"]["node"]["template"][field]["show"] = show
|
||||||
g_nodes[node_index]["data"]["node"]["template"][field][
|
g_nodes[node_index]["data"]["node"]["template"][field][
|
||||||
"advanced"
|
"advanced"
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,8 @@ from langflow.graph.graph.utils import (
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def sample_template():
|
def sample_template():
|
||||||
return {
|
return {
|
||||||
"field1": {"proxy": ["some_field", "node1"]},
|
"field1": {"proxy": {"field": "some_field", "id": "node1"}},
|
||||||
"field2": {"proxy": ["other_field", "node2"]},
|
"field2": {"proxy": {"field": "other_field", "id": "node2"}},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -358,6 +358,7 @@ def test_ungroup_node(grouped_chat_json_flow):
|
||||||
|
|
||||||
def test_process_flow(grouped_chat_json_flow):
|
def test_process_flow(grouped_chat_json_flow):
|
||||||
grouped_chat_data = json.loads(grouped_chat_json_flow).get("data")
|
grouped_chat_data = json.loads(grouped_chat_json_flow).get("data")
|
||||||
|
|
||||||
processed_flow = process_flow(grouped_chat_data)
|
processed_flow = process_flow(grouped_chat_data)
|
||||||
assert processed_flow is not None
|
assert processed_flow is not None
|
||||||
assert isinstance(processed_flow, dict)
|
assert isinstance(processed_flow, dict)
|
||||||
|
|
@ -365,6 +366,41 @@ def test_process_flow(grouped_chat_json_flow):
|
||||||
assert "edges" in processed_flow
|
assert "edges" in processed_flow
|
||||||
|
|
||||||
|
|
||||||
|
def test_process_flow_one_group(one_grouped_chat_json_flow):
|
||||||
|
grouped_chat_data = json.loads(one_grouped_chat_json_flow).get("data")
|
||||||
|
# There should be only one node
|
||||||
|
assert len(grouped_chat_data["nodes"]) == 1
|
||||||
|
# Get the node, it should be a group node
|
||||||
|
group_node = grouped_chat_data["nodes"][0]
|
||||||
|
node_data = group_node["data"]["node"]
|
||||||
|
assert node_data.get("flow") is not None
|
||||||
|
template_data = node_data["template"]
|
||||||
|
assert any("openai_api_key" in key for key in template_data.keys())
|
||||||
|
# Get the openai_api_key dict
|
||||||
|
openai_api_key = next(
|
||||||
|
(template_data[key] for key in template_data.keys() if "openai_api_key" in key),
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
assert openai_api_key is not None
|
||||||
|
assert openai_api_key["value"] == "test"
|
||||||
|
|
||||||
|
processed_flow = process_flow(grouped_chat_data)
|
||||||
|
assert processed_flow is not None
|
||||||
|
assert isinstance(processed_flow, dict)
|
||||||
|
assert "nodes" in processed_flow
|
||||||
|
assert "edges" in processed_flow
|
||||||
|
|
||||||
|
# Now get the node that has ChatOpenAI in its id
|
||||||
|
chat_openai_node = next(
|
||||||
|
(node for node in processed_flow["nodes"] if "ChatOpenAI" in node["id"]), None
|
||||||
|
)
|
||||||
|
assert chat_openai_node is not None
|
||||||
|
assert (
|
||||||
|
chat_openai_node["data"]["node"]["template"]["openai_api_key"]["value"]
|
||||||
|
== "test"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_update_template(sample_template, sample_nodes):
|
def test_update_template(sample_template, sample_nodes):
|
||||||
# Making a deep copy to keep original sample_nodes unchanged
|
# Making a deep copy to keep original sample_nodes unchanged
|
||||||
nodes_copy = copy.deepcopy(sample_nodes)
|
nodes_copy = copy.deepcopy(sample_nodes)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue