Initial vLLM agent strategy
This commit is contained in:
91
scripts/agent_platform_api.py
Normal file
91
scripts/agent_platform_api.py
Normal file
@@ -0,0 +1,91 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
from typing import Any
|
||||
|
||||
import requests
|
||||
|
||||
BASE_URL = "https://modelhub.org.cn/agent_platform"
|
||||
|
||||
|
||||
def get_token(args) -> str:
|
||||
token = args.token or os.getenv("AGENT_PLATFORM_TOKEN") or os.getenv("AUTH_TOKEN")
|
||||
if not token:
|
||||
raise SystemExit("Missing token. Use --token, AGENT_PLATFORM_TOKEN, or AUTH_TOKEN.")
|
||||
return token
|
||||
|
||||
|
||||
def request(method: str, path: str, token: str, **kwargs) -> Any:
|
||||
url = BASE_URL.rstrip("/") + path
|
||||
headers = kwargs.pop("headers", {})
|
||||
headers["Authorization"] = f"Bearer {token}"
|
||||
if "json" in kwargs:
|
||||
headers["Content-Type"] = "application/json"
|
||||
resp = requests.request(method, url, headers=headers, timeout=60, **kwargs)
|
||||
if resp.status_code == 204:
|
||||
return {"status": 204, "message": "no content"}
|
||||
try:
|
||||
body = resp.json()
|
||||
except Exception:
|
||||
body = {"status_code": resp.status_code, "text": resp.text}
|
||||
if resp.status_code >= 400:
|
||||
raise SystemExit(json.dumps(body, ensure_ascii=False, indent=2))
|
||||
return body
|
||||
|
||||
|
||||
def print_json(data: Any) -> None:
|
||||
print(json.dumps(data, ensure_ascii=False, indent=2))
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Agent platform API helper")
|
||||
parser.add_argument("--token", default="", help="Bearer token; defaults to AGENT_PLATFORM_TOKEN or AUTH_TOKEN")
|
||||
sub = parser.add_subparsers(dest="cmd", required=True)
|
||||
|
||||
sub.add_parser("me")
|
||||
sub.add_parser("list")
|
||||
|
||||
create = sub.add_parser("create")
|
||||
create.add_argument("--name", required=True)
|
||||
create.add_argument("--repo-url", required=True)
|
||||
create.add_argument("--tag", required=True)
|
||||
|
||||
for name in ["get", "sync", "deploy", "logs", "stop", "delete"]:
|
||||
p = sub.add_parser(name)
|
||||
p.add_argument("--strategy-id", required=True)
|
||||
if name == "logs":
|
||||
p.add_argument("--limit", type=int, default=100)
|
||||
|
||||
args = parser.parse_args()
|
||||
token = get_token(args)
|
||||
|
||||
if args.cmd == "me":
|
||||
print_json(request("GET", "/auth/me", token))
|
||||
elif args.cmd == "list":
|
||||
print_json(request("GET", "/strategies", token))
|
||||
elif args.cmd == "create":
|
||||
body = {"name": args.name, "repo_url": args.repo_url, "tag": args.tag}
|
||||
data = request("POST", "/strategies", token, json=body)
|
||||
print_json(data)
|
||||
strategy_id = data.get("id")
|
||||
if strategy_id:
|
||||
print(f"\nSTRATEGY_ID={strategy_id}", file=sys.stderr)
|
||||
elif args.cmd == "get":
|
||||
print_json(request("GET", f"/strategies/{args.strategy_id}", token))
|
||||
elif args.cmd == "sync":
|
||||
print_json(request("POST", f"/strategies/{args.strategy_id}/sync", token))
|
||||
elif args.cmd == "deploy":
|
||||
print_json(request("POST", f"/strategies/{args.strategy_id}/deploy", token))
|
||||
elif args.cmd == "logs":
|
||||
print_json(request("GET", f"/strategies/{args.strategy_id}/logs", token, params={"limit": args.limit}))
|
||||
elif args.cmd == "stop":
|
||||
print_json(request("POST", f"/strategies/{args.strategy_id}/stop", token))
|
||||
elif args.cmd == "delete":
|
||||
print_json(request("DELETE", f"/strategies/{args.strategy_id}", token))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user