syntax = "proto3"; package ai.verta.modeldb; option go_package = "github.com/VertaAI/modeldb/protos/gen/go/protos/public/modeldb"; option java_multiple_files = true; import "common/CommonService.proto"; import "modeldb/CommonService.proto"; import "modeldb/versioning/VersioningService.proto"; import "modeldb/versioning/Environment.proto"; import "google/api/annotations.proto"; import "google/protobuf/struct.proto"; /* * ExperimentRun Entity */ message ExperimentRun { string id = 1; string project_id = 2; string experiment_id = 3; string name = 4; string description = 5; int64 date_created = 6; int64 date_updated = 7; int64 start_time = 8; int64 end_time = 9; string code_version = 10; common.CodeVersion code_version_snapshot = 11; string parent_id = 12; //Requirement versioning.EnvironmentBlob environment = 13; repeated string tags = 20; repeated common.KeyValue attributes = 21; repeated common.KeyValue hyperparameters = 22; repeated common.Artifact artifacts = 23; repeated common.Artifact datasets = 24; repeated common.KeyValue metrics = 25; repeated Observation observations = 26; repeated Feature features = 27; string job_id = 28; string owner = 29; oneof owner_tracking { uint64 owner_id = 33; common.GroupId group_owner_id = 34; } VersioningEntry versioned_inputs = 30; map code_version_from_blob = 31; // Doc for version_number https://github.com/VertaAI/docs/pull/53 uint64 version_number = 32; } message VersioningEntry { uint64 repository_id = 1; string commit = 2; map key_location_map = 3; } message Location { repeated string location = 1; } message LogVersionedInput { string id = 1; VersioningEntry versioned_inputs = 2; message Response { } } message GetVersionedInput { string id = 1; message Response { VersioningEntry versioned_inputs = 1; } } // observations with the same key are not overwritten, the are appended to a list message Observation { oneof oneOf { common.KeyValue attribute = 1; common.Artifact artifact = 2; } int64 timestamp = 3; google.protobuf.Value epoch_number = 4; } message CreateExperimentRun { string id = 1; string project_id = 2; string experiment_id = 3; string name = 4; string description = 5; int64 date_created = 6; int64 date_updated = 7; int64 start_time = 8; int64 end_time = 9; string code_version = 10; common.CodeVersion code_version_snapshot = 11; string parent_id = 12; repeated string tags = 20; repeated common.KeyValue attributes = 21; repeated common.KeyValue hyperparameters = 22; repeated common.Artifact artifacts = 23; repeated common.Artifact datasets = 24; repeated common.KeyValue metrics = 25; repeated Observation observations = 26; repeated Feature features = 27; VersioningEntry versioned_inputs = 28; message Response { ExperimentRun experiment_run = 1; } } message DeleteExperimentRun { string id = 1; message Response { bool status = 1; } } message GetExperimentRunsInProject { string project_id = 1; int32 page_number = 2; int32 page_limit = 3; bool ascending = 4; string sort_key = 5; message Response { repeated ExperimentRun experiment_runs = 1; int64 total_records = 2; } } message GetExperimentRunsInExperiment { string experiment_id = 1; int32 page_number = 2; int32 page_limit = 3; bool ascending = 4; string sort_key = 5; message Response { repeated ExperimentRun experiment_runs = 1; int64 total_records = 2; } } message GetExperimentRunById { string id = 1; message Response { ExperimentRun experiment_run = 1; } } message GetExperimentRunByName { string name = 1; string experiment_id = 2; message Response { ExperimentRun experiment_run = 1; } } message UpdateExperimentRunName { string id = 1; string name = 2; message Response { } } message UpdateExperimentRunDescription { string id = 1; string description = 2; message Response { ExperimentRun experiment_run = 1; } } // tags message AddExperimentRunTags { string id = 1; repeated string tags = 2; message Response { ExperimentRun experiment_run = 1; } } message DeleteExperimentRunTags { string id = 1; repeated string tags = 2; bool delete_all = 3; message Response { ExperimentRun experiment_run = 1; } } // tag message AddExperimentRunTag { string id = 1; string tag = 2; message Response { ExperimentRun experiment_run = 1; } } message DeleteExperimentRunTag { string id = 1; string tag = 2; message Response { ExperimentRun experiment_run = 1; } } // attributes message AddExperimentRunAttributes { string id = 1; repeated common.KeyValue attributes = 2; message Response { } } message DeleteExperimentRunAttributes { string id = 1; repeated string attribute_keys = 2; bool delete_all = 3; message Response { } } // code version message LogExperimentRunCodeVersion { string id = 1; common.CodeVersion code_version = 2; bool overwrite = 3; message Response { } } message GetExperimentRunCodeVersion { string id = 1; message Response { common.CodeVersion code_version = 1; } } // observation message LogObservation { string id = 1; Observation observation = 2; message Response { } } // observations message LogObservations { string id = 1; repeated Observation observations = 2; message Response { } } message GetObservations { string id = 1; string observation_key = 2; message Response { repeated Observation observations = 1; } } message DeleteObservations { string id = 1; // delete all observations corresponding to the keys repeated string observation_keys = 2; // if true delete all observations corresponding to the run, ignoring observation_keys bool delete_all = 3; message Response { } } // metric message LogMetric { string id = 1; common.KeyValue metric = 2; message Response { } } // metrics message LogMetrics { string id = 1; repeated common.KeyValue metrics = 2; message Response { } } message GetMetrics { string id = 1; message Response { repeated common.KeyValue metrics = 1; } } message DeleteMetrics { string id = 1; // delete metrics corresponding to the keys repeated string metric_keys = 2; // if true delete all metrics corresponding to the run, ignoring metric_keys bool delete_all = 3; message Response { } } // dataset message LogDataset { string id = 1; common.Artifact dataset = 2; bool overwrite = 3; message Response { } } // datasets message LogDatasets { string id = 1; repeated common.Artifact datasets = 2; bool overwrite = 3; message Response { } } message GetDatasets { string id = 1; message Response { repeated common.Artifact datasets = 1; } } // artifact message LogArtifact { string id = 1; common.Artifact artifact = 2; message Response { } } // artifacts message LogArtifacts { string id = 1; repeated common.Artifact artifacts = 2; message Response { } } message DeleteArtifact { string id = 1; string key = 2; message Response { } } // hyperparameter message LogHyperparameter { string id = 1; common.KeyValue hyperparameter = 2; message Response { } } // hyperparameters message LogHyperparameters { string id = 1; repeated common.KeyValue hyperparameters = 2; message Response { } } message GetHyperparameters { string id = 1; message Response { repeated common.KeyValue hyperparameters = 1; } } message DeleteHyperparameters { string id = 1; // delete HyperParameters corresponding to the keys repeated string hyperparameter_keys = 2; // if true delete all hyper parameters corresponding to the run, ignoring hyperparameter_keys bool delete_all = 3; message Response { } } // attribute message LogAttribute { string id = 1; common.KeyValue attribute = 2; message Response { } } // attributes message LogAttributes { string id = 1; repeated common.KeyValue attributes = 2; message Response { } } message LogEnvironment { string id = 1; versioning.EnvironmentBlob environment = 2; message Response { } } message FindExperimentRuns { oneof entity_id_oneof { string project_id = 1; string experiment_id = 2; } repeated string experiment_run_ids = 3; repeated common.KeyValueQuery predicates = 4; bool ids_only = 5; // whether to return full experiment runs or ids only //For pagination int32 page_number = 6; int32 page_limit = 7; bool ascending = 9; string sort_key = 10; string workspace_name = 11; message Response { repeated ExperimentRun experiment_runs = 1; int64 total_records = 2; } } message SortExperimentRuns { repeated string experiment_run_ids = 1; string sort_key = 2; // metrics.accuracy bool ascending = 3; bool ids_only = 4; message Response { repeated ExperimentRun experiment_runs = 1; int64 total_records = 2; } } message TopExperimentRunsSelector { string project_id = 1; string experiment_id = 2; repeated string experiment_run_ids = 3; string sort_key = 4; // metrics.accuracy bool ascending = 5; // False int32 top_k = 6; // 5 bool ids_only = 7; message Response { repeated ExperimentRun experiment_runs = 1; } } message LogJobId { string id = 1; string job_id = 2; message Response { } } message GetJobId { string id = 1; message Response { string job_id = 1; } } message GetChildrenExperimentRuns { string experiment_run_id = 1;// self ExperimentRunId int32 page_number = 2; int32 page_limit = 3; bool ascending = 4; string sort_key = 5; message Response { repeated ExperimentRun experiment_runs = 1; int64 total_records = 2; } } message SetParentExperimentRunId { string experiment_run_id = 1;// self experimentRunId string parent_id = 2; // Parent ExperimentRunId message Response { } } message GetExperimentRunsByDatasetVersionId { string dataset_version_id = 1; int32 page_number = 2; int32 page_limit = 3; bool ascending = 4; string sort_key = 5; message Response { repeated ExperimentRun experiment_runs = 1; uint64 total_records = 2; } } message DeleteExperimentRuns { repeated string ids = 1; message Response { bool status = 1; } } // Getting experimentRuns linked to a commit message ListCommitExperimentRunsRequest { versioning.RepositoryIdentification repository_id = 1; common.Pagination pagination = 2; string commit_sha = 3; message Response { repeated ExperimentRun runs = 1; int64 total_records = 2; } } // Getting experimentRuns linked to a blob message ListBlobExperimentRunsRequest { versioning.RepositoryIdentification repository_id = 1; common.Pagination pagination = 2; string commit_sha = 3; repeated string location = 4; message Response { repeated ExperimentRun runs = 1; int64 total_records = 2; } } message CloneExperimentRun { string src_experiment_run_id = 1; // Source experiment_run to clone [Compulsory] string dest_experiment_run_name= 2; // Source experiment_run to clone [Optional] string dest_experiment_id = 3; // Destination experiment_id to clone run into. if not define here then value will be experiment_id of src_experiment_run_id[Optional] message Response { ExperimentRun run = 1; } } service ExperimentRunService { rpc createExperimentRun(CreateExperimentRun) returns (CreateExperimentRun.Response) { option (google.api.http) = { post: "/v1/experiment-run/createExperimentRun" body: "*" }; }; rpc deleteExperimentRun(DeleteExperimentRun) returns (DeleteExperimentRun.Response) { option (google.api.http) = { delete: "/v1/experiment-run/deleteExperimentRun" body: "*" }; }; // basic queries rpc getExperimentRunsInProject (GetExperimentRunsInProject) returns (GetExperimentRunsInProject.Response) { option (google.api.http) = { get: "/v1/experiment-run/getExperimentRunsInProject" }; }; rpc getExperimentRunsInExperiment (GetExperimentRunsInExperiment) returns (GetExperimentRunsInExperiment.Response) { option (google.api.http) = { get: "/v1/experiment-run/getExperimentRunsInExperiment" }; }; rpc getExperimentRunById(GetExperimentRunById) returns (GetExperimentRunById.Response) { option (google.api.http) = { get: "/v1/experiment-run/getExperimentRunById" }; }; rpc getExperimentRunByName(GetExperimentRunByName) returns (GetExperimentRunByName.Response) { option (google.api.http) = { get: "/v1/experiment-run/getExperimentRunByName" }; }; rpc updateExperimentRunName(UpdateExperimentRunName) returns (UpdateExperimentRunName.Response) { option (google.api.http) = { post: "/v1/experiment-run/updateExperimentRunName" body: "*" }; }; rpc updateExperimentRunDescription(UpdateExperimentRunDescription) returns (UpdateExperimentRunDescription.Response) { option (google.api.http) = { post: "/v1/experiment-run/updateExperimentRunDescription" body: "*" }; }; // tags rpc addExperimentRunTags(AddExperimentRunTags) returns (AddExperimentRunTags.Response){ option (google.api.http) = { post: "/v1/experiment-run/addExperimentRunTags" body: "*" }; }; rpc getExperimentRunTags(GetTags) returns (GetTags.Response){ option (google.api.http) = { get: "/v1/experiment-run/getExperimentRunTags" }; }; rpc deleteExperimentRunTags(DeleteExperimentRunTags) returns ( DeleteExperimentRunTags.Response) { option (google.api.http) = { delete: "/v1/experiment-run/deleteExperimentRunTags" body: "*" }; }; // tag rpc addExperimentRunTag(AddExperimentRunTag) returns (AddExperimentRunTag.Response){ option (google.api.http) = { post: "/v1/experiment-run/addExperimentRunTag" body: "*" }; }; rpc deleteExperimentRunTag(DeleteExperimentRunTag) returns ( DeleteExperimentRunTag.Response) { option (google.api.http) = { delete: "/v1/experiment-run/deleteExperimentRunTag" body: "*" }; }; // observation rpc logObservation(LogObservation) returns (LogObservation.Response) { option (google.api.http) = { post: "/v1/experiment-run/logObservation" body: "*" }; }; // observations rpc logObservations(LogObservations) returns (LogObservations.Response) { option (google.api.http) = { post: "/v1/experiment-run/logObservations" body: "*" }; }; rpc getObservations(GetObservations) returns (GetObservations.Response) { option (google.api.http) = { get: "/v1/experiment-run/getObservations" }; }; // metric rpc logMetric(LogMetric) returns (LogMetric.Response) { option (google.api.http) = { post: "/v1/experiment-run/logMetric" body: "*" }; }; // metrics rpc logMetrics(LogMetrics) returns (LogMetrics.Response) { option (google.api.http) = { post: "/v1/experiment-run/logMetrics" body: "*" }; }; rpc getMetrics(GetMetrics) returns (GetMetrics.Response) { option (google.api.http) = { get: "/v1/experiment-run/getMetrics" }; }; // dataset rpc logDataset(LogDataset) returns (LogDataset.Response) { option (google.api.http) = { post: "/v1/experiment-run/logDataset" body: "*" }; }; // datasets rpc logDatasets(LogDatasets) returns (LogDatasets.Response) { option (google.api.http) = { post: "/v1/experiment-run/logDatasets" body: "*" }; }; rpc getDatasets(GetDatasets) returns (GetDatasets.Response) { option (google.api.http) = { get: "/v1/experiment-run/getDatasets" }; }; // hyperparameter rpc logHyperparameter(LogHyperparameter) returns (LogHyperparameter.Response) { option (google.api.http) = { post: "/v1/experiment-run/logHyperparameter" body: "*" }; } // hyperparameters rpc logHyperparameters(LogHyperparameters) returns (LogHyperparameters.Response) { option (google.api.http) = { post: "/v1/experiment-run/logHyperparameters" body: "*" }; }; rpc getHyperparameters(GetHyperparameters) returns (GetHyperparameters.Response) { option (google.api.http) = { get: "/v1/experiment-run/getHyperparameters" }; }; // attribute rpc logAttribute(LogAttribute) returns (LogAttribute.Response) { option (google.api.http) = { post: "/v1/experiment-run/logAttribute" body: "*" }; }; // attributes rpc logAttributes(LogAttributes) returns (LogAttributes.Response) { option (google.api.http) = { post: "/v1/experiment-run/logAttributes" body: "*" }; }; rpc getExperimentRunAttributes(GetAttributes) returns ( GetAttributes.Response) { option (google.api.http) = { get: "/v1/experiment-run/getAttributes" }; }; rpc addExperimentRunAttributes(AddExperimentRunAttributes) returns ( AddExperimentRunAttributes.Response){ option (google.api.http) = { post: "/v1/experiment-run/addExperimentRunAttributes" body: "*" }; }; rpc deleteExperimentRunAttributes(DeleteExperimentRunAttributes) returns ( DeleteExperimentRunAttributes.Response) { option (google.api.http) = { delete: "/v1/experiment-run/deleteExperimentRunAttributes" body: "*" }; }; rpc logEnvironment(LogEnvironment) returns (LogEnvironment.Response) { option (google.api.http) = { post: "/v1/experiment-run/logEnvironment" body: "*" }; }; // code version rpc logExperimentRunCodeVersion(LogExperimentRunCodeVersion) returns ( LogExperimentRunCodeVersion.Response) { option (google.api.http) = { post: "/v1/experiment-run/logExperimentRunCodeVersion" body: "*" }; }; rpc getExperimentRunCodeVersion(GetExperimentRunCodeVersion) returns ( GetExperimentRunCodeVersion.Response) { option (google.api.http) = { get: "/v1/experiment-run/getExperimentRunCodeVersion" }; }; // artifact rpc logArtifact(LogArtifact) returns (LogArtifact.Response) { option (google.api.http) = { post: "/v1/experiment-run/logArtifact" body: "*" }; }; // artifacts rpc logArtifacts(LogArtifacts) returns (LogArtifacts.Response) { option (google.api.http) = { post: "/v1/experiment-run/logArtifacts" body: "*" }; }; rpc getArtifacts(GetArtifacts) returns (GetArtifacts.Response) { option (google.api.http) = { get: "/v1/experiment-run/getArtifacts" }; }; rpc deleteArtifact(DeleteArtifact) returns (DeleteArtifact.Response){ option (google.api.http) = { delete: "/v1/experiment-run/deleteArtifact" body: "*" }; }; rpc getUrlForArtifact(GetUrlForArtifact) returns (GetUrlForArtifact.Response) { option (google.api.http) = { post: "/v1/experiment-run/getUrlForArtifact" body: "*" }; }; rpc commitArtifactPart(CommitArtifactPart) returns (CommitArtifactPart.Response) { option (google.api.http) = { post: "/v1/experiment-run/commitArtifactPart" body: "*" }; }; rpc getCommittedArtifactParts(GetCommittedArtifactParts) returns (GetCommittedArtifactParts.Response) { option (google.api.http) = { get: "/v1/experiment-run/getCommittedArtifactParts" }; }; rpc commitMultipartArtifact(CommitMultipartArtifact) returns (CommitMultipartArtifact.Response) { option (google.api.http) = { post: "/v1/experiment-run/commitMultipartArtifact" body: "*" }; }; // queries rpc findExperimentRuns(FindExperimentRuns) returns (FindExperimentRuns.Response){ option (google.api.http) = { post: "/v1/experiment-run/findExperimentRuns" body: "*" }; }; rpc sortExperimentRuns (SortExperimentRuns) returns (SortExperimentRuns.Response){ option (google.api.http) = { get: "/v1/experiment-run/sortExperimentRuns" }; }; rpc getTopExperimentRuns (TopExperimentRunsSelector) returns (TopExperimentRunsSelector.Response){ option (google.api.http) = { get: "/v1/experiment-run/getTopExperimentRuns" }; }; // jobs rpc logJobId (LogJobId) returns (LogJobId.Response){ option (google.api.http) = { get: "/v1/experiment-run/logJobId" }; }; rpc getJobId (GetJobId) returns (GetJobId.Response){ option (google.api.http) = { get: "/v1/experiment-run/getJobId" }; }; rpc getChildrenExperimentRuns (GetChildrenExperimentRuns) returns (GetChildrenExperimentRuns.Response){ option (google.api.http) = { get: "/v1/experiment-run/getChildrenExperimentRuns" }; }; rpc setParentExperimentRunId (SetParentExperimentRunId) returns (SetParentExperimentRunId.Response){ option (google.api.http) = { post: "/v1/experiment-run/setParentExperimentRunId" body: "*" }; }; rpc getExperimentRunsByDatasetVersionId (GetExperimentRunsByDatasetVersionId) returns (GetExperimentRunsByDatasetVersionId.Response){ option (google.api.http) = { get:"/v1/experiment-run/getExperimentRunsByDatasetVersionId" }; }; rpc deleteExperimentRuns(DeleteExperimentRuns) returns (DeleteExperimentRuns.Response){ option (google.api.http) = { delete: "/v1/experiment-run/deleteExperimentRuns" body: "*" }; }; rpc logVersionedInput(LogVersionedInput) returns (LogVersionedInput.Response) { option (google.api.http) = { post: "/v1/experiment-run/logVersionedInput" body: "*" }; }; rpc getVersionedInputs(GetVersionedInput) returns (GetVersionedInput.Response) { option (google.api.http) = { get: "/v1/experiment-run/getVersionedInput" }; }; // Getting ExperimentRuns linked to a commit rpc ListCommitExperimentRuns(ListCommitExperimentRunsRequest) returns (ListCommitExperimentRunsRequest.Response) { option (google.api.http) = { get: "/v1/versioning/workspaces/{repository_id.named_id.workspace_name}/repositories/{repository_id.named_id.name}/commits/{commit_sha}/runs" additional_bindings { get: "/v1/versioning/repositories/{repository_id.repo_id}/commits/{commit_sha}/runs" } }; } // Getting ExperimentRuns linked to a blob rpc ListBlobExperimentRuns(ListBlobExperimentRunsRequest) returns (ListBlobExperimentRunsRequest.Response) { option (google.api.http) = { get: "/v1/versioning/workspaces/{repository_id.named_id.workspace_name}/repositories/{repository_id.named_id.name}/commits/{commit_sha}/path/runs" additional_bindings { get: "/v1/versioning/repositories/{repository_id.repo_id}/commits/{commit_sha}/path/runs" } }; } rpc deleteObservations(DeleteObservations) returns ( DeleteObservations.Response) { option (google.api.http) = { delete: "/v1/experiment-run/deleteObservations" body: "*" }; }; rpc deleteMetrics(DeleteMetrics) returns ( DeleteMetrics.Response) { option (google.api.http) = { delete: "/v1/experiment-run/deleteMetrics" body: "*" }; }; rpc deleteHyperparameters(DeleteHyperparameters) returns ( DeleteHyperparameters.Response) { option (google.api.http) = { delete: "/v1/experiment-run/deleteHyperparameters" body: "*" }; }; rpc cloneExperimentRun(CloneExperimentRun) returns (CloneExperimentRun.Response) { option (google.api.http) = { post: "/v1/experiment-run/cloneExperimentRun" body: "*" }; }; }