Skip to content

Commit

Permalink
Merge 0cfd886 into ee4488f
Browse files Browse the repository at this point in the history
  • Loading branch information
kt474 committed May 1, 2024
2 parents ee4488f + 0cfd886 commit 966b83a
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 3 deletions.
1 change: 1 addition & 0 deletions qiskit_ibm_runtime/api/rest/runtime.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ def jobs_get(
"""
url = self.get_url("jobs")
payload: Dict[str, Union[int, str, List[str]]] = {}
payload["exclude_params"] = False
if limit:
payload["limit"] = limit
if skip:
Expand Down
22 changes: 19 additions & 3 deletions qiskit_ibm_runtime/qiskit_runtime_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
from .utils.result_decoder import ResultDecoder
from .runtime_job import RuntimeJob
from .runtime_job_v2 import RuntimeJobV2
from .utils import RuntimeDecoder, to_python_identifier
from .utils import RuntimeDecoder, RuntimeEncoder, to_python_identifier
from .api.client_parameters import ClientParameters
from .runtime_options import RuntimeOptions
from .ibm_backend import IBMBackend
Expand Down Expand Up @@ -934,7 +934,7 @@ def job(self, job_id: str) -> Union[RuntimeJob, RuntimeJobV2]:
IBMRuntimeError: If the request failed.
"""
try:
response = self._api_client.job_get(job_id, exclude_params=True)
response = self._api_client.job_get(job_id, exclude_params=False)
except RequestsApiError as ex:
if ex.status_code == 404:
raise RuntimeJobNotFound(f"Job not found: {ex.message}") from None
Expand Down Expand Up @@ -1084,16 +1084,32 @@ def _decode_job(self, raw_data: Dict) -> Union[RuntimeJob, RuntimeJobV2]:
api=None,
)

version = 1
params = raw_data.get("params", {})
if isinstance(params, list):
if len(params) > 0:
params = params[0]
else:
params = {}
if not isinstance(params, str):
params = json.dumps(params)
if params:
version = params.get("version", 1)
params = json.dumps(params, cls=RuntimeEncoder)

decoded = json.loads(params, cls=RuntimeDecoder)
if version == 2:
return RuntimeJobV2(
backend=backend,
api_client=self._api_client,
client_params=self._client_params,
service=self,
job_id=raw_data["id"],
program_id=raw_data.get("program", {}).get("id", ""),
params=decoded,
creation_date=raw_data.get("created", None),
session_id=raw_data.get("session_id"),
tags=raw_data.get("tags"),
)
return RuntimeJob(
backend=backend,
api_client=self._api_client,
Expand Down
5 changes: 5 additions & 0 deletions release-notes/unreleased/1471.bug.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Fixed an issue where retrieving jobs with
`job() <https://docs.quantum.ibm.com/api/qiskit-ibm-runtime/qiskit_ibm_runtime.QiskitRuntimeService#job>`__
and `jobs() <https://docs.quantum.ibm.com/api/qiskit-ibm-runtime/qiskit_ibm_runtime.QiskitRuntimeService#jobs>`__
would only return ``RuntimeJob`` instances, even if the job was run with a V2 primitive. Now,
V2 primitive jobs will be returned correctly as ``RuntimeJobV2`` instances.
14 changes: 14 additions & 0 deletions test/integration/test_retrieve_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
from datetime import datetime, timezone
from qiskit.providers.jobstatus import JobStatus
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import RuntimeJob, RuntimeJobV2


from ..ibm_test_case import IBMIntegrationJobTestCase
from ..decorators import run_integration_test, production_only, quantum_only
Expand Down Expand Up @@ -229,3 +231,15 @@ def test_retrieve_jobs_backend(self, service):
jobs = service.jobs(backend_name=backend)
for job in jobs:
self.assertEqual(backend, job.backend().name)

@run_integration_test
def test_retrieve_correct_job_version(self, service):
"""Test retrieving the correct job version."""
job = self._run_program(service, program_id="sampler")
job.wait_for_final_state()
rjob = service.job(job.job_id())
job_v2 = self._run_program(service, program_id="samplerv2")
job_v2.wait_for_final_state()
rjob_v2 = service.job(job_v2.job_id())
self.assertIsInstance(rjob, RuntimeJob)
self.assertIsInstance(rjob_v2, RuntimeJobV2)

0 comments on commit 966b83a

Please sign in to comment.