Skip to content

Commit 4983039

Browse files
committed
CM-4553: Implemented CometApi.getExperiments()
1 parent 2680a35 commit 4983039

File tree

4 files changed

+75
-2
lines changed

4 files changed

+75
-2
lines changed

comet-java-client/src/main/java/ml/comet/experiment/CometApi.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,20 @@ public interface CometApi extends Closeable {
4646
*/
4747
List<ExperimentMetadata> getAllExperiments(String projectId);
4848

49+
/**
50+
* Gets metadata of all experiments matching the following searching criteria.
51+
*
52+
* @param workspaceName the name of workspace where experiments defined.
53+
* @param projectName the name of project associated with experiments (optional).
54+
* @param experimentNamePattern the regex pattern for name of specific experiment (optional).
55+
* @return the list of metadata objects associated with experiments matching provided search criteria.
56+
*/
57+
List<ExperimentMetadata> getExperiments(String workspaceName, String projectName, String experimentNamePattern);
58+
59+
List<ExperimentMetadata> getExperiments(String workspaceName, String projectName);
60+
61+
List<ExperimentMetadata> getExperiments(String workspaceName);
62+
4963
/**
5064
* Register model defined in the specified experiment in the Comet's model registry.
5165
*

comet-java-client/src/main/java/ml/comet/experiment/impl/CometApiImpl.java

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import java.util.Objects;
5555
import java.util.Optional;
5656
import java.util.function.Function;
57+
import java.util.regex.Pattern;
5758
import java.util.stream.Collectors;
5859
import java.util.zip.ZipInputStream;
5960

@@ -153,6 +154,55 @@ public List<ExperimentMetadata> getAllExperiments(@NonNull String projectId) {
153154
ArrayList::addAll);
154155
}
155156

157+
@Override
158+
public List<ExperimentMetadata> getExperiments(@NonNull String workspaceName, @NonNull String projectName) {
159+
return restApiClient.getAllExperiments(projectName, workspaceName)
160+
.doOnError(ex -> this.logger.error(
161+
"Failed to read experiments found in the project {} of workspace {}",
162+
projectName, workspaceName, ex))
163+
.blockingGet()
164+
.getExperiments()
165+
.stream()
166+
.collect(ArrayList::new,
167+
(metadataList, metadataRest) -> metadataList.add(metadataRest.toExperimentMetadata()),
168+
ArrayList::addAll);
169+
}
170+
171+
@Override
172+
public List<ExperimentMetadata> getExperiments(@NonNull String workspaceName) {
173+
return this.getAllProjects(workspaceName)
174+
.stream()
175+
.collect(ArrayList::new, (metadataList, project) -> this.getAllExperiments(project.getProjectId()),
176+
ArrayList::addAll);
177+
}
178+
179+
@Override
180+
public List<ExperimentMetadata> getExperiments(
181+
@NonNull String workspaceName, String projectName, String experimentNamePattern) {
182+
183+
if (StringUtils.isBlank(projectName)) {
184+
// no project name provided
185+
if (!StringUtils.isBlank(experimentNamePattern)) {
186+
throw new IllegalArgumentException(
187+
"you must specify projectName when experimentNamePattern is provided");
188+
}
189+
// get experiments for all projects in the workspace
190+
return this.getExperiments(workspaceName);
191+
}
192+
193+
if (StringUtils.isBlank(experimentNamePattern)) {
194+
// no experiment name pattern provided
195+
return this.getExperiments(workspaceName, projectName);
196+
}
197+
198+
// return list of experiments with names matching provided regex
199+
return this.getExperiments(workspaceName, projectName)
200+
.stream()
201+
.filter(experimentMetadata ->
202+
Pattern.matches(experimentNamePattern, experimentMetadata.getExperimentName()))
203+
.collect(Collectors.toList());
204+
}
205+
156206
@Override
157207
public ModelRegistryRecord registerModel(@NonNull final Model model, @NonNull final String experimentKey) {
158208
// get list of experiment models
@@ -393,8 +443,8 @@ public void updateRegistryModelVersion(@NonNull String registryName, @NonNull St
393443
Optional<ModelVersionOverview> versionOverviewOptional = this.getRegistryModelVersion(
394444
registryName, workspace, version);
395445
if (!versionOverviewOptional.isPresent()) {
396-
throw new ModelVersionNotFoundException(
397-
getString(REGISTRY_MODEL_VERSION_NOT_FOUND, version, workspace, registryName));
446+
throw new ModelVersionNotFoundException(
447+
getString(REGISTRY_MODEL_VERSION_NOT_FOUND, version, workspace, registryName));
398448
}
399449

400450
// update model version details

comet-java-client/src/main/java/ml/comet/experiment/impl/RestApiClient.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@
115115
import static ml.comet.experiment.impl.constants.QueryParamName.MODEL_ITEM_ID;
116116
import static ml.comet.experiment.impl.constants.QueryParamName.MODEL_NAME;
117117
import static ml.comet.experiment.impl.constants.QueryParamName.PROJECT_ID;
118+
import static ml.comet.experiment.impl.constants.QueryParamName.PROJECT_NAME;
118119
import static ml.comet.experiment.impl.constants.QueryParamName.TYPE;
119120
import static ml.comet.experiment.impl.constants.QueryParamName.WORKSPACE_NAME;
120121
import static ml.comet.experiment.impl.http.ConnectionUtils.checkResponseStatus;
@@ -164,6 +165,13 @@ Single<GetExperimentsResponse> getAllExperiments(String projectId) {
164165
EXPERIMENTS, Collections.singletonMap(PROJECT_ID, projectId), GetExperimentsResponse.class);
165166
}
166167

168+
Single<GetExperimentsResponse> getAllExperiments(String projectName, String workspaceName) {
169+
HashMap<QueryParamName, String> params = new HashMap<>();
170+
params.put(WORKSPACE_NAME, workspaceName);
171+
params.put(PROJECT_NAME, projectName);
172+
return singleFromSyncGetWithRetries(EXPERIMENTS, params, GetExperimentsResponse.class);
173+
}
174+
167175
Single<ExperimentMetadataRest> getMetadata(String experimentKey) {
168176
return singleFromSyncGetWithRetries(GET_METADATA, experimentKey, ExperimentMetadataRest.class);
169177
}

comet-java-client/src/main/java/ml/comet/experiment/impl/constants/QueryParamName.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public enum QueryParamName {
2020
OVERWRITE("overwrite"), // boolean
2121
PROJECT_ID("projectId"), // string
2222
WORKSPACE_NAME("workspaceName"), // string
23+
PROJECT_NAME("projectName"), // string
2324

2425
WORKSPACE("workspace"), // string
2526
PROJECT("project"), // string

0 commit comments

Comments
 (0)