GithubHelp home page GithubHelp logo

aqueducthub / aqueductcore Goto Github PK

View Code? Open in Web Editor NEW
23.0 23.0 3.0 2.81 MB

Aqueduct Core is responsible for the core functionality of Aqueduct, an experiment management system.

Home Page: https://aqueducthub.github.io/aqueductcore/

License: MIT License

Python 44.16% Mako 0.10% JavaScript 0.27% TypeScript 52.21% HTML 0.26% MDX 0.84% CSS 0.08% Shell 1.63% Dockerfile 0.45%
data-pipeline experiment-control quantum-computing software

aqueductcore's People

Contributors

gabrielg42 avatar jatinriverlane avatar jmuff22 avatar safeamiiir avatar samiralavi avatar sishtiaq avatar str-anger avatar tomhartley avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

aqueductcore's Issues

Define a plugin packaging and installation strategy

Define and implement how a separate plugin can/should be delivered to a installation of the aqueduct.
Take into account:

  1. Probably, installation is a docker container.
  2. Uploading via UI will require to create additional frontend screen.
  3. Uploading via pyaqueduct is simpler.

Add Changelog

Hi, would you be willing to add a changelog file describing changes between releases? I noticed that new features have been added to the development version, however to find what features have been added I need to look through the PR/commit history. Would you consider adding a changelog?

Regards,
Jake

API enhancement request

Describe the bug
It's a request to modify API fields for better simplicity and common sense alignment.

Current API
1- The unique identifier which is referred to by the name id is better to be changed to uuid
2- The experiment id which is referred to by the name alias is better to be changed to eid
3- Also, it's good to separate the favourite and archive functionality from being a special tag and being considered as a field in the Database which improves query efficiency and API usage.

Additional context
I also see that there will be breaking changes with Aqueduct-core and pyAqueduct.

New feature: being able to execute plugins

I want Aqueduct being able to execute plugin-like code. This includes:

  • having infrastructure (GraphQL endpoints) to store and list plugins
  • having code to execute a particular plugin function (also, GraphQL endpoint).
  • having simple examples to implement my own plugins.

Implement Modal component for extensions

Implement the Modal component which is responsible for the extension's input, including

  • Run button
  • Left-side function list (Card)
  • This ticket task also relies on #108 to have different extensions' input components

New module for importing Aqueduct instance data (Core)

Exported Artifact

The exported artifact from Aqueduct will have two main data items:

Experiments metadata: This is mainly database records and their relations alongside extra information bits about the version of Aqueduct, the user that has created them, etc.

Experiments' files: These are the experiment files uploaded by the users or generated by the plugins.

The exported artifact is going to be a single tar.gz* file that has the following directory structure:

artifact
|   metadata.json
|
----experiment_files
|
--------[UUID of experiment]
|       |   ...

  • Python supports most of the main compression methods through different libraries. The trade-off is mainly between compression speed versus compressed size. I think gunzip (tar.gz) has a good balance, which is why it is pretty common, but this is open to discussion. More here: All The Ways to Compress and Archive Files in Python

Exported Experiments metadata Format

Based on the requirements of exporting data into a text document, the usual options are JSON and YAML. JSON is a better solution for data transfer as it can be minimised by removing white spaces and there is more support for parsing JSON rather than YAML, for example, Pydantic is based on JSON. Furthermore, if size was a problem. JSON can be converted to CBOR, which is an IETF standard for binary representation of JSON documents.

The JSON schema is version-less on its own, but it can include metadata to show the version and other information about the Aqueduct instance it was exported from.

Frontend changes to enable removal of Experiment

Backend changes for the removal of experiment is implemented and can be done using GraphQL mutation of removeExperiment. We need to have some frontend functionality like a button on experiment details page or some other UI component.

DoD:

Interacting with the experiment removal component results in deletion of experiment from the database and deletion of all the files related to that experiment.

Decide (and then implement) isolation strategy for plugin execution

  1. Should we restrict the executing user in the final version?

  2. Should we isolate execution environment?

  • Non-isolated environment allow users be sure that whatever works on their server machine is available to plugin context. If we isolate the environment, we put additional burden on developers to take care of dependencies separately.
  1. Which libraries/binaries should we make available for plugin developers? And how?
  • If we do not isolate, we may define dependencies as dependencies of Aqueductcore – plugins are executed in its context. If we isolate, probably some kind of dockerfile should be given to users.

Broken links in README

Describe the bug
Some links in README.md are not taking you to a correct place.

Steps to Reproduce

  1. Click through all of them.
  2. Update the right destination.

Mutation for adding multiple tags in one call to an experiment

addTagToExperiment mutation only accepts a single tag as an argument. If the API users want to add multiple tags in an atomic way, it is not possible. (updateExperiment mutation can be used but it reassigns the tags, not addition). A new or updated mutation is needed to add a list of tags to experiments in a transactional way.

This issue is related to this use case in PyAqueduct: AqueductHub/pyaqueduct#12

Preview Markdown

Is your feature request related to a problem? Please describe.
I wanted to be able to preview Markdown files in the GUI

Describe the solution you'd like
To add a new feature which enables .md files to be shown in the file explorer inside experiment details.

Additional context
It also should understand relative links to the files living next to the markdown file in the same experiment.

Explore how to run plugin as a job

Plugin execution may take time. To track plugin execution and be able to address plugin execution history, we should be able to execute plugins as jobs. This includes:

  1. Running them asynchronously in a job pool.
  2. Have job IDs.
  3. Storing job IDs in a database.
  4. Storing job statuses in a database (?).
  5. Storing job execution result in a database.
  6. Exposing job listing and job info access.

CLI interface for importing/exporting instance data (Core)

Interface for Importing/Exporting Data

Import and Export functionality runs by the admin user through the CLI interface of Aqueductcore. Depending on the installation of Aqueductcore (docker container, python package, source code, etc…), the user first needs to establish a terminal to the environment where Aqueductcore is installed. The environment should already have the required prerequisites and variables. Then the specified command can be executed like this:

> aqueductcore export [file path] -e/--experiment-files
> aqueductcore import[file path]

The -e/--experiment-files argument is a flag that determines if experiment files should be included or not. By default, if the flag is not provided, it has false value and experiment files won’t be exported.

The decision of partial (without experiments' files) or full (with experiments' files) export/import is left to the user. Partial export is useful when the file server is a NAS (network-attached storage) and it will be used for the new instance.

Implement plugin for QEC-X

Implement plugin functions of QEC-X which are exposed to QEC-X.
This task should carefully consider authentication and data processing. Having local Aqueduct installation and cloud QEC-X installation:

  1. QEC-X will need a separate authentication mechanism.
  2. Aqueduct should be accessible from the outer network.

Partial solution is DataString, but this still require QEC-X authentication.

New module for exporting Aqueduct instance data (Core)

Exported Artifact

The exported artifact from Aqueduct will have two main data items:

Experiments metadata: This is mainly database records and their relations alongside extra information bits about the version of Aqueduct, the user that has created them, etc.

Experiments' files: These are the experiment files uploaded by the users or generated by the plugins.

The exported artifact is going to be a single tar.gz* file that has the following directory structure:

artifact
|   metadata.json
|
----experiment_files
|
--------[UUID of experiment]
|       |   ...

  • Python supports most of the main compression methods through different libraries. The trade-off is mainly between compression speed versus compressed size. I think gunzip (tar.gz) has a good balance, which is why it is pretty common, but this is open to discussion. More here: All The Ways to Compress and Archive Files in Python

Exported Experiments metadata Format

Based on the requirements of exporting data into a text document, the usual options are JSON and YAML. JSON is a better solution for data transfer as it can be minimised by removing white spaces and there is more support for parsing JSON rather than YAML, for example, Pydantic is based on JSON. Furthermore, if size was a problem. JSON can be converted to CBOR, which is an IETF standard for binary representation of JSON documents.

The JSON schema is version-less on its own, but it can include metadata to show the version and other information about the Aqueduct instance it was exported from.

Implement changes to plugin manifest processing and interfaces

  1. Support default values in variable definition
  2. Support bool type (checkbox)
  3. multiline -> textarea
  4. Dropdown strings (select -> option?)
  5. Save log into an experiment; return a file name
  6. Expose a single experiment for a function
  7. implement display_name field for parameters

Feature request: Support subdirectories in file attachments of experiments

Hi,

For larger experiments that generate a lot of data, it would be useful to group related files (e.g. plots) in subdirectories for easier browsing of the data. Currently, I have to look through a few dozens of files to find the correct one.

Is this something you are planning to support?

Cheers,

Jerome

CI doesn't run of feature branches

The github actions that are supposed to run for tests and PRs are not run when the branch is different than feat-*. As the guideline suggests using feat/* for branch naming, the workflows have to be updated to understand this pattern instead.

Support for different timezones

The timestamp of the experiments when they are stored in the database is localized, which could be problematic for certain use cases that require showing the experiments in different time zones. This can be fixed by saving the UTC datetimes in the database and only convert them to the local time zone when displaying them.

Definition of Done:

  • Stored datetime in database in UTC
  • Display time on the frontend in local time zone

Documentation preview per pull requestion with URL commented

The documentation of Aqueduct can not be previewed in a PR that has changed the docs because there is no staging environment or workflow for that. An idea taken from FastAPI repository is to use Cloudflare Pages service which is a free service to host staging static website. Further information about how it works is here:

https://github.com/cloudflare/pages-action
https://github.com/tiangolo/fastapi/blob/master/.github/workflows/deploy-docs.yml

Create dynamic UI design for plugin parameters collection

The screen is generated according to endpoint declaration and builds a form to populate with values.
To start these might be:

  • Experiment dropdown (with search) -- PROBABLY if we don't add this to experiment UI
  • File dropdown inside experiment
  • string, multiline string, float, int.

Link documentation to the left-hand sidebar

As a user, I want to have access to the documentation of the Aqueduct and it’s a new item in the left-side bar which should have an external link icon to indicate it’s an eternal link.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.