Spaces:
Running
Running
| import gradio as gr | |
| from fastapi import FastAPI | |
| from CriticalThinking.app.main import app as fastapi_app | |
| # The FastAPI app is already initialized in CriticalThinking.app.main | |
| # We can just mount it or use it as the main app. | |
| # Here we will mount Gradio onto the existing FastAPI app. | |
| import httpx | |
| def analyze_interface(repo_url, project_description): | |
| if not repo_url and not project_description: | |
| return "Please provide at least a project description." | |
| try: | |
| # Call the local FastAPI endpoint | |
| with httpx.Client() as client: | |
| response = client.post( | |
| "http://localhost:7860/analyze", | |
| json={ | |
| "repo_url": repo_url if repo_url else None, | |
| "project_description": project_description | |
| }, | |
| timeout=10.0 | |
| ) | |
| response.raise_for_status() | |
| data = response.json() | |
| task_id = data.get("task_id") | |
| return f"Analysis started! Task ID: {task_id}\n\nYou can check the report at: /report/{task_id}" | |
| except Exception as e: | |
| return f"Error starting analysis: {str(e)}" | |
| def get_report_interface(task_id): | |
| if not task_id: | |
| return "Please provide a Task ID." | |
| try: | |
| with httpx.Client() as client: | |
| response = client.get(f"http://localhost:7860/report/{task_id}") | |
| response.raise_for_status() | |
| return response.json() | |
| except Exception as e: | |
| return f"Error fetching report: {str(e)}" | |
| with gr.Blocks(title="Critical Code Agent") as demo: | |
| gr.Markdown("# 🦀 Critical Code Agent") | |
| gr.Markdown("Autonomous agent system for deep architectural analysis and software weakness identification.") | |
| with gr.Row(): | |
| repo_url = gr.Textbox(label="Repository URL (Optional)", placeholder="https://github.com/username/repo") | |
| project_desc = gr.Textbox(label="Project Description", placeholder="Brief description of the project") | |
| analyze_btn = gr.Button("Analyze Repository", variant="primary") | |
| output = gr.Textbox(label="Status") | |
| analyze_btn.click(analyze_interface, inputs=[repo_url, project_desc], outputs=output) | |
| gr.Markdown("### Check Report Status") | |
| with gr.Row(): | |
| task_id_input = gr.Textbox(label="Task ID") | |
| report_btn = gr.Button("Get Report") | |
| report_output = gr.JSON(label="Analysis Report") | |
| report_btn.click(get_report_interface, inputs=[task_id_input], outputs=report_output) | |
| gr.Markdown("### API Endpoints") | |
| gr.Markdown("- `POST /analyze`: Submit a repository for analysis") | |
| gr.Markdown("- `GET /report/{task_id}`: Retrieve analysis report") | |
| gr.Markdown("- `GET /health`: Check service health") | |
| # Mount Gradio to the FastAPI app | |
| app = gr.mount_gradio_app(fastapi_app, demo, path="/") | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=7860) | |