-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathextract_run_payloads.py
More file actions
59 lines (47 loc) · 2.09 KB
/
Copy pathextract_run_payloads.py
File metadata and controls
59 lines (47 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/env python3
"""Extract JSON payloads and citation blocks from DeepSearch runs."""
from __future__ import annotations
import argparse
import json
import re
from pathlib import Path
from .process_deepsearch import parse_run
from .project_paths import add_project_argument, resolve_paths
def extract_citations(text: str) -> list[dict]:
citations: list[dict] = []
pattern = re.compile(r"^\[\^([^\]]+)\]:\s*(\S+)", re.MULTILINE)
for match in pattern.finditer(text):
citations.append({"ref_id": match.group(1), "url": match.group(2)})
return citations
def main(argv: list[str] | None = None) -> None:
parser = argparse.ArgumentParser(description="Extract DeepSearch payloads and citation footnotes for a project.")
add_project_argument(parser)
args = parser.parse_args(argv)
paths = resolve_paths(args.project)
paths.ensure_output_dirs()
data_dir = paths.data_dir
payload_dir = data_dir / "run_payloads"
citation_dir = data_dir / "run_citations"
payload_dir.mkdir(parents=True, exist_ok=True)
citation_dir.mkdir(parents=True, exist_ok=True)
for folder in sorted(paths.deepsearch_dir.iterdir()):
if not folder.is_dir():
continue
for run_file in sorted(folder.glob("run_*.md")):
run_name = run_file.stem # run_1 etc.
text = run_file.read_text()
payload = parse_run(run_file)
rel_folder = payload_dir / folder.name
rel_folder.mkdir(parents=True, exist_ok=True)
payload_path = rel_folder / f"{run_name}.json"
payload_path.write_text(json.dumps(payload, indent=2))
citations = extract_citations(text)
cite_folder = citation_dir / folder.name
cite_folder.mkdir(parents=True, exist_ok=True)
citation_path = cite_folder / f"{run_name}_citations.json"
citation_path.write_text(json.dumps(citations, indent=2))
print(
f"Extracted {folder.name}/{run_name}: payload -> {payload_path}, citations -> {citation_path}"
)
if __name__ == "__main__":
main()