mirror of
https://github.com/wassname/optuna-dashboard.git
synced 2026-09-23 13:30:25 +08:00
Implement python api
This commit is contained in:
@@ -411,6 +411,20 @@ def create_app(storage: BaseStorage, debug: bool = False) -> Bottle:
|
||||
response.status = 204 # No content
|
||||
return {}
|
||||
|
||||
@app.put("/api/studies/<study_id:int>/<trial_id:int>")
|
||||
@json_api_view
|
||||
def save_trial_value(study_id: int, trial_id: int) -> BottleViewReturn:
|
||||
value = float(request.json.get("value", None))
|
||||
try:
|
||||
study_name = storage.get_study_name_from_id(study_id)
|
||||
study = optuna.load_study(storage=storage, study_name=study_name)
|
||||
except KeyError:
|
||||
response.status = 404 # Not found
|
||||
return {"reason": f"study_id={study_id} is not found"}
|
||||
study.tell(trial_id, value)
|
||||
response.status = 204 # No content
|
||||
return {}
|
||||
|
||||
@app.put("/api/studies/<study_id:int>/<trial_id:int>/note")
|
||||
@json_api_view
|
||||
def save_trial_note(study_id: int, trial_id: int) -> BottleViewReturn:
|
||||
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
deleteStudyAPI,
|
||||
saveStudyNoteAPI,
|
||||
saveTrialNoteAPI,
|
||||
saveTrialValueAPI,
|
||||
renameStudyAPI,
|
||||
} from "./apiClient"
|
||||
import {
|
||||
@@ -265,6 +266,25 @@ export const actionCreator = () => {
|
||||
})
|
||||
}
|
||||
|
||||
const saveTrialValue = (
|
||||
studyId: number,
|
||||
trialId: number,
|
||||
value: number
|
||||
) => {
|
||||
saveTrialValueAPI(studyId, trialId, value)
|
||||
.then(() => {
|
||||
enqueueSnackbar(`Success to update trial value (id=${studyId})`, {
|
||||
variant: "success",
|
||||
})
|
||||
})
|
||||
.catch((err) => {
|
||||
enqueueSnackbar(`Failed to update trial value (id=${studyId})`, {
|
||||
variant: "error",
|
||||
})
|
||||
console.log(err)
|
||||
})
|
||||
}
|
||||
|
||||
return {
|
||||
updateStudyDetail,
|
||||
updateStudySummaries,
|
||||
@@ -276,6 +296,7 @@ export const actionCreator = () => {
|
||||
saveGraphVisibility,
|
||||
saveStudyNote,
|
||||
saveTrialNote,
|
||||
saveTrialValue,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -217,6 +217,18 @@ export const saveTrialNoteAPI = (
|
||||
})
|
||||
}
|
||||
|
||||
export const saveTrialValueAPI = (
|
||||
studyId: number,
|
||||
trialId: number,
|
||||
value: number,
|
||||
): Promise<void> => {
|
||||
return axiosInstance
|
||||
.put<void>(`/api/studies/${studyId}/${trialId}`, {value: value})
|
||||
.then((res) => {
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
interface ParamImportancesResponse {
|
||||
param_importances: ParamImportance[][]
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@ import LinkIcon from "@mui/icons-material/Link"
|
||||
import { DataGridColumn, DataGrid } from "./DataGrid"
|
||||
import { Link } from "react-router-dom"
|
||||
|
||||
import { actionCreator } from "../action"
|
||||
|
||||
export const TrialTable: FC<{
|
||||
studyDetail: StudyDetail | null
|
||||
isBeta: boolean
|
||||
@@ -12,6 +14,7 @@ export const TrialTable: FC<{
|
||||
}> = ({ studyDetail, isBeta, initialRowsPerPage }) => {
|
||||
const trials: Trial[] = studyDetail !== null ? studyDetail.trials : []
|
||||
const objectiveNames: string[] = studyDetail?.objective_names || []
|
||||
const action = actionCreator()
|
||||
|
||||
const columns: DataGridColumn<Trial>[] = [
|
||||
{ field: "number", label: "Number", sortable: true, padding: "none" },
|
||||
@@ -264,13 +267,18 @@ export const TrialTable: FC<{
|
||||
|
||||
|
||||
const collapseBody = (index: number) => {
|
||||
const [value, setValue] = useState(0.0)
|
||||
const [value, setValue] = useState("")
|
||||
const handleSubmit = (e) => {
|
||||
e.preventDefault()
|
||||
const v = (+value) as number;
|
||||
const studyId = (studyDetail as StudyDetail).id
|
||||
const trialId = trials[index].number
|
||||
action.saveTrialValue(studyId, trialId, v)
|
||||
console.log({
|
||||
index,
|
||||
value,
|
||||
})
|
||||
|
||||
}
|
||||
const handleChangeValue = (e) => {
|
||||
setValue(e.target.value)
|
||||
|
||||
Reference in New Issue
Block a user