@@ -923,27 +923,40 @@ class LMEval(Eval, BenchmarksProtocolPrivate):
923923
924924 def __init__ (self , config : LMEvalEvalProviderConfig ):
925925 self ._config = config
926+ self ._namespace : str | None = None
926927
927- self ._namespace = _resolve_namespace (self ._config )
928-
929- logger .debug ("LMEval provider initialized with namespace: %s" , self ._namespace )
930928 logger .debug ("LMEval provider config values: %s" , vars (self ._config ))
931929 self .benchmarks : dict [str , Benchmark ] = {}
932930 self ._jobs : list [Job ] = []
933931 self ._job_metadata : dict [str , dict [str , Any ]] = {}
934932
935933 self ._k8s_client : k8s_client .ApiClient | None = None
936934 self ._k8s_custom_api : k8s_client .CustomObjectsApi | None = None
937- if self .use_k8s :
935+ self ._cr_builder : LMEvalCRBuilder | None = None
936+
937+ def _ensure_k8s_initialized (self ):
938+ """Ensure Kubernetes client and namespace are initialized when needed."""
939+ if not self .use_k8s :
940+ logger .warning ("Non-K8s evaluation backend is not implemented yet" )
941+ return
942+
943+ if self ._k8s_client is None :
938944 self ._init_k8s_client ()
939- logger .debug (
940- "Initialized Kubernetes client with namespace: %s" , self ._namespace
941- )
945+
946+ if self ._namespace is None :
947+ self ._namespace = _resolve_namespace (self ._config )
948+ logger .debug ("LMEval provider resolved namespace: %s" , self ._namespace )
949+
950+ if self ._cr_builder is None :
942951 self ._cr_builder = LMEvalCRBuilder (
943952 namespace = self ._namespace ,
944953 service_account = getattr (self ._config , "service_account" , None ),
945954 )
946955 self ._cr_builder ._config = self ._config
956+ logger .debug (
957+ "Initialized Kubernetes client and CR builder with namespace: %s" ,
958+ self ._namespace ,
959+ )
947960
948961 def _init_k8s_client (self ):
949962 """Initialize the Kubernetes client."""
@@ -1048,7 +1061,8 @@ def _deploy_lmeval_cr(self, cr: dict, job_id: str) -> None:
10481061 pvc_name = None
10491062
10501063 if (
1051- self ._cr_builder ._config is not None
1064+ self ._cr_builder is not None
1065+ and self ._cr_builder ._config is not None
10521066 and hasattr (self ._cr_builder ._config , "metadata" )
10531067 and self ._cr_builder ._config .metadata
10541068 ):
@@ -1198,6 +1212,7 @@ async def run_eval(
11981212 Returns:
11991213 Dict containing job_id for evaluation tracking
12001214 """
1215+ self ._ensure_k8s_initialized ()
12011216 if not self .use_k8s :
12021217 raise NotImplementedError ("Non-K8s evaluation not implemented yet" )
12031218
@@ -1224,6 +1239,11 @@ async def run_eval(
12241239 benchmark_config .metadata ["input" ]["storage" ],
12251240 )
12261241
1242+ if self ._cr_builder is None :
1243+ raise LMEvalConfigError (
1244+ "CR builder not initialized - ensure K8s is properly configured"
1245+ )
1246+
12271247 cr = self ._cr_builder .create_cr (
12281248 benchmark_id = benchmark_id ,
12291249 task_config = benchmark_config ,
@@ -1295,6 +1315,7 @@ async def evaluate_rows(
12951315 Returns:
12961316 EvaluateResponse: Object containing generations and scores
12971317 """
1318+ self ._ensure_k8s_initialized ()
12981319 if not self .use_k8s :
12991320 raise NotImplementedError ("Non-K8s evaluation not implemented yet" )
13001321
@@ -1323,6 +1344,7 @@ async def job_status(self, benchmark_id: str, job_id: str) -> dict[str, str] | N
13231344 Returns:
13241345 Dict with current status of the job
13251346 """
1347+ self ._ensure_k8s_initialized ()
13261348 if not self .use_k8s :
13271349 raise NotImplementedError ("Non-K8s evaluation not implemented yet" )
13281350
@@ -1395,6 +1417,7 @@ async def job_cancel(self, benchmark_id: str, job_id: str) -> None:
13951417 benchmark_id: The benchmark identifier
13961418 job_id: The job identifier
13971419 """
1420+ self ._ensure_k8s_initialized ()
13981421 if not self .use_k8s :
13991422 raise NotImplementedError ("Non-K8s evaluation not implemented yet" )
14001423
@@ -1568,6 +1591,7 @@ async def job_result(self, benchmark_id: str, job_id: str) -> EvaluateResponse:
15681591 Returns:
15691592 EvaluateResponse: Results of the evaluation
15701593 """
1594+ self ._ensure_k8s_initialized ()
15711595 if not self .use_k8s :
15721596 return EvaluateResponse (
15731597 generations = [],
0 commit comments