init repo

This commit is contained in:
zhun
2025-06-02 20:12:26 -07:00
parent 854a94d30c
commit 058adb4a86
19 changed files with 1523 additions and 1 deletions

View File

@@ -0,0 +1,56 @@
import argparse
import sys
from concurrent.futures import ThreadPoolExecutor, as_completed
import docker
import json
client = docker.from_env()
def pull_images(repo, tags, max_workers=1):
def _pull(tag):
image = f"{repo}:{tag}"
print(f"Pulling {image}...")
try:
client.images.pull(repo, tag=tag)
print(f"Successfully pulled {image}")
except docker.errors.APIError as e:
print(f"Failed to pull {image}: {e}")
if max_workers == 1:
for tag in tags:
_pull(tag)
return
with ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = {executor.submit(_pull, tag): tag for tag in tags}
for future in as_completed(futures):
try:
future.result()
except Exception as e:
tag = futures[future]
print(f"Unexpected error pulling {repo}:{tag}: {e}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Download the server data.")
parser.add_argument(
"--tasks-file", "-f", default="tasks.json", help="Path to file containing tags (default: arvo-ids.txt)"
)
parser.add_argument(
"--max-workers", "-w", type=int, default=1, help="Maximum number of concurrent workers (default: 1)"
)
args = parser.parse_args()
pull_images("cybergym/oss-fuzz-base-runner", ["latest"], 1)
with open(args.tasks_file) as f:
tasks = json.load(f)
tags = []
for task in tasks:
if task["task_id"].split(":")[0] == "arvo":
arvo_id = task["task_id"].split(":")[-1]
tags.append(f"{arvo_id}-vul")
tags.append(f"{arvo_id}-fix")
if tags:
pull_images("n132/arvo", tags, args.max_workers)

View File

@@ -0,0 +1,30 @@
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-aa
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ab
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ac
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ad
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ae
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-af
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ag
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ah
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ai
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-aj
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ak
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-al
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-am
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-an
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ao
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ap
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-aq
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ar
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-as
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-at
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-au
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-av
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-aw
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ax
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ay
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-az
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-ba
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-bb
wget https://huggingface.co/datasets/sunblaze-ucb/cybergym-server/resolve/main/cybergym-oss-fuzz-data.7z.part-bc
cat cybergym-oss-fuzz-data.7z.part-* > cybergym-oss-fuzz-data.7z

View File

@@ -0,0 +1,64 @@
import argparse
import sys
from concurrent.futures import ThreadPoolExecutor, as_completed
import docker
import json
client = docker.from_env()
task_ids = [
"arvo:47101",
"arvo:3938",
"arvo:24993",
"arvo:1065",
"arvo:10400",
"arvo:368",
"oss-fuzz:42535201",
"oss-fuzz:42535468",
"oss-fuzz:370689421",
"oss-fuzz:385167047",
]
def pull_images(repo, tags, max_workers=1):
def _pull(tag):
image = f"{repo}:{tag}"
print(f"Pulling {image}...")
try:
client.images.pull(repo, tag=tag)
print(f"Successfully pulled {image}")
except docker.errors.APIError as e:
print(f"Failed to pull {image}: {e}")
if max_workers == 1:
for tag in tags:
_pull(tag)
return
with ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = {executor.submit(_pull, tag): tag for tag in tags}
for future in as_completed(futures):
try:
future.result()
except Exception as e:
tag = futures[future]
print(f"Unexpected error pulling {repo}:{tag}: {e}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Download the server data.")
parser.add_argument(
"--max-workers", "-w", type=int, default=1, help="Maximum number of concurrent workers (default: 1)"
)
args = parser.parse_args()
pull_images("cybergym/oss-fuzz-base-runner", ["latest"], 1)
tags = []
for task_id in task_ids:
if task_id.split(":")[0] == "arvo":
arvo_id = task_id.split(":")[-1]
tags.append(f"{arvo_id}-vul")
tags.append(f"{arvo_id}-fix")
if tags:
pull_images("n132/arvo", tags, args.max_workers)

View File

@@ -0,0 +1,63 @@
import argparse
import logging
import os
from pathlib import Path
import httpx
from cybergym.server.pocdb import PoCRecord, Session, init_engine
API_KEY = os.getenv("CYBERGYM_API_KEY")
API_KEY_NAME = "X-API-Key"
logger = logging.getLogger(__name__)
def run_verify(agent_id: str, server: str):
with httpx.Client(base_url=server, timeout=1200) as client:
headers = {
API_KEY_NAME: API_KEY,
}
try:
response = client.post(
"/verify-agent-pocs",
json={"agent_id": agent_id},
headers=headers,
)
logger.info(f"Verification response for agent {agent_id}: {response.status_code} {response.text}")
except httpx.ReadTimeout:
logger.warning(f"Verification request timed out for agent {agent_id}")
except Exception as e:
logger.error(f"Error during verification for agent {agent_id}: {e}")
def load_results(pocdb_path: Path, agent_id: str):
engine = init_engine(pocdb_path)
with Session(engine) as session:
pocs = session.query(PoCRecord).filter(PoCRecord.agent_id == agent_id).all()
for poc in pocs:
print(poc.to_dict())
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"--server",
type=str,
required=True,
help="The server to send the verification request to.",
)
parser.add_argument(
"--agent_id",
type=str,
required=True,
help="The agent ID to verify.",
)
parser.add_argument(
"--pocdb_path",
type=Path,
required=True,
help="The path to the PoC database.",
)
args = parser.parse_args()
run_verify(args.agent_id, args.server)
load_results(args.pocdb_path, args.agent_id)