finqa_env / server /app.py
Xxa1's picture
Upload folder using huggingface_hub
079ae3a verified
# envs/finqa_env/server/app.py
"""
FastAPI server for the FinQA environment.
Environment Variables:
FINQA_DATA_PATH: Path to data directory (default: /app/env/data)
FINQA_MAX_STEPS: Maximum tool calls per episode (default: 50)
FINQA_TASK: Task name (default: finqa)
"""
import json
import os
from typing import Any, Dict
from openenv.core.env_server.http_server import create_app
from openenv.core.env_server.mcp_types import CallToolAction, CallToolObservation
from pydantic import field_validator
from .finqa_environment import FinQAEnvironment
DATA_PATH = os.environ.get("FINQA_DATA_PATH", "/app/env/data")
MAX_STEPS = int(os.environ.get("FINQA_MAX_STEPS", "50"))
TASK = os.environ.get("FINQA_TASK", "finqa")
def _env_factory():
"""Create a new FinQAEnvironment instance for each session."""
return FinQAEnvironment(
data_path=DATA_PATH,
max_steps=MAX_STEPS,
task=TASK,
)
class FinQACallToolAction(CallToolAction):
"""CallToolAction that accepts JSON strings for arguments (web UI sends strings)."""
@field_validator("arguments", mode="before")
@classmethod
def parse_arguments(cls, v: Any) -> Dict[str, Any]:
if isinstance(v, str):
return json.loads(v)
return v
app = create_app(
_env_factory, FinQACallToolAction, CallToolObservation, env_name="finqa_env"
)