Spaces:
Sleeping
Sleeping
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": {},
},
}
|