feat: add pluginized member context profiling
This commit is contained in:
@@ -210,10 +210,27 @@ def api_group_members(roomid):
|
||||
try:
|
||||
server = current_app.dashboard_server
|
||||
group_members = server.contact_db.get_chatroom_small_member_list(roomid)
|
||||
context_enabled = bool(server.member_context_service) and server.member_context_service.is_group_enabled(roomid)
|
||||
if context_enabled:
|
||||
contexts = server.member_context_db.list_group_member_contexts(roomid)
|
||||
context_map = {item.get("wxid"): item for item in contexts}
|
||||
for member in group_members:
|
||||
context = context_map.get(member.get("wxid"), {})
|
||||
member["activity_level"] = context.get("activity_level", "")
|
||||
member["response_style_hint"] = context.get("response_style_hint", "")
|
||||
member["summary_text"] = context.get("summary_text", "")
|
||||
member["last_profiled_at"] = context.get("last_profiled_at", "")
|
||||
else:
|
||||
for member in group_members:
|
||||
member["activity_level"] = ""
|
||||
member["response_style_hint"] = ""
|
||||
member["summary_text"] = ""
|
||||
member["last_profiled_at"] = ""
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"data": {
|
||||
"members": group_members
|
||||
"members": group_members,
|
||||
"member_context_enabled": context_enabled
|
||||
}
|
||||
})
|
||||
except Exception as e:
|
||||
@@ -221,6 +238,56 @@ def api_group_members(roomid):
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
|
||||
@contacts_bp.route('/api/group_member_context/<roomid>/<wxid>', methods=['GET'])
|
||||
@login_required
|
||||
def api_group_member_context(roomid, wxid):
|
||||
"""获取群成员交互摘要"""
|
||||
try:
|
||||
server = current_app.dashboard_server
|
||||
if not server.member_context_service:
|
||||
return jsonify({"success": False, "error": "成员交互摘要插件未加载"}), 503
|
||||
if not server.member_context_service.is_group_enabled(roomid):
|
||||
return jsonify({"success": False, "error": "该群未启用成员交互摘要功能"}), 403
|
||||
context = server.member_context_db.get_member_context(roomid, wxid)
|
||||
if not context:
|
||||
context = server.member_context_service.refresh_member_context(roomid, wxid)
|
||||
return jsonify({"success": True, "data": {"context": context}})
|
||||
except Exception as e:
|
||||
logger.error(f"获取群成员交互摘要失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
|
||||
@contacts_bp.route('/api/group_member_context/refresh', methods=['POST'])
|
||||
@login_required
|
||||
def api_refresh_group_member_context():
|
||||
"""刷新群成员交互摘要"""
|
||||
try:
|
||||
server = current_app.dashboard_server
|
||||
if not server.member_context_service:
|
||||
return jsonify({"success": False, "error": "成员交互摘要插件未加载"}), 503
|
||||
data = request.json or {}
|
||||
roomid = data.get("roomid")
|
||||
wxid = data.get("wxid")
|
||||
|
||||
if roomid and wxid:
|
||||
if not server.member_context_service.is_group_enabled(roomid):
|
||||
return jsonify({"success": False, "error": "该群未启用成员交互摘要功能"}), 403
|
||||
context = server.member_context_service.refresh_member_context(roomid, wxid)
|
||||
return jsonify({"success": True, "data": {"context": context}})
|
||||
|
||||
if roomid:
|
||||
if not server.member_context_service.is_group_enabled(roomid):
|
||||
return jsonify({"success": False, "error": "该群未启用成员交互摘要功能"}), 403
|
||||
result = server.member_context_service.refresh_group_contexts(roomid)
|
||||
return jsonify({"success": True, "data": result})
|
||||
|
||||
result = server.member_context_service.refresh_all_chatrooms()
|
||||
return jsonify({"success": True, "data": result})
|
||||
except Exception as e:
|
||||
logger.error(f"刷新群成员交互摘要失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
|
||||
@contacts_bp.route('/api/update', methods=['POST'])
|
||||
@login_required
|
||||
def api_contacts_update():
|
||||
|
||||
Reference in New Issue
Block a user