Skip to content

Commit 607f31b

Browse files
committed
fix: refresh workflow form knowledge snapshots
1 parent c00738d commit 607f31b

1 file changed

Lines changed: 37 additions & 0 deletions

File tree

apps/application/serializers/application.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,42 @@ def hand_node(node, update_tool_map):
103103
node.get("properties", {}).get("node_data", {})["tool_lib_id"] = update_tool_map.get(tool_lib_id, tool_lib_id)
104104

105105

106+
def update_form_knowledge_fields(workflow):
107+
if workflow is None:
108+
return
109+
for node in workflow.get("nodes", []):
110+
if node.get("type") == "form-node":
111+
form_field_list = node.get("properties", {}).get("node_data", {}).get("form_field_list", [])
112+
for field in form_field_list:
113+
if field.get("input_type") != "Knowledge":
114+
continue
115+
knowledge_list = field.get("attrs", {}).get("knowledge_list", [])
116+
knowledge_id_list = [
117+
str(knowledge.get("id")) for knowledge in knowledge_list if knowledge.get("id") is not None
118+
]
119+
current_knowledge_dict = {
120+
str(knowledge.id): knowledge
121+
for knowledge in QuerySet(Knowledge).filter(id__in=list(set(knowledge_id_list)))
122+
}
123+
refreshed_knowledge_list = []
124+
for knowledge in knowledge_list:
125+
current_knowledge = current_knowledge_dict.get(str(knowledge.get("id")))
126+
if current_knowledge is None:
127+
refreshed_knowledge_list.append(knowledge)
128+
else:
129+
refreshed_knowledge_list.append(
130+
{
131+
**knowledge,
132+
"name": current_knowledge.name,
133+
"type": current_knowledge.type,
134+
"embedding_model_id": current_knowledge.embedding_model_id,
135+
}
136+
)
137+
field.setdefault("attrs", {})["knowledge_list"] = refreshed_knowledge_list
138+
if node.get("type") == "loop-node":
139+
update_form_knowledge_fields(node.get("properties", {}).get("node_data", {}).get("loop_body") or {})
140+
141+
106142
class MKInstance:
107143
def __init__(self, application: dict, function_lib_list: List[dict], version: str, tool_list: List[dict]):
108144
self.application = application
@@ -1408,6 +1444,7 @@ def one(self, with_valid=True):
14081444
knowledge_id_list = [k.get("id") for k in knowledge_list]
14091445
else:
14101446
self.update_knowledge_node(application.work_flow, available_knowledge_dict)
1447+
update_form_knowledge_fields(application.work_flow)
14111448

14121449
return {
14131450
**ApplicationSerializerModel(application).data,

0 commit comments

Comments
 (0)