@@ -509,6 +509,54 @@ def _simulated_preview(self, samples):
509509 preview_result .total_runtime_ms = max (1 , int ((end_time - start_time ) * 1000 ))
510510 return preview_result
511511
512+ def _build_minimal_criteria (self ) -> List [Dict [str , str ]]:
513+ """Build minimal criteria (name, type, description) without code snippets."""
514+
515+ # Remote URL mode
516+ if self .remote_url :
517+ return [
518+ {
519+ "name" : "remote_eval_proxy" ,
520+ "type" : "CODE_SNIPPETS" ,
521+ "description" : f"Proxies evaluation to remote URL: { self .remote_url } " ,
522+ }
523+ ]
524+
525+ # TS mode (direct code snippet)
526+ elif self .ts_mode_config :
527+ criterion_name = self .ts_mode_config .get ("criterion_name" , "default_code_criterion" )
528+ description = self .ts_mode_config .get ("description" , "Python code execution" )
529+ return [
530+ {
531+ "name" : criterion_name ,
532+ "type" : "CODE_SNIPPETS" ,
533+ "description" : description ,
534+ }
535+ ]
536+
537+ # Multi-metrics mode
538+ elif self .multi_metrics :
539+ return [
540+ {
541+ "name" : "eval" ,
542+ "type" : "CODE_SNIPPETS" ,
543+ "description" : self .description or "Multi-metric evaluation" ,
544+ }
545+ ]
546+
547+ # Single metric folders
548+ else :
549+ criteria = []
550+ for metric_name in self .metric_folders :
551+ criteria .append (
552+ {
553+ "name" : metric_name ,
554+ "type" : "CODE_SNIPPETS" ,
555+ "description" : self .description or f"Evaluation metric: { metric_name } " ,
556+ }
557+ )
558+ return criteria
559+
512560 def create (self , evaluator_id , display_name = None , description = None , force = False ):
513561 if not self .remote_url and not self .ts_mode_config and not self .code_files :
514562 raise ValueError ("No code files loaded. Load metric folder(s) or provide ts_mode_config/remote_url first." )
@@ -524,18 +572,19 @@ def create(self, evaluator_id, display_name=None, description=None, force=False)
524572
525573 self .display_name = display_name or evaluator_id
526574 self .description = description or f"Evaluator created from { evaluator_id } "
527-
575+ account_id = "pyroworks-dev"
528576 # Keep multiMetrics/rollupSettings for backward compatibility with tests
529577 payload_multi_metrics = True
530578 payload_rollup_settings = {"skipRollup" : True }
531-
579+ parent = f"accounts/ { account_id } "
532580 payload_data = {
581+ "parent" : parent ,
533582 "evaluator" : {
534583 "displayName" : self .display_name ,
535584 "description" : self .description ,
536585 "multiMetrics" : payload_multi_metrics ,
537586 # "rewardFunctionMode": self.reward_function_mode, # How input is processed by user func
538- "criteria" : self ._construct_criteria ( criteria_data = {} ),
587+ "criteria" : self ._build_minimal_criteria ( ),
539588 "requirements" : "" ,
540589 "rollupSettings" : payload_rollup_settings ,
541590 },
@@ -557,10 +606,11 @@ def create(self, evaluator_id, display_name=None, description=None, force=False)
557606 if "dev.api.fireworks.ai" in self .api_base and account_id == "fireworks" :
558607 account_id = "pyroworks-dev"
559608
560- base_url = f"{ self .api_base } /v1/accounts/ { account_id } /evaluators"
609+ base_url = f"{ self .api_base } /v1/{ parent } /evaluators"
561610 headers = {
562611 "Authorization" : f"Bearer { auth_token } " ,
563612 "Content-Type" : "application/json" ,
613+ "X-Fireworks-Gateway-Secret" : "8b8a823c-0b29-41f4-8537-4c9f650a113c" ,
564614 }
565615 logger .info (f"Creating evaluator '{ evaluator_id } ' for account '{ account_id } '..." )
566616
0 commit comments