Refactor code and fix minor issues

This commit is contained in:
Gabriel Luiz Freitas Almeida 2024-01-26 09:45:33 -03:00
commit dbf0a2a920
7 changed files with 20 additions and 56 deletions

View file

@ -28,23 +28,14 @@ def ungroup_node(group_node_data, base_flow):
g_edges = flow["data"]["edges"] g_edges = flow["data"]["edges"]
# Redirect edges to the correct proxy node # Redirect edges to the correct proxy node
updated_edges = get_updated_edges( updated_edges = get_updated_edges(base_flow, g_nodes, g_edges, group_node_data["id"])
base_flow, g_nodes, g_edges, group_node_data["id"]
)
# Update template values # Update template values
update_template(template, g_nodes) update_template(template, g_nodes)
nodes = [ nodes = [n for n in base_flow["nodes"] if n["id"] != group_node_data["id"]] + g_nodes
n for n in base_flow["nodes"] if n["id"] != group_node_data["id"]
] + g_nodes
edges = ( edges = (
[ [e for e in base_flow["edges"] if e["target"] != group_node_data["id"] and e["source"] != group_node_data["id"]]
e
for e in base_flow["edges"]
if e["target"] != group_node_data["id"]
and e["source"] != group_node_data["id"]
]
+ g_edges + g_edges
+ updated_edges + updated_edges
) )
@ -66,11 +57,7 @@ def process_flow(flow_object):
if node_id in processed_nodes: if node_id in processed_nodes:
return return
if ( if node.get("data") and node["data"].get("node") and node["data"]["node"].get("flow"):
node.get("data")
and node["data"].get("node")
and node["data"]["node"].get("flow")
):
process_flow(node["data"]["node"]["flow"]["data"]) process_flow(node["data"]["node"]["flow"]["data"])
new_nodes = ungroup_node(node["data"], cloned_flow) new_nodes = ungroup_node(node["data"], cloned_flow)
# Add new nodes to the queue for future processing # Add new nodes to the queue for future processing
@ -108,26 +95,16 @@ def update_template(template, g_nodes):
if node_index != -1: if node_index != -1:
display_name = None display_name = None
show = g_nodes[node_index]["data"]["node"]["template"][field]["show"] show = g_nodes[node_index]["data"]["node"]["template"][field]["show"]
advanced = g_nodes[node_index]["data"]["node"]["template"][field][ advanced = g_nodes[node_index]["data"]["node"]["template"][field]["advanced"]
"advanced"
]
if "display_name" in g_nodes[node_index]["data"]["node"]["template"][field]: if "display_name" in g_nodes[node_index]["data"]["node"]["template"][field]:
display_name = g_nodes[node_index]["data"]["node"]["template"][field][ display_name = g_nodes[node_index]["data"]["node"]["template"][field]["display_name"]
"display_name"
]
else: else:
display_name = g_nodes[node_index]["data"]["node"]["template"][field][ display_name = g_nodes[node_index]["data"]["node"]["template"][field]["name"]
"name"
]
g_nodes[node_index]["data"]["node"]["template"][field] = value 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
"advanced" g_nodes[node_index]["data"]["node"]["template"][field]["display_name"] = display_name
] = advanced
g_nodes[node_index]["data"]["node"]["template"][field][
"display_name"
] = display_name
def update_target_handle(new_edge, g_nodes, group_node_id): def update_target_handle(new_edge, g_nodes, group_node_id):

View file

@ -80,6 +80,7 @@ class Vertex:
# If the Vertex.type is a power component # If the Vertex.type is a power component
# then we need to return the built object # then we need to return the built object
# instead of the result dict # instead of the result dict
if isinstance(self._built_result, UnbuiltResult): if isinstance(self._built_result, UnbuiltResult):
return {} return {}
return self._built_result if isinstance(self._built_result, dict) else {"result": self._built_result} return self._built_result if isinstance(self._built_result, dict) else {"result": self._built_result}

View file

@ -141,7 +141,9 @@ class SeriesCharacterChainNode(FrontendNode):
), ),
], ],
) )
description: str = "SeriesCharacterChain is a chain you can use to have a conversation with a character from a series." # noqa description: str = (
"SeriesCharacterChain is a chain you can use to have a conversation with a character from a series." # noqa
)
base_classes: list[str] = [ base_classes: list[str] = [
"LLMChain", "LLMChain",
"BaseCustomChain", "BaseCustomChain",

View file

@ -66,9 +66,7 @@ class NameTest(FastHttpUser):
result1, session_id = self.process(name, self.flow_id, payload1) result1, session_id = self.process(name, self.flow_id, payload1)
payload2 = { payload2 = {
"inputs": { "inputs": {"text": "What is my name? Please, answer like this: Your name is <name>"},
"text": "What is my name? Please, answer like this: Your name is <name>"
},
"session_id": session_id, "session_id": session_id,
"sync": False, "sync": False,
} }
@ -88,9 +86,7 @@ class NameTest(FastHttpUser):
logged_in_headers = {"Authorization": f"Bearer {a_token}"} logged_in_headers = {"Authorization": f"Bearer {a_token}"}
print("Logged in") print("Logged in")
with open( with open(
Path(__file__).parent.parent Path(__file__).parent.parent / "data" / "BasicChatwithPromptandHistory.json",
/ "data"
/ "BasicChatwithPromptandHistory.json",
"r", "r",
) as f: ) as f:
json_flow = f.read() json_flow = f.read()
@ -115,11 +111,7 @@ class NameTest(FastHttpUser):
) )
print(response.json()) print(response.json())
user_id = next( user_id = next(
( (user["id"] for user in response.json()["users"] if user["username"] == "superuser"),
user["id"]
for user in response.json()["users"]
if user["username"] == "superuser"
),
None, None,
) )
# Create api key # Create api key

View file

@ -6,9 +6,7 @@ from langflow.services.database.models.api_key import ApiKeyCreate
def api_key(client, logged_in_headers, active_user): def api_key(client, logged_in_headers, active_user):
api_key = ApiKeyCreate(name="test-api-key") api_key = ApiKeyCreate(name="test-api-key")
response = client.post( response = client.post("api/v1/api_key", data=api_key.json(), headers=logged_in_headers)
"api/v1/api_key", data=api_key.json(), headers=logged_in_headers
)
assert response.status_code == 200, response.text assert response.status_code == 200, response.text
return response.json() return response.json()
@ -28,9 +26,7 @@ def test_get_api_keys(client, logged_in_headers, api_key):
def test_create_api_key(client, logged_in_headers): def test_create_api_key(client, logged_in_headers):
api_key_name = "test-api-key" api_key_name = "test-api-key"
response = client.post( response = client.post("api/v1/api_key", json={"name": api_key_name}, headers=logged_in_headers)
"api/v1/api_key", json={"name": api_key_name}, headers=logged_in_headers
)
assert response.status_code == 200 assert response.status_code == 200
data = response.json() data = response.json()
assert "name" in data and data["name"] == api_key_name assert "name" in data and data["name"] == api_key_name

View file

@ -18,9 +18,7 @@ def test_python_function_tool():
with pytest.raises(SyntaxError): with pytest.raises(SyntaxError):
code = pytest.CODE_WITH_SYNTAX_ERROR code = pytest.CODE_WITH_SYNTAX_ERROR
func = get_function(code) func = get_function(code)
func = PythonFunctionTool( func = PythonFunctionTool(name="Test", description="Testing", code=code, func=func)
name="Test", description="Testing", code=code, func=func
)
def test_python_function(): def test_python_function():

View file

@ -31,9 +31,7 @@ def test_websocket_endpoint(client: TestClient, active_user, logged_in_headers):
# Assuming your websocket_endpoint uses chat_service which caches data from stream_build # Assuming your websocket_endpoint uses chat_service which caches data from stream_build
access_token = logged_in_headers["Authorization"].split(" ")[1] access_token = logged_in_headers["Authorization"].split(" ")[1]
with pytest.raises(WebSocketDisconnect): with pytest.raises(WebSocketDisconnect):
with client.websocket_connect( with client.websocket_connect(f"api/v1/chat/non_existing_client_id?token={access_token}") as websocket:
f"api/v1/chat/non_existing_client_id?token={access_token}"
) as websocket:
websocket.send_json({"type": "test"}) websocket.send_json({"type": "test"})
data = websocket.receive_json() data = websocket.receive_json()
assert "Please, build the flow before sending messages" in data["message"] assert "Please, build the flow before sending messages" in data["message"]