44
55import argparse
66import json
7+ import os
78import sys
89import uuid
910from pathlib import Path
@@ -108,23 +109,37 @@ def _cmd_convert_lm_eval(args: argparse.Namespace) -> int:
108109
109110
110111def _cmd_convert_inspect (args : argparse .Namespace ) -> int :
111- from every_eval_ever .converters .inspect .adapter import InspectAIAdapter
112+ from every_eval_ever .converters .inspect .adapter import (
113+ InspectAIAdapter ,
114+ list_eval_logs ,
115+ )
112116
113117 adapter = InspectAIAdapter ()
114118 metadata = _common_metadata (args )
115- metadata ['file_uuid' ] = str (uuid .uuid4 ())
116119
117120 log_path = Path (args .log_path )
121+ eval_uuids : list [str ]
118122 if log_path .is_file ():
123+ eval_uuids = [str (uuid .uuid4 ())]
124+ metadata ['file_uuid' ] = eval_uuids [0 ]
119125 logs = [adapter .transform_from_file (log_path , metadata )]
120126 elif log_path .is_dir ():
127+ eval_paths = list_eval_logs (log_path .absolute ().as_posix ())
128+ eval_uuids = [str (uuid .uuid4 ()) for _ in eval_paths ]
129+ metadata ['file_uuids' ] = eval_uuids
121130 logs = adapter .transform_from_directory (log_path , metadata )
122131 else :
123132 raise FileNotFoundError (f'Path is not a file or directory: { log_path } ' )
124133
134+ if len (logs ) != len (eval_uuids ):
135+ raise RuntimeError (
136+ 'Inspect conversion produced a different number of logs than '
137+ 'the generated UUID list.'
138+ )
139+
125140 output_dir = Path (args .output_dir )
126- for log in logs :
127- print (_write_log (log , output_dir ))
141+ for log , eval_uuid in zip ( logs , eval_uuids ) :
142+ print (_write_log (log , output_dir , eval_uuid = eval_uuid ))
128143
129144 print (f'Converted { len (logs )} evaluation log(s).' )
130145 return 0
@@ -135,16 +150,39 @@ def _cmd_convert_helm(args: argparse.Namespace) -> int:
135150
136151 adapter = HELMAdapter ()
137152 metadata = _common_metadata (args )
138- metadata ['file_uuid' ] = str (uuid .uuid4 ())
153+ log_path = Path (args .log_path )
154+
155+ eval_uuids : list [str ]
156+ if adapter ._directory_contains_required_files (log_path ):
157+ eval_uuids = [str (uuid .uuid4 ())]
158+ metadata ['file_uuid' ] = eval_uuids [0 ]
159+ elif log_path .is_dir ():
160+ run_dirs = [
161+ entry .path
162+ for entry in os .scandir (log_path )
163+ if entry .is_dir ()
164+ and adapter ._directory_contains_required_files (entry .path )
165+ ]
166+ eval_uuids = [str (uuid .uuid4 ()) for _ in run_dirs ]
167+ metadata ['file_uuids' ] = eval_uuids
168+ else :
169+ raise FileNotFoundError (f'Path is not a file or directory: { log_path } ' )
139170
140171 logs = adapter .transform_from_directory (
141- Path ( args . log_path ) ,
172+ log_path ,
142173 output_path = str (Path (args .output_dir ) / 'helm_output' ),
143174 metadata_args = metadata ,
144175 )
176+
177+ if len (logs ) != len (eval_uuids ):
178+ raise RuntimeError (
179+ 'HELM conversion produced a different number of logs than '
180+ 'the generated UUID list.'
181+ )
182+
145183 output_dir = Path (args .output_dir )
146- for log in logs :
147- print (_write_log (log , output_dir ))
184+ for log , eval_uuid in zip ( logs , eval_uuids ) :
185+ print (_write_log (log , output_dir , eval_uuid = eval_uuid ))
148186
149187 print (f'Converted { len (logs )} evaluation log(s).' )
150188 return 0
0 commit comments