Skip to content

Commit 2c92d67

Browse files
committed
feat: make all providers generic
1 parent 4cf0542 commit 2c92d67

File tree

8 files changed

+31
-82
lines changed

8 files changed

+31
-82
lines changed

deepgram/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,15 +340,14 @@
340340
AgentKeepAlive,
341341
# sub level
342342
Listen,
343-
ListenProvider,
344343
Speak,
345344
Header,
346345
Item,
347346
Properties,
348347
Parameters,
349348
Function,
350349
Think,
351-
ThinkProvider,
350+
Provider,
352351
Agent,
353352
Input,
354353
Output,

deepgram/client.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -354,15 +354,14 @@
354354
AgentKeepAlive,
355355
# sub level
356356
Listen,
357-
ListenProvider,
358357
Speak,
359358
Header,
360359
Item,
361360
Properties,
362361
Parameters,
363362
Function,
364363
Think,
365-
ThinkProvider,
364+
Provider,
366365
Agent,
367366
Input,
368367
Output,

deepgram/clients/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,15 +363,14 @@
363363
AgentKeepAlive,
364364
# sub level
365365
Listen,
366-
ListenProvider,
367366
Speak,
368367
Header,
369368
Item,
370369
Properties,
371370
Parameters,
372371
Function,
373372
Think,
374-
ThinkProvider,
373+
Provider,
375374
Agent,
376375
Input,
377376
Output,

deepgram/clients/agent/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,14 @@
3838
AgentKeepAlive,
3939
# sub level
4040
Listen,
41-
ListenProvider,
4241
Speak,
4342
Header,
4443
Item,
4544
Properties,
4645
Parameters,
4746
Function,
4847
Think,
49-
ThinkProvider,
48+
Provider,
5049
Agent,
5150
Input,
5251
Output,

deepgram/clients/agent/client.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,14 @@
3737
AgentKeepAlive as LatestAgentKeepAlive,
3838
# sub level
3939
Listen as LatestListen,
40-
ListenProvider as LatestListenProvider,
4140
Speak as LatestSpeak,
4241
Header as LatestHeader,
4342
Item as LatestItem,
4443
Properties as LatestProperties,
4544
Parameters as LatestParameters,
4645
Function as LatestFunction,
4746
Think as LatestThink,
48-
ThinkProvider as LatestThinkProvider,
47+
Provider as LatestProvider,
4948
Agent as LatestAgent,
5049
Input as LatestInput,
5150
Output as LatestOutput,
@@ -84,15 +83,14 @@
8483
AgentKeepAlive = LatestAgentKeepAlive
8584

8685
Listen = LatestListen
87-
ListenProvider = LatestListenProvider
8886
Speak = LatestSpeak
8987
Header = LatestHeader
9088
Item = LatestItem
9189
Properties = LatestProperties
9290
Parameters = LatestParameters
9391
Function = LatestFunction
9492
Think = LatestThink
95-
ThinkProvider = LatestThinkProvider
93+
Provider = LatestProvider
9694
Agent = LatestAgent
9795
Input = LatestInput
9896
Output = LatestOutput

deepgram/clients/agent/v1/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,14 @@
4242
AgentKeepAlive,
4343
# sub level
4444
Listen,
45-
ListenProvider,
4645
Speak,
4746
Header,
4847
Item,
4948
Properties,
5049
Parameters,
5150
Function,
5251
Think,
53-
ThinkProvider,
52+
Provider,
5453
Agent,
5554
Input,
5655
Output,

deepgram/clients/agent/v1/websocket/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,14 @@
3333
AgentKeepAlive,
3434
# sub level
3535
Listen,
36-
ListenProvider,
3736
Speak,
3837
Header,
3938
Item,
4039
Properties,
4140
Parameters,
4241
Function,
4342
Think,
44-
ThinkProvider,
43+
Provider,
4544
Agent,
4645
Input,
4746
Output,

deepgram/clients/agent/v1/websocket/options.py

Lines changed: 23 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,16 @@ def __getitem__(self, key):
6868
_dict["properties"] = _dict["properties"].copy()
6969
return _dict[key]
7070

71+
class Provider(dict):
72+
def __getattr__(self, name):
73+
try:
74+
return self[name]
75+
except KeyError:
76+
# pylint: disable=raise-missing-from
77+
raise AttributeError(name)
78+
def __setattr__(self, name, value):
79+
self[name] = value
80+
7181

7282
@dataclass
7383
class Endpoint(BaseResponse):
@@ -121,59 +131,13 @@ def __getitem__(self, key):
121131
return _dict[key]
122132

123133

124-
@dataclass
125-
class CartesiaVoice(BaseResponse):
126-
"""
127-
This class defines the voice for the Cartesia model.
128-
"""
129-
130-
mode: str = field(
131-
default="", metadata=dataclass_config(exclude=lambda f: f is None or f == "")
132-
)
133-
id: str = field(
134-
default="", metadata=dataclass_config(exclude=lambda f: f is None or f == "")
135-
)
136-
137-
138-
@dataclass
139-
class ListenProvider(BaseResponse):
140-
"""
141-
This class defines the provider for the Listen model.
142-
"""
143-
144-
type: str = field(default="")
145-
model: str = field(default="")
146-
keyterms: Optional[List[str]] = field(
147-
default=None, metadata=dataclass_config(exclude=lambda f: f is None)
148-
)
149-
150-
def __getitem__(self, key):
151-
_dict = self.to_dict()
152-
if "keyterms" in _dict and isinstance(_dict["keyterms"], list):
153-
_dict["keyterms"] = [str(keyterm) for keyterm in _dict["keyterms"]]
154-
return _dict[key]
155-
156-
157-
@dataclass
158-
class ThinkProvider(BaseResponse):
159-
"""
160-
This class defines the provider for the Think model.
161-
"""
162-
163-
type: Optional[str] = field(default=None)
164-
model: Optional[str] = field(default=None)
165-
temperature: Optional[float] = field(
166-
default=None, metadata=dataclass_config(exclude=lambda f: f is None)
167-
)
168-
169-
170134
@dataclass
171135
class Think(BaseResponse):
172136
"""
173137
This class defines any configuration settings for the Think model.
174138
"""
175139

176-
provider: ThinkProvider = field(default_factory=ThinkProvider)
140+
provider: Provider = field(default_factory=Provider)
177141
functions: Optional[List[Function]] = field(
178142
default=None, metadata=dataclass_config(exclude=lambda f: f is None)
179143
)
@@ -184,10 +148,12 @@ class Think(BaseResponse):
184148
default=None, metadata=dataclass_config(exclude=lambda f: f is None)
185149
)
186150

151+
def __post_init__(self):
152+
if not isinstance(self.provider, Provider):
153+
self.provider = Provider(self.provider)
154+
187155
def __getitem__(self, key):
188156
_dict = self.to_dict()
189-
if "provider" in _dict and isinstance(_dict["provider"], dict):
190-
_dict["provider"] = ThinkProvider.from_dict(_dict["provider"])
191157
if "functions" in _dict and isinstance(_dict["functions"], list):
192158
_dict["functions"] = [
193159
Function.from_dict(function) for function in _dict["functions"]
@@ -203,12 +169,14 @@ class Listen(BaseResponse):
203169
This class defines any configuration settings for the Listen model.
204170
"""
205171

206-
provider: ListenProvider = field(default_factory=ListenProvider)
172+
provider: Provider = field(default_factory=Provider)
173+
174+
def __post_init__(self):
175+
if not isinstance(self.provider, Provider):
176+
self.provider = Provider(self.provider)
207177

208178
def __getitem__(self, key):
209179
_dict = self.to_dict()
210-
if "provider" in _dict and isinstance(_dict["provider"], dict):
211-
_dict["provider"] = ListenProvider.from_dict(_dict["provider"])
212180
return _dict[key]
213181

214182

@@ -218,25 +186,14 @@ class Speak(BaseResponse):
218186
This class defines any configuration settings for the Speak model.
219187
"""
220188

221-
provider: dict = field(default_factory=dict)
189+
provider: Provider = field(default_factory=Provider)
222190
endpoint: Optional[Endpoint] = field(
223191
default=None, metadata=dataclass_config(exclude=lambda f: f is None)
224192
)
225193

226194
def __post_init__(self):
227-
# Allow attribute-style access to provider dict
228-
# pylint: disable=missing-class-docstring
229-
class AttrDict(dict):
230-
def __getattr__(self, name):
231-
try:
232-
return self[name]
233-
except KeyError:
234-
# pylint: disable=raise-missing-from
235-
raise AttributeError(name)
236-
def __setattr__(self, name, value):
237-
self[name] = value
238-
if not isinstance(self.provider, AttrDict):
239-
self.provider = AttrDict(self.provider)
195+
if not isinstance(self.provider, Provider):
196+
self.provider = Provider(self.provider)
240197

241198
def __getitem__(self, key):
242199
_dict = self.to_dict()

0 commit comments

Comments
 (0)