@@ -68,16 +68,19 @@ def __getitem__(self, key):
68
68
_dict ["properties" ] = _dict ["properties" ].copy ()
69
69
return _dict [key ]
70
70
71
+
71
72
class Provider (dict ):
72
73
"""
73
74
Generic attribute class for provider objects.
74
75
"""
76
+
75
77
def __getattr__ (self , name ):
76
78
try :
77
79
return self [name ]
78
80
except KeyError :
79
81
# pylint: disable=raise-missing-from
80
82
raise AttributeError (name )
83
+
81
84
def __setattr__ (self , name , value ):
82
85
self [name ] = value
83
86
@@ -140,7 +143,16 @@ class Think(BaseResponse):
140
143
This class defines any configuration settings for the Think model.
141
144
"""
142
145
143
- provider : Provider = field (default_factory = Provider )
146
+ provider : Provider = field (
147
+ default_factory = Provider ,
148
+ metadata = dataclass_config (
149
+ exclude = lambda f : (
150
+ f is None
151
+ or (isinstance (f , dict ) and not f )
152
+ or (isinstance (f , Provider ) and not f )
153
+ )
154
+ ),
155
+ )
144
156
functions : Optional [List [Function ]] = field (
145
157
default = None , metadata = dataclass_config (exclude = lambda f : f is None )
146
158
)
@@ -155,7 +167,11 @@ class Think(BaseResponse):
155
167
)
156
168
157
169
def __post_init__ (self ):
158
- if not isinstance (self .provider , Provider ):
170
+ if (
171
+ not isinstance (self .provider , Provider )
172
+ and self .provider is not None
173
+ and not (isinstance (self .provider , dict ) and not self .provider )
174
+ ):
159
175
self .provider = Provider (self .provider )
160
176
161
177
def __getitem__ (self , key ):
@@ -175,10 +191,23 @@ class Listen(BaseResponse):
175
191
This class defines any configuration settings for the Listen model.
176
192
"""
177
193
178
- provider : Provider = field (default_factory = Provider )
194
+ provider : Provider = field (
195
+ default_factory = Provider ,
196
+ metadata = dataclass_config (
197
+ exclude = lambda f : (
198
+ f is None
199
+ or (isinstance (f , dict ) and not f )
200
+ or (isinstance (f , Provider ) and not f )
201
+ )
202
+ ),
203
+ )
179
204
180
205
def __post_init__ (self ):
181
- if not isinstance (self .provider , Provider ):
206
+ if (
207
+ not isinstance (self .provider , Provider )
208
+ and self .provider is not None
209
+ and not (isinstance (self .provider , dict ) and not self .provider )
210
+ ):
182
211
self .provider = Provider (self .provider )
183
212
184
213
def __getitem__ (self , key ):
@@ -192,13 +221,26 @@ class Speak(BaseResponse):
192
221
This class defines any configuration settings for the Speak model.
193
222
"""
194
223
195
- provider : Provider = field (default_factory = Provider )
224
+ provider : Provider = field (
225
+ default_factory = Provider ,
226
+ metadata = dataclass_config (
227
+ exclude = lambda f : (
228
+ f is None
229
+ or (isinstance (f , dict ) and not f )
230
+ or (isinstance (f , Provider ) and not f )
231
+ )
232
+ ),
233
+ )
196
234
endpoint : Optional [Endpoint ] = field (
197
235
default = None , metadata = dataclass_config (exclude = lambda f : f is None )
198
236
)
199
237
200
238
def __post_init__ (self ):
201
- if not isinstance (self .provider , Provider ):
239
+ if (
240
+ not isinstance (self .provider , Provider )
241
+ and self .provider is not None
242
+ and not (isinstance (self .provider , dict ) and not self .provider )
243
+ ):
202
244
self .provider = Provider (self .provider )
203
245
204
246
def __getitem__ (self , key ):
@@ -215,9 +257,30 @@ class Agent(BaseResponse):
215
257
"""
216
258
217
259
language : str = field (default = "en" )
218
- listen : Listen = field (default_factory = Listen )
219
- think : Think = field (default_factory = Think )
220
- speak : Speak = field (default_factory = Speak )
260
+ listen : Listen = field (
261
+ default_factory = Listen ,
262
+ metadata = dataclass_config (
263
+ exclude = lambda f : f is None
264
+ or (isinstance (f , dict ) and not f )
265
+ or (isinstance (f , Listen ) and not f )
266
+ ),
267
+ )
268
+ think : Think = field (
269
+ default_factory = Think ,
270
+ metadata = dataclass_config (
271
+ exclude = lambda f : f is None
272
+ or (isinstance (f , dict ) and not f )
273
+ or (isinstance (f , Think ) and not f )
274
+ ),
275
+ )
276
+ speak : Speak = field (
277
+ default_factory = Speak ,
278
+ metadata = dataclass_config (
279
+ exclude = lambda f : f is None
280
+ or (isinstance (f , dict ) and not f )
281
+ or (isinstance (f , Speak ) and not f )
282
+ ),
283
+ )
221
284
greeting : Optional [str ] = field (
222
285
default = None , metadata = dataclass_config (exclude = lambda f : f is None )
223
286
)
@@ -231,6 +294,8 @@ def __getitem__(self, key):
231
294
if "speak" in _dict and isinstance (_dict ["speak" ], dict ):
232
295
_dict ["speak" ] = Speak .from_dict (_dict ["speak" ])
233
296
return _dict [key ]
297
+
298
+
234
299
@dataclass
235
300
class Input (BaseResponse ):
236
301
"""
@@ -272,6 +337,7 @@ def __getitem__(self, key):
272
337
_dict ["output" ] = Output .from_dict (_dict ["output" ])
273
338
return _dict [key ]
274
339
340
+
275
341
@dataclass
276
342
class SettingsOptions (BaseResponse ):
277
343
"""
0 commit comments