ba-agent-rl-env / server /dataset.py
naman-cen's picture
Upload folder using huggingface_hub
27d50c7 verified
Raw
History Blame Contribute Delete
3.56 kB
"""Dataset loader — pulls tasks from CentificAIResearch/BA-Agent-Bench HF dataset."""
from __future__ import annotations
import os
import random
from pathlib import Path
from typing import List, Optional
from ba_agent_env.models import GeneratedStory, InputDocument, TaskSample
_DATASET_ID = "CentificAIResearch/BA-Agent-Bench"
_CACHE_FILE = Path(__file__).resolve().parents[1] / "data" / "tasks_cache.parquet"
_TASKS: Optional[List[TaskSample]] = None
def _load_from_hf() -> List[TaskSample]:
"""Pull parquet from HF datasets and convert to TaskSample list."""
import pyarrow.parquet as pq
cache = _CACHE_FILE
cache.parent.mkdir(parents=True, exist_ok=True)
if not cache.exists():
from huggingface_hub import hf_hub_download
downloaded = hf_hub_download(
repo_id=_DATASET_ID,
filename="train.parquet",
repo_type="dataset",
local_dir=str(cache.parent),
)
if downloaded != str(cache):
try:
os.replace(downloaded, cache)
except Exception:
cache = Path(downloaded)
table = pq.read_table(str(cache))
rows = table.to_pylist()
tasks: List[TaskSample] = []
for r in rows:
docs = [
InputDocument(filename=d.get("filename", ""), content=d.get("content", ""))
for d in (r.get("input_documents") or [])
]
golden = [
GeneratedStory(
story_id=s.get("story_id"),
title=s.get("title", ""),
description=s.get("description", ""),
acceptance_criteria=s.get("acceptance_criteria", ""),
story_points=s.get("story_points"),
state=s.get("state"),
)
for s in (r.get("golden_stories") or [])
]
tasks.append(
TaskSample(
task_id=r.get("task_id", ""),
title=r.get("title", ""),
description=r.get("description", ""),
input_documents=docs,
golden_stories=golden,
)
)
return tasks
def get_tasks() -> List[TaskSample]:
global _TASKS
if _TASKS is None:
try:
_TASKS = _load_from_hf()
except Exception as exc:
print(f"[BAAgentEnv] Failed to load dataset: {exc}. Falling back to stub task.")
_TASKS = [
TaskSample(
task_id="STUB-001",
title="Stub feature (dataset unavailable)",
description="Replace with real task once HF dataset is reachable.",
input_documents=[
InputDocument(filename="stub.txt", content="Stub document content.")
],
golden_stories=[
GeneratedStory(
story_id="S-001",
title="Stub story",
description="As a stub user, I want a stub feature, so that I can stub.",
acceptance_criteria="Given stub, When stub, Then stub.",
)
],
)
]
return _TASKS
def sample_task(rng: Optional[random.Random] = None) -> TaskSample:
tasks = get_tasks()
rng = rng or random
return rng.choice(tasks)
def get_task_by_id(task_id: str) -> Optional[TaskSample]:
for t in get_tasks():
if t.task_id == task_id:
return t
return None