#!/usr/bin/env python3 """Standalone agentic coding tool for OpenAI-compatible endpoints.""" from __future__ import annotations import argparse import os import subprocess import sys from openai import OpenAI from agent_core import coding_task_message, openai_generate_fn, run_episode def run_bash(cmd: str, timeout_s: int = 30) -> str: cp = subprocess.run( cmd, shell=True, text=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, timeout=timeout_s, ) out = cp.stdout[-12000:] return f"Exit code: {cp.returncode}\n{out}" def main() -> int: ap = argparse.ArgumentParser() ap.add_argument("--base-url", default=os.environ.get("OPENAI_BASE_URL", "http://127.0.0.1:8000/v1")) ap.add_argument("--model", default=os.environ.get("MODEL", "bk1dr/qwen3-8b-code-pkpo")) ap.add_argument("--api-key", default=os.environ.get("OPENAI_API_KEY", "EMPTY")) ap.add_argument("--max-turns", type=int, default=1, help="One-turn deployment default used for training and evaluation.") ap.add_argument("--cp", action="store_true", help="Wrap stdin as a competitive-programming task.") ap.add_argument("--starter-code", default="") args = ap.parse_args() prompt = sys.stdin.read() if args.cp: first = coding_task_message(prompt, starter_code=args.starter_code, max_turns=args.max_turns) else: first = prompt client = OpenAI(base_url=args.base_url, api_key=args.api_key) generate = openai_generate_fn(client, args.model) ep = run_episode(generate, run_bash, first, max_turns=args.max_turns) if ep.final_answer is not None: print(ep.final_answer) else: print(f"Episode ended without final answer: {ep.end_reason}", file=sys.stderr) return 2 return 0 if __name__ == "__main__": raise SystemExit(main())