File size: 2,441 Bytes
c75f885
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python3
"""Run a customer prompt through the unified Kaiju harness router."""

from __future__ import annotations

import argparse
import os
import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))

from kaiju_harness.router import result_to_json, run_task


def main() -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--prompt", required=True)
    parser.add_argument("--out-dir", type=Path, default=Path.cwd() / "kaiju-runs")
    parser.add_argument("--repo", type=Path, default=None)
    parser.add_argument(
        "--kind",
        default="auto",
        choices=["auto", "website", "business_document", "business_suite", "app", "code_project", "repo_patch", "coding"],
    )
    parser.add_argument(
        "--openai-base-url",
        default=os.environ.get("KAIJU_OPENAI_BASE_URL"),
        help="Optional OpenAI-compatible endpoint for compact spec planning.",
    )
    parser.add_argument("--model", default=os.environ.get("KAIJU_MODEL"), help="Model name for OpenAI-compatible spec planning.")
    parser.add_argument("--api-key-env", default="KAIJU_EVAL_API_KEY")
    parser.add_argument("--planner-timeout", type=int, default=90)
    parser.add_argument("--no-planner", action="store_true", help="Skip model spec planning and use deterministic rendering.")
    parser.add_argument("--print-manifest", action="store_true")
    args = parser.parse_args()

    openai_base_url = None if args.no_planner else args.openai_base_url
    model = None if args.no_planner else args.model
    result = run_task(
        args.prompt,
        args.out_dir,
        repo=args.repo,
        kind=args.kind,
        openai_base_url=openai_base_url,
        model=model,
        api_key_env=args.api_key_env,
        planner_timeout=args.planner_timeout,
    )
    if args.print_manifest:
        print(result_to_json(result))
    if result.errors:
        raise SystemExit("; ".join(result.errors))
    print(f"Task type: {result.task_type}")
    print(f"Artifact type: {result.artifact_type}")
    print(f"Manifest: {result.manifest_path}")
    if result.artifact_path:
        print(f"Artifact: {result.artifact_path}")
    if result.project_dir:
        print(f"Project/repo: {result.project_dir}")
    print(f"Changed files: {len(result.changed_files)}")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())