souller's picture
Update server/app.py
68ec6bb verified
Raw
History Blame Contribute Delete
1.93 kB
try:
from openenv.core.env_server.http_server import create_app
except Exception as e:
raise ImportError("openenv is required") from e
try:
from ..models import MyAction, MyObservation
from .my_env_environment import MyEnvironment
except Exception:
from models import MyAction, MyObservation
from server.my_env_environment import MyEnvironment
from grader import grade
from fastapi import Request
app = create_app(
MyEnvironment,
MyAction,
MyObservation,
env_name="my_env",
max_concurrent_envs=1,
)
@app.get("/health", tags=["meta"])
def health():
"""Liveness probe — returns 200 when server is ready."""
return {"status": "ok"}
@app.get("/tasks", tags=["meta"])
def get_tasks():
"""List all available tasks with difficulty levels."""
return {
"tasks": [
{"id": "email-classification", "description": "Classify email intent only", "difficulty": "easy", "reward_range": [0.01, 0.99]},
{"id": "urgency-detection", "description": "Classify + summarize + reply", "difficulty": "medium", "reward_range": [0.01, 0.99]},
{"id": "spam-filtering", "description": "Classify + department + summarize + reply", "difficulty": "hard", "reward_range": [0.01, 0.99]}
]
}
@app.post("/grader", tags=["meta"])
async def run_grader(request: Request):
"""Grade a specific action against ground truth."""
data = await request.json()
task_id = data.get("task_id", "email-classification")
action_data = data.get("action", {})
ground_truth = data.get("ground_truth", {"label": "work"})
action = MyAction(**action_data)
reward, feedback = grade(task_id, {}, action, ground_truth)
return {"task_id": task_id, "reward": reward, "feedback": feedback}
def main(host: str = "0.0.0.0", port: int = 7860):
import uvicorn
uvicorn.run(app, host=host, port=port)
if __name__ == "__main__":
main()