windcms.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #!/usr/bin/env python3
  2. """windcms CLI: report | serve | kb | ask | ingest. 例: .venv/bin/python scripts/windcms.py report --farm rudong"""
  3. import sys, argparse
  4. from pathlib import Path
  5. sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
  6. from src.windcms import config
  7. def main():
  8. ap = argparse.ArgumentParser(); sub = ap.add_subparsers(dest='cmd', required=True)
  9. 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 按书面工程汉语改写, 接地闸把关, 无模型自动回退模版文)')
  10. 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)
  11. k = sub.add_parser('kb'); k.add_argument('--farm', default='rudong')
  12. q = sub.add_parser('ask'); q.add_argument('--farm', default='rudong'); q.add_argument('question'); q.add_argument('--model', default=None)
  13. i = sub.add_parser('ingest'); i.add_argument('--farm', default='rudong'); i.add_argument('--rar', required=True); i.add_argument('--window', required=True)
  14. z = sub.add_parser('analyze', help='原始数据 → 报告 全链: [--input 导出包/解码目录/波形目录 --window wXXXX] 扫线→能量占比→六层→融合→报告→知识库')
  15. z.add_argument('--farm', default='rudong'); z.add_argument('--input', default=None); z.add_argument('--window', default=None)
  16. z.add_argument('--steps', nargs='*', default=None, help='子集: ingest oem_scan energy_share model_run fusion report kb'); z.add_argument('--bands', default='ALL')
  17. a = ap.parse_args(); cfg = config.farm(a.farm); cfg['key'] = a.farm
  18. if a.cmd == 'report':
  19. from src.windcms import report, report_std
  20. report.build(cfg, a.turbines)
  21. report_std.build(cfg, llm_polish=a.polish)
  22. elif a.cmd == 'kb':
  23. from src.windcms import knowledge; knowledge.build(cfg)
  24. elif a.cmd == 'ask':
  25. from src.windcms import orchestrator; print(orchestrator.ask(cfg, a.question, model=a.model)['answer'])
  26. elif a.cmd == 'serve':
  27. from src.windcms import serve; serve.run(cfg, a.port, model=a.model)
  28. elif a.cmd == 'analyze':
  29. from src.windcms import pipeline
  30. s = pipeline.analyze(cfg, input_path=a.input, window=a.window, steps=a.steps, bands=a.bands)
  31. sys.exit(0 if s['status'] == 'ok' else 1)
  32. elif a.cmd == 'ingest':
  33. import subprocess; subprocess.check_call([sys.executable, str(Path(__file__).parent / 'rudong_tcm_ingest_raw.py'), '--rar', a.rar, '--window', a.window])
  34. if __name__ == '__main__':
  35. main()