@@ -616,13 +616,82 @@ async def rename_catgirl(old_name: str, request: Request):
616616 save_characters (characters )
617617 return {"success" : True }
618618
619+ @app .post ('/api/characters/catgirl/{name}/unregister_voice' )
620+ async def unregister_voice (name : str ):
621+ """解除猫娘的声音注册"""
622+ try :
623+ characters = load_characters ()
624+ if name not in characters .get ('猫娘' , {}):
625+ return JSONResponse ({'success' : False , 'error' : '猫娘不存在' }, status_code = 404 )
626+
627+ # 检查是否已有voice_id
628+ if not characters ['猫娘' ][name ].get ('voice_id' ):
629+ return JSONResponse ({'success' : False , 'error' : '该猫娘未注册声音' }, status_code = 400 )
630+
631+ # 删除voice_id字段
632+ if 'voice_id' in characters ['猫娘' ][name ]:
633+ characters ['猫娘' ][name ].pop ('voice_id' )
634+ save_characters (characters )
635+
636+ logger .info (f"已解除猫娘 '{ name } ' 的声音注册" )
637+ return {"success" : True , "message" : "声音注册已解除" }
638+
639+ except Exception as e :
640+ logger .error (f"解除声音注册时出错: { e } " )
641+ return JSONResponse ({'success' : False , 'error' : f'解除注册失败: { str (e )} ' }, status_code = 500 )
642+
619643@app .get ('/api/memory/recent_files' )
620644async def get_recent_files ():
621645 """获取 memory/store 下所有 recent*.json 文件名列表"""
622646 files = glob .glob ('memory/store/recent*.json' )
623647 file_names = [os .path .basename (f ) for f in files ]
624648 return {"files" : file_names }
625649
650+ @app .get ('/api/memory/review_config' )
651+ async def get_review_config ():
652+ """获取记忆审阅配置"""
653+ try :
654+ config_path = './config/core_config.json'
655+ if os .path .exists (config_path ):
656+ with open (config_path , 'r' , encoding = 'utf-8' ) as f :
657+ config_data = json .load (f )
658+ # 如果配置中没有这个键,默认返回True(开启)
659+ return {"enabled" : config_data .get ('recent_memory_auto_review' , True )}
660+ else :
661+ # 如果配置文件不存在,默认返回True(开启)
662+ return {"enabled" : True }
663+ except Exception as e :
664+ logger .error (f"读取记忆审阅配置失败: { e } " )
665+ return {"enabled" : True }
666+
667+ @app .post ('/api/memory/review_config' )
668+ async def update_review_config (request : Request ):
669+ """更新记忆审阅配置"""
670+ try :
671+ data = await request .json ()
672+ enabled = data .get ('enabled' , True )
673+
674+ config_path = './config/core_config.json'
675+ config_data = {}
676+
677+ # 读取现有配置
678+ if os .path .exists (config_path ):
679+ with open (config_path , 'r' , encoding = 'utf-8' ) as f :
680+ config_data = json .load (f )
681+
682+ # 更新配置
683+ config_data ['recent_memory_auto_review' ] = enabled
684+
685+ # 保存配置
686+ with open (config_path , 'w' , encoding = 'utf-8' ) as f :
687+ json .dump (config_data , f , ensure_ascii = False , indent = 2 )
688+
689+ logger .info (f"记忆审阅配置已更新: enabled={ enabled } " )
690+ return {"success" : True , "enabled" : enabled }
691+ except Exception as e :
692+ logger .error (f"更新记忆审阅配置失败: { e } " )
693+ return {"success" : False , "error" : str (e )}
694+
626695@app .get ('/api/memory/recent_file' )
627696async def get_recent_file (filename : str ):
628697 """获取指定 recent*.json 文件内容"""
@@ -651,7 +720,7 @@ async def save_recent_file(request: Request):
651720 arr .append ({
652721 "type" : t ,
653722 "data" : {
654- "content" : text if t == "system" else [{ "type" : "text" , "text" : text }] ,
723+ "content" : text ,
655724 "additional_kwargs" : {},
656725 "response_metadata" : {},
657726 "type" : t ,
0 commit comments