33import sys
44import tempfile
55import uuid
6- from typing import List
6+ from typing import List , Union
77from typing_extensions import Annotated
88from fastapi import APIRouter , Depends , Request , Query , UploadFile , File
99from fastapi .responses import JSONResponse
1919from utils import filter_by_concept_ids
2020
2121import api .globals as cms_globals
22+ from api .dependencies import validate_tracking_id
2223from model_services .base import AbstractModelService
2324
2425router = APIRouter ()
@@ -41,12 +42,13 @@ def train_eval_info(request: Request,
4142
4243
4344@router .post ("/evaluate" ,
44- tags = [Tags .Training .name ],
45+ tags = [Tags .Evaluating .name ],
4546 response_class = JSONResponse ,
4647 dependencies = [Depends (cms_globals .props .current_active_user )],
4748 description = "Evaluate the model being served with a trainer export" )
4849async def get_evaluation_with_trainer_export (request : Request ,
4950 trainer_export : Annotated [List [UploadFile ], File (description = "One or more trainer export files to be uploaded" )],
51+ tracking_id : Union [str , None ] = Depends (validate_tracking_id ),
5052 model_service : AbstractModelService = Depends (cms_globals .model_service_dep )) -> JSONResponse :
5153 files = []
5254 file_names = []
@@ -67,18 +69,27 @@ async def get_evaluation_with_trainer_export(request: Request,
6769 json .dump (concatenated , data_file )
6870 data_file .flush ()
6971 data_file .seek (0 )
70- evaluation_id = str (uuid .uuid4 ())
71- evaluation_accepted = model_service .train_supervised (data_file ,
72- 0 ,
73- sys .maxsize ,
74- evaluation_id ,
75- "," .join (file_names ))
72+ evaluation_id = tracking_id or str (uuid .uuid4 ())
73+ evaluation_accepted , experiment_id , run_id = model_service .train_supervised (
74+ data_file , 0 , sys .maxsize , evaluation_id , "," .join (file_names )
75+ )
7676 if evaluation_accepted :
77- return JSONResponse (content = {"message" : "Your evaluation started successfully." , "evaluation_id" : evaluation_id },
78- status_code = HTTP_202_ACCEPTED )
77+ return JSONResponse (
78+ content = {
79+ "message" : "Your evaluation started successfully." ,
80+ "evaluation_id" : evaluation_id ,
81+ "experiment_id" : experiment_id ,
82+ "run_id" : run_id ,
83+ }, status_code = HTTP_202_ACCEPTED
84+ )
7985 else :
80- return JSONResponse (content = {"message" : "Another training or evaluation on this model is still active. Please retry later." },
81- status_code = HTTP_503_SERVICE_UNAVAILABLE )
86+ return JSONResponse (
87+ content = {
88+ "message" : "Another training or evaluation on this model is still active. Please retry later." ,
89+ "experiment_id" : experiment_id ,
90+ "run_id" : run_id ,
91+ }, status_code = HTTP_503_SERVICE_UNAVAILABLE
92+ )
8293
8394
8495@router .post ("/cancel_training" ,
0 commit comments