From 05d231ad3305b373c5ebcd57a3a2cee3040461b5 Mon Sep 17 00:00:00 2001 From: Stream Date: Fri, 22 Aug 2025 19:59:17 +0800 Subject: [PATCH] fix: fix bugs check by Claude Code --- .../service_api/app/chatflow_memory.py | 33 ++++++++++++------- api/controllers/web/chatflow_memory.py | 33 ++++++++++++------- api/core/workflow/entities/variable_pool.py | 2 +- api/services/chatflow_memory_service.py | 6 ++-- 4 files changed, 46 insertions(+), 28 deletions(-) diff --git a/api/controllers/service_api/app/chatflow_memory.py b/api/controllers/service_api/app/chatflow_memory.py index d82820d252..10db3231f2 100644 --- a/api/controllers/service_api/app/chatflow_memory.py +++ b/api/controllers/service_api/app/chatflow_memory.py @@ -29,7 +29,7 @@ class MemoryEditApi(Resource): def put(self, app_model): parser = reqparse.RequestParser() parser.add_argument('id', type=str, required=True) - parser.add_argument('node_id', type=str, required=False) + parser.add_argument('node_id', type=str, required=False, default=None) parser.add_argument('update', type=str, required=True) args = parser.parse_args() workflow = WorkflowService().get_published_workflow(app_model) @@ -39,18 +39,27 @@ class MemoryEditApi(Resource): if not memory_spec: return {'error': 'Memory not found'}, 404 with Session(db.engine) as session: - session.merge( - ChatflowMemoryVariable( - tenant_id=app_model.tenant_id, - app_id=app_model.id, - node_id=args['node_id'], - memory_id=args['id'], - name=memory_spec.name, - value=args['update'], - scope=memory_spec.scope, - term=memory_spec.term, + existing = session.query(ChatflowMemoryVariable).filter_by( + memory_id=args['id'], + tenant_id=app_model.tenant_id, + app_id=app_model.id, + node_id=args['node_id'] + ).first() + if existing: + existing.value = args['update'] + else: + session.add( + ChatflowMemoryVariable( + tenant_id=app_model.tenant_id, + app_id=app_model.id, + node_id=args['node_id'], + memory_id=args['id'], + name=memory_spec.name, + value=args['update'], + scope=memory_spec.scope, + term=memory_spec.term, + ) ) - ) session.commit() return '', 204 diff --git a/api/controllers/web/chatflow_memory.py b/api/controllers/web/chatflow_memory.py index 43c330ab50..078040b204 100644 --- a/api/controllers/web/chatflow_memory.py +++ b/api/controllers/web/chatflow_memory.py @@ -27,7 +27,7 @@ class MemoryEditApi(WebApiResource): def put(self, app_model): parser = reqparse.RequestParser() parser.add_argument('id', type=str, required=True) - parser.add_argument('node_id', type=str, required=False) + parser.add_argument('node_id', type=str, required=False, default=None) parser.add_argument('update', type=str, required=True) args = parser.parse_args() workflow = WorkflowService().get_published_workflow(app_model) @@ -39,18 +39,27 @@ class MemoryEditApi(WebApiResource): if not memory_spec.end_user_editable: return {'error': 'Memory not editable'}, 403 with Session(db.engine) as session: - session.merge( - ChatflowMemoryVariable( - tenant_id=app_model.tenant_id, - app_id=app_model.id, - node_id=args['node_id'], - memory_id=args['id'], - name=memory_spec.name, - value=args['update'], - scope=memory_spec.scope, - term=memory_spec.term, + existing = session.query(ChatflowMemoryVariable).filter_by( + memory_id=args['id'], + tenant_id=app_model.tenant_id, + app_id=app_model.id, + node_id=args['node_id'] + ).first() + if existing: + existing.value = args['update'] + else: + session.add( + ChatflowMemoryVariable( + tenant_id=app_model.tenant_id, + app_id=app_model.id, + node_id=args['node_id'], + memory_id=args['id'], + name=memory_spec.name, + value=args['update'], + scope=memory_spec.scope, + term=memory_spec.term, + ) ) - ) session.commit() return '', 204 diff --git a/api/core/workflow/entities/variable_pool.py b/api/core/workflow/entities/variable_pool.py index 67f5551dea..830cefdcd0 100644 --- a/api/core/workflow/entities/variable_pool.py +++ b/api/core/workflow/entities/variable_pool.py @@ -62,7 +62,7 @@ class VariablePool(BaseModel): self.add((CONVERSATION_VARIABLE_NODE_ID, var.name), var) # Add memory blocks to the variable pool for memory_id, memory_value in self.memory_blocks.items(): - self.add(['memory_block', memory_id], memory_value) + self.add([CONVERSATION_VARIABLE_NODE_ID, memory_id], memory_value) def add(self, selector: Sequence[str], value: Any, /) -> None: """ diff --git a/api/services/chatflow_memory_service.py b/api/services/chatflow_memory_service.py index 0454544699..f979acf234 100644 --- a/api/services/chatflow_memory_service.py +++ b/api/services/chatflow_memory_service.py @@ -60,7 +60,7 @@ class ChatflowMemoryService: @staticmethod def save_memory(memory: MemoryBlock, variable_pool: VariablePool, is_draft: bool) -> None: - key = f"{memory.node_id}:{memory.spec.id}" if memory.node_id else memory.spec.id + key = f"{memory.node_id}.{memory.spec.id}" if memory.node_id else memory.spec.id variable_pool.add([MEMORY_BLOCK_VARIABLE_NODE_ID, key], memory.value) with Session(db.engine) as session: @@ -280,13 +280,13 @@ class ChatflowMemoryService: return True @staticmethod - def wait_for_sync_memory_completion(workflow, conversation_id: str): + def wait_for_sync_memory_completion(workflow: Workflow, conversation_id: str): """Wait for sync memory update to complete, maximum 50 seconds""" memory_blocks = workflow.memory_blocks sync_memory_blocks = [ block for block in memory_blocks - if block.scope == MemoryScope.APP and block.update_mode == "sync" + if block.scope == MemoryScope.APP and block.schedule_mode == MemoryScheduleMode.SYNC ] if not sync_memory_blocks: