CoolFace
Apppublic

ahagestedt/quickbooks-qa

sourceHugging Facemitupdated 7mo agoView on Hugging Face
0likes
data_loader.py61 linesDownload Raw Back to rl_qa_base
1"""2Loads environment definitions from a bundled JSON file.3 4Each software environment ships with a data/environments.json containing5all workflow tasks for that product.6"""7 8from __future__ import annotations9 10import json11from pathlib import Path12from typing import Any13 14 15def load_environments(data_path: str | Path) -> list[dict[str, Any]]:16    """Load environment definitions from a JSON file.17 18    Args:19        data_path: Path to environments.json file.20 21    Returns:22        List of environment definition dicts, each with keys:23        env_id, software, workflow, api_endpoint, expected_outcome, synthetic_data_prompt24    """25    path = Path(data_path)26    if not path.exists():27        raise FileNotFoundError(f"Environment data not found: {path}")28 29    data = json.loads(path.read_text(encoding="utf-8"))30 31    # The JSON file has a top-level structure with "environments" key32    if isinstance(data, dict) and "environments" in data:33        return data["environments"]34 35    # Or it might be a raw list36    if isinstance(data, list):37        return data38 39    raise ValueError(f"Unexpected data format in {path}")40 41 42def get_software_metadata(data_path: str | Path) -> dict[str, Any]:43    """Get software-level metadata from the JSON file.44 45    Returns dict with: software_name, slug, api_type, api_docs_url, area, environment_count46    """47    path = Path(data_path)48    data = json.loads(path.read_text(encoding="utf-8"))49 50    if isinstance(data, dict):51        return {52            "software_name": data.get("software_name", "Unknown"),53            "slug": data.get("slug", "unknown"),54            "api_type": data.get("api_type", "REST"),55            "api_docs_url": data.get("api_docs_url", ""),56            "area": data.get("area", "Unknown"),57            "environment_count": data.get("environment_count", 0),58        }59 60    return {"software_name": "Unknown", "environment_count": len(data) if isinstance(data, list) else 0}61