Files
ai-exchange/scripts/run_research_council.py
T
2026-05-11 23:37:47 +08:00

71 lines
2.3 KiB
Python

from __future__ import annotations
from pathlib import Path
import json
import os
import sys
ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from sqlalchemy.exc import SQLAlchemyError
from src.services.research_council import ResearchCouncilService
def main(env=None) -> int:
env = os.environ if env is None else env
instrument_id = int(env.get("RESEARCH_COUNCIL_INSTRUMENT_ID", "1"))
timeframe = env.get("RESEARCH_COUNCIL_TIMEFRAME", "1m")
model_code = env.get("RESEARCH_COUNCIL_MODEL_CODE", "OSOK_DAILY_RANGE_SWEEP_MSS_FVG_RETRACE")
output_json = _get_bool(env, "RESEARCH_COUNCIL_OUTPUT_JSON", False)
checkpoint_status = _get_bool(env, "RESEARCH_COUNCIL_CHECKPOINT_STATUS", False)
try:
service = ResearchCouncilService()
if checkpoint_status:
payload = service.get_resume_state(instrument_id=instrument_id)
else:
payload = service.build_and_persist(
instrument_id=instrument_id,
timeframe=timeframe,
model_code=model_code,
)
except SQLAlchemyError as exc:
failure = {
"passed": False,
"instrument_id": instrument_id,
"timeframe": timeframe,
"model_code": model_code,
"error_type": exc.__class__.__name__,
"error": str(exc),
}
_print_payload(failure, output_json=output_json)
return 2
payload["passed"] = True
_print_payload(payload, output_json=output_json)
return 0
def _print_payload(payload: dict, *, output_json: bool) -> None:
if output_json:
print(json.dumps(payload, ensure_ascii=False, sort_keys=True, default=str))
return
if payload.get("can_resume") is not None:
print(f"Research council resume state for instrument {payload.get('instrument_id')}")
print(f"Can resume: {payload.get('can_resume')}")
return
print(f"Research council run completed for instrument {payload.get('instrument_id')}")
print(f"Run id: {payload.get('id', 'n/a')}")
def _get_bool(env, key: str, default: bool) -> bool:
value = env.get(key)
if value is None or value == "":
return default
return str(value).strip().lower() in {"1", "true", "yes", "on"}
if __name__ == "__main__":
raise SystemExit(main())