Deminiko
Initial commit: QuantumArchitect-MCP quantum circuit MCP server with Gradio UI
6ce350d
"""
Reference Tab for QuantumArchitect-MCP
"""
import gradio as gr
import json
# Import required components
from ..ui import (
mcp_get_gate_info,
mcp_get_algorithm_info,
)
def add_reference_tab():
"""Add the Reference tab to the Gradio interface."""
with gr.TabItem("📚 Reference", id="reference"):
gr.Markdown("### Explore quantum gates and algorithms")
with gr.Row():
with gr.Column():
with gr.Group():
gr.Markdown("#### 🔲 Gate Reference")
gr.Markdown("*Click a gate to learn more:*")
with gr.Row():
gate_btn_h = gr.Button("H", size="sm", elem_id="gate_btn_h")
gate_btn_x = gr.Button("X", size="sm", elem_id="gate_btn_x")
gate_btn_y = gr.Button("Y", size="sm", elem_id="gate_btn_y")
gate_btn_z = gr.Button("Z", size="sm", elem_id="gate_btn_z")
gate_btn_cx = gr.Button("CX", size="sm", elem_id="gate_btn_cx")
gate_btn_rx = gr.Button("RX", size="sm", elem_id="gate_btn_rx")
gate_input = gr.Textbox(
value="h",
label="Gate Name",
elem_id="gate_name_input",
placeholder="h, x, cx, rx, ...",
info="Enter gate name or click above"
)
gate_btn = gr.Button("🔍 Get Gate Info", variant="primary")
gate_output = gr.JSON(label="Gate Documentation", elem_id="gate_docs")
with gr.Column():
with gr.Group():
gr.Markdown("#### 🧮 Algorithm Reference")
gr.Markdown("*Click an algorithm to learn more:*")
with gr.Row():
algo_btn_bell = gr.Button("Bell State", size="sm", elem_id="algo_btn_bell_state")
algo_btn_qft = gr.Button("QFT", size="sm", elem_id="algo_btn_qft")
algo_btn_grover = gr.Button("Grover", size="sm", elem_id="algo_btn_grover")
algo_input = gr.Textbox(
value="bell_state",
label="Algorithm Name",
elem_id="algo_name_input",
placeholder="bell_state, qft, grover, ...",
info="Enter algorithm name or click above"
)
algo_btn = gr.Button("🔍 Get Algorithm Info", variant="primary")
algo_output = gr.JSON(label="Algorithm Documentation", elem_id="algo_docs")
# Connect gate buttons to auto-fill input and fetch info
def gate_click_handler(gate_name):
info = json.loads(mcp_get_gate_info(gate_name))
return gate_name, info
gate_btn_h.click(lambda: gate_click_handler("h"), outputs=[gate_input, gate_output])
gate_btn_x.click(lambda: gate_click_handler("x"), outputs=[gate_input, gate_output])
gate_btn_y.click(lambda: gate_click_handler("y"), outputs=[gate_input, gate_output])
gate_btn_z.click(lambda: gate_click_handler("z"), outputs=[gate_input, gate_output])
gate_btn_cx.click(lambda: gate_click_handler("cx"), outputs=[gate_input, gate_output])
gate_btn_rx.click(lambda: gate_click_handler("rx"), outputs=[gate_input, gate_output])
# Connect algorithm buttons to auto-fill input and fetch info
def algo_click_handler(algo_name):
info = json.loads(mcp_get_algorithm_info(algo_name))
return algo_name, info
algo_btn_bell.click(lambda: algo_click_handler("bell_state"), outputs=[algo_input, algo_output])
algo_btn_qft.click(lambda: algo_click_handler("qft"), outputs=[algo_input, algo_output])
algo_btn_grover.click(lambda: algo_click_handler("grover"), outputs=[algo_input, algo_output])
gate_btn.click(
lambda g: json.loads(mcp_get_gate_info(g)),
inputs=[gate_input],
outputs=[gate_output],
)
algo_btn.click(
lambda a: json.loads(mcp_get_algorithm_info(a)),
inputs=[algo_input],
outputs=[algo_output],
)