quantumflow-sdk 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- api/__init__.py +1 -0
- api/auth.py +208 -0
- api/main.py +403 -0
- api/models.py +137 -0
- api/routes/__init__.py +1 -0
- api/routes/auth_routes.py +234 -0
- api/routes/teleport_routes.py +415 -0
- db/__init__.py +15 -0
- db/crud.py +319 -0
- db/database.py +93 -0
- db/models.py +197 -0
- quantumflow/__init__.py +47 -0
- quantumflow/algorithms/__init__.py +48 -0
- quantumflow/algorithms/compression/__init__.py +7 -0
- quantumflow/algorithms/compression/amplitude_amplification.py +189 -0
- quantumflow/algorithms/compression/qft_compression.py +133 -0
- quantumflow/algorithms/compression/token_compression.py +261 -0
- quantumflow/algorithms/cryptography/__init__.py +6 -0
- quantumflow/algorithms/cryptography/qkd.py +205 -0
- quantumflow/algorithms/cryptography/qrng.py +231 -0
- quantumflow/algorithms/machine_learning/__init__.py +7 -0
- quantumflow/algorithms/machine_learning/qnn.py +276 -0
- quantumflow/algorithms/machine_learning/qsvm.py +249 -0
- quantumflow/algorithms/machine_learning/vqe.py +229 -0
- quantumflow/algorithms/optimization/__init__.py +7 -0
- quantumflow/algorithms/optimization/grover.py +223 -0
- quantumflow/algorithms/optimization/qaoa.py +251 -0
- quantumflow/algorithms/optimization/quantum_annealing.py +237 -0
- quantumflow/algorithms/utility/__init__.py +6 -0
- quantumflow/algorithms/utility/circuit_optimizer.py +194 -0
- quantumflow/algorithms/utility/error_correction.py +330 -0
- quantumflow/api/__init__.py +1 -0
- quantumflow/api/routes/__init__.py +4 -0
- quantumflow/api/routes/billing_routes.py +520 -0
- quantumflow/backends/__init__.py +33 -0
- quantumflow/backends/base_backend.py +184 -0
- quantumflow/backends/braket_backend.py +345 -0
- quantumflow/backends/ibm_backend.py +112 -0
- quantumflow/backends/simulator_backend.py +86 -0
- quantumflow/billing/__init__.py +25 -0
- quantumflow/billing/models.py +126 -0
- quantumflow/billing/stripe_service.py +619 -0
- quantumflow/core/__init__.py +12 -0
- quantumflow/core/entanglement.py +164 -0
- quantumflow/core/memory.py +147 -0
- quantumflow/core/quantum_backprop.py +394 -0
- quantumflow/core/quantum_compressor.py +309 -0
- quantumflow/core/teleportation.py +386 -0
- quantumflow/integrations/__init__.py +107 -0
- quantumflow/integrations/autogen_tools.py +501 -0
- quantumflow/integrations/crewai_agents.py +425 -0
- quantumflow/integrations/crewai_tools.py +407 -0
- quantumflow/integrations/langchain_memory.py +385 -0
- quantumflow/integrations/langchain_tools.py +366 -0
- quantumflow/integrations/mcp_server.py +575 -0
- quantumflow_sdk-0.1.0.dist-info/METADATA +190 -0
- quantumflow_sdk-0.1.0.dist-info/RECORD +60 -0
- quantumflow_sdk-0.1.0.dist-info/WHEEL +5 -0
- quantumflow_sdk-0.1.0.dist-info/entry_points.txt +2 -0
- quantumflow_sdk-0.1.0.dist-info/top_level.txt +3 -0
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
"""
|
|
2
|
+
CrewAI Tools for QuantumFlow.
|
|
3
|
+
|
|
4
|
+
Provides quantum-powered tools for CrewAI agents:
|
|
5
|
+
- Compression: Reduce context size
|
|
6
|
+
- Optimization: QAOA-based problem solving
|
|
7
|
+
- Analysis: Quantum-enhanced data analysis
|
|
8
|
+
- Search: Grover's algorithm for fast search
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from typing import Any, Optional, List, Dict, Type
|
|
12
|
+
import numpy as np
|
|
13
|
+
|
|
14
|
+
try:
|
|
15
|
+
from crewai.tools import BaseTool
|
|
16
|
+
from pydantic import BaseModel, Field
|
|
17
|
+
CREWAI_AVAILABLE = True
|
|
18
|
+
except ImportError:
|
|
19
|
+
CREWAI_AVAILABLE = False
|
|
20
|
+
# Dummy classes
|
|
21
|
+
class BaseTool:
|
|
22
|
+
pass
|
|
23
|
+
class BaseModel:
|
|
24
|
+
pass
|
|
25
|
+
def Field(*args, **kwargs):
|
|
26
|
+
return None
|
|
27
|
+
|
|
28
|
+
from quantumflow.core.quantum_compressor import QuantumCompressor
|
|
29
|
+
from quantumflow.core.quantum_backprop import QuantumBackprop
|
|
30
|
+
from quantumflow.core.memory import QuantumMemory
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _check_crewai():
|
|
34
|
+
"""Check if CrewAI is available."""
|
|
35
|
+
if not CREWAI_AVAILABLE:
|
|
36
|
+
raise ImportError(
|
|
37
|
+
"CrewAI is not installed. "
|
|
38
|
+
"Install it with: pip install crewai crewai-tools"
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# ============== Tool Implementations ==============
|
|
43
|
+
|
|
44
|
+
class QuantumCompressCrewTool(BaseTool):
|
|
45
|
+
"""
|
|
46
|
+
Quantum compression tool for CrewAI.
|
|
47
|
+
|
|
48
|
+
Compresses text data using quantum amplitude encoding,
|
|
49
|
+
achieving up to 53% token reduction.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
name: str = "Quantum Compress"
|
|
53
|
+
description: str = (
|
|
54
|
+
"Compress text data using quantum amplitude encoding. "
|
|
55
|
+
"Input: text string to compress. "
|
|
56
|
+
"Output: compression statistics and ratio. "
|
|
57
|
+
"Use this to reduce context size while preserving information."
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
def __init__(self, backend: str = "simulator"):
|
|
61
|
+
_check_crewai()
|
|
62
|
+
super().__init__()
|
|
63
|
+
self._compressor = QuantumCompressor(backend=backend)
|
|
64
|
+
|
|
65
|
+
def _run(self, text: str) -> str:
|
|
66
|
+
"""Compress the input text."""
|
|
67
|
+
# Tokenize
|
|
68
|
+
words = text.split()
|
|
69
|
+
if len(words) < 2:
|
|
70
|
+
return f"Text too short to compress ({len(words)} words)"
|
|
71
|
+
|
|
72
|
+
tokens = [hash(w) % 10000 for w in words]
|
|
73
|
+
|
|
74
|
+
result = self._compressor.compress(
|
|
75
|
+
tokens=tokens,
|
|
76
|
+
compression_level=1,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
f"Quantum Compression Result:\n"
|
|
81
|
+
f"- Input tokens: {result.input_token_count}\n"
|
|
82
|
+
f"- Output qubits: {result.n_qubits}\n"
|
|
83
|
+
f"- Tokens saved: {result.tokens_saved}\n"
|
|
84
|
+
f"- Compression ratio: {result.compression_ratio:.2f}x\n"
|
|
85
|
+
f"- Reduction: {result.compression_percentage:.1f}%"
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class QuantumOptimizeCrewTool(BaseTool):
|
|
90
|
+
"""
|
|
91
|
+
Quantum optimization tool for CrewAI.
|
|
92
|
+
|
|
93
|
+
Uses QAOA to solve optimization problems like
|
|
94
|
+
portfolio optimization, scheduling, routing.
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
name: str = "Quantum Optimize"
|
|
98
|
+
description: str = (
|
|
99
|
+
"Solve optimization problems using quantum QAOA algorithm. "
|
|
100
|
+
"Input: JSON string with 'problem_type' (maxcut/portfolio/tsp) and 'data'. "
|
|
101
|
+
"Output: optimal solution and quality metrics. "
|
|
102
|
+
"Use for NP-hard optimization problems."
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
def __init__(self, backend: str = "simulator"):
|
|
106
|
+
_check_crewai()
|
|
107
|
+
super().__init__()
|
|
108
|
+
self._backend = backend
|
|
109
|
+
|
|
110
|
+
def _run(self, input_data: str) -> str:
|
|
111
|
+
"""Run quantum optimization."""
|
|
112
|
+
import json
|
|
113
|
+
|
|
114
|
+
try:
|
|
115
|
+
data = json.loads(input_data)
|
|
116
|
+
except json.JSONDecodeError:
|
|
117
|
+
return "Error: Input must be valid JSON with 'problem_type' and 'data'"
|
|
118
|
+
|
|
119
|
+
problem_type = data.get("problem_type", "maxcut")
|
|
120
|
+
|
|
121
|
+
if problem_type == "maxcut":
|
|
122
|
+
return self._solve_maxcut(data.get("data", {}))
|
|
123
|
+
elif problem_type == "portfolio":
|
|
124
|
+
return self._solve_portfolio(data.get("data", {}))
|
|
125
|
+
else:
|
|
126
|
+
return f"Unknown problem type: {problem_type}. Supported: maxcut, portfolio"
|
|
127
|
+
|
|
128
|
+
def _solve_maxcut(self, data: Dict) -> str:
|
|
129
|
+
"""Solve MaxCut problem."""
|
|
130
|
+
from quantumflow.algorithms.optimization import QAOA
|
|
131
|
+
|
|
132
|
+
edges = data.get("edges", [(0, 1), (1, 2), (2, 0)])
|
|
133
|
+
n_nodes = data.get("n_nodes", 3)
|
|
134
|
+
|
|
135
|
+
# Convert edges to tuples if they're lists
|
|
136
|
+
edges = [tuple(e) if isinstance(e, list) else e for e in edges]
|
|
137
|
+
|
|
138
|
+
qaoa = QAOA(backend=self._backend, p=1)
|
|
139
|
+
result = qaoa.maxcut(edges, n_nodes, max_iterations=20)
|
|
140
|
+
|
|
141
|
+
return (
|
|
142
|
+
f"MaxCut Solution:\n"
|
|
143
|
+
f"- Optimal partition: {result.best_solution}\n"
|
|
144
|
+
f"- Cut value: {result.best_cost:.2f}\n"
|
|
145
|
+
f"- Iterations: {result.n_iterations}"
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
def _solve_portfolio(self, data: Dict) -> str:
|
|
149
|
+
"""Solve portfolio optimization using QUBO formulation."""
|
|
150
|
+
from quantumflow.algorithms.optimization import QAOA
|
|
151
|
+
|
|
152
|
+
returns = np.array(data.get("returns", [0.1, 0.05, 0.15]))
|
|
153
|
+
covariance = np.array(data.get("covariance", [[0.1, 0.02, 0.01], [0.02, 0.05, 0.01], [0.01, 0.01, 0.08]]))
|
|
154
|
+
risk_factor = data.get("risk_factor", 0.5)
|
|
155
|
+
|
|
156
|
+
# Convert to QUBO matrix
|
|
157
|
+
# Objective: maximize returns - risk_factor * variance
|
|
158
|
+
# Q[i,j] = -returns[i] for diagonal + risk_factor * covariance[i,j]
|
|
159
|
+
n_assets = len(returns)
|
|
160
|
+
Q = np.zeros((n_assets, n_assets))
|
|
161
|
+
|
|
162
|
+
for i in range(n_assets):
|
|
163
|
+
Q[i, i] = -returns[i] + risk_factor * covariance[i, i]
|
|
164
|
+
for j in range(i + 1, n_assets):
|
|
165
|
+
Q[i, j] = risk_factor * covariance[i, j]
|
|
166
|
+
Q[j, i] = risk_factor * covariance[j, i]
|
|
167
|
+
|
|
168
|
+
qaoa = QAOA(backend=self._backend, p=1)
|
|
169
|
+
result = qaoa.optimize_qubo(Q, max_iterations=20)
|
|
170
|
+
|
|
171
|
+
# Interpret solution
|
|
172
|
+
allocation = [int(b) for b in result.best_solution]
|
|
173
|
+
selected_assets = [i for i, a in enumerate(allocation) if a == 1]
|
|
174
|
+
expected_return = sum(returns[i] for i in selected_assets)
|
|
175
|
+
risk = sum(covariance[i, j] for i in selected_assets for j in selected_assets)
|
|
176
|
+
|
|
177
|
+
return (
|
|
178
|
+
f"Portfolio Optimization:\n"
|
|
179
|
+
f"- Optimal allocation: {allocation}\n"
|
|
180
|
+
f"- Selected assets: {selected_assets}\n"
|
|
181
|
+
f"- Expected return: {expected_return:.2%}\n"
|
|
182
|
+
f"- Portfolio risk: {risk:.4f}"
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
class QuantumAnalyzeCrewTool(BaseTool):
|
|
187
|
+
"""
|
|
188
|
+
Quantum analysis tool for CrewAI.
|
|
189
|
+
|
|
190
|
+
Uses quantum algorithms for data analysis including
|
|
191
|
+
pattern recognition and anomaly detection.
|
|
192
|
+
"""
|
|
193
|
+
|
|
194
|
+
name: str = "Quantum Analyze"
|
|
195
|
+
description: str = (
|
|
196
|
+
"Analyze data using quantum algorithms. "
|
|
197
|
+
"Input: JSON with 'analysis_type' (pattern/anomaly/correlation) and 'data'. "
|
|
198
|
+
"Output: analysis results with quantum-enhanced insights. "
|
|
199
|
+
"Use for pattern recognition and anomaly detection."
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
def __init__(self, backend: str = "simulator"):
|
|
203
|
+
_check_crewai()
|
|
204
|
+
super().__init__()
|
|
205
|
+
self._backend = backend
|
|
206
|
+
self._memory = QuantumMemory(backend=backend)
|
|
207
|
+
|
|
208
|
+
def _run(self, input_data: str) -> str:
|
|
209
|
+
"""Run quantum analysis."""
|
|
210
|
+
import json
|
|
211
|
+
|
|
212
|
+
try:
|
|
213
|
+
data = json.loads(input_data)
|
|
214
|
+
except json.JSONDecodeError:
|
|
215
|
+
return "Error: Input must be valid JSON with 'analysis_type' and 'data'"
|
|
216
|
+
|
|
217
|
+
analysis_type = data.get("analysis_type", "pattern")
|
|
218
|
+
values = data.get("data", [])
|
|
219
|
+
|
|
220
|
+
if not values:
|
|
221
|
+
return "Error: No data provided for analysis"
|
|
222
|
+
|
|
223
|
+
if analysis_type == "pattern":
|
|
224
|
+
return self._analyze_patterns(values)
|
|
225
|
+
elif analysis_type == "anomaly":
|
|
226
|
+
return self._detect_anomalies(values)
|
|
227
|
+
elif analysis_type == "correlation":
|
|
228
|
+
return self._analyze_correlation(values)
|
|
229
|
+
else:
|
|
230
|
+
return f"Unknown analysis type: {analysis_type}"
|
|
231
|
+
|
|
232
|
+
def _analyze_patterns(self, values: List[float]) -> str:
|
|
233
|
+
"""Analyze patterns using quantum encoding."""
|
|
234
|
+
values_array = np.array(values)
|
|
235
|
+
|
|
236
|
+
# Store in quantum memory
|
|
237
|
+
self._memory.store("analysis_data", values)
|
|
238
|
+
|
|
239
|
+
# Compute statistics
|
|
240
|
+
mean = np.mean(values_array)
|
|
241
|
+
std = np.std(values_array)
|
|
242
|
+
trend = "increasing" if values_array[-1] > values_array[0] else "decreasing"
|
|
243
|
+
|
|
244
|
+
# Quantum compression for pattern density
|
|
245
|
+
from quantumflow.core.quantum_compressor import QuantumCompressor
|
|
246
|
+
compressor = QuantumCompressor(backend=self._backend)
|
|
247
|
+
|
|
248
|
+
tokens = [int(v * 1000) % 10000 for v in values]
|
|
249
|
+
if len(tokens) >= 2:
|
|
250
|
+
result = compressor.compress(tokens, compression_level=1)
|
|
251
|
+
pattern_density = result.compression_ratio
|
|
252
|
+
else:
|
|
253
|
+
pattern_density = 1.0
|
|
254
|
+
|
|
255
|
+
return (
|
|
256
|
+
f"Pattern Analysis:\n"
|
|
257
|
+
f"- Data points: {len(values)}\n"
|
|
258
|
+
f"- Mean: {mean:.4f}\n"
|
|
259
|
+
f"- Std deviation: {std:.4f}\n"
|
|
260
|
+
f"- Trend: {trend}\n"
|
|
261
|
+
f"- Pattern density (quantum): {pattern_density:.2f}x"
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
def _detect_anomalies(self, values: List[float]) -> str:
|
|
265
|
+
"""Detect anomalies using quantum analysis."""
|
|
266
|
+
values_array = np.array(values)
|
|
267
|
+
mean = np.mean(values_array)
|
|
268
|
+
std = np.std(values_array)
|
|
269
|
+
|
|
270
|
+
# Z-score based anomaly detection
|
|
271
|
+
z_scores = np.abs((values_array - mean) / (std + 1e-8))
|
|
272
|
+
anomaly_threshold = 2.0
|
|
273
|
+
anomalies = [(i, v) for i, (v, z) in enumerate(zip(values, z_scores)) if z > anomaly_threshold]
|
|
274
|
+
|
|
275
|
+
return (
|
|
276
|
+
f"Anomaly Detection:\n"
|
|
277
|
+
f"- Data points analyzed: {len(values)}\n"
|
|
278
|
+
f"- Anomalies found: {len(anomalies)}\n"
|
|
279
|
+
f"- Anomaly indices: {[a[0] for a in anomalies]}\n"
|
|
280
|
+
f"- Anomaly values: {[f'{a[1]:.4f}' for a in anomalies]}"
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
def _analyze_correlation(self, values: List) -> str:
|
|
284
|
+
"""Analyze correlation between datasets."""
|
|
285
|
+
if not isinstance(values[0], list):
|
|
286
|
+
return "Error: Correlation analysis requires multiple datasets (list of lists)"
|
|
287
|
+
|
|
288
|
+
datasets = [np.array(v) for v in values]
|
|
289
|
+
if len(datasets) < 2:
|
|
290
|
+
return "Error: Need at least 2 datasets for correlation"
|
|
291
|
+
|
|
292
|
+
# Compute correlation matrix
|
|
293
|
+
min_len = min(len(d) for d in datasets)
|
|
294
|
+
trimmed = [d[:min_len] for d in datasets]
|
|
295
|
+
corr_matrix = np.corrcoef(trimmed)
|
|
296
|
+
|
|
297
|
+
return (
|
|
298
|
+
f"Correlation Analysis:\n"
|
|
299
|
+
f"- Datasets: {len(datasets)}\n"
|
|
300
|
+
f"- Correlation matrix:\n{corr_matrix.round(4)}"
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
class QuantumSearchCrewTool(BaseTool):
|
|
305
|
+
"""
|
|
306
|
+
Quantum search tool for CrewAI.
|
|
307
|
+
|
|
308
|
+
Uses Grover's algorithm for fast unstructured search
|
|
309
|
+
with quadratic speedup.
|
|
310
|
+
"""
|
|
311
|
+
|
|
312
|
+
name: str = "Quantum Search"
|
|
313
|
+
description: str = (
|
|
314
|
+
"Search through data using Grover's quantum algorithm. "
|
|
315
|
+
"Input: JSON with 'query' and 'database' (list of items). "
|
|
316
|
+
"Output: matching items with quantum speedup metrics. "
|
|
317
|
+
"Use for searching large unstructured datasets."
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
def __init__(self, backend: str = "simulator"):
|
|
321
|
+
_check_crewai()
|
|
322
|
+
super().__init__()
|
|
323
|
+
self._backend = backend
|
|
324
|
+
|
|
325
|
+
def _run(self, input_data: str) -> str:
|
|
326
|
+
"""Run quantum search."""
|
|
327
|
+
import json
|
|
328
|
+
import math
|
|
329
|
+
|
|
330
|
+
try:
|
|
331
|
+
data = json.loads(input_data)
|
|
332
|
+
except json.JSONDecodeError:
|
|
333
|
+
return "Error: Input must be valid JSON with 'query' and 'database'"
|
|
334
|
+
|
|
335
|
+
query = data.get("query", "")
|
|
336
|
+
database = data.get("database", [])
|
|
337
|
+
|
|
338
|
+
if not query or not database:
|
|
339
|
+
return "Error: Both 'query' and 'database' are required"
|
|
340
|
+
|
|
341
|
+
from quantumflow.algorithms.optimization import GroverSearch
|
|
342
|
+
|
|
343
|
+
# Create oracle based on query matches - find indices of matching items
|
|
344
|
+
query_lower = query.lower()
|
|
345
|
+
marked_indices = [i for i, item in enumerate(database) if query_lower in str(item).lower()]
|
|
346
|
+
|
|
347
|
+
if not marked_indices:
|
|
348
|
+
return f"No matches found for '{query}' in {len(database)} items"
|
|
349
|
+
|
|
350
|
+
# Calculate n_qubits needed for the database
|
|
351
|
+
n_qubits = max(2, math.ceil(math.log2(len(database))))
|
|
352
|
+
|
|
353
|
+
grover = GroverSearch(backend=self._backend)
|
|
354
|
+
result = grover.search(n_qubits=n_qubits, marked_states=marked_indices)
|
|
355
|
+
|
|
356
|
+
matches = [database[i] for i in marked_indices]
|
|
357
|
+
|
|
358
|
+
# Calculate speedup
|
|
359
|
+
classical_ops = len(database)
|
|
360
|
+
quantum_ops = result.iterations
|
|
361
|
+
speedup = classical_ops / max(1, quantum_ops)
|
|
362
|
+
|
|
363
|
+
return (
|
|
364
|
+
f"Quantum Search Results:\n"
|
|
365
|
+
f"- Query: '{query}'\n"
|
|
366
|
+
f"- Database size: {len(database)}\n"
|
|
367
|
+
f"- Matches found: {len(matches)}\n"
|
|
368
|
+
f"- Top matches: {matches[:5]}\n"
|
|
369
|
+
f"- Quantum iterations: {quantum_ops}\n"
|
|
370
|
+
f"- Classical would need: ~{classical_ops} ops\n"
|
|
371
|
+
f"- Quantum speedup: {speedup:.1f}x\n"
|
|
372
|
+
f"- Success probability: {result.probability:.2%}"
|
|
373
|
+
)
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
# ============== Toolkit ==============
|
|
377
|
+
|
|
378
|
+
def get_quantum_crew_tools(backend: str = "simulator") -> List[BaseTool]:
|
|
379
|
+
"""
|
|
380
|
+
Get all quantum tools for CrewAI.
|
|
381
|
+
|
|
382
|
+
Args:
|
|
383
|
+
backend: Quantum backend to use ("simulator", "ibm")
|
|
384
|
+
|
|
385
|
+
Returns:
|
|
386
|
+
List of quantum tools for use with CrewAI agents
|
|
387
|
+
|
|
388
|
+
Example:
|
|
389
|
+
from crewai import Agent, Task, Crew
|
|
390
|
+
from quantumflow.integrations import get_quantum_crew_tools
|
|
391
|
+
|
|
392
|
+
tools = get_quantum_crew_tools()
|
|
393
|
+
|
|
394
|
+
researcher = Agent(
|
|
395
|
+
role="Quantum Researcher",
|
|
396
|
+
goal="Analyze data using quantum algorithms",
|
|
397
|
+
tools=tools,
|
|
398
|
+
)
|
|
399
|
+
"""
|
|
400
|
+
_check_crewai()
|
|
401
|
+
|
|
402
|
+
return [
|
|
403
|
+
QuantumCompressCrewTool(backend=backend),
|
|
404
|
+
QuantumOptimizeCrewTool(backend=backend),
|
|
405
|
+
QuantumAnalyzeCrewTool(backend=backend),
|
|
406
|
+
QuantumSearchCrewTool(backend=backend),
|
|
407
|
+
]
|