@@ -139,61 +139,91 @@ def to_dict(self) -> dict:
139139
140140
141141# ============================================================================
142- # Completion Config Types
142+ # Base AI Config Types
143143# ============================================================================
144144
145145@dataclass (frozen = True )
146- class AICompletionConfigDefault :
146+ class AIConfigDefault :
147147 """
148- Default Completion AI Config ( default mode) .
148+ Base AI Config interface for default implementations with optional enabled property .
149149 """
150150 enabled : Optional [bool ] = None
151151 model : Optional [ModelConfig ] = None
152- messages : Optional [List [LDMessage ]] = None
153152 provider : Optional [ProviderConfig ] = None
154- judge_configuration : Optional [JudgeConfiguration ] = None
155153
156- def to_dict (self ) -> dict :
154+ def _base_to_dict (self ) -> Dict [ str , Any ] :
157155 """
158- Render the given default values as an AICompletionConfigDefault-compatible dictionary object.
156+ Render the base config fields as a dictionary object.
159157 """
160- result = {
158+ return {
161159 '_ldMeta' : {
162160 'enabled' : self .enabled or False ,
163161 },
164162 'model' : self .model .to_dict () if self .model else None ,
165- 'messages' : [message .to_dict () for message in self .messages ] if self .messages else None ,
166163 'provider' : self .provider .to_dict () if self .provider else None ,
167164 }
168- if self .judge_configuration is not None :
169- result ['judgeConfiguration' ] = self .judge_configuration .to_dict ()
170- return result
171165
172166
173167@dataclass (frozen = True )
174- class AICompletionConfig :
168+ class AIConfig :
175169 """
176- Completion AI Config (default mode) .
170+ Base AI Config interface without mode-specific fields .
177171 """
178172 enabled : bool
179173 model : Optional [ModelConfig ] = None
180- messages : Optional [List [LDMessage ]] = None
181174 provider : Optional [ProviderConfig ] = None
182175 tracker : Optional [LDAIConfigTracker ] = None
183- judge_configuration : Optional [JudgeConfiguration ] = None
184176
185- def to_dict (self ) -> dict :
177+ def _base_to_dict (self ) -> Dict [ str , Any ] :
186178 """
187- Render the given completion config as a dictionary object.
179+ Render the base config fields as a dictionary object.
188180 """
189- result = {
181+ return {
190182 '_ldMeta' : {
191183 'enabled' : self .enabled ,
192184 },
193185 'model' : self .model .to_dict () if self .model else None ,
194- 'messages' : [message .to_dict () for message in self .messages ] if self .messages else None ,
195186 'provider' : self .provider .to_dict () if self .provider else None ,
196187 }
188+
189+
190+ # ============================================================================
191+ # Completion Config Types
192+ # ============================================================================
193+
194+ @dataclass (frozen = True )
195+ class AICompletionConfigDefault (AIConfigDefault ):
196+ """
197+ Default Completion AI Config (default mode).
198+ """
199+ messages : Optional [List [LDMessage ]] = None
200+ judge_configuration : Optional [JudgeConfiguration ] = None
201+
202+ def to_dict (self ) -> dict :
203+ """
204+ Render the given default values as an AICompletionConfigDefault-compatible dictionary object.
205+ """
206+ result = self ._base_to_dict ()
207+ result ['messages' ] = [message .to_dict () for message in self .messages ] if self .messages else None
208+ if self .judge_configuration is not None :
209+ result ['judgeConfiguration' ] = self .judge_configuration .to_dict ()
210+ return result
211+
212+
213+ @dataclass (frozen = True )
214+ class AICompletionConfig (AIConfig ):
215+ """
216+ Completion AI Config (default mode).
217+ """
218+ messages : Optional [List [LDMessage ]] = None
219+ judge_configuration : Optional [JudgeConfiguration ] = None
220+
221+ def to_dict (self ) -> dict :
222+ """
223+ Render the given completion config as a dictionary object.
224+ """
225+ result = self ._base_to_dict ()
226+ result ['messages' ] = [message .to_dict () for message in self .messages ] if self .messages else None
197227 if self .judge_configuration is not None :
198228 result ['judgeConfiguration' ] = self .judge_configuration .to_dict ()
199229 return result
@@ -203,29 +233,19 @@ def to_dict(self) -> dict:
203233# Agent Config Types
204234# ============================================================================
205235
206-
207236@dataclass (frozen = True )
208- class AIAgentConfigDefault :
237+ class AIAgentConfigDefault ( AIConfigDefault ) :
209238 """
210239 Default Agent-specific AI Config with instructions.
211240 """
212- enabled : Optional [bool ] = None
213- model : Optional [ModelConfig ] = None
214- provider : Optional [ProviderConfig ] = None
215241 instructions : Optional [str ] = None
216242 judge_configuration : Optional [JudgeConfiguration ] = None
217243
218244 def to_dict (self ) -> Dict [str , Any ]:
219245 """
220246 Render the given agent config default as a dictionary object.
221247 """
222- result : Dict [str , Any ] = {
223- '_ldMeta' : {
224- 'enabled' : self .enabled or False ,
225- },
226- 'model' : self .model .to_dict () if self .model else None ,
227- 'provider' : self .provider .to_dict () if self .provider else None ,
228- }
248+ result = self ._base_to_dict ()
229249 if self .instructions is not None :
230250 result ['instructions' ] = self .instructions
231251 if self .judge_configuration is not None :
@@ -234,28 +254,18 @@ def to_dict(self) -> Dict[str, Any]:
234254
235255
236256@dataclass (frozen = True )
237- class AIAgentConfig :
257+ class AIAgentConfig ( AIConfig ) :
238258 """
239259 Agent-specific AI Config with instructions.
240260 """
241- enabled : bool
242- model : Optional [ModelConfig ] = None
243- provider : Optional [ProviderConfig ] = None
244261 instructions : Optional [str ] = None
245- tracker : Optional [LDAIConfigTracker ] = None
246262 judge_configuration : Optional [JudgeConfiguration ] = None
247263
248264 def to_dict (self ) -> Dict [str , Any ]:
249265 """
250266 Render the given agent config as a dictionary object.
251267 """
252- result : Dict [str , Any ] = {
253- '_ldMeta' : {
254- 'enabled' : self .enabled ,
255- },
256- 'model' : self .model .to_dict () if self .model else None ,
257- 'provider' : self .provider .to_dict () if self .provider else None ,
258- }
268+ result = self ._base_to_dict ()
259269 if self .instructions is not None :
260270 result ['instructions' ] = self .instructions
261271 if self .judge_configuration is not None :
@@ -268,58 +278,39 @@ def to_dict(self) -> Dict[str, Any]:
268278# ============================================================================
269279
270280@dataclass (frozen = True )
271- class AIJudgeConfigDefault :
281+ class AIJudgeConfigDefault ( AIConfigDefault ) :
272282 """
273283 Default Judge-specific AI Config with required evaluation metric key.
274284 """
275- enabled : Optional [bool ] = None
276- model : Optional [ModelConfig ] = None
277285 messages : Optional [List [LDMessage ]] = None
278- provider : Optional [ProviderConfig ] = None
279286 evaluation_metric_keys : Optional [List [str ]] = None
280287
281288 def to_dict (self ) -> dict :
282289 """
283290 Render the given judge config default as a dictionary object.
284291 """
285- result = {
286- '_ldMeta' : {
287- 'enabled' : self .enabled or False ,
288- },
289- 'model' : self .model .to_dict () if self .model else None ,
290- 'messages' : [message .to_dict () for message in self .messages ] if self .messages else None ,
291- 'provider' : self .provider .to_dict () if self .provider else None ,
292- }
292+ result = self ._base_to_dict ()
293+ result ['messages' ] = [message .to_dict () for message in self .messages ] if self .messages else None
293294 if self .evaluation_metric_keys is not None :
294295 result ['evaluationMetricKeys' ] = self .evaluation_metric_keys
295296 return result
296297
297298
298299@dataclass (frozen = True )
299- class AIJudgeConfig :
300+ class AIJudgeConfig ( AIConfig ) :
300301 """
301302 Judge-specific AI Config with required evaluation metric key.
302303 """
303- enabled : bool
304304 evaluation_metric_keys : List [str ]
305- model : Optional [ModelConfig ] = None
306305 messages : Optional [List [LDMessage ]] = None
307- provider : Optional [ProviderConfig ] = None
308- tracker : Optional [LDAIConfigTracker ] = None
309306
310307 def to_dict (self ) -> dict :
311308 """
312309 Render the given judge config as a dictionary object.
313310 """
314- result = {
315- '_ldMeta' : {
316- 'enabled' : self .enabled ,
317- },
318- 'evaluationMetricKeys' : self .evaluation_metric_keys ,
319- 'model' : self .model .to_dict () if self .model else None ,
320- 'messages' : [message .to_dict () for message in self .messages ] if self .messages else None ,
321- 'provider' : self .provider .to_dict () if self .provider else None ,
322- }
311+ result = self ._base_to_dict ()
312+ result ['evaluationMetricKeys' ] = self .evaluation_metric_keys
313+ result ['messages' ] = [message .to_dict () for message in self .messages ] if self .messages else None
323314 return result
324315
325316
0 commit comments