Spaces:
Sleeping
Sleeping
| """OpenEnv FastAPI server: full HTTPEnvServer + task/grader discovery routes.""" | |
| from __future__ import annotations | |
| import os | |
| from typing import Optional | |
| import uvicorn | |
| from openenv.core.env_server import create_fastapi_app | |
| from env.cache_environment import CacheInvalidationEnvironment | |
| from env.models import CacheAction, CacheObservation | |
| from env.task_graders import TASK_AGENT_GRADERS | |
| from env.tasks import TASK_MANIFEST, list_graders | |
| _singleton: CacheInvalidationEnvironment | None = None | |
| def _env_factory() -> CacheInvalidationEnvironment: | |
| global _singleton | |
| if _singleton is None: | |
| _singleton = CacheInvalidationEnvironment() | |
| return _singleton | |
| app = create_fastapi_app( | |
| _env_factory, | |
| CacheAction, | |
| CacheObservation, | |
| max_concurrent_envs=1, | |
| ) | |
| def http_list_tasks(): | |
| return { | |
| "tasks": TASK_MANIFEST, | |
| "graders": list_graders(), | |
| "grader_registry": { | |
| name: { | |
| "enabled": True, | |
| "qualified_name": f"{fn.__module__}:{fn.__name__}", | |
| } | |
| for name, fn in TASK_AGENT_GRADERS.items() | |
| }, | |
| } | |
| def main(host: Optional[str] = None, port: Optional[int] = None) -> None: | |
| host = host or os.environ.get("HOST", "0.0.0.0") | |
| port = int(port or os.environ.get("PORT", "7860")) | |
| uvicorn.run(app, host=host, port=port) | |
| if __name__ == "__main__": | |
| main() | |