Spaces:
Sleeping
Sleeping
| import os | |
| import subprocess | |
| from fastapi import FastAPI, Request | |
| from fastapi.responses import JSONResponse | |
| import gradio as gr | |
| app = FastAPI() | |
| # -------------------------- | |
| # API Endpoints (For OpenEnv Validation) | |
| # -------------------------- | |
| async def reset_env(request: Request): | |
| """ | |
| Required per validate-submission.sh script. | |
| Checks that the HF space is live and responds to reset requests. | |
| """ | |
| return JSONResponse(content={"status": "reset done", "message": "Environment successfully reset."}) | |
| def health(): | |
| return {"status": "ok"} | |
| # -------------------------- | |
| # UI / Frontend Execution (Gradio) | |
| # -------------------------- | |
| def run_agent_inference(selected_env: str): | |
| """ | |
| Runs the inference.py script in a subprocess and yields stdout line-by-line | |
| to stream it into a Gradio textbox. This gives a highly professional visual | |
| feedback loop for the user watching the agent. | |
| """ | |
| command = ["python", "-u", "inference.py"] | |
| # Pass the selected environment benchmark into the inference script | |
| test_env = os.environ.copy() | |
| test_env["MY_ENV_V4_BENCHMARK"] = selected_env | |
| combined_output = f"Starting the Meta_com Auto-Agent...\n" | |
| combined_output += f"Target Benchmark: {selected_env}\n" | |
| combined_output += "Initializing Docker Environment and OpenEnv Subsystems...\n\n" | |
| yield combined_output | |
| process = subprocess.Popen( | |
| command, | |
| env=test_env, | |
| stdout=subprocess.PIPE, | |
| stderr=subprocess.STDOUT, | |
| text=True, | |
| bufsize=1 # line buffered | |
| ) | |
| for line in iter(process.stdout.readline, ''): | |
| combined_output += line | |
| yield combined_output | |
| process.stdout.close() | |
| return_code = process.wait() | |
| if return_code != 0: | |
| combined_output += f"\n\n[ERROR] Inference script failed with return code {return_code}" | |
| else: | |
| combined_output += "\n\nโ Episode Complete: Inference Script Finished Successfully." | |
| yield combined_output | |
| # Create professional Gradio interface layout | |
| with gr.Blocks() as ui: | |
| gr.Markdown("# ๐ค Meta_com: OpenEnv Autonomous Git Agent") | |
| gr.Markdown( | |
| """ | |
| Welcome to the **Meta_com OpenEnv Test Verification Interface**. | |
| This space exposes our autonomous RL agent evaluation pipeline. The agent resolves cross-file Git Merge Conflicts autonomously using robust AI pipelines. | |
| - ๐ข **API Active:** The `/reset` endpoint is live and fully compatible with `validate-submission.sh`. | |
| - ๐น๏ธ **Test Runtime:** You can manually trigger an inference simulation below. | |
| """ | |
| ) | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| gr.Markdown("### Controls") | |
| env_dropdown = gr.Dropdown( | |
| choices=[ | |
| "my_env_v4", | |
| "git_conflict_trivial", | |
| "git_conflict_multifile", | |
| "git_conflict_semantic", | |
| ], | |
| value="my_env_v4", | |
| label="Target Environment / Benchmark" | |
| ) | |
| start_button = gr.Button("๐ Run OpenEnv API Inference Test", variant="primary") | |
| gr.Markdown( | |
| """ | |
| **Under the Hood:** | |
| 1. Instantiates `MyEnvV4Env` architecture. | |
| 2. Connects to the Inference Agent API. | |
| 3. The agent receives observations, formulates actions, and earns dense rewards. | |
| 4. Validated using strict `[START]`, `[STEP]`, and `[END]` stdio logging structure. | |
| """ | |
| ) | |
| with gr.Column(scale=2): | |
| gr.Markdown("### Evaluation Terminal Log") | |
| terminal_out = gr.TextArea( | |
| label="Environment stdout Logging Streams", | |
| interactive=False, | |
| lines=20, | |
| max_lines=30 | |
| ) | |
| start_button.click( | |
| fn=run_agent_inference, | |
| inputs=[env_dropdown], | |
| outputs=[terminal_out] | |
| ) | |
| # Mount the Gradio app to FastAPI | |
| app = gr.mount_gradio_app(app, ui, path="/") | |
| def main(): | |
| import uvicorn | |
| uvicorn.run("server.app:app", host="0.0.0.0", port=7860) | |
| if __name__ == "__main__": | |
| main() | |