File size: 9,495 Bytes
6ce350d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
"""
MCP Server Schemas - JSON schemas defining input/output formats for circuits.
Ensures the Agent sends valid structured data.
"""

from typing import Any
from pydantic import BaseModel, Field


class GateSchema(BaseModel):
    """Schema for a quantum gate."""
    name: str = Field(..., description="Gate name (e.g., 'h', 'cx', 'rx')")
    qubits: list[int] = Field(..., description="Target qubit indices")
    params: list[float] = Field(default_factory=list, description="Gate parameters")
    classical_bits: list[int] = Field(default_factory=list, description="Classical bits for measurement")


class CircuitSchema(BaseModel):
    """Schema for a quantum circuit."""
    name: str = Field(default="", description="Circuit name")
    num_qubits: int = Field(..., ge=1, le=1000, description="Number of qubits")
    num_classical_bits: int = Field(default=0, ge=0, description="Number of classical bits")
    gates: list[GateSchema] = Field(default_factory=list, description="List of gates")
    parameters: list[str] = Field(default_factory=list, description="Parameter names for variational circuits")
    
    def to_dict(self) -> dict[str, Any]:
        """Convert to dictionary format used by plugins."""
        return {
            "name": self.name,
            "num_qubits": self.num_qubits,
            "num_classical_bits": self.num_classical_bits,
            "gates": [g.model_dump() for g in self.gates],
            "parameters": self.parameters,
        }


class QASMInput(BaseModel):
    """Schema for QASM input."""
    qasm_string: str = Field(..., description="OpenQASM 2.0 or 3.0 code")


class HardwareTarget(BaseModel):
    """Schema for hardware target specification."""
    hardware_name: str = Field(..., description="Hardware profile name (e.g., 'ibm_brisbane')")


class SimulationRequest(BaseModel):
    """Schema for simulation request."""
    circuit: CircuitSchema
    shots: int = Field(default=1024, ge=1, le=1000000, description="Number of shots")
    seed: int | None = Field(default=None, description="Random seed for reproducibility")


class ValidationResult(BaseModel):
    """Schema for validation result."""
    valid: bool
    errors: list[str] = Field(default_factory=list)
    warnings: list[str] = Field(default_factory=list)
    summary: str = ""


class CreationRequest(BaseModel):
    """Schema for circuit creation request."""
    circuit_type: str = Field(..., description="Type of circuit to create")
    num_qubits: int = Field(default=2, ge=1, le=100)
    options: dict[str, Any] = Field(default_factory=dict, description="Additional options")


class ScoringResult(BaseModel):
    """Schema for scoring result."""
    score: float = Field(..., ge=0, le=10)
    grade: str = ""
    details: dict[str, Any] = Field(default_factory=dict)
    recommendations: list[str] = Field(default_factory=list)


class ValidationResponse(BaseModel):
    """Schema for validation response."""
    valid: bool = Field(..., description="Whether the circuit is valid")
    checks: dict[str, Any] = Field(default_factory=dict, description="Individual check results")
    errors: list[str] = Field(default_factory=list, description="List of validation errors")
    warnings: list[str] = Field(default_factory=list, description="List of warnings")
    circuit_info: dict[str, Any] = Field(default_factory=dict, description="Circuit metadata")


class SimulationResponse(BaseModel):
    """Schema for simulation response."""
    success: bool = Field(..., description="Whether simulation succeeded")
    num_qubits: int = Field(default=0, description="Number of qubits simulated")
    statevector: dict[str, Any] | None = Field(default=None, description="Statevector result")
    counts: dict[str, int] = Field(default_factory=dict, description="Measurement counts")
    probabilities: dict[str, float] = Field(default_factory=dict, description="State probabilities")
    noise_estimate: dict[str, Any] | None = Field(default=None, description="Noise estimation")
    estimated_fidelity: float | None = Field(default=None, description="Estimated fidelity")
    resources: dict[str, Any] = Field(default_factory=dict, description="Resource estimation")
    error: str | None = Field(default=None, description="Error message if failed")


class ScoreResponse(BaseModel):
    """Schema for scoring response."""
    success: bool = Field(..., description="Whether scoring succeeded")
    complexity: dict[str, Any] = Field(default_factory=dict, description="Complexity metrics")
    hardware_fitness: dict[str, Any] | None = Field(default=None, description="Hardware fitness score")
    estimated_fidelity: float | None = Field(default=None, description="Estimated fidelity")
    overall_score: float = Field(default=0.0, ge=0.0, le=1.0, description="Overall normalized score")
    error: str | None = Field(default=None, description="Error message if failed")


# MCP Tool definitions for Gradio
MCP_TOOLS = {
    "create_bell_state": {
        "description": "Create a Bell state (maximally entangled 2-qubit state)",
        "parameters": {
            "variant": {
                "type": "integer",
                "description": "Bell state variant (0-3): 0=Φ+, 1=Φ-, 2=Ψ+, 3=Ψ-",
                "default": 0,
            }
        },
    },
    "create_ghz_state": {
        "description": "Create a GHZ state (multi-qubit entangled state)",
        "parameters": {
            "num_qubits": {
                "type": "integer",
                "description": "Number of qubits (minimum 3)",
                "default": 3,
            }
        },
    },
    "create_qft": {
        "description": "Create a Quantum Fourier Transform circuit",
        "parameters": {
            "num_qubits": {
                "type": "integer",
                "description": "Number of qubits",
                "default": 3,
            }
        },
    },
    "create_grover": {
        "description": "Create Grover's search algorithm circuit",
        "parameters": {
            "num_qubits": {
                "type": "integer",
                "description": "Number of qubits",
                "default": 3,
            },
            "iterations": {
                "type": "integer",
                "description": "Number of Grover iterations (default: optimal)",
                "default": None,
            }
        },
    },
    "create_vqe_ansatz": {
        "description": "Create a VQE variational ansatz for quantum chemistry",
        "parameters": {
            "num_qubits": {
                "type": "integer",
                "description": "Number of qubits",
                "default": 4,
            },
            "layers": {
                "type": "integer",
                "description": "Number of variational layers",
                "default": 2,
            },
            "entanglement": {
                "type": "string",
                "description": "Entanglement pattern: linear, full, circular",
                "default": "linear",
            }
        },
    },
    "create_qaoa": {
        "description": "Create a QAOA circuit for optimization problems",
        "parameters": {
            "num_qubits": {
                "type": "integer",
                "description": "Number of qubits",
                "default": 4,
            },
            "p": {
                "type": "integer",
                "description": "Number of QAOA layers",
                "default": 1,
            }
        },
    },
    "validate_circuit": {
        "description": "Validate circuit syntax and structure",
        "parameters": {
            "circuit": {
                "type": "object",
                "description": "Circuit data as JSON",
            }
        },
    },
    "validate_connectivity": {
        "description": "Check if circuit is compatible with hardware topology",
        "parameters": {
            "circuit": {
                "type": "object",
                "description": "Circuit data as JSON",
            },
            "hardware": {
                "type": "string",
                "description": "Hardware name (e.g., ibm_brisbane)",
            }
        },
    },
    "simulate_circuit": {
        "description": "Simulate circuit and get statevector/probabilities",
        "parameters": {
            "circuit": {
                "type": "object",
                "description": "Circuit data as JSON",
            }
        },
    },
    "estimate_noise": {
        "description": "Estimate circuit noise and expected fidelity",
        "parameters": {
            "circuit": {
                "type": "object",
                "description": "Circuit data as JSON",
            }
        },
    },
    "score_complexity": {
        "description": "Calculate circuit complexity metrics",
        "parameters": {
            "circuit": {
                "type": "object",
                "description": "Circuit data as JSON",
            }
        },
    },
    "score_hardware_fitness": {
        "description": "Score how well circuit fits specific hardware",
        "parameters": {
            "circuit": {
                "type": "object",
                "description": "Circuit data as JSON",
            },
            "hardware": {
                "type": "string",
                "description": "Hardware name",
            }
        },
    },
    "get_available_hardware": {
        "description": "List available hardware profiles",
        "parameters": {},
    },
}