Repository navigation
Expand file tree
/
Copy pathprompt.py
More file actions
94 lines (69 loc) · 2.88 KB
/
Copy pathprompt.py
File metadata and controls
94 lines (69 loc) · 2.88 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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import argparse
import sys
from dataclasses import dataclass
from pathlib import Path
from typing import Iterable
PROMPTS_DIR = Path(__file__).resolve().parent / "prompts"
@dataclass(frozen=True)
class PromptAsset:
name: str
path: Path
description: str
PROMPT_ASSETS = {
"system_base": PromptAsset(
name="system_base",
path=PROMPTS_DIR / "system_base.md",
description="Base general-purpose system prompt for the harness.",
),
}
def _read_prompt_asset(asset: PromptAsset) -> str:
return asset.path.read_text(encoding="utf-8").strip()
SYSTEM_PROMPT = _read_prompt_asset(PROMPT_ASSETS["system_base"])
def _normalize_extra_blocks(blocks: Iterable[str] | None) -> list[str]:
normalized: list[str] = []
for raw_block in blocks or []:
block = str(raw_block or "").strip()
if block:
normalized.append(block)
return normalized
def composed_system_prompt(*, current_date: str, extra_blocks: Iterable[str] | None = None) -> str:
blocks = [SYSTEM_PROMPT.rstrip()]
for block in _normalize_extra_blocks(extra_blocks):
blocks.append(block.rstrip())
blocks.append(f"Current date: {current_date}")
return "\n\n".join(blocks)
def _show_asset(name: str) -> str:
asset = PROMPT_ASSETS.get(name)
if asset is None:
valid = ", ".join(sorted(PROMPT_ASSETS))
raise ValueError(f"Unknown prompt asset '{name}'. Available assets: {valid}")
return _read_prompt_asset(asset)
def main(argv: list[str] | None = None) -> int:
parser = argparse.ArgumentParser(description="Inspect prompt assets.")
parser.add_argument("--show-system", action="store_true", help="Print the composed system prompt.")
parser.add_argument("--show-asset", metavar="NAME", help="Print one prompt asset by name.")
parser.add_argument("--list-assets", action="store_true", help="List registered prompt assets.")
parser.add_argument(
"--with-extra-file",
action="append",
default=[],
dest="extra_files",
help="Append one extra prompt block file when printing the composed system prompt. May be passed multiple times.",
)
args = parser.parse_args(argv)
extra_blocks = [Path(path).read_text(encoding="utf-8") for path in args.extra_files]
if args.list_assets:
for asset in sorted(PROMPT_ASSETS.values(), key=lambda item: item.name):
print(f"{asset.name}: {asset.description}")
return 0
if args.show_asset:
print(_show_asset(args.show_asset))
return 0
if args.show_system:
print(composed_system_prompt(current_date="<DATE>", extra_blocks=extra_blocks))
return 0
print(f"prompt_asset_dir={PROMPTS_DIR}")
print(f"system_prompt_chars={len(composed_system_prompt(current_date='<DATE>', extra_blocks=extra_blocks))}")
return 0
if __name__ == "__main__":
raise SystemExit(main(sys.argv[1:]))