From e31e4ab67777568563ef5223985d0f8e788530fe Mon Sep 17 00:00:00 2001 From: Stream Date: Thu, 21 Aug 2025 17:22:39 +0800 Subject: [PATCH] feat: add Service API for memory read and modify --- .../service_api/app/chatflow_memory.py | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 api/controllers/service_api/app/chatflow_memory.py diff --git a/api/controllers/service_api/app/chatflow_memory.py b/api/controllers/service_api/app/chatflow_memory.py new file mode 100644 index 0000000000..1a7ab6733e --- /dev/null +++ b/api/controllers/service_api/app/chatflow_memory.py @@ -0,0 +1,57 @@ +from flask_restful import Resource, reqparse +from sqlalchemy.orm import Session + +from controllers.service_api import api +from controllers.service_api.wraps import FetchUserArg, WhereisUserArg, validate_app_token +from libs.helper import uuid_value +from models import db +from models.chatflow_memory import ChatflowMemoryVariable +from services.chatflow_memory_service import ChatflowMemoryService +from services.workflow_service import WorkflowService + + +class MemoryListApi(Resource): + @validate_app_token(fetch_user_arg=FetchUserArg(fetch_from=WhereisUserArg.JSON, required=True)) + def get(self, app_model): + parser = reqparse.RequestParser() + parser.add_argument("conversation_id", required=False, type=uuid_value, location="args") + args = parser.parse_args() + conversation_id = args.get("conversation_id") + + result = ChatflowMemoryService.get_persistent_memories(app_model) + if conversation_id: + result = [*result, *ChatflowMemoryService.get_session_memories(app_model, conversation_id)] + + return result + +class MemoryEditApi(Resource): + @validate_app_token(fetch_user_arg=FetchUserArg(fetch_from=WhereisUserArg.JSON, required=True)) + 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('update', type=str, required=True) + args = parser.parse_args() + workflow = WorkflowService().get_published_workflow(app_model) + if not workflow: + return {'error': 'Workflow not found'}, 404 + memory_spec = next((it for it in workflow.memory_blocks if it.id == args['id']), None) + if not memory_spec: + return {'error': 'Memory not found'}, 404 + with Session(db.engine) as session: + 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.add(memory_spec) + session.commit() + return '', 204 + +api.add_resource(MemoryListApi, '/memories') +api.add_resource(MemoryEditApi, '/memory-edit')