"""② 无监督式查询分解(XLM seq2seq,进程内)。 复用 methods/unsupervised/XLM/server_translate.py 里的 load()/decompose()(已改为惰性加载), 不再启动 Flask 服务。首次调用需要 RAGQA_XLM_CKPT 与 CUDA GPU。 """ import os import sys _HERE = os.path.dirname(os.path.abspath(__file__)) _PKG_ROOT = os.path.dirname(_HERE) # .../query_decomposition_baselines _XLM_DIR = os.path.join(_PKG_ROOT, "methods", "unsupervised", "XLM") _st = None # server_translate 模块(惰性导入) def _module(): global _st if _st is not None: return _st # 未设 RAGQA_XLM_CKPT 时,自动回退到仓库内 weights/ 下的权重(HF 仓库 clone 后即可用)。 if not os.environ.get("RAGQA_XLM_CKPT"): cand = os.path.join(_PKG_ROOT, "weights", "xlm_unsup_decomp.pth") if os.path.isfile(cand): os.environ["RAGQA_XLM_CKPT"] = cand # 必须在 import server_translate 之前设置 if _XLM_DIR not in sys.path: sys.path.insert(0, _XLM_DIR) # 让 `import src...` 与 `import server_translate` 可解析 import server_translate # 导入很轻:只注册 parser/params,模型在 load() 里惰性加载 _st = server_translate return _st def unsupervised_decompose(query): """把一个 query 交给 XLM 分解器,返回子问题 list[str]。""" return _module().decompose(query)