From 255fb07615943e5b26b4ce19592a90d0fd36f38d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E4=BF=8A=E7=94=B7?= Date: Wed, 14 Jan 2026 11:27:23 +0800 Subject: [PATCH 1/9] fix(custome tool): get the name of the custom tool schema --- api/app/core/tools/custom/schema_parser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/app/core/tools/custom/schema_parser.py b/api/app/core/tools/custom/schema_parser.py index a22e2cfa..11e38b30 100644 --- a/api/app/core/tools/custom/schema_parser.py +++ b/api/app/core/tools/custom/schema_parser.py @@ -223,7 +223,7 @@ class OpenAPISchemaParser: operations[operation_id] = { "method": method.upper(), "path": path, - "summary": operation.get("summary", ""), + "summary": operation_id, "description": operation.get("description", ""), "parameters": self._extract_parameters(operation), "request_body": self._extract_request_body(operation), From 2e3e0f4ce98a5514ac10023d5cc2498e091c1015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E4=BF=8A=E7=94=B7?= Date: Wed, 14 Jan 2026 11:41:45 +0800 Subject: [PATCH 2/9] fix(custome tool): get the name of the custom tool schema --- api/app/core/tools/custom/schema_parser.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/api/app/core/tools/custom/schema_parser.py b/api/app/core/tools/custom/schema_parser.py index 11e38b30..ea261dba 100644 --- a/api/app/core/tools/custom/schema_parser.py +++ b/api/app/core/tools/custom/schema_parser.py @@ -10,9 +10,6 @@ from app.core.logging_config import get_business_logger logger = get_business_logger() -# 为了兼容性,创建别名 -# SchemaParser = OpenAPISchemaParser = None - class OpenAPISchemaParser: """OpenAPI Schema解析器 - 解析OpenAPI 3.0规范""" @@ -213,7 +210,9 @@ class OpenAPISchemaParser: if not isinstance(operation, dict): continue - + + summary = operation.get("summary", "") + # 生成操作ID operation_id = operation.get("operationId") if not operation_id: @@ -223,7 +222,7 @@ class OpenAPISchemaParser: operations[operation_id] = { "method": method.upper(), "path": path, - "summary": operation_id, + "summary": summary if summary else operation_id, "description": operation.get("description", ""), "parameters": self._extract_parameters(operation), "request_body": self._extract_request_body(operation), From cdcac262a3aec86038d08d8a92fd4364581c414c Mon Sep 17 00:00:00 2001 From: Eternity <1533512157@qq.com> Date: Wed, 14 Jan 2026 12:24:41 +0800 Subject: [PATCH 3/9] fix(workflow): fix LLM node streaming execution configuration error --- api/app/core/workflow/nodes/llm/node.py | 1 + 1 file changed, 1 insertion(+) diff --git a/api/app/core/workflow/nodes/llm/node.py b/api/app/core/workflow/nodes/llm/node.py index 6395d3b8..bfa1b99f 100644 --- a/api/app/core/workflow/nodes/llm/node.py +++ b/api/app/core/workflow/nodes/llm/node.py @@ -226,6 +226,7 @@ class LLMNode(BaseNode): Yields: 文本片段(chunk)或完成标记 """ + self.typed_config = LLMNodeConfig(**self.config) from langgraph.config import get_stream_writer llm, prompt_or_messages = self._prepare_llm(state, True) From c166615ec8bb0d843428284bb1e1b7804ccd29fa Mon Sep 17 00:00:00 2001 From: lixinyue11 <94037597+lixinyue11@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:11:05 +0800 Subject: [PATCH 4/9] Fix/memory bug fix (#107) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 图谱数据量限制数量去掉 * 图谱数据量限制数量去掉 --- api/app/services/user_memory_service.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/api/app/services/user_memory_service.py b/api/app/services/user_memory_service.py index 67a6ab2c..59bbc211 100644 --- a/api/app/services/user_memory_service.py +++ b/api/app/services/user_memory_service.py @@ -1416,11 +1416,10 @@ async def analytics_graph_data( elementId(n) as id, labels(n)[0] as label, properties(n) as properties - LIMIT $limit """ node_params = { "group_id": end_user_id, - "limit": limit + # "limit": limit } # 执行节点查询 @@ -1567,9 +1566,9 @@ async def _extract_node_properties(label: str, properties: Dict[str, Any],node_ allowed_fields = field_whitelist.get(label, []) # 如果没有定义白名单,返回空字典(或者可以返回所有字段) - if not allowed_fields: - # 对于未定义的节点类型,只返回基本字段 - allowed_fields = ["name", "created_at", "caption"] + # if not allowed_fields: + # # 对于未定义的节点类型,只返回基本字段 + # allowed_fields = ["name", "created_at", "caption"] count_neo4j=f"""MATCH (n)-[r]-(m) WHERE elementId(n) ="{node_id}" RETURN count(r) AS rel_count;""" node_results = await (_neo4j_connector.execute_query(count_neo4j)) # 提取白名单中的字段 @@ -1621,6 +1620,5 @@ def _clean_neo4j_value(value: Any) -> Any: return str(value) except Exception: return None - # 返回原始值 - return value + return value \ No newline at end of file From 5ec9ac1fbaca1d40a73d4f9efe0df5cf7550c473 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 14 Jan 2026 14:17:09 +0800 Subject: [PATCH 5/9] [fix] Object of type UUID is not JSON serializable --- api/app/controllers/public_share_controller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/app/controllers/public_share_controller.py b/api/app/controllers/public_share_controller.py index 02c73718..354a58ef 100644 --- a/api/app/controllers/public_share_controller.py +++ b/api/app/controllers/public_share_controller.py @@ -583,7 +583,7 @@ async def chat( event_data = event.get("data", {}) # 转换为标准 SSE 格式(字符串) - sse_message = f"event: {event_type}\ndata: {json.dumps(event_data)}\n\n" + sse_message = f"event: {event_type}\ndata: {json.dumps(event_data, default=str, ensure_ascii=False)}\n\n" yield sse_message return StreamingResponse( From 8ed2d12da11eb19c360cc698eb092a0cae0ed8bf Mon Sep 17 00:00:00 2001 From: zhaoying Date: Wed, 14 Jan 2026 14:47:46 +0800 Subject: [PATCH 6/9] fix(web): workflow bugfix --- web/src/views/Conversation/index.tsx | 9 +- .../AddChatVariable/ChatVariableModal.tsx | 6 +- .../views/Workflow/components/Chat/Chat.tsx | 1 + .../components/Chat/VariableConfigModal.tsx | 2 +- .../Workflow/components/Nodes/AddNode.tsx | 3 +- .../Workflow/components/PortClickHandler.tsx | 1 + .../Properties/AssignmentList/index.tsx | 2 +- .../components/Properties/CaseList/index.tsx | 32 ++-- .../Properties/ConditionList/index.tsx | 8 +- .../Workflow/components/Properties/index.tsx | 161 ++++++++---------- 10 files changed, 114 insertions(+), 111 deletions(-) diff --git a/web/src/views/Conversation/index.tsx b/web/src/views/Conversation/index.tsx index d791bf2d..d385e1f0 100644 --- a/web/src/views/Conversation/index.tsx +++ b/web/src/views/Conversation/index.tsx @@ -181,10 +181,15 @@ const Conversation: FC = () => { currentConversationId = newId break case 'message': - const { content } = item.data as { content: string } - updateAssistantMessage(content) + const { content, chunk, conversation_id: curId } = item.data as { content: string; chunk: string; conversation_id: string; } + updateAssistantMessage(content ?? chunk) + + if (curId) { + currentConversationId = curId; + } break case 'end': + case 'workflow_end': setLoading(false) if (currentConversationId && currentConversationId !== conversation_id) { setConversationId(currentConversationId) diff --git a/web/src/views/Workflow/components/AddChatVariable/ChatVariableModal.tsx b/web/src/views/Workflow/components/AddChatVariable/ChatVariableModal.tsx index aaaa2ab5..52394ea1 100644 --- a/web/src/views/Workflow/components/AddChatVariable/ChatVariableModal.tsx +++ b/web/src/views/Workflow/components/AddChatVariable/ChatVariableModal.tsx @@ -103,7 +103,11 @@ const ChatVariableModal = forwardRef {type === 'number' - ? + ? form.setFieldValue('defaultValue', value)} + /> : type === 'boolean' ?