64
64
from ..artifacts .in_memory_artifact_service import InMemoryArtifactService
65
65
from ..evaluation .eval_case import EvalCase
66
66
from ..evaluation .eval_case import SessionInput
67
+ from ..evaluation .local_eval_set_results_manager import LocalEvalSetResultsManager
67
68
from ..evaluation .local_eval_sets_manager import LocalEvalSetsManager
68
69
from ..events .event import Event
69
70
from ..memory .in_memory_memory_service import InMemoryMemoryService
@@ -322,6 +323,7 @@ async def close_toolset_safely(toolset):
322
323
memory_service = InMemoryMemoryService ()
323
324
324
325
eval_sets_manager = LocalEvalSetsManager (agent_dir = agent_dir )
326
+ eval_set_results_manager = LocalEvalSetResultsManager (agent_dir = agent_dir )
325
327
326
328
# Build the Session service
327
329
agent_engine_id = ""
@@ -594,32 +596,10 @@ async def run_eval(
594
596
)
595
597
eval_case_results .append (eval_case_result )
596
598
597
- timestamp = time .time ()
598
- eval_set_result_name = app_name + "_" + eval_set_id + "_" + str (timestamp )
599
- eval_set_result = EvalSetResult (
600
- eval_set_result_id = eval_set_result_name ,
601
- eval_set_result_name = eval_set_result_name ,
602
- eval_set_id = eval_set_id ,
603
- eval_case_results = eval_case_results ,
604
- creation_timestamp = timestamp ,
599
+ eval_set_results_manager .save_eval_set_result (
600
+ app_name , eval_set_id , eval_case_results
605
601
)
606
602
607
- # Write eval result file, with eval_set_result_name.
608
- app_eval_history_dir = os .path .join (
609
- agent_dir , app_name , ".adk" , "eval_history"
610
- )
611
- if not os .path .exists (app_eval_history_dir ):
612
- os .makedirs (app_eval_history_dir )
613
- # Convert to json and write to file.
614
- eval_set_result_json = eval_set_result .model_dump_json ()
615
- eval_set_result_file_path = os .path .join (
616
- app_eval_history_dir ,
617
- eval_set_result_name + _EVAL_SET_RESULT_FILE_EXTENSION ,
618
- )
619
- logger .info ("Writing eval result to file: %s" , eval_set_result_file_path )
620
- with open (eval_set_result_file_path , "w" ) as f :
621
- f .write (json .dumps (eval_set_result_json , indent = 2 ))
622
-
623
603
return run_eval_results
624
604
625
605
@app .get (
@@ -631,45 +611,22 @@ def get_eval_result(
631
611
eval_result_id : str ,
632
612
) -> EvalSetResult :
633
613
"""Gets the eval result for the given eval id."""
634
- # Load the eval set file data
635
- maybe_eval_result_file_path = (
636
- os .path .join (
637
- agent_dir , app_name , ".adk" , "eval_history" , eval_result_id
638
- )
639
- + _EVAL_SET_RESULT_FILE_EXTENSION
640
- )
641
- if not os .path .exists (maybe_eval_result_file_path ):
642
- raise HTTPException (
643
- status_code = 404 ,
644
- detail = f"Eval result `{ eval_result_id } ` not found." ,
645
- )
646
- with open (maybe_eval_result_file_path , "r" ) as file :
647
- eval_result_data = json .load (file ) # Load JSON into a list
648
614
try :
649
- eval_result = EvalSetResult .model_validate_json (eval_result_data )
650
- return eval_result
651
- except ValidationError as e :
652
- logger .exception ("get_eval_result validation error: %s" , e )
615
+ return eval_set_results_manager .get_eval_set_result (
616
+ app_name , eval_result_id
617
+ )
618
+ except ValueError as ve :
619
+ raise HTTPException (status_code = 404 , detail = str (ve )) from ve
620
+ except ValidationError as ve :
621
+ raise HTTPException (status_code = 500 , detail = str (ve )) from ve
653
622
654
623
@app .get (
655
624
"/apps/{app_name}/eval_results" ,
656
625
response_model_exclude_none = True ,
657
626
)
658
627
def list_eval_results (app_name : str ) -> list [str ]:
659
628
"""Lists all eval results for the given app."""
660
- app_eval_history_directory = os .path .join (
661
- agent_dir , app_name , ".adk" , "eval_history"
662
- )
663
-
664
- if not os .path .exists (app_eval_history_directory ):
665
- return []
666
-
667
- eval_result_files = [
668
- file .removesuffix (_EVAL_SET_RESULT_FILE_EXTENSION )
669
- for file in os .listdir (app_eval_history_directory )
670
- if file .endswith (_EVAL_SET_RESULT_FILE_EXTENSION )
671
- ]
672
- return eval_result_files
629
+ return eval_set_results_manager .list_eval_set_results (app_name )
673
630
674
631
@app .delete ("/apps/{app_name}/users/{user_id}/sessions/{session_id}" )
675
632
async def delete_session (app_name : str , user_id : str , session_id : str ):
0 commit comments