@@ -56,9 +56,7 @@ def parse_optimizer_config(payload: dict[str, Any], *, path: str | Path) -> Opti
5656 allowed = {"seed" , "optimizer" , "metrics" , "gate" }
5757 extras = {key : value for key , value in payload .items () if key not in allowed }
5858
59- seed = payload .get ("seed" , 91 )
60- if not isinstance (seed , int ):
61- raise ValueError (f"{ path_text } : field 'seed' must be an integer" )
59+ seed = resolve_effective_seed (payload , path = path )
6260
6361 optimizer = payload .get ("optimizer" , {})
6462 if not isinstance (optimizer , dict ):
@@ -82,6 +80,58 @@ def parse_optimizer_config(payload: dict[str, Any], *, path: str | Path) -> Opti
8280 )
8381
8482
83+ def resolve_effective_seed (
84+ payload : dict [str , Any ],
85+ * ,
86+ path : str | Path ,
87+ default : int = 91 ,
88+ strict_legacy : bool = True ,
89+ ) -> int :
90+ """Resolve the legacy or official optimizer seed without audit drift.
91+
92+ The official SDK schema owns ``optimize.algorithm.seed``. A non-integer
93+ top-level ``seed`` may be unrelated SDK metadata and is ignored when the
94+ official nested seed is present. Two integer seed declarations must agree.
95+ """
96+
97+ path_text = str (path )
98+ nested_present = False
99+ nested_seed : Any = None
100+ optimize = payload .get ("optimize" )
101+ if isinstance (optimize , dict ):
102+ algorithm = optimize .get ("algorithm" )
103+ if isinstance (algorithm , dict ) and "seed" in algorithm :
104+ nested_present = True
105+ nested_seed = algorithm ["seed" ]
106+
107+ top_present = "seed" in payload
108+ top_seed = payload .get ("seed" )
109+ if nested_present :
110+ nested = _validated_seed (
111+ nested_seed ,
112+ field_name = f"{ path_text } : field 'optimize.algorithm.seed'" ,
113+ )
114+ if top_present and isinstance (top_seed , int ) and not isinstance (top_seed , bool ):
115+ if top_seed != nested :
116+ raise ValueError (
117+ f"{ path_text } : conflicting seed values: top-level seed={ top_seed } , "
118+ f"optimize.algorithm.seed={ nested } "
119+ )
120+ return nested
121+
122+ if not top_present :
123+ return default
124+ if not strict_legacy and (isinstance (top_seed , bool ) or not isinstance (top_seed , int )):
125+ return default
126+ return _validated_seed (top_seed , field_name = f"{ path_text } : field 'seed'" )
127+
128+
129+ def _validated_seed (value : Any , * , field_name : str ) -> int :
130+ if isinstance (value , bool ) or not isinstance (value , int ):
131+ raise ValueError (f"{ field_name } must be an integer" )
132+ return value
133+
134+
85135def validate_inputs (
86136 * ,
87137 train_path : str | Path ,
0 commit comments