Skip to content

Commit d914cd6

Browse files
authored
[OPIK-5162] [FE] V2 Optimization studio page: project-scoped data and navigation (#5900)
- Use project-scoped endpoint for optimizations list (R2) - Pass projectId to experiment list calls in detail/trial pages (R2, R3) - Pass project_id in optimization creation payload from Studio UI (R2, R3) - Add project_id to Optimization type - All new params optional for v1 backward compatibility Not included (dependencies not ready): - R4: TraceLogsSidebar integration (OPIK-5027 not built yet) - SDK project_name on create_optimization (OPIK-5212 To Do)
1 parent ae8407e commit d914cd6

File tree

7 files changed

+21
-3
lines changed

7 files changed

+21
-3
lines changed

apps/opik-frontend/src/api/optimizations/useOptimizationsList.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import isBoolean from "lodash/isBoolean";
33
import api, {
44
OPTIMIZATIONS_KEY,
55
OPTIMIZATIONS_REST_ENDPOINT,
6+
PROJECTS_REST_ENDPOINT,
67
QueryConfig,
78
} from "@/api/api";
89
import { Optimization } from "@/types/optimizations";
@@ -11,6 +12,7 @@ import { processFilters } from "@/lib/filters";
1112

1213
export type UseOptimizationsListParams = {
1314
workspaceName: string;
15+
projectId?: string;
1416
datasetId?: string;
1517
datasetDeleted?: boolean;
1618
filters?: Filters;
@@ -29,6 +31,7 @@ export const getOptimizationsList = async (
2931
{ signal }: QueryFunctionContext,
3032
{
3133
workspaceName,
34+
projectId,
3235
datasetId,
3336
datasetDeleted,
3437
filters,
@@ -37,7 +40,11 @@ export const getOptimizationsList = async (
3740
page,
3841
}: UseOptimizationsListParams,
3942
) => {
40-
const { data } = await api.get(OPTIMIZATIONS_REST_ENDPOINT, {
43+
const endpoint = projectId
44+
? `${PROJECTS_REST_ENDPOINT}${projectId}/optimizations`
45+
: OPTIMIZATIONS_REST_ENDPOINT;
46+
47+
const { data } = await api.get(endpoint, {
4148
signal,
4249
params: {
4350
workspace_name: workspaceName,

apps/opik-frontend/src/hooks/useOptimizationsView.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const DEFAULT_PAGE_SIZE = 100;
88

99
type UseOptimizationsViewParams = {
1010
workspaceName: string;
11+
projectId?: string;
1112
datasetId?: string;
1213
search?: string;
1314
page: number;
@@ -16,6 +17,7 @@ type UseOptimizationsViewParams = {
1617

1718
export const useOptimizationsView = ({
1819
workspaceName,
20+
projectId,
1921
datasetId,
2022
search,
2123
page,
@@ -25,6 +27,7 @@ export const useOptimizationsView = ({
2527
useOptimizationsList(
2628
{
2729
workspaceName,
30+
projectId,
2831
datasetId: datasetId || "",
2932
search: search || "",
3033
page,

apps/opik-frontend/src/types/optimizations.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ export interface OptimizationStudioConfig {
137137
export interface Optimization {
138138
id: string;
139139
name: string;
140+
project_id?: string;
140141
dataset_id: string;
141142
dataset_name: string;
142143
metadata?: object;

apps/opik-frontend/src/v2/pages/OptimizationPage/useOptimizationExperiments.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
aggregateCandidates,
1414
mergeExperimentScores,
1515
} from "@/lib/optimizations";
16-
import useAppStore from "@/store/AppStore";
16+
import useAppStore, { useActiveProjectId } from "@/store/AppStore";
1717

1818
import useOptimizationById from "@/api/optimizations/useOptimizationById";
1919
import useExperimentsList from "@/api/datasets/useExperimentsList";
@@ -22,6 +22,7 @@ import { AggregatedCandidate } from "@/types/optimizations";
2222

2323
export const useOptimizationExperiments = () => {
2424
const workspaceName = useAppStore((state) => state.activeWorkspaceName);
25+
const activeProjectId = useActiveProjectId();
2526

2627
const { optimizationId } = useParams({
2728
select: (params) => params,
@@ -50,6 +51,7 @@ export const useOptimizationExperiments = () => {
5051
} = useExperimentsList(
5152
{
5253
workspaceName,
54+
projectId: activeProjectId ?? undefined,
5355
optimizationId: optimizationId,
5456
sorting: [{ id: "created_at", desc: false }],
5557
forceSorting: true,
@@ -70,6 +72,7 @@ export const useOptimizationExperiments = () => {
7072
const { data: latestExperimentData } = useExperimentsList(
7173
{
7274
workspaceName,
75+
projectId: activeProjectId ?? undefined,
7376
optimizationId: optimizationId,
7477
types: [
7578
EXPERIMENT_TYPE.TRIAL,

apps/opik-frontend/src/v2/pages/OptimizationsPage/OptimizationsNewPage/useOptimizationsNewFormHandlers.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ export const useOptimizationsNewFormHandlers = () => {
219219
dataset_name: datasetNameValue,
220220
objective_name: objectiveName,
221221
status: OPTIMIZATION_STATUS.INITIALIZED,
222+
project_id: activeProjectId ?? undefined,
222223
},
223224
});
224225

apps/opik-frontend/src/v2/pages/OptimizationsPage/OptimizationsPage.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ const OptimizationsPage: React.FunctionComponent = () => {
246246
pageSize,
247247
} = useOptimizationsView({
248248
workspaceName,
249+
projectId: activeProjectId ?? undefined,
249250
datasetId,
250251
search: search || "",
251252
page: page || 1,

apps/opik-frontend/src/v2/pages/TrialPage/TrialPage.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import useExperimentsList from "@/api/datasets/useExperimentsList";
1414
import useDeepMemo from "@/hooks/useDeepMemo";
1515
import { Experiment, EXPERIMENT_TYPE } from "@/types/datasets";
1616
import useOptimizationById from "@/api/optimizations/useOptimizationById";
17-
import useAppStore from "@/store/AppStore";
17+
import useAppStore, { useActiveProjectId } from "@/store/AppStore";
1818
import { checkIsEvaluationSuite } from "@/lib/optimizations";
1919
import { getObjectiveScoreValue } from "@/lib/feedback-scores";
2020
import { keepPreviousData } from "@tanstack/react-query";
@@ -24,6 +24,7 @@ import { MAX_EXPERIMENTS_LOADED } from "@/lib/optimizations";
2424

2525
const TrialPage: React.FunctionComponent = () => {
2626
const workspaceName = useAppStore((state) => state.activeWorkspaceName);
27+
const activeProjectId = useActiveProjectId();
2728
const {
2829
permissions: { canViewDatasets },
2930
} = usePermissions();
@@ -57,6 +58,7 @@ const TrialPage: React.FunctionComponent = () => {
5758
const { data: optimizationExperimentsData } = useExperimentsList(
5859
{
5960
workspaceName,
61+
projectId: activeProjectId ?? undefined,
6062
optimizationId,
6163
types: [EXPERIMENT_TYPE.TRIAL],
6264
page: 1,

0 commit comments

Comments
 (0)