#!/usr/bin/env python3 """windcms CLI: report | serve | kb | ask | ingest. 例: .venv/bin/python scripts/windcms.py report --farm rudong""" import sys, argparse from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parents[1])) from src.windcms import config def main(): ap = argparse.ArgumentParser(); sub = ap.add_subparsers(dest='cmd', required=True) r = sub.add_parser('report'); r.add_argument('--farm', default='rudong'); r.add_argument('--turbines', nargs='*'); r.add_argument('--no-polish', dest='polish', action='store_false', help='关闭离线千问润色 (默认开: 报警台分析段由本地 Qwen 按书面工程汉语改写, 接地闸把关, 无模型自动回退模版文)') s = sub.add_parser('serve'); s.add_argument('--farm', default='rudong'); s.add_argument('--port', type=int, default=8020); s.add_argument('--model', default=None) k = sub.add_parser('kb'); k.add_argument('--farm', default='rudong') q = sub.add_parser('ask'); q.add_argument('--farm', default='rudong'); q.add_argument('question'); q.add_argument('--model', default=None) i = sub.add_parser('ingest'); i.add_argument('--farm', default='rudong'); i.add_argument('--rar', required=True); i.add_argument('--window', required=True) z = sub.add_parser('analyze', help='原始数据 → 报告 全链: [--input 导出包/解码目录/波形目录 --window wXXXX] 扫线→能量占比→六层→融合→报告→知识库') z.add_argument('--farm', default='rudong'); z.add_argument('--input', default=None); z.add_argument('--window', default=None) z.add_argument('--steps', nargs='*', default=None, help='子集: ingest oem_scan energy_share model_run fusion report kb'); z.add_argument('--bands', default='ALL') a = ap.parse_args(); cfg = config.farm(a.farm); cfg['key'] = a.farm if a.cmd == 'report': from src.windcms import report, report_std report.build(cfg, a.turbines) report_std.build(cfg, llm_polish=a.polish) elif a.cmd == 'kb': from src.windcms import knowledge; knowledge.build(cfg) elif a.cmd == 'ask': from src.windcms import orchestrator; print(orchestrator.ask(cfg, a.question, model=a.model)['answer']) elif a.cmd == 'serve': from src.windcms import serve; serve.run(cfg, a.port, model=a.model) elif a.cmd == 'analyze': from src.windcms import pipeline s = pipeline.analyze(cfg, input_path=a.input, window=a.window, steps=a.steps, bands=a.bands) sys.exit(0 if s['status'] == 'ok' else 1) elif a.cmd == 'ingest': import subprocess; subprocess.check_call([sys.executable, str(Path(__file__).parent / 'rudong_tcm_ingest_raw.py'), '--rar', a.rar, '--window', a.window]) if __name__ == '__main__': main()