Tergite Backend
[2025.09.0]
released on: 2nd of October 2025
Added
- Install a pre-commit hook to run black
- Added a support for measurement level 1 for simulator for both single and avg modes
- Added a support for measurement level 1 for real backend for both single and avg modes
- Added authentication via JWT, with temporary JWT token generated by the backend instance and passed through MSS to the SDK
- Added support for booked time slots, on top of the first-in-first-out (FIFO) queue
- Added the following endpoints for the sake of handling bookings:
- /token(POST)
- /users(POST, GET)
- /users/{user_id}(POST, GET, DELETE)
- /me(DELETE, GET)
- /bookings(POST, GET)
- /bookings/{booking_id}/cancel(POST)
 
- BREAKING: Added authentication of requests from MSS by verifying that x-mss-signatureis signed using MSS’s private key
- Added canceling of jobs via MSS
- Added and adapted SpiDAC class from autocalibration package for coupler biasing
- Modify Quantify quantum executor by calling SpiDAC to bring up currents before running a schedule
- Add a placeholder Wacqt-two-qubit-gate function for Qobj to QuantifySchedule mapper with a flux port reference
- Add filtering bookings by minimum/maximum start timestamps
Changed
- BREAKING: Changed authentication during job submission to use JWT token only
- BREAKING: Removed authentication of requests by referer’s IP address
- BREAKING: Removed authentication of job-submission requests that would check that the API key submitted was associated with the job submitted
- BREAKING: Removed the /authendpoint
 
- BREAKING: Removed the 
- BREAKING: Changed the return type of the /jobsPOST endpoint to be the job in JSON as opposed to{"message": string}
- BREAKING: Added pagination to the /jobsGET endpoint, changing the return type to{"data": []object, limit: number, skip: number}as opposed to[]object
- BREAKING: Changed the /jobsendpoint to return only jobs that belong to the user whose id is in thex-mss-user-isheader.
- BREAKING: Changed the return type of the /jobsGET endpoint to be the job in JSON as opposed to{"message": object}
- BREAKING: Removed the /jobs/{job_id}/statusendpoint.
- BREAKING: Removed the /jobs/{job_id}/resultendpoint.
- BREAKING: Changed the return type of the /jobsDELETE endpoint to{"status": "success", "detail": string}as opposed to{"message": string}
- BREAKING: Changed the return type of the /jobs/{job_id}/cancelPOST endpoint to{"status": "success", "detail": string}as opposed to nothing
- BREAKING: Changed the return type of the /logfiles/{logfile_id}GET endpoint when an error occurs to return an error status code with{"detail": string}JSON response.
- BREAKING: Changed the names of the workers/queues used to {PREFIX}_general,{PREFIX}_preprocessing,{PREFIX}_normal_execution,{PREFIX}_booked_execution,{PREFIX}_postprocessing
Fixed
- Fix bcrypt 5.0.0 ValueError ‘password cannot be longer than 72 bytes, truncate manually if necessary (e.g. my_password[:72])’
[2025.06.2]
released on: 17th of June 2025
- No changes
[2025.06.1]
released on: 17th of June 2025
- No changes
[2025.06.0]
released on: 16th of June 2025
Added
- Add a simpler JSON document based store in redis
Changed
- Changed source of lda parameters to backend’s redis store. Originally they were retrieved from MSS.
- Added proper HTTP status codes for failed REST API requests
- InvalidJobIdInUploadedFileError results in a 400 HTTP response (originally was 200)
- ItemNotFoundError results in a 404 HTTP response (originally was 200)
- JobAlreadyCancelled results in a 406 HTTP response (originally was 500)
 
- BREAKING: Change endpoint /v2/static-propertiesto/static-properties
- BREAKING: Change endpoint /v2/dynamic-propertiesto/dynamic-properties
- Rename the propertieslibrary todevice_parameters
- Upgraded to python 3.12
- Removed the deprecated qiskit-ibmq-providersdependency, moving its code into our lib folder
- Moved from requirements.txt to pyproject.toml setup
- Bumped up the version of fastapi to the latest (>=0.115.12)
- Added validation of job files when uploading jobs to /jobs
[2025.03.2]
released on: 7th of April 2025
Changed
- Remove stale fixtures
Fixed
- Fixed JSONDecodeError when application is run in systemd
[2025.03.1]
released on: 18th of March 2025
Changed
- No change
[2025.03.0]
released on: 18th of March 2025
Changed
- Removed the storage-file internal lib 
- Limited pyarrow to versions ‘18.0.0’ and below for macOS 
- Decouple data from algorithms in storage file 
- Decouple native job run from executor instance 
- Remove debug prints of qobj when running jobs 
- Rename the run_experiment and run methods of the QuantumEexcutor class to _run_native, run 
- Clean up qobj-to-quantify compilation 
- Removed Program 
- Removed the dag property of the NativeExperiment class 
- Enchanced the Channel class to track all instructions attached to it 
- Added the ‘to_operation’ method on the BaseInstruction of quantify, removing the long if-conditional QauntifyExperiment.schedule_operation method that was originally generating Operator’s 
- Replaced the looping of the DAG with the looping of the instructions on each channel 
- Created the ChannelRegistry dict-like class to track the state of all channels attached to an experiment 
- Deleted rot_left and ceil4 utility functions and other unused utility functions 
- Split FreqInstruction class to SetFreqInstruction and ShiftFreqInstruction 
- Split PhaseInstruction class to SetPhaseInstruction and ShiftPhaseInstruction 
- Added the QBLOX_TIMEGRID_INTERVAL constant 
- Moved the Instruction class in the quantum_executor/base folder to quantum_executor/quantify folder, renaming it to BaseInstruction 
- Removed the channels property from the NativeExperiment class 
- Added the channel_registry property on the QauntifyExperiment class 
- Moved the Channel definition from utils to the quantum_executor/quantify folder 
- Removed retworkx from the requirements.txt 
- Updated quantify-scheduler, quantify-core and qblox-instruments and pydantic versions 
- BREAKING CHANGE: Split cluster configurations into quantify-config.json and quantify-metadata.json 
- BREAKING CHANGE: Added a new configuration file calibration.seed.toml for seeding the database with calibration data 
- Enhanced the QuantifySchedule conversion to use parametric schedules and new portclock convention 
[2024.12.1]
released on: 20th of December 2024
Added
- Added Dockerfile.
- Added instructions how to run with docker.
- Added instructions how to run the qiskit_pulse_2q simulator in the configuration docs.
Changed
- Changed start_bcc.shscript to use redis connection obtained from the environment.
- Changed start_bcc.shscript to update the exported environment variables after reading from theENV_FILE.
- Updated Github action to deploy built multiplatform image to docker hub as something like tergite/tergite-backend
- Removed some redundant libraries in the requirements.txtfile.
- Removed some outdated docs.
[2024.12.0]
released on: 11th of December 2024
Added
- Added redis connection environment variables
- Added GitLab CI configuration
- Added storing of Qobj header data in the logfiles of the quantum jobs
- Qiskit dynamics simulator backend with two-qubit CZ gate (“qiskit_pulse_2q”)
- Added CouplerProps to Backend Configurations
- Added the coupling_dictto thebackend_config.toml
Fixed
- Fixed httpx version to 0.27.2 as 0.28.0 removes many deprecations that we were still dependent on in FastAPI testClient
Changed
- Removed the coupling_mapfrom thebackend_config.tomlas it is generated on-the-fly from thecoupling_dict.
[2024.09.1]
released on: 24th of September 2024
Fixed
- Fixed ‘KeyError’ when no units are not passed in the backend_config file
- Fixed “…bin/conda/activate: Not a directory” error when starting as systemd service
- Fixed silent error where calibrations are not sent to MSS on executor initialization
- Fixed “TypeError: Object of type datetime is not JSON serializable” when sending calibration data to MSS
- Fixed ‘SyntaxWarning: ’is not’ with a literal’ when initializing backend
[2024.09.0]
released on: 16th of September 2024
Added
- The QuantumExecutoras abstract class to implement a backend
- EXECUTOR_TYPEkeyword in the .env variables to select the backend
- Qiskit dynamics simulator backend with one qubit (“qiskit_pulse_1q”)
- Added the initialization of the redis store with configuration picked from the backend_config.tomlfile when the execution worker starts
- Added an initial request to update the backend information in MSS when the execution worker starts
Changed
- BREAKING CHANGE: EXECUTOR_DATA_DIRNAMEdefinition in the .env variables instead ofgeneral.data_dirinexecutor-config.yml
- BREAKING CHANGE: Removed the whole generalsection in theexecutor-config.yml
- BREAKING CHANGE: Renamed executor-config.ymltoquantify-config.yml
- Removed the old config files that were used for setting up automatic calibration
- Removed the script that loaded automatic calibration configurations at the start
- Moved the backend_config.tomlfile from/configsfolder
- Moved the propertiesservice to thelibsfolder
- Moved the storage,date_time,representationandloggingutils to thepropertieslib
- Removed the scriptsfolder
[2024.04.0]
released on 28th of May 2024
Initial Public Release
Added
- Added storage_file lib (formerly tergite-quantify-connector-storagefile)
- Added quantum_executorservice (formerly tergite-quantify-connector)
- Added the executor-config.ymland its python-based validators
Changed
- Changed the way discriminators are loaded to load from the database
- BREAKING_CHANGE: Removed hard-coded discriminators
- BREAKING_CHANGE: Removed official support for Python 3.8; Official support is now >=3.12
- BREAKING_CHANGE: Removed Labber support
- Replaced tergite-quantify-connector-storagefile package with an internal storage_file lib
- Moved unused files to archivefolder
- BREAKING_CHANGE: Removed calibration and two state discrimination source code
- BREAKING_CHANGE: Replaced tergite-quantify-connector-storagefile package with an internal storage_file lib
- BREAKING_CHANGE: Merged tergite-quantify-connector into tergite-backend and renamed its service to quantum_executor
- BREAKING_CHANGE: Changed configuration of hardware to use executor-config.ymlfile with proper validations on loading
- BREAKING_CHANGE: Removed support for Pulsar, or any other instrument drivers other thanCluster
 The old implementation wrongfully assumed that all these drivers have the same signature i.e.driver(name: str, identifier: str | None)
 yetSpiRack(name: str, address: str, baud_rate: int = 9600, timeout: float = 1, is_dummy: bool = False,),
 Pulsar(name: str, identifier: Optional[str] = None, port: Optional[int] = None, debug: Optional[int] = None, dummy_type: Optional[PulsarType] = None,)
 Cluster(name: str, identifier: Optional[str] = None, port: Optional[int] = None, debug: Optional[int] = None, dummy_type: Optional[PulsarType] = None)are all different.
 
- BREAKING_CHANGE: We got rid of quantify connector’s redundant reset() method.
- BREAKING_CHANGE: Changed backend name used when querying MSS for backend properties to be equal to settings.DEFAULT_PREFIX
Fixed
- Fixed duplicate job uploads to respond with HTTP 409