openapi: 3.0.2 info: title: Mantik minimal API description: 'The API serves the front end with all necessary information on projects, and users.' version: 0.1.0 components: schemas: AddRun: type: object description: Necessary information reproduce a run properties: experimentRepository: $ref: '#/components/schemas/ExperimentRepository' modelRepository: $ref: '#/components/schemas/ModelRepository' dataRepository: $ref: '#/components/schemas/DataRepository' connection: $ref: '#/components/schemas/Connection' CodeRepository: type: object description: 'Represents a code repository, usually (but not exclusively) one of github, gitlab, bitbucket' properties: codeRepositoryId: type: string format: uuid codeRepositoryName: type: string uri: type: string accessToken: type: string description: type: string labels: type: array items: $ref: '#/components/schemas/Label' required: - codeRepositoryId - uri Connection: type: object description: 'Represents a connection to a third-party platform, usually either HPC or cloud platform credentials' properties: connectionId: type: string format: uuid connectionName: type: string connectionProvider: type: string loginName: type: string password: type: string token: type: string authMethod: type: string required: - connectionId - connectionName - connectionProvider DataRepository: type: object description: Represents a data repository properties: dataRepositoryId: type: string format: uuid dataRepositoryName: type: string uri: type: string accessToken: type: string description: type: string labels: type: array items: $ref: '#/components/schemas/Label' required: - dataRepositoryId - uri ErrorMessage: type: string maxLength: 1024 description: An error message ExperimentRepository: type: object description: 'Represents an mlflow experiment, see also [mlflow API specification](https://www.mlflow.org/docs/latest/rest-api.html#mlflowexperiment)' properties: experimentId: type: string format: uuid name: type: string artifact_location: type: string lifecycle_stage: type: string last_update_time: type: integer creation_time: type: integer labels: type: array items: $ref: '#/components/schemas/Label' required: - experimentId Label: type: object description: Represents a label or a (MLFlow-)Tag depending on the presence of the value parameter properties: scope: type: string name: type: string value: type: string required: - scope - name ModelRepository: type: object description: Represents an untrained model definition properties: modelRepositoryId: type: string format: uuid uri: type: string description: type: string git: $ref: '#/components/schemas/CodeRepository' commit: type: string labels: type: array items: $ref: '#/components/schemas/Label' required: - modelRepositoryId SavedModelRepository: type: object description: Represents a trained model properties: trainedModelRepositoryId: type: string modelRepository: $ref: '#/components/schemas/ModelRepository' uri: type: string required: - trainedModelRepositoryId - uri Organization: type: object description: 'Represents an organization, i.e. a collection of user groups and users' properties: organizationId: type: string format: uuid name: type: string contact: $ref: '#/components/schemas/User' groups: type: array items: $ref: '#/components/schemas/UserGroup' members: type: array items: $ref: '#/components/schemas/User' required: - organizationId - name - contact PaginationResponse: type: object properties: totalrecords: type: integer required: - totalrecords PaymentInfo: type: object description: Represents payment information properties: paymentInfoId: type: string format: uuid address: type: string paymentMethod: type: string paymentDetails: type: string required: - paymentInfoId - address - paymentMethod - paymentDetails Project: type: object description: 'A project is a collection of code, experiments, data and models with permission management (owner, members, groups)' properties: projectId: type: string format: uuid name: type: string executiveSummary: type: string detailedDescription: type: string owner: $ref: '#/components/schemas/User' members: type: array items: type: object properties: allowedToEdit: type: boolean user: $ref: '#/components/schemas/User' userGroups: type: array items: type: object properties: allowedToEdit: type: boolean userGroup: $ref: '#/components/schemas/UserGroup' codeRepositories: type: array items: $ref: '#/components/schemas/CodeRepository' experimentRepositories: type: array items: $ref: '#/components/schemas/ExperimentRepository' dataRepositories: type: array items: $ref: '#/components/schemas/DataRepository' labels: type: array items: $ref: '#/components/schemas/Label' public: type: boolean required: - projectId - owner Run: type: object description: 'Represents a quadruple of experiment, code, data and hardware-configuration' properties: run_id: type: string experimentRepository: $ref: '#/components/schemas/ExperimentRepository' modelRepository: $ref: '#/components/schemas/ModelRepository' savedModel: $ref: '#/components/schemas/SavedModelRepository' dataRepository: $ref: '#/components/schemas/DataRepository' connections: $ref: '#/components/schemas/Connection' experiment_id: type: string user_id: type: string status: type: string enum: - RUNNING - SCHEDULED - FINISHED - FAILED - KILLED start_time: type: integer end_time: type: integer artifact_uri: type: string lifecycle_stage: type: string RunsByCodeRepository: type: object description: Runs grouped by codeRepository used properties: codeRepository: $ref: '#/components/schemas/CodeRepository' usage: type: array items: type: object properties: experimentRepository: $ref: '#/components/schemas/ExperimentRepository' modelRepository: $ref: '#/components/schemas/ModelRepository' dataRepository: $ref: '#/components/schemas/DataRepository' connection: $ref: '#/components/schemas/Connection' RunsByDataRepository: type: object description: Runs grouped by the data used properties: dataRepository: $ref: '#/components/schemas/DataRepository' usage: type: array items: type: object properties: experimentRepository: $ref: '#/components/schemas/ExperimentRepository' modelRepository: $ref: '#/components/schemas/ModelRepository' connection: $ref: '#/components/schemas/Connection' RunsByExperiment: type: object description: Runs grouped by expiment used properties: experimentRepository: $ref: '#/components/schemas/ExperimentRepository' usage: type: array items: type: object properties: modelRepository: $ref: '#/components/schemas/ModelRepository' dataRepository: $ref: '#/components/schemas/DataRepository' connection: $ref: '#/components/schemas/Connection' RunsByModel: type: object description: Runs grouped by model used properties: modelRepository: $ref: '#/components/schemas/ModelRepository' usage: type: array items: type: object properties: experimentRepository: $ref: '#/components/schemas/ExperimentRepository' dataRepository: $ref: '#/components/schemas/DataRepository' connection: $ref: '#/components/schemas/Connection' UserSettings: type: object description: User settings properties: user: $ref: '#/components/schemas/User' password: type: string token: type: string paymentInfo: $ref: '#/components/schemas/PaymentInfo' connections: type: array items: $ref: '#/components/schemas/Connection' required: - user - password User: type: object description: Represents a user properties: userId: type: string format: uuid name: type: string email: type: string required: - userId - name - email UserGroup: type: object description: Represents a user group properties: userGroupId: type: string format: uuid name: type: string admin: $ref: '#/components/schemas/User' members: type: array items: $ref: '#/components/schemas/User' required: - userGroupId - name - admin DeploymentInformation: type: object description: Information on a deployment properties: deploymentId: type: string format: uuid savedModelId: $ref: '#/components/schemas/SavedModelRepository' connection: $ref: '#/components/schemas/Connection' resources: $ref: '#/components/schemas/Resources' cronString: type: string Resources: type: object additionalProperties: {} PredictionRequest: type: object additionalProperties: {} PredictionResponse: type: object additionalProperties: {} PackagedDeployment: type: object properties: apptainerImageUri: type: string EntryPoint: type: object description: Represents an entry point of a repository properties: name: type: string parameters: type: array items: type: object properties: name: type: string type: type: string default: type: string required: - name - type required: - name DeploymentMode: type: object description: Represents an deployment mode of a repository properties: name: type: string parameters: type: object additionalProperties: {} required: - name parameters: PageLength: name: pagelength in: query description: Number of records to return schema: minimum: 1 maximum: 200 default: 50 type: integer StartIndex: name: startindex in: query description: Start index for paging schema: minimum: 0 type: integer paths: /users: get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: List of all users description: List of all users (admin only) responses: '200': description: OK content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: users: type: array items: $ref: '#/components/schemas/User' examples: exampleUsers: value: totalrecords: 5 users: - $ref: '#/paths/~1users~1%7BuserId%7D/get/responses/200/content/application~1json/examples/exampleUser/value' - userId: 58e40243-6dc1-42c6-bbab-cd39f087c86b name: Kristian Ehlert email: kristian.ehlert@4-cast.de - userId: a8f831b6-ac1e-4172-88f4-9ecabd6c513d name: Philipp Lehmann email: philipp.lehmann@pcode.at - userId: aec38e96-b39e-4849-bec8-cb11828da29a name: Daniel Weidinger email: daniel.weidinger@pcode.at - $ref: '#/paths/~1groups~1%7BgroupId%7D/get/responses/200/content/application~1json/examples/exampleUserGroup/value/admin' put: summary: Creates a new user requestBody: description: Creates a new user required: true content: application/json: schema: type: object properties: userName: type: string email: type: string example: userName: black_panther email: panther@road_to_nowhere.wakanda responses: '201': description: Successfully created user content: application/json: schema: type: object properties: userId: type: string format: uuid /users/search: parameters: - name: searchString in: query schema: type: string get: summary: Return a curation of users by searchString responses: '200': description: Successfully returned users that match the search content: application/json: schema: users: type: array items: $ref: '#/components/schemas/User' examples: exampleUsers: value: $ref: '#/paths/~1users/get/responses/200/content/application~1json/examples/exampleUsers/value' '/users/{userId}': parameters: - name: userId in: path required: true schema: type: string format: uuid get: summary: Returns the information on a specific user responses: '200': description: A json array with user information content: application/json: schema: $ref: '#/components/schemas/User' examples: exampleUser: value: userId: c9de9883-5efc-4b4d-b156-9fe5acce8975 name: Fabian Emmerich email: fabian.emmerich@4-cast.de post: summary: Update user info requestBody: description: Updated user info required: true content: application/json: schema: $ref: '#/components/schemas/User' responses: '200': description: Successfully updated user '/users/{userId}/settings': parameters: - name: userId in: path required: true schema: type: string format: uuid get: summary: Returns the settings for a specific user responses: '200': description: OK content: application/json: schema: type: object properties: settings: $ref: '#/components/schemas/UserSettings' post: summary: Updates user settings requestBody: description: Updated user settings required: true content: application/json: schema: $ref: '#/components/schemas/UserSettings' responses: '200': description: Successfully updated settings /projects: get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Returns all projects (admin only) responses: '200': description: OK content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: projects: type: array items: $ref: '#/components/schemas/Project' examples: exampleProjects: value: totalrecords: 1 projects: - $ref: '#/paths/~1projects~1%7BprojectId%7D/get/responses/200/content/application~1json/examples/exampleProject/value' - projectId: 3691ce5e-ee97-4aad-ae16-4ff1b3f1a98d name: Maelstrom Application 2 - Incorporate social media data into the prediction framework description: short: Predict presence of precipitation based on text of tweets long: '# Obtain weather related information from Tweets\n\nTo improve predictions of the weather, we would like to harvest weather related information from social media sources. In practice, we aim to predict the presence of rain based on tweets. \nWe employ transformer based deep learning models like [DeBerta](https://arxiv.org/abs/2006.03654) with a classification head. \nDatasets\nWe use historical tweets from the years 2017-2020 that include keywords related to the presence of rain, e.g. rain, sunny or drizzle. Location needs to be attached to these tweets such that we can assign weather data to them. Locations can be assigned to Tweets in two ways. The user may opt in to be tracked by Twitter such that GPS data is assigned to every tweet of the location of the user. Alternatively, users can tag their tweets from a curated list of locations by Twitter. We use Tweets with locations from either method. However, we exclude tweets that are tagged with a location with surface area greater than 100 km2, which corresponds to the spatial resolution of our weather data. Here, we focus on tweets in the English language that originate from any location within the United Kingdom. This allows us to resort to the most popular pretrained models in natural language processing (NLP), which are usually trained in English. \nTo improve results, texts are preprocessed to match vocabulary of the model and the input as well as focusing the model''s attention on the relevant parts of the text. We remove hyperlinks and hashtags (unless they represent a keyword) and rephrase colloquial terms. If emojis are directly related to precipitation, e.g. umbrella, rain cloud, these emojis are converted to text. Remaining emojis are removed from the text. For training, we only retain texts that still contain at least one keyword after preprocessing.\nMetrics and loss function\nWe use cross entropy as our loss function. The proficiency of the model is evaluated via the f1 score of the minority class (not raining). The f1 score is the harmonic mean of the precision and recall.\nOverview models\nGenerally, our problem can be phrased as a text classification task, where deep learning models based on the transformer architecture (Vaswani et al. 2017) achieve state of the art results (e.g., Yang et al. 2019). Transformers use self-attention to attribute varying relevance to different parts of the text. Based on transformers the BERT model was developed (Devlin et al. 2019), which includes crucial pre-training steps to familiarise the model with relevant vocabulary and semantics. In addition, the DeBERTa model (He et al. 2021a) adds additional pre-training steps and disentangles how positional and text information is stored in the model to improve performance. For this experiment we rely on the most recent version of the model, which is DeBERTaV3 (He et al. 2021b).\nWe use the default version of DeBERTaV3_small as described in He et al. 2021b with an adopted head for text classification. For this, we add a dropout layer with user-specified dropout rate and a pooling layer that passes the embedding of the special initial token, which supposedly comprises the meaning of the whole Tweet, to the loss function.\n' owner: $ref: '#/paths/~1users/get/responses/200/content/application~1json/examples/exampleUsers/value/users/1' members: - $ref: '#/paths/~1users/get/responses/200/content/application~1json/examples/exampleUsers/value/users/1' groups: - $ref: '#/paths/~1groups/get/responses/200/content/application~1json/examples/exampleUserGroups/value/userGroups/1' codeRepositories: - totalrecords: 2 codeRepositories: - $ref: '#/paths/~1projects~1%7BprojectId%7D~1code~1%7BcodeRepositoryId%7D/get/responses/200/content/application~1json/examples/exampleCodeRepository/value' - codeRepositoryId: a52bd0da-603e-4c77-a948-b9141b305246 uri: 'https://gl.ambrosys.de/mantik/maelstrom/a2' description: GitLab repository of code used for Maelstrom Application 2 - Social Media Analysis of Weather Data labels: - scope: gitlab-repo name: A2 repository experimentRepositories: - totalrecords: 1 codeRepositories: - experimentId: d0da456c-f3d7-4486-a9d0-397d1ae22d93 name: fakeexample2 artifact_location: /artifacts/experiments/fakeexample2 lifecycle_stage: idontknow last_update_time: 1 creation_time: 0 labels: - scope: problem-type name: Classification dataRepositories: - totalrecords: 2 dataRepositories: - $ref: '#/paths/~1projects~1%7BprojectId%7D~1data~1%7BdataRepositoryId%7D/get/responses/200/content/application~1json/examples/exampleDataRepository/value' - dataRepositoryId: f51d6933-5718-464f-8252-8821ed2bf725 uri: 'https://twitter.com' description: 'Dataset comprises tweets that include weather related keywords and/or emojis. In addition, only tweets with an assigned location are included. The tweets cover years from 2017-2020. The data contains around 2 million tweets.' labels: - scope: tweets name: rain keyword tweets labels: - $ref: '#/paths/~1labels~1search/get/responses/200/content/application~1json/examples/exampleLabels/value/labels/0' - $ref: '#/paths/~1labels~1search/get/responses/200/content/application~1json/examples/exampleLabels/value/labels/3' - $ref: '#/paths/~1labels~1search/get/responses/200/content/application~1json/examples/exampleLabels/value/labels/4' put: summary: Creates a new project requestBody: description: Project information required: true content: application/json: schema: $ref: '#/components/schemas/Project' responses: '201': description: Created new project content: application/json: schema: type: object properties: projectId: type: string format: uuid '/projects/user/{userId}': parameters: - name: userId in: path required: true schema: type: string format: uuid get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Returns all projects for user with userId responses: '200': description: OK content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: projects: type: array items: $ref: '#/components/schemas/Project' examples: exampleUserProjects: value: $ref: '#/paths/~1projects/get/responses/200/content/application~1json/examples/exampleProjects/value' '/projects/{projectId}': parameters: - name: projectId in: path required: true schema: type: string format: uuid get: summary: Returns the information on a specific project responses: '200': description: Information on a specific project content: application/json: schema: $ref: '#/components/schemas/Project' examples: exampleProject: value: projectId: fe02e72c-ea75-4d31-a154-381e83c6bf13 name: Maelstrom Application 6 - Large-Scale Weather Regime Classification executiveSummary: Classification of large-scale weather regimes for power prediction of renewable energy resources. detailedDescription: '# PCA and Clustering of Weather Data Features\n\nThe goal is to classify large-scale weather regimes (LSWRs) by performing a PCA on timeseries data containing multiple phyiscal quantities on a large grid covering the whole of Europe.\nClassification is done by applying a clustering algorithm on the data that assigns each individual time step to a cluster, where outliers are allowed.\n\nTo allow classification of timeseries grid data, we apply a dimensionality reduction algorithm (PCA) and transform the original data into PC space. The PC space is a multi-dimensional space that represents the phase space of the dynamical system described by the data. To avoid the curse of dimensions, we use only a reduced amount of PCs for the transformation such that the PCs reflect most of the variance of the data.\n\nFor clustering the states of the dynamical system in PC space, we use the [hierarchical density-based spatial clustering algorithm for applications with noise (HDBSCAN)](https://arxiv.org/abs/1911.02282), which is a modification of the [DBSCAN](https://dl.acm.org/doi/10.5555/3001460.3001507) algorithm.\n\n## PCA\n\nThe PCA is performed on the whole dataset, whereas only 3 PCs are kept for the transformation. This is because we only have `10^3` data samples. Choosing more PCs would require more data (curse of dimensions). I.e., using `N` PCs would require at least `10^N` samples.\n\n## Clustering\n\nBefore applying the clustering, the data are transformed into the 3-D sub-space of the PC-space. The result reflects the phase space containing all states of the dynamical system throughout the given time span.\n\nWithin this space, we perform a clustering to find reoccuring states of the system. Each cluster represents a LSWR, i.e. all clusters represent the ensemble of LSWRs that our system resided in during the given time range. Each data point in a cluster hence reflects the time steps within the timeseries where the LSWR of the respective cluster appeared.\n\n## Statistical Analysis of the Clusters\n\nThe clusters (LSWRs) are then statistically analyzed such that we retrieve information about the LSWRs in general (total abundance, mean and standard deviation of their duration). In addition, we visualize the appearance of individual LSWR clusters at all time steps.\n' owner: $ref: '#/paths/~1users~1%7BuserId%7D/get/responses/200/content/application~1json/examples/exampleUser/value' members: - allowedToEdit: false user: $ref: '#/paths/~1users~1%7BuserId%7D/get/responses/200/content/application~1json/examples/exampleUser/value' - allowedToEdit: true user: $ref: '#/paths/~1users/get/responses/200/content/application~1json/examples/exampleUsers/value/users/1' userGroups: - allowedToEdit: true userGroup: $ref: '#/paths/~1groups~1%7BgroupId%7D/get/responses/200/content/application~1json/examples/exampleUserGroup/value' - allowedToEdit: false userGroup: $ref: '#/paths/~1groups/get/responses/200/content/application~1json/examples/exampleUserGroups/value/userGroups/1' public: false codeRepositories: - $ref: '#/paths/~1projects~1%7BprojectId%7D~1code/get/responses/200/content/application~1json/examples/exampleProject/value' experimentRepositories: - $ref: '#/paths/~1projects~1%7BprojectId%7D~1experiments/get/responses/200/content/application~1json/examples/exampleExperimentRepositories/value' dataRepositories: - $ref: '#/paths/~1projects~1%7BprojectId%7D~1data/get/responses/200/content/application~1json/examples/exampleDataRepositories/value' labels: - $ref: '#/paths/~1labels~1search/get/responses/200/content/application~1json/examples/exampleLabels/value/labels/0' - $ref: '#/paths/~1labels~1search/get/responses/200/content/application~1json/examples/exampleLabels/value/labels/1' - $ref: '#/paths/~1labels~1search/get/responses/200/content/application~1json/examples/exampleLabels/value/labels/2' post: summary: Update project requestBody: description: Updated project information required: true content: application/json: schema: $ref: '#/components/schemas/Project' responses: '200': description: Successfully updated project information '/projects/{projectId}/code': parameters: - name: projectId in: path required: true schema: type: string format: uuid get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Returns code entries for given project responses: '200': description: Code entries for given project content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: codeRepositories: type: array items: $ref: '#/components/schemas/CodeRepository' examples: exampleProject: value: totalrecords: 1 codeRepositories: - $ref: '#/paths/~1projects~1%7BprojectId%7D~1code~1%7BcodeRepositoryId%7D/get/responses/200/content/application~1json/examples/exampleCodeRepository/value' put: summary: Add code repository requestBody: description: Added code repository information required: true content: application/json: schema: $ref: '#/components/schemas/CodeRepository' responses: '201': description: Successfully added code repository content: application/json: schema: type: object properties: codeRepositoryId: type: string '/projects/{projectId}/code/usage': parameters: - name: projectId in: path required: true schema: type: string format: uuid get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Returns all codeRepos for given project and runs that the codeRepos were used in responses: '200': description: CodeRepos for given project with their respective runs content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: codeRepositoriesWithUsage: type: array items: $ref: '#/components/schemas/RunsByCodeRepository' '/projects/{projectId}/code/{codeRepositoryId}': parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: codeRepositoryId in: path required: true schema: type: string format: uuid get: summary: Returns code entry for given project responses: '200': description: Code entry for given project content: application/json: schema: $ref: '#/components/schemas/CodeRepository' examples: exampleCodeRepository: value: codeRepositoryId: 9de98a78-ff41-4148-97e7-ebe893979c66 codeRepositoryName: mantik-tutorials-github-repo uri: 'https://github.com/mantik-ai/tutorials' description: GitHub repo containing examples on how to use mantik labels: - $ref: '#/paths/~1labels~1search/get/responses/200/content/application~1json/examples/exampleLabels/value/labels/5' post: summary: Updates code repository requestBody: description: Updated code repository information required: true content: application/json: schema: $ref: '#/components/schemas/CodeRepository' responses: '200': description: Successfully updated code repository '/projects/{projectId}/data': parameters: - name: projectId in: path required: true schema: type: string format: uuid get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Returns data entries for given project responses: '200': description: Data entries for given project content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: dataRepositories: type: array items: $ref: '#/components/schemas/DataRepository' examples: exampleDataRepositories: value: totalrecords: 1 dataRepositories: - $ref: '#/paths/~1projects~1%7BprojectId%7D~1data~1%7BdataRepositoryId%7D/get/responses/200/content/application~1json/examples/exampleDataRepository/value' put: summary: Add data repository requestBody: description: Added data repository information required: true content: application/json: schema: $ref: '#/components/schemas/DataRepository' responses: '201': description: Successfully added data repository content: application/json: schema: type: object properties: dataRepositoryId: type: string '/projects/{projectId}/data/usage': parameters: - name: projectId in: path required: true schema: type: string format: uuid get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Returns data entries for given project and runs grouped by the data responses: '200': description: Data entries for given project with their respective runs content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: dataRepositoriesWithUsage: type: array items: $ref: '#/components/schemas/RunsByDataRepository' '/projects/{projectId}/data/{dataRepositoryId}': parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: dataRepositoryId in: path required: true schema: type: string format: uuid get: summary: Returns data entry for given project responses: '200': description: Data entry for given project content: application/json: schema: $ref: '#/components/schemas/DataRepository' examples: exampleDataRepository: value: dataRepositoryId: 1b367c25-341a-41a9-8a80-554c43a69ff5 dataRepositoryName: constants-ab uri: 'https://storage.ecmwf.europeanweather.cloud/MAELSTROM_AP6/ECMWF_AB137.nc' description: 'The underlying data is taken from the ECMWF IFS HRES model. A detailed description can be found [here (pp. 21)](https://www.maelstrom-eurohpc.eu/content/docs/uploads/doc6.pdf). The data covers a time range of 2017-2020 with an hourly temporal resolution. Hence, the data contains `~10^3` samples.' labels: - $ref: '#/paths/~1labels~1search/get/responses/200/content/application~1json/examples/exampleLabels/value/labels/6' post: summary: Update data repository requestBody: description: Updated data repository information required: true content: application/json: schema: $ref: '#/components/schemas/DataRepository' responses: '200': description: Successfully updated code repository '/projects/{projectId}/experiments': parameters: - name: projectId in: path required: true schema: type: string format: uuid get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Returns experiment entries for given project responses: '200': description: Experiment entries for given project content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: experimentRepositories: type: array items: $ref: '#/components/schemas/ExperimentRepository' examples: exampleExperimentRepositories: value: totalrecords: 1 codeRepositories: - $ref: '#/paths/~1projects~1%7BprojectId%7D~1experiments~1%7BexperimentRepositoryId%7D/get/responses/200/content/application~1json/examples/exampleExperimentRepository/value' put: summary: Add experiment repository requestBody: description: Added data repository information required: true content: application/json: schema: $ref: '#/components/schemas/ExperimentRepository' responses: '201': description: Successfully added experiment repository content: application/json: schema: type: object properties: experimentRepositoryId: type: string '/projects/{projectId}/experiments/usage': parameters: - name: projectId in: path required: true schema: type: string format: uuid get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Returns all experiments for given project and runs that the experiments were used in responses: '200': description: Experiments for given project with their respective runs content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: experimentsWithUsage: type: array items: $ref: '#/components/schemas/RunsByExperiment' '/projects/{projectId}/experiments/{experimentRepositoryId}': parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: experimentRepositoryId in: path required: true schema: type: string format: uuid get: summary: Returns experiment entry for given project responses: '200': description: Experiment entry for given project content: application/json: schema: $ref: '#/components/schemas/ExperimentRepository' examples: exampleExperimentRepository: value: experimentId: 61cf7b16-c9b5-458c-9e1c-d5c74587ad1d name: example-experiment artifact_location: /artifacts/experiments/example-experiment lifecycle_stage: idontknow last_update_time: 1660744660 creation_time: 1660744660 labels: - scope: problem-type name: Classification post: summary: Update experiment repository requestBody: description: Updated data repository information required: true content: application/json: schema: $ref: '#/components/schemas/ExperimentRepository' responses: '200': description: Successfully updated experiment repository '/projects/{projectId}/models': parameters: - name: projectId in: path required: true schema: type: string format: uuid get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Returns model entries for given project responses: '200': description: Model entries for given project content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: modelRepositories: type: array items: $ref: '#/components/schemas/ModelRepository' examples: exampleModelRepositories: value: totalrecords: 1 modelRepositories: - $ref: '#/paths/~1projects~1%7BprojectId%7D~1models~1%7BmodelRepositoryId%7D/get/responses/200/content/application~1json/examples/exampleModelRepository/value' put: summary: Add model repository requestBody: description: Added model repository information required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/ModelRepository' responses: '201': description: Successfully added model repository content: application/json: schema: type: object properties: modelRepositoryId: type: string '/projects/{projectId}/models/usage': parameters: - name: projectId in: path required: true schema: type: string format: uuid get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Returns all models for given project and runs that the models were created in responses: '200': description: models for given project with their respective runs content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: modelsWithUsage: type: array items: $ref: '#/components/schemas/RunsByModel' '/projects/{projectId}/models/{modelRepositoryId}': parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: modelRepositoryId in: path required: true schema: type: string format: uuid get: summary: Returns model entry for given ID responses: '200': description: Model entry for given ID content: application/json: schema: $ref: '#/components/schemas/ModelRepository' examples: exampleModelRepository: value: modelRepositoryId: fb60b3a9-de33-40cc-ac3e-5ec3f684e85e uri: /artifacts/models/example-model git: $ref: '#/paths/~1projects~1%7BprojectId%7D~1code~1%7BcodeRepositoryId%7D/get/responses/200/content/application~1json/examples/exampleCodeRepository/value' commit: 726150341180ba37e56859c377d56aa7dd87985b labels: - scope: model-type name: Convolutional Neural Network post: summary: Update model repository requestBody: description: Updated model repository information required: true content: application/json: schema: $ref: '#/components/schemas/ModelRepository' responses: '200': description: Successfully updated model repository '/projects/{projectId}/runs': parameters: - name: projectId in: path required: true schema: type: string format: uuid get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Returns all runs for a given project responses: '200': description: OK content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: runs: type: array items: $ref: '#/components/schemas/Run' put: requestBody: description: Run information required: true content: application/json: schema: $ref: '#/components/schemas/AddRun' summary: Creates a new run responses: '201': description: Created new run content: application/json: schema: type: object properties: timestamp: type: string '/projects/user/{userId}/search': parameters: - name: userId in: path required: true schema: type: string format: uuid - name: searchString in: query schema: type: string - name: labels in: query schema: type: array items: $ref: '#/components/schemas/Label' - name: ownerId in: query description: The User that owns the project schema: type: string format: uuid - name: memberId in: query description: Filter search by Members of the project schema: type: string format: uuid - name: groupId in: query description: Filter search by User Group schema: type: string format: uuid - name: organizationId in: query description: Filter search by Organization membership of the Owner schema: type: string format: uuid get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Return a curation of projects tailored for a specific user with a set of search parameters responses: '200': description: Successfully returned projects that match the search content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: projects: type: array items: $ref: '#/components/schemas/Project' examples: exampleProjects: value: $ref: '#/paths/~1projects/get/responses/200/content/application~1json/examples/exampleProjects/value' '/projects/{projectId}/deployments': parameters: - name: projectId in: path required: true schema: type: string format: uuid get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: List all deployments responses: '200': description: Model entry for given ID content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: deployments: type: array items: $ref: '#/components/schemas/DeploymentInformation' example: totalrecords: 1 deployments: - $ref: '#/paths/~1projects~1%7BprojectId%7D~1deployments/put/requestBody/content/application~1json/example' put: summary: Create deployment requestBody: description: Deployment configuration required: true content: application/json: schema: $ref: '#/components/schemas/DeploymentInformation' example: deploymentId: c55a5b0f-3cf9-4490-b2ad-cd0243132aae trainedModelId: e4c9b747-2377-4e5f-9598-415c63e073e2 connection: connectionId: 161f7a85-d45a-4823-b2eb-7e8c83afec3b connectionName: JUWELS-JUDOOR connectionProvider: UNICORE resources: Queue: devel Nodes: 2 cronString: '* * * 1 *' responses: '201': description: Successfully deployed model content: application/json: schema: type: object properties: deplyomentId: type: string format: uuid example: deploymentId: 10 '/projects/{projectId}/deployments/{deploymentId}': parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: deploymentId in: path required: true schema: type: string format: uuid get: summary: Get deployment information responses: '200': description: Model entry for given ID content: application/json: schema: $ref: '#/components/schemas/DeploymentInformation' example: $ref: '#/paths/~1projects~1%7BprojectId%7D~1deployments/put/requestBody/content/application~1json/example' post: summary: Update deployment requestBody: description: Deployment configuration required: true content: application/json: schema: $ref: '#/components/schemas/DeploymentInformation' example: $ref: '#/paths/~1projects~1%7BprojectId%7D~1deployments/put/requestBody/content/application~1json/example' responses: '200': description: Successfully updated deployment delete: summary: Delete deployment responses: '200': description: Successfully deleted deployment '/projects/{projectId}/deployments/{deploymentId}/download': parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: deploymentId in: path required: true schema: type: string format: uuid get: summary: Download packaged deployment responses: '200': description: Model entry for given ID content: application/json: schema: $ref: '#/components/schemas/PackagedDeployment' example: apptainerImageUri: 'https://cloud.mantik.ai/registry/deployments/2' '/projects/{projectId}/deployments/{deploymentId}/predict': parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: deploymentId in: path required: true schema: type: string format: uuid get: summary: Get deployment information requestBody: description: 'Prediction request, including data' required: true content: application/json: schema: $ref: '#/components/schemas/PredictionRequest' example: x: '0': 0 '1': 1 '2': 2 'y': '0': 3 '1': 4 '2': 5 responses: '200': description: Model entry for given ID content: application/json: schema: $ref: '#/components/schemas/PredictionResponse' example: x: '0': 0 '1': 1 '2': 2 'y': '0': 3 '1': 4 '2': 5 /groups: get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Get all User group (admin only) responses: '200': description: Get all user groups content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: userGroups: type: array items: $ref: '#/components/schemas/UserGroup' examples: exampleUserGroups: value: totalrecords: 1 userGroups: - $ref: '#/paths/~1groups~1%7BgroupId%7D/get/responses/200/content/application~1json/examples/exampleUserGroup/value' - userGroupId: 50d8fafb-2541-44ea-a012-da377dcbd9c0 name: Maelstrom group admin: $ref: '#/paths/~1users/get/responses/200/content/application~1json/examples/exampleUsers/value/users/1' members: - $ref: '#/paths/~1users~1%7BuserId%7D/get/responses/200/content/application~1json/examples/exampleUser/value' - $ref: '#/paths/~1users/get/responses/200/content/application~1json/examples/exampleUsers/value/users/1' put: summary: Create a new user group requestBody: description: User group information required: true content: application/json: schema: $ref: '#/components/schemas/UserGroup' responses: '201': description: Created content: application/json: schema: type: object properties: groupId: type: string '/groups/{groupId}': parameters: - name: groupId in: path required: true schema: type: string format: uuid get: summary: Get Group information responses: '200': description: Get group information content: application/json: schema: $ref: '#/components/schemas/UserGroup' examples: exampleUserGroup: value: userGroupId: 3d27324b-fc31-4367-99b3-f9dc007768ee name: Ambrosys Team admin: userId: 130bd078-e792-4fdb-944c-ad6f692647af name: Markus Abel email: markus.abel@ambrosys.de members: - $ref: '#/paths/~1users~1%7BuserId%7D/get/responses/200/content/application~1json/examples/exampleUser/value' - $ref: '#/paths/~1users/get/responses/200/content/application~1json/examples/exampleUsers/value/users/2' - $ref: '#/paths/~1users/get/responses/200/content/application~1json/examples/exampleUsers/value/users/3' post: summary: Update group requestBody: description: Updated user group information required: true content: application/json: schema: $ref: '#/components/schemas/UserGroup' responses: '200': description: Successfully updated user group /organizations: get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Get list of organizations (admin only) responses: '200': description: List of organizations content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: projects: type: array items: $ref: '#/components/schemas/Organization' put: summary: Add organization requestBody: description: Organization info required: true content: application/json: schema: $ref: '#/components/schemas/Organization' responses: '201': description: Sucessfully added organization content: application/json: schema: type: object properties: organizationId: type: string format: uuid '/organizations/{organizationId}': parameters: - name: organizationId in: path required: true schema: type: string format: uuid get: summary: Get info on specified organization responses: '200': description: Successully retrieved organization info content: application/json: schema: $ref: '#/components/schemas/Organization' post: summary: Update organization info requestBody: description: Updated organization info required: true content: application/json: schema: $ref: '#/components/schemas/Organization' responses: '200': description: Successfully updated organization info /labels: get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Get all labels (admin only) responses: '200': description: List of labels content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: projects: type: array items: $ref: '#/components/schemas/Label' put: summary: add label requestBody: description: label info required: true content: application/json: schema: $ref: '#/components/schemas/Label' responses: '201': description: Sucessfully added label content: application/json: schema: $ref: '#/components/schemas/Label' '/labels/{scope}': parameters: - name: scope in: path required: true schema: type: string get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Return all labels of the given scope responses: '200': description: Successully returned labels that match the scope content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: labels: type: array items: $ref: '#/components/schemas/Label' examples: exampleLabels: value: $ref: '#/paths/~1labels~1search/get/responses/200/content/application~1json/examples/exampleLabels/value' /labels/search: parameters: - name: scope in: query schema: type: string - name: searchString in: query schema: type: string get: parameters: - $ref: '#/components/parameters/StartIndex' - $ref: '#/components/parameters/PageLength' summary: Return a collection of labels appropriate for the user's search responses: '200': description: Successully returned labels that match the search content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/PaginationResponse' - properties: labels: type: array items: $ref: '#/components/schemas/Label' examples: exampleLabels: value: totalrecords: 7 labels: - scope: problem-type name: Classification - scope: problem-type name: Dimensionality Reduction - scope: problem-type name: Clustering - scope: problem-type name: Natural Language Processing - scope: problem-type name: Text Classification - scope: github-repo name: Tutorials - scope: weather-model name: ECMWF IFS HRES