77 lines
2.2 KiB
Python
77 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
SRC_ROOT = REPO_ROOT / "src"
|
|
|
|
if str(SRC_ROOT) not in sys.path:
|
|
sys.path.insert(0, str(SRC_ROOT))
|
|
|
|
from summary_mcp.core.keyword_index import persist_keyword_indexes
|
|
from summary_mcp.models.openclaw_delivery import OpenClawDeliveryPayload
|
|
|
|
|
|
def _load_payload(path: Path) -> OpenClawDeliveryPayload:
|
|
return OpenClawDeliveryPayload.model_validate_json(path.read_text(encoding="utf-8-sig"))
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(
|
|
description="Build the daily keyword index and global keyword stats from an OpenClaw delivery payload."
|
|
)
|
|
parser.add_argument(
|
|
"--input",
|
|
type=Path,
|
|
required=True,
|
|
help="OpenClaw delivery payload JSON file",
|
|
)
|
|
parser.add_argument(
|
|
"--daily-dir",
|
|
type=Path,
|
|
default=REPO_ROOT / "data" / "term_index" / "daily",
|
|
help="Directory for daily keyword index files",
|
|
)
|
|
parser.add_argument(
|
|
"--stats-output",
|
|
type=Path,
|
|
default=REPO_ROOT / "data" / "term_index" / "term_stats.json",
|
|
help="Global keyword stats output path",
|
|
)
|
|
parser.add_argument(
|
|
"--aliases",
|
|
type=Path,
|
|
default=REPO_ROOT / "configs" / "term_aliases.json",
|
|
help="Keyword alias config JSON file",
|
|
)
|
|
parser.add_argument(
|
|
"--stopwords",
|
|
type=Path,
|
|
default=REPO_ROOT / "configs" / "term_stopwords.json",
|
|
help="Keyword stopwords config JSON file",
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
payload = _load_payload(args.input)
|
|
result = persist_keyword_indexes(
|
|
payload.candidates,
|
|
for_date=payload.date,
|
|
digest_id=payload.run_id,
|
|
source="openclaw_delivery_payload",
|
|
daily_dir=args.daily_dir,
|
|
stats_path=args.stats_output,
|
|
aliases_path=args.aliases,
|
|
stopwords_path=args.stopwords,
|
|
)
|
|
|
|
print(f"Saved daily keyword index to {result['daily_output']}")
|
|
print(f"Saved keyword stats to {result['stats_output']}")
|
|
print(f"Indexed {result['candidate_count']} candidates and {result['term_count']} keywords")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|