""" Model Cleanup Hook - 轻量级模型清理事件采集 hook 该模块提供与 fileLoc 侧 model cleanup 事件收集的接口。 当 fileLoc 未安装时,该模块为空操作,不影响主流程。 被 BaseAdapter.cleanup() (通过 monkey patch 拦截) 调用,侵入量:2行。 """ import threading from datetime import datetime from typing import Dict, Any, List, Optional # 线程安全存储 _cleanup_events: List[Dict[str, Any]] = [] _cleanup_lock = threading.Lock() def on_cleanup(adapter_name: str, model_name: str, cleanup_type: str) -> None: """ 模型清理回调 - 被 BaseAdapter.cleanup() 调用 Args: adapter_name: 适配器名称 (如 "MinerUAdapter") model_name: 模型名称 (如 "layout_detector") cleanup_type: 清理类型 ("start" 或 "end") """ if not adapter_name or not model_name: return if cleanup_type not in ("start", "end"): return event = { 'adapter_name': adapter_name, 'model_name': model_name, 'cleanup_type': cleanup_type, 'timestamp': datetime.now().isoformat() } with _cleanup_lock: _cleanup_events.append(event) def get_cleanup_events() -> List[Dict[str, Any]]: """ 获取所有清理事件 (供 fileLoc 调用) Returns: 清理事件列表 """ with _cleanup_lock: return list(_cleanup_events) def clear_cleanup_events() -> None: """清除所有清理事件""" with _cleanup_lock: _cleanup_events.clear()