Skip to content

Commit 0049ddc

Browse files
Merge branch 'main' into OPIK-2063-supprting-enable-disable-online-evaluations-rules
2 parents e616db9 + 9f2d878 commit 0049ddc

File tree

9 files changed

+346
-66
lines changed

9 files changed

+346
-66
lines changed

apps/opik-backend/src/main/java/com/comet/opik/api/Dataset.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,11 @@ public record DatasetPage(
6262
Dataset.View.Public.class}) List<Dataset> content,
6363
@JsonView({Dataset.View.Public.class}) int page,
6464
@JsonView({Dataset.View.Public.class}) int size,
65-
@JsonView({Dataset.View.Public.class}) long total) implements Page<Dataset>{
65+
@JsonView({Dataset.View.Public.class}) long total,
66+
@JsonView({Dataset.View.Public.class}) List<String> sortableBy) implements Page<Dataset>{
6667

67-
public static DatasetPage empty(int page) {
68-
return new DatasetPage(List.of(), page, 0, 0);
68+
public static DatasetPage empty(int page, List<String> sortableBy) {
69+
return new DatasetPage(List.of(), page, 0, 0, sortableBy);
6970
}
7071
}
7172
}

apps/opik-backend/src/main/java/com/comet/opik/api/filter/DatasetField.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,14 @@
66
@RequiredArgsConstructor
77
@Getter
88
public enum DatasetField implements Field {
9+
ID(ID_QUERY_PARAM, FieldType.STRING_STATE_DB),
10+
NAME(NAME_QUERY_PARAM, FieldType.STRING_STATE_DB),
11+
DESCRIPTION(DESCRIPTION_QUERY_PARAM, FieldType.STRING_STATE_DB),
912
TAGS(TAGS_QUERY_PARAM, FieldType.STRING_STATE_DB),
10-
;
13+
CREATED_AT(CREATED_AT_QUERY_PARAM, FieldType.DATE_TIME_STATE_DB),
14+
LAST_UPDATED_AT(LAST_UPDATED_AT_QUERY_PARAM, FieldType.DATE_TIME_STATE_DB),
15+
LAST_CREATED_EXPERIMENT_AT(LAST_CREATED_EXPERIMENT_AT_QUERY_PARAM, FieldType.DATE_TIME_STATE_DB),
16+
LAST_CREATED_OPTIMIZATION_AT(LAST_CREATED_OPTIMIZATION_AT_QUERY_PARAM, FieldType.DATE_TIME_STATE_DB);
1117

1218
private final String queryParamField;
1319
private final FieldType type;

apps/opik-backend/src/main/java/com/comet/opik/api/filter/Field.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public interface Field {
2828
String LAST_MESSAGE_QUERY_PARAM = "last_message";
2929
String CREATED_AT_QUERY_PARAM = "created_at";
3030
String LAST_UPDATED_AT_QUERY_PARAM = "last_updated_at";
31+
String LAST_CREATED_EXPERIMENT_AT_QUERY_PARAM = "last_created_experiment_at";
32+
String LAST_CREATED_OPTIMIZATION_AT_QUERY_PARAM = "last_created_optimization_at";
3133
String GUARDRAILS_QUERY_PARAM = "guardrails";
3234
String VISIBILITY_MODE_QUERY_PARAM = "visibility_mode";
3335
String ERROR_INFO_QUERY_PARAM = "error_info";

apps/opik-backend/src/main/java/com/comet/opik/api/sorting/SortingFactoryDatasets.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,22 @@
22

33
import java.util.List;
44

5+
import static com.comet.opik.api.sorting.SortableFields.CREATED_AT;
6+
import static com.comet.opik.api.sorting.SortableFields.DESCRIPTION;
7+
import static com.comet.opik.api.sorting.SortableFields.ID;
58
import static com.comet.opik.api.sorting.SortableFields.LAST_CREATED_EXPERIMENT_AT;
69
import static com.comet.opik.api.sorting.SortableFields.LAST_CREATED_OPTIMIZATION_AT;
10+
import static com.comet.opik.api.sorting.SortableFields.LAST_UPDATED_AT;
11+
import static com.comet.opik.api.sorting.SortableFields.NAME;
712
import static com.comet.opik.api.sorting.SortableFields.TAGS;
8-
import static java.util.Arrays.asList;
913

1014
public class SortingFactoryDatasets extends SortingFactory {
11-
private static final List<String> SORTABLE_FIELDS = asList(LAST_CREATED_EXPERIMENT_AT,
12-
LAST_CREATED_OPTIMIZATION_AT, TAGS);
15+
16+
private static final List<String> SUPPORTED_FIELDS = List.of(ID, NAME, DESCRIPTION, TAGS, CREATED_AT,
17+
LAST_UPDATED_AT, LAST_CREATED_EXPERIMENT_AT, LAST_CREATED_OPTIMIZATION_AT);
1318

1419
@Override
1520
public List<String> getSortableFields() {
16-
return SORTABLE_FIELDS;
21+
return SUPPORTED_FIELDS;
1722
}
1823
}

apps/opik-backend/src/main/java/com/comet/opik/domain/DatasetService.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.comet.opik.api.error.EntityAlreadyExistsException;
1212
import com.comet.opik.api.error.ErrorMessage;
1313
import com.comet.opik.api.events.DatasetsDeleted;
14+
import com.comet.opik.api.sorting.SortingFactoryDatasets;
1415
import com.comet.opik.api.sorting.SortingField;
1516
import com.comet.opik.domain.filter.FilterQueryBuilder;
1617
import com.comet.opik.domain.filter.FilterStrategy;
@@ -110,6 +111,7 @@ class DatasetServiceImpl implements DatasetService {
110111
private final @NonNull ExperimentDAO experimentDAO;
111112
private final @NonNull SortingQueryBuilder sortingQueryBuilder;
112113
private final @NonNull FilterQueryBuilder filterQueryBuilder;
114+
private final @NonNull SortingFactoryDatasets sortingFactory;
113115
private final @NonNull @Config BatchOperationsConfig batchOperationsConfig;
114116
private final @NonNull OptimizationDAO optimizationDAO;
115117
private final @NonNull EventBus eventBus;
@@ -395,7 +397,7 @@ public DatasetPage find(int page, int size, @NonNull DatasetCriteria criteria, L
395397
int maxExperimentInClauseSize = batchOperationsConfig.getDatasets().getMaxExperimentInClauseSize();
396398

397399
if (ids.isEmpty()) {
398-
return Mono.just(DatasetPage.empty(page));
400+
return Mono.just(DatasetPage.empty(page, sortingFactory.getSortableFields()));
399401
} else {
400402
if (ids.size() <= maxExperimentInClauseSize) {
401403
return fetchUsingMemory(page, size, criteria, ids, workspaceId, sortingFieldsSql, visibility,
@@ -412,6 +414,7 @@ public DatasetPage find(int page, int size, @NonNull DatasetCriteria criteria, L
412414
.page(datasetPage.page())
413415
.size(datasetPage.size())
414416
.total(datasetPage.total())
417+
.sortableBy(sortingFactory.getSortableFields())
415418
.build();
416419
}
417420

@@ -429,7 +432,7 @@ public DatasetPage find(int page, int size, @NonNull DatasetCriteria criteria, L
429432
criteria.withOptimizationsOnly(),
430433
sortingFieldsSql, visibility, filtersSQL, filterMapping));
431434

432-
return new DatasetPage(datasets, page, datasets.size(), count);
435+
return new DatasetPage(datasets, page, datasets.size(), count, sortingFactory.getSortableFields());
433436
});
434437
}
435438

@@ -464,7 +467,7 @@ private Mono<DatasetPage> fetchUsingTempTable(int page, int size, DatasetCriteri
464467
int offset = (page - 1) * size;
465468
List<Dataset> datasets = repository.findByTempTable(workspaceId, tableName, criteria.name(), size,
466469
offset, sortingFields, visibility, filters, filterMapping);
467-
return new DatasetPage(datasets, page, datasets.size(), count);
470+
return new DatasetPage(datasets, page, datasets.size(), count, sortingFactory.getSortableFields());
468471
});
469472
}).doFinally(signalType -> {
470473
template.inTransaction(WRITE, handle -> {
@@ -485,7 +488,7 @@ private Mono<DatasetPage> fetchUsingMemory(int page, int size, DatasetCriteria c
485488
int offset = (page - 1) * size;
486489
List<Dataset> datasets = repository.findByIds(workspaceId, ids, criteria.name(), size, offset,
487490
sortingFields, visibility, filters, filterMapping);
488-
return new DatasetPage(datasets, page, datasets.size(), count);
491+
return new DatasetPage(datasets, page, datasets.size(), count, sortingFactory.getSortableFields());
489492
}));
490493
}
491494

apps/opik-backend/src/main/java/com/comet/opik/domain/filter/FilterQueryBuilder.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ public class FilterQueryBuilder {
6262
private static final String LAST_MESSAGE_ANALYTICS_DB = "last_message";
6363
private static final String CREATED_AT_DB = "created_at";
6464
private static final String LAST_UPDATED_AT_DB = "last_updated_at";
65+
private static final String LAST_CREATED_EXPERIMENT_AT_DB = "last_created_experiment_at";
66+
private static final String LAST_CREATED_OPTIMIZATION_AT_DB = "last_created_optimization_at";
6567
private static final String NUMBER_OF_MESSAGES_ANALYTICS_DB = "number_of_messages";
6668
private static final String FEEDBACK_SCORE_COUNT_DB = "fsc.feedback_scores_count";
6769
private static final String GUARDRAILS_RESULT_DB = "gagg.guardrails_result";
@@ -225,7 +227,14 @@ public class FilterQueryBuilder {
225227

226228
private static final Map<DatasetField, String> DATASET_FIELDS_MAP = new EnumMap<>(
227229
ImmutableMap.<DatasetField, String>builder()
230+
.put(DatasetField.ID, ID_DB)
231+
.put(DatasetField.NAME, NAME_DB)
232+
.put(DatasetField.DESCRIPTION, DESCRIPTION_DB)
228233
.put(DatasetField.TAGS, TAGS_DB)
234+
.put(DatasetField.CREATED_AT, CREATED_AT_DB)
235+
.put(DatasetField.LAST_UPDATED_AT, LAST_UPDATED_AT_DB)
236+
.put(DatasetField.LAST_CREATED_EXPERIMENT_AT, LAST_CREATED_EXPERIMENT_AT_DB)
237+
.put(DatasetField.LAST_CREATED_OPTIMIZATION_AT, LAST_CREATED_OPTIMIZATION_AT_DB)
229238
.build());
230239

231240
private static final Map<ExperimentsComparisonValidKnownField, String> EXPERIMENTS_COMPARISON_FIELDS_MAP = new EnumMap<>(
@@ -297,7 +306,14 @@ public class FilterQueryBuilder {
297306
.add(PromptField.TAGS)
298307
.build(),
299308
FilterStrategy.DATASET, EnumSet.copyOf(ImmutableSet.<DatasetField>builder()
309+
.add(DatasetField.ID)
310+
.add(DatasetField.NAME)
311+
.add(DatasetField.DESCRIPTION)
300312
.add(DatasetField.TAGS)
313+
.add(DatasetField.CREATED_AT)
314+
.add(DatasetField.LAST_UPDATED_AT)
315+
.add(DatasetField.LAST_CREATED_EXPERIMENT_AT)
316+
.add(DatasetField.LAST_CREATED_OPTIMIZATION_AT)
301317
.build()),
302318
FilterStrategy.TRACE_THREAD, EnumSet.copyOf(ImmutableSet.<TraceThreadField>builder()
303319
.add(TraceThreadField.ID)

0 commit comments

Comments
 (0)