Files
qwen3-8b-code-pkpo/shipped_tool.py
ModelHub XC 8060a07a88 初始化项目,由ModelHub XC社区提供模型
Model: bk1dr/qwen3-8b-code-pkpo
Source: Original Platform
2026-07-30 09:33:20 +08:00

58 lines
1.8 KiB
Python

#!/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())