Files
llm-wiki/scripts/deep-research/deep_research/__main__.py

44 lines
1.6 KiB
Python

"""CLI: python -m deep_research --backend {codex|antigravity} "<질문>" [--json]"""
import argparse
import asyncio
import shutil
import sys
from deep_research.config import DEFAULT
from deep_research.pipeline import run_research
from deep_research.report import to_markdown, to_json
def _make_backend(name: str):
if name == "codex":
if shutil.which("codex") is None:
sys.exit("error: `codex` CLI not found on PATH. Install + login (subscription).")
from deep_research.backends.codex import CodexBackend
return CodexBackend()
if name == "antigravity":
if shutil.which("agy") is None:
sys.exit("error: `agy` CLI not found on PATH. Install + login (subscription).")
from deep_research.backends.antigravity import AntigravityBackend
return AntigravityBackend(retries=DEFAULT.ANTIGRAVITY_RETRIES)
sys.exit(f"error: unknown backend '{name}'")
def main(argv=None):
ap = argparse.ArgumentParser(prog="deep-research")
ap.add_argument("question")
ap.add_argument("--backend", required=True, choices=["codex", "antigravity"])
ap.add_argument("--json", action="store_true", help="emit raw JSON instead of markdown")
ap.add_argument("--concurrency", type=int, default=DEFAULT.CONCURRENCY)
args = ap.parse_args(argv)
if args.concurrency < 1:
sys.exit("error: --concurrency must be >= 1")
backend = _make_backend(args.backend)
cfg = DEFAULT.__class__(CONCURRENCY=args.concurrency)
result = asyncio.run(run_research(args.question, backend, config=cfg))
print(to_json(result) if args.json else to_markdown(result))
if __name__ == "__main__":
main()