extension.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from pathlib import Path
  2. import config
  3. from extensions import GatewayBinding, ResultBinding
  4. from extensions.main_fan.schemas import MainFanInput, MainFanResult
  5. from extensions.main_fan.exploration_tools import (prepare_main_fan_task, fetch_main_fan_data,
  6. query_fan_timeseries, query_fan_sensor_realtime, query_fan_equipment_realtime,
  7. query_fan_equipment_timeseries, run_python, submit_main_fan_report)
  8. from extensions.main_fan.service import validate_result
  9. from extensions.main_fan.batch_tools import (submit_main_fan_mine_plan, query_main_fan_history,
  10. fetch_main_fan_reports, archive_main_fan_report)
  11. def enabled():
  12. return config.get_bool("MAIN_FAN_ENABLED", True)
  13. def validate_config():
  14. from extensions.main_fan.targets import load_catalog
  15. load_catalog()
  16. from extensions.main_fan.pipeline import load_rules
  17. load_rules()
  18. def setup(registry):
  19. from extensions.main_fan.middleware import MainFanSandboxMiddleware
  20. if config.get_bool('MAIN_FAN_LOCAL_BATCH_ENABLED', False):
  21. from extensions.main_fan.batch_service import service
  22. registry.register_service('main_fan_batches', service, requires=('shaanxi_gateway',))
  23. registry.register_business_agent(
  24. name="main_fan", display_name="矿井主通风机研判智能体",
  25. description="联合分析主通风机与备用风机的报告参数、性能测定数据和实际切换前后风量风压,形成一致性研判报告。",
  26. prompt=Path(__file__).with_name("prompt.md").read_text(encoding="utf-8"),
  27. tools=[prepare_main_fan_task, fetch_main_fan_data, query_fan_sensor_realtime, query_fan_timeseries,
  28. query_fan_equipment_realtime, query_fan_equipment_timeseries, run_python, submit_main_fan_report,
  29. submit_main_fan_mine_plan, query_main_fan_history, fetch_main_fan_reports, archive_main_fan_report],
  30. input_schema=MainFanInput,
  31. result_schema=MainFanResult, max_concurrency=config.get_int("MAIN_FAN_MAX_CONCURRENCY", 1),
  32. result_validator=validate_result,
  33. skill_path='/skills/main-fan-equivalent-capability-assessment/SKILL.md',
  34. result_binding=ResultBinding(
  35. agent_code=config.get_str("MAIN_FAN_RESULT_AGENT_CODE", "main_fan_equivalence_agent"),
  36. agent_name=config.get_str("MAIN_FAN_RESULT_AGENT_NAME", "矿井主通风机同等能力研判"),
  37. ),
  38. gateway=GatewayBinding(
  39. agent_code=config.get_str("MAIN_FAN_AGENT_CODE", "main_fan_equivalence_agent"),
  40. check_type_code=config.get_str("MAIN_FAN_CHECK_TYPE_CODE", "main_fan_equivalence"),
  41. sensor_type_list=config.get_str("MAIN_FAN_SENSOR_TYPES"),
  42. topics=tuple(t.strip() for t in config.get_str("MAIN_FAN_TOPICS").split(",") if t.strip()),
  43. ),
  44. )
  45. registry.register_middleware('MainFanSandboxMiddleware', lambda services: MainFanSandboxMiddleware(),
  46. targets=['main_fan'])