Spaces:
Sleeping
Sleeping
| # Path: QAgents-workflows/ui/quick_build.py | |
| # Relations: Uses client/mcp_client.py for circuit generation | |
| # Used by __init__.py, app.py | |
| # Description: Quick circuit builder UI components with improved error handling | |
| """ | |
| Quick Build Components: Fast circuit generation from templates. | |
| Provides: | |
| - Template selection dropdown | |
| - Qubit count slider | |
| - Circuit generation via MCP client with retry and fallback | |
| Note: First request may take longer if MCP server needs to wake up (cold start). | |
| """ | |
| import os | |
| import gradio as gr | |
| import logging | |
| from typing import Optional | |
| logger = logging.getLogger(__name__) | |
| # Default MCP Server URL | |
| MCP_SERVER_URL = os.environ.get( | |
| "MCP_SERVER_URL", | |
| "https://mcp-1st-birthday-quantumarchitect-mcp.hf.space" | |
| ) | |
| # Available templates | |
| CIRCUIT_TEMPLATES = [ | |
| "bell_state", | |
| "ghz_state", | |
| "qft", | |
| "grover", | |
| "superposition", | |
| ] | |
| def quick_build_circuit(template: str, num_qubits: int, server_url: Optional[str] = None) -> str: | |
| """ | |
| Generate a circuit from template using MCP client. | |
| Args: | |
| template: Template name (bell_state, ghz_state, etc.) | |
| num_qubits: Number of qubits | |
| server_url: MCP server URL (uses default if not provided) | |
| Returns: | |
| QASM code or error message | |
| """ | |
| url = server_url or MCP_SERVER_URL | |
| try: | |
| from client.mcp_client import get_client | |
| mcp_client = get_client(url) | |
| result = mcp_client.create_circuit_from_template(template, int(num_qubits)) | |
| if result.success and result.data: | |
| if isinstance(result.data, dict) and 'qasm' in result.data: | |
| return result.data['qasm'] | |
| return str(result.data) | |
| return f"# Error: {result.error or 'Unknown error'}" | |
| except Exception as e: | |
| logger.error(f"Quick build error: {e}") | |
| return f"# Error: {str(e)}" | |
| def create_quick_build_tab(server_url: Optional[str] = None) -> gr.Code: | |
| """ | |
| Create the Quick Build tab components. | |
| Args: | |
| server_url: MCP server URL (uses default if not provided) | |
| Returns: | |
| QASM output Code component | |
| """ | |
| url = server_url or MCP_SERVER_URL | |
| gr.Markdown(""" | |
| ## 🛠️ Quick Circuit Builder | |
| Generate circuits directly from templates. | |
| """) | |
| with gr.Row(): | |
| with gr.Column(): | |
| template_select = gr.Dropdown( | |
| choices=CIRCUIT_TEMPLATES, | |
| value="bell_state", | |
| label="Circuit Template" | |
| ) | |
| qubits_slider = gr.Slider( | |
| minimum=2, | |
| maximum=8, | |
| value=2, | |
| step=1, | |
| label="Number of Qubits" | |
| ) | |
| build_btn = gr.Button("⚡ Generate Circuit", variant="primary") | |
| with gr.Column(): | |
| qasm_output = gr.Code( | |
| label="Generated QASM", | |
| language="python", | |
| lines=15 | |
| ) | |
| # Event handler | |
| def build_handler(template: str, num_qubits: int) -> str: | |
| return quick_build_circuit(template, num_qubits, url) | |
| build_btn.click(build_handler, [template_select, qubits_slider], [qasm_output]) | |
| return qasm_output | |