Spaces:
Running
Running
File size: 2,948 Bytes
f209a8f | 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 95 | 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:]))
|