#!/usr/bin/env python3 from __future__ import annotations import argparse import json import subprocess import sys from dataclasses import dataclass from datetime import datetime from pathlib import Path from typing import Any PROJECT_ROOT = Path(__file__).resolve().parents[1] DEFAULT_OUTPUT_ROOT = PROJECT_ROOT / "docs" / "ADDRESS" / "runs" RUNNER_SCRIPT = PROJECT_ROOT / "scripts" / "run_address_live_slang_stress.py" VALIDATOR_SCRIPT = PROJECT_ROOT / "scripts" / "validate_address_run_pack.py" COMPARATOR_SCRIPT = PROJECT_ROOT / "scripts" / "compare_address_run_summary.py" @dataclass class NightlyPackConfig: name: str questions_file: Path baseline_summary: Path def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser( description="Run ADDRESS nightly regression packs (102 + 25), validate run packs and compare vs baseline." ) parser.add_argument("--backend-url", default="http://127.0.0.1:8787/api/assistant/message") parser.add_argument("--prompt-version", default="address_query_runtime_v1") parser.add_argument("--llm-provider", default="local") parser.add_argument("--llm-model", default="qwen2.5-14b-instruct-1m") parser.add_argument("--llm-base-url", default="http://127.0.0.1:1234") parser.add_argument("--temperature", type=float, default=0.0) parser.add_argument("--max-output-tokens", type=int, default=900) parser.add_argument("--timeout-sec", type=int, default=120) parser.add_argument("--strict-policy", default="route", choices=["semantic", "route", "factual"]) parser.add_argument( "--output-root", default=str(DEFAULT_OUTPUT_ROOT), help="Root where nightly bundle folder will be created.", ) parser.add_argument( "--nightly-run-id", default="", help="Optional nightly bundle id. Default: _Address_Nightly_Regression_