qbraid-cli 0.12.0a3__tar.gz → 0.12.0a4__tar.gz

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.
Files changed (52) hide show
  1. {qbraid_cli-0.12.0a3/qbraid_cli.egg-info → qbraid_cli-0.12.0a4}/PKG-INFO +1 -1
  2. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/pyproject.toml +1 -1
  3. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/account/app.py +2 -2
  4. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/devices/app.py +42 -28
  5. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/devices/validation.py +6 -2
  6. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/jobs/app.py +58 -34
  7. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4/qbraid_cli.egg-info}/PKG-INFO +1 -1
  8. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/LICENSE +0 -0
  9. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/README.md +0 -0
  10. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/__init__.py +0 -0
  11. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/_version.py +0 -0
  12. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/account/__init__.py +0 -0
  13. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/admin/__init__.py +0 -0
  14. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/admin/app.py +0 -0
  15. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/admin/headers.py +0 -0
  16. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/admin/validation.py +0 -0
  17. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/chat/__init__.py +0 -0
  18. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/chat/app.py +0 -0
  19. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/configure/__init__.py +0 -0
  20. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/configure/actions.py +0 -0
  21. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/configure/app.py +0 -0
  22. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/configure/claude_config.py +0 -0
  23. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/devices/__init__.py +0 -0
  24. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/envs/__init__.py +0 -0
  25. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/envs/activate.py +0 -0
  26. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/envs/app.py +0 -0
  27. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/envs/create.py +0 -0
  28. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/envs/data_handling.py +0 -0
  29. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/exceptions.py +0 -0
  30. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/files/__init__.py +0 -0
  31. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/files/app.py +0 -0
  32. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/handlers.py +0 -0
  33. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/jobs/__init__.py +0 -0
  34. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/jobs/toggle_braket.py +0 -0
  35. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/jobs/validation.py +0 -0
  36. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/kernels/__init__.py +0 -0
  37. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/kernels/app.py +0 -0
  38. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/main.py +0 -0
  39. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/mcp/__init__.py +0 -0
  40. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/mcp/app.py +0 -0
  41. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/mcp/serve.py +0 -0
  42. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/pip/__init__.py +0 -0
  43. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/pip/app.py +0 -0
  44. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/pip/hooks.py +0 -0
  45. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli/py.typed +0 -0
  46. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli.egg-info/SOURCES.txt +0 -0
  47. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli.egg-info/dependency_links.txt +0 -0
  48. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli.egg-info/entry_points.txt +0 -0
  49. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli.egg-info/requires.txt +0 -0
  50. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/qbraid_cli.egg-info/top_level.txt +0 -0
  51. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/setup.cfg +0 -0
  52. {qbraid_cli-0.12.0a3 → qbraid_cli-0.12.0a4}/tests/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qbraid-cli
3
- Version: 0.12.0a3
3
+ Version: 0.12.0a4
4
4
  Summary: Command Line Interface for interacting with all parts of the qBraid platform.
5
5
  Author-email: qBraid Development Team <contact@qbraid.com>
6
6
  License-Expression: LicenseRef-Proprietary
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "qbraid-cli"
7
- version = "0.12.0a3"
7
+ version = "0.12.0a4"
8
8
  description = "Command Line Interface for interacting with all parts of the qBraid platform."
9
9
  readme = "README.md"
10
10
  authors = [{ name = "qBraid Development Team", email = "contact@qbraid.com" }]
@@ -22,9 +22,9 @@ def account_credits():
22
22
  """Get number of qBraid credits remaining."""
23
23
 
24
24
  def get_credits() -> float:
25
- from qbraid_core import QbraidClient
25
+ from qbraid_core.client import QbraidClientV1
26
26
 
27
- client = QbraidClient()
27
+ client = QbraidClientV1()
28
28
  return client.user_credits_value()
29
29
 
30
30
  qbraid_credits: float = run_progress_task(get_credits)
@@ -6,7 +6,7 @@ Module defining commands in the 'qbraid devices' namespace.
6
6
 
7
7
  """
8
8
 
9
- from typing import Any, Callable, Optional
9
+ from typing import Any, Optional
10
10
 
11
11
  import typer
12
12
  from rich.console import Console
@@ -18,9 +18,13 @@ devices_app = typer.Typer(help="Manage qBraid quantum devices.", no_args_is_help
18
18
 
19
19
 
20
20
  @devices_app.command(name="list")
21
- def devices_list( # pylint: disable=too-many-branches
21
+ def devices_list(
22
22
  status: Optional[str] = typer.Option(
23
- None, "--status", "-s", help="'ONLINE'|'OFFLINE'|'RETIRED'", callback=validate_status
23
+ None,
24
+ "--status",
25
+ "-s",
26
+ help="'ONLINE'|'OFFLINE'|'UNAVAILABLE'|'RETIRED'",
27
+ callback=validate_status,
24
28
  ),
25
29
  device_type: Optional[str] = typer.Option(
26
30
  None, "--type", "-t", help="'QPU'|'SIMULATOR'", callback=validate_type
@@ -37,51 +41,58 @@ def devices_list( # pylint: disable=too-many-branches
37
41
  ),
38
42
  ) -> None:
39
43
  """List qBraid quantum devices."""
40
- filters = {}
41
- if status:
42
- filters["status"] = status
43
- if device_type:
44
- filters["type"] = "Simulator" if device_type == "SIMULATOR" else device_type
45
- if provider:
46
- filters["provider"] = provider
47
44
 
48
- def import_devices() -> tuple[Any, Callable]:
49
- from qbraid_core.services.quantum import QuantumClient, process_device_data
45
+ def fetch_devices():
46
+ from qbraid_core.services.runtime import QuantumRuntimeClient
50
47
 
51
- client = QuantumClient()
48
+ client = QuantumRuntimeClient()
49
+ return client.list_devices()
52
50
 
53
- return client, process_device_data
51
+ devices = run_progress_task(fetch_devices)
54
52
 
55
- result: tuple[Callable, Callable] = run_progress_task(import_devices)
56
- client, process_device_data = result
57
- raw_data = client.search_devices(filters)
58
- device_data, msg = process_device_data(raw_data)
53
+ # Apply filters (client returns all devices, we filter locally)
54
+ if status:
55
+ devices = [d for d in devices if d.status.value == status]
56
+ if device_type:
57
+ devices = [d for d in devices if d.deviceType == device_type]
58
+ if provider:
59
+ devices = [d for d in devices if d.vendor.lower() == provider.lower()]
59
60
 
60
61
  console = Console()
61
- header_1 = "Provider"
62
+ header_1 = "Vendor"
62
63
  header_2 = "Device Name"
63
- header_3 = "ID"
64
+ header_3 = "QRN"
64
65
  header_4 = "Status"
65
66
  console.print(
66
- f"[bold]{header_1.ljust(12)}{header_2.ljust(35)}{header_3.ljust(41)}{header_4}[/bold]"
67
+ f"[bold]{header_1.ljust(12)}{header_2.ljust(35)}{header_3.ljust(50)}{header_4}[/bold]"
67
68
  )
68
- for device_provider, device_name, device_id, device_status in device_data:
69
+
70
+ for device in devices:
71
+ device_status = device.status.value
69
72
  if device_status == "ONLINE":
70
73
  status_color = "green"
71
74
  elif device_status == "OFFLINE":
72
75
  status_color = "red"
76
+ elif device_status == "UNAVAILABLE":
77
+ status_color = "yellow"
73
78
  else:
74
79
  status_color = "grey"
80
+
81
+ # Truncate long names/qrns for display
82
+ name = device.name[:33] + ".." if len(device.name) > 35 else device.name
83
+ qrn = device.qrn[:48] + ".." if len(device.qrn) > 50 else device.qrn
84
+
75
85
  console.print(
76
- f"{device_provider.ljust(12)}{device_name.ljust(35)}{device_id.ljust(40)}",
86
+ f"{device.vendor.ljust(12)}{name.ljust(35)}{qrn.ljust(50)}",
77
87
  f"[{status_color}]{device_status}[/{status_color}]",
78
88
  )
79
- console.print(f"\n{msg}", style="italic", justify="left")
89
+
90
+ console.print(f"\n[italic]Displaying {len(devices)} devices[/italic]")
80
91
 
81
92
 
82
93
  @devices_app.command(name="get")
83
94
  def devices_get(
84
- device_id: str = typer.Argument(..., help="The ID of the device to get."),
95
+ device_id: str = typer.Argument(..., help="The QRN or ID of the device to get."),
85
96
  fmt: bool = typer.Option(
86
97
  True, "--no-fmt", help="Disable rich console formatting (output raw data)"
87
98
  ),
@@ -89,12 +100,15 @@ def devices_get(
89
100
  """Get a qBraid quantum device."""
90
101
 
91
102
  def get_device():
92
- from qbraid_core.services.quantum import QuantumClient
103
+ from qbraid_core.services.runtime import QuantumRuntimeClient
93
104
 
94
- client = QuantumClient()
105
+ client = QuantumRuntimeClient()
95
106
  return client.get_device(device_id)
96
107
 
97
- data: dict[str, Any] = run_progress_task(get_device)
108
+ device = run_progress_task(get_device)
109
+
110
+ # Convert Pydantic model to dict for display
111
+ data: dict[str, Any] = device.model_dump()
98
112
 
99
113
  print_formatted_data(data, fmt)
100
114
 
@@ -13,7 +13,7 @@ from qbraid_cli.handlers import validate_item
13
13
 
14
14
  def validate_status(value: Optional[str]) -> Union[str, None]:
15
15
  """Validate device status query parameter."""
16
- return validate_item(value, ["ONLINE", "OFFLINE", "RETIRED"], "Status")
16
+ return validate_item(value, ["ONLINE", "OFFLINE", "UNAVAILABLE", "RETIRED"], "Status")
17
17
 
18
18
 
19
19
  def validate_type(value: Optional[str]) -> Union[str, None]:
@@ -23,4 +23,8 @@ def validate_type(value: Optional[str]) -> Union[str, None]:
23
23
 
24
24
  def validate_provider(value: Optional[str]) -> Union[str, None]:
25
25
  """Validate device provider query parameter."""
26
- return validate_item(value, ["AWS", "IBM", "IonQ", "Rigetti", "OQC", "QuEra"], "Provider")
26
+ return validate_item(
27
+ value,
28
+ ["aws", "azure", "ibm", "ionq", "qbraid"],
29
+ "Provider",
30
+ )
@@ -6,7 +6,7 @@ Module defining commands in the 'qbraid jobs' namespace.
6
6
 
7
7
  """
8
8
 
9
- from typing import Any, Callable
9
+ from typing import Any, Callable, Optional
10
10
 
11
11
  import typer
12
12
  from rich.console import Console
@@ -95,59 +95,80 @@ def jobs_list(
95
95
  limit: int = typer.Option(
96
96
  10, "--limit", "-l", help="Limit the maximum number of results returned"
97
97
  ),
98
+ status: Optional[str] = typer.Option(
99
+ None,
100
+ "--status",
101
+ "-s",
102
+ help="Filter by status (QUEUED, RUNNING, COMPLETED, FAILED, CANCELLED)",
103
+ ),
104
+ vendor: Optional[str] = typer.Option(
105
+ None, "--vendor", "-v", help="Filter by vendor (aws, azure, ibm, ionq, qbraid)"
106
+ ),
98
107
  ) -> None:
99
108
  """List qBraid Quantum Jobs."""
100
109
 
101
- def import_jobs() -> tuple[Any, Callable]:
102
- from qbraid_core.services.quantum import QuantumClient, process_job_data
110
+ def fetch_jobs():
111
+ from qbraid_core.services.runtime import QuantumRuntimeClient
112
+
113
+ client = QuantumRuntimeClient()
114
+ return client.list_jobs(limit=limit, status=status, vendor=vendor)
103
115
 
104
- client = QuantumClient()
116
+ try:
117
+ jobs = run_progress_task(fetch_jobs)
105
118
 
106
- return client, process_job_data
119
+ if not jobs:
120
+ console = Console()
121
+ console.print("[dim]No jobs found.[/dim]")
122
+ return
107
123
 
108
- result: tuple[Any, Callable] = run_progress_task(import_jobs)
109
- client, process_job_data = result
110
- raw_data = client.search_jobs(query={"resultsPerPage": limit, "page": 0})
111
- job_data, msg = process_job_data(raw_data)
124
+ # Calculate column width based on longest job QRN
125
+ longest_job_id = max(len(job.jobQrn) for job in jobs)
126
+ spacing = min(longest_job_id + 3, 50)
112
127
 
113
- longest_job_id = max(len(item[0]) for item in job_data)
114
- spacing = longest_job_id + 5
115
- try:
116
128
  console = Console()
117
- header_1 = "Job ID"
129
+ header_1 = "Job QRN"
118
130
  header_2 = "Submitted"
119
131
  header_3 = "Status"
120
- console.print(f"[bold]{header_1.ljust(spacing)}{header_2.ljust(36)}{header_3}[/bold]")
121
- for job_id, submitted, status in job_data:
122
- if status == "COMPLETED":
132
+ console.print(f"[bold]{header_1.ljust(spacing)}{header_2.ljust(28)}{header_3}[/bold]")
133
+
134
+ for job in jobs:
135
+ job_status = job.status.value if hasattr(job.status, "value") else str(job.status)
136
+
137
+ # Format timestamp
138
+ if job.timeStamps and job.timeStamps.createdAt:
139
+ submitted = job.timeStamps.createdAt.strftime("%Y-%m-%d %H:%M:%S")
140
+ else:
141
+ submitted = "N/A"
142
+
143
+ # Color based on status
144
+ if job_status == "COMPLETED":
123
145
  status_color = "green"
124
- elif status in ["FAILED", "CANCELLED"]:
146
+ elif job_status in ["FAILED", "CANCELLED"]:
125
147
  status_color = "red"
126
- elif status in [
127
- "INITIALIZING",
128
- "INITIALIZED",
129
- "CREATED",
130
- "QUEUED",
131
- "VALIDATING",
132
- "RUNNING",
133
- ]:
148
+ elif job_status in ["INITIALIZING", "QUEUED", "VALIDATING", "RUNNING"]:
134
149
  status_color = "blue"
135
150
  else:
136
151
  status_color = "grey"
152
+
153
+ # Truncate long QRNs
154
+ job_qrn = job.jobQrn
155
+ if len(job_qrn) > spacing - 2:
156
+ job_qrn = job_qrn[: spacing - 4] + ".."
157
+
137
158
  console.print(
138
- f"{job_id.ljust(spacing)}{submitted.ljust(35)}",
139
- f"[{status_color}]{status}[/{status_color}]",
159
+ f"{job_qrn.ljust(spacing)}{submitted.ljust(28)}",
160
+ f"[{status_color}]{job_status}[/{status_color}]",
140
161
  )
141
162
 
142
- console.print(f"\n{msg}", style="italic", justify="left")
163
+ console.print(f"\n[italic]Displaying {len(jobs)} jobs[/italic]")
143
164
 
144
- except Exception: # pylint: disable=broad-exception-caught
145
- handle_error(message="Failed to fetch quantum jobs.")
165
+ except Exception as err: # pylint: disable=broad-exception-caught
166
+ handle_error(message=f"Failed to fetch quantum jobs: {err}")
146
167
 
147
168
 
148
169
  @jobs_app.command(name="get")
149
170
  def jobs_get(
150
- job_id: str = typer.Argument(..., help="The ID of the job to get."),
171
+ job_id: str = typer.Argument(..., help="The QRN or ID of the job to get."),
151
172
  fmt: bool = typer.Option(
152
173
  True, "--no-fmt", help="Disable rich console formatting (output raw data)"
153
174
  ),
@@ -155,12 +176,15 @@ def jobs_get(
155
176
  """Get a qBraid Quantum Job."""
156
177
 
157
178
  def get_job():
158
- from qbraid_core.services.quantum import QuantumClient
179
+ from qbraid_core.services.runtime import QuantumRuntimeClient
159
180
 
160
- client = QuantumClient()
181
+ client = QuantumRuntimeClient()
161
182
  return client.get_job(job_id)
162
183
 
163
- data: dict[str, Any] = run_progress_task(get_job)
184
+ job = run_progress_task(get_job)
185
+
186
+ # Convert Pydantic model to dict for display
187
+ data: dict[str, Any] = job.model_dump()
164
188
 
165
189
  print_formatted_data(data, fmt)
166
190
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qbraid-cli
3
- Version: 0.12.0a3
3
+ Version: 0.12.0a4
4
4
  Summary: Command Line Interface for interacting with all parts of the qBraid platform.
5
5
  Author-email: qBraid Development Team <contact@qbraid.com>
6
6
  License-Expression: LicenseRef-Proprietary
File without changes
File without changes
File without changes