diff --git a/optuna_dashboard/_app.py b/optuna_dashboard/_app.py index 7b58fc54..11e738b1 100644 --- a/optuna_dashboard/_app.py +++ b/optuna_dashboard/_app.py @@ -415,13 +415,13 @@ def create_app(storage: BaseStorage, debug: bool = False) -> Bottle: @json_api_view def tell_trial(study_id: int, trial_id: int) -> BottleViewReturn: s = request.json.get("state", None) - v = request.json.get("value", None) + vs = request.json.get("values", None) try: - value = float(v) if v is not None else v + values = [float(v) for v in vs] if vs is not None else vs except ValueError: response.status = 400 # Bad request - return {"reason": "You need to pass float castable value"} + return {"reason": "You need to pass float castable values"} string2State = { "Running": TrialState.RUNNING, @@ -444,7 +444,7 @@ def create_app(storage: BaseStorage, debug: bool = False) -> Bottle: study = optuna.load_study(storage=storage, study_name=study_name) try: - study.tell(trial_id, values=value, state=state) + study.tell(trial_id, values=values, state=state) except Exception as e: response.status = 400 # Bad request return {"reason": e.args} diff --git a/optuna_dashboard/ts/action.ts b/optuna_dashboard/ts/action.ts index b8d77118..c862eb9c 100644 --- a/optuna_dashboard/ts/action.ts +++ b/optuna_dashboard/ts/action.ts @@ -270,10 +270,10 @@ export const actionCreator = () => { studyId: number, trialId: number, state: TrialState, - value?: string + values?: string[] ) => { - const message = value === undefined ? `id=${trialId}, state=${state}` : `id=${trialId}, state=${state}, value=${value}` - tellTrialAPI(studyId, trialId, state, value) + const message = values === undefined ? `id=${trialId}, state=${state}` : `id=${trialId}, state=${state}, values=${values}` + tellTrialAPI(studyId, trialId, state, values) .then(() => { enqueueSnackbar(`Success to update trial (${message})`, { variant: "success", diff --git a/optuna_dashboard/ts/apiClient.ts b/optuna_dashboard/ts/apiClient.ts index 7ae68bd8..f5ccf407 100644 --- a/optuna_dashboard/ts/apiClient.ts +++ b/optuna_dashboard/ts/apiClient.ts @@ -221,11 +221,11 @@ export const tellTrialAPI = ( studyId: number, trialId: number, state: TrialState, - value?: string + values?: string[] ): Promise => { - const req: { [name: string]: string } = {state: state} - if (value !== undefined) { - req["value"] = value + const req: { [name: string]: TrialState | string[] } = {state: state} + if (values !== undefined) { + req["values"] = values } return axiosInstance diff --git a/optuna_dashboard/ts/components/TrialTable.tsx b/optuna_dashboard/ts/components/TrialTable.tsx index 6c547961..00a14fe9 100644 --- a/optuna_dashboard/ts/components/TrialTable.tsx +++ b/optuna_dashboard/ts/components/TrialTable.tsx @@ -267,15 +267,15 @@ export const TrialTable: FC<{ const collapseBody = (index: number) => { - const [value, setValue] = useState("") + const [objectiveValue, setObjectiveValue] = useState("") const handleSubmit = (e: FormEvent): void => { e.preventDefault() const studyId = (studyDetail as StudyDetail).id const trialId = trials[index].number - action.tellTrial(studyId, trialId, "Complete" as TrialState, value) + action.tellTrial(studyId, trialId, "Complete" as TrialState, [objectiveValue]) } const handleChangeValue = (e: ChangeEvent): void => { - setValue(e.target.value) + setObjectiveValue(e.target.value) } const handleFailTrial = (e: MouseEvent): void => { const studyId = (studyDetail as StudyDetail).id @@ -320,7 +320,7 @@ export const TrialTable: FC<{
- +