| """② 无监督式查询分解(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) | |