Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI, HTTPException | |
| from pydantic import BaseModel | |
| from env.environment import SupportTicketEnv | |
| from env.models import Action | |
| from typing import Dict, Optional | |
| from uuid import uuid4 | |
| app = FastAPI(title="OpenEnv Support Ticket API") | |
| # Store sessions keyed by UUID to allow concurrent sessions | |
| SESSIONS: Dict[str, SupportTicketEnv] = {} | |
| class InitRequest(BaseModel): | |
| task_id: str = "task_easy_1" | |
| class StepRequest(BaseModel): | |
| session_id: str | |
| action: Action | |
| def read_root(): | |
| return {"status": "ok", "message": "Support Ticket OpenEnv is live."} | |
| def reset_env(req: Optional[InitRequest] = None): | |
| if req is None: | |
| req = InitRequest() | |
| try: | |
| env = SupportTicketEnv(task_id=req.task_id) | |
| obs = env.reset() | |
| session_id = str(uuid4()) | |
| SESSIONS[session_id] = env | |
| return {"session_id": session_id, "observation": obs.model_dump()} | |
| except ValueError as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| def step_env(req: StepRequest): | |
| env = SESSIONS.get(req.session_id) | |
| if not env: | |
| raise HTTPException(status_code=400, detail="Invalid or expired session_id. Call /reset to create a session.") | |
| obs, reward, done, info = env.step(req.action) | |
| return { | |
| "observation": obs.model_dump(), | |
| "reward": reward, | |
| "done": done, | |
| "info": info | |
| } | |
| def state_env(session_id: str): | |
| env = SESSIONS.get(session_id) | |
| if not env: | |
| raise HTTPException(status_code=400, detail="Invalid or expired session_id. Call /reset to create a session.") | |
| return env.get_state().model_dump() | |
| def main(): | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=7860) | |
| if __name__ == "__main__": | |
| main() | |