Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 84 additions & 28 deletions src/deepgram/listen/v1/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,23 +51,23 @@ def connect(
dictation: typing.Optional[str] = None,
encoding: typing.Optional[str] = None,
endpointing: typing.Optional[str] = None,
extra: typing.Optional[str] = None,
extra: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
interim_results: typing.Optional[str] = None,
keyterm: typing.Optional[str] = None,
keywords: typing.Optional[str] = None,
keyterm: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
keywords: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
language: typing.Optional[str] = None,
mip_opt_out: typing.Optional[str] = None,
model: str,
multichannel: typing.Optional[str] = None,
numerals: typing.Optional[str] = None,
profanity_filter: typing.Optional[str] = None,
punctuate: typing.Optional[str] = None,
redact: typing.Optional[str] = None,
replace: typing.Optional[str] = None,
redact: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
replace: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
sample_rate: typing.Optional[str] = None,
search: typing.Optional[str] = None,
search: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
smart_format: typing.Optional[str] = None,
tag: typing.Optional[str] = None,
tag: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
utterance_end_ms: typing.Optional[str] = None,
vad_events: typing.Optional[str] = None,
version: typing.Optional[str] = None,
Expand Down Expand Up @@ -163,13 +163,25 @@ def connect(
if endpointing is not None:
query_params = query_params.add("endpointing", endpointing)
if extra is not None:
query_params = query_params.add("extra", extra)
if isinstance(extra, (list, tuple)):
for item in extra:
query_params = query_params.add("extra", str(item))
else:
query_params = query_params.add("extra", extra)
if interim_results is not None:
query_params = query_params.add("interim_results", interim_results)
if keyterm is not None:
query_params = query_params.add("keyterm", keyterm)
if isinstance(keyterm, (list, tuple)):
for term in keyterm:
query_params = query_params.add("keyterm", str(term))
else:
query_params = query_params.add("keyterm", keyterm)
if keywords is not None:
query_params = query_params.add("keywords", keywords)
if isinstance(keywords, (list, tuple)):
for keyword in keywords:
query_params = query_params.add("keywords", str(keyword))
else:
query_params = query_params.add("keywords", keywords)
if language is not None:
query_params = query_params.add("language", language)
if mip_opt_out is not None:
Expand All @@ -185,17 +197,33 @@ def connect(
if punctuate is not None:
query_params = query_params.add("punctuate", punctuate)
if redact is not None:
query_params = query_params.add("redact", redact)
if isinstance(redact, (list, tuple)):
for item in redact:
query_params = query_params.add("redact", str(item))
else:
query_params = query_params.add("redact", redact)
if replace is not None:
query_params = query_params.add("replace", replace)
if isinstance(replace, (list, tuple)):
for item in replace:
query_params = query_params.add("replace", str(item))
else:
query_params = query_params.add("replace", replace)
if sample_rate is not None:
query_params = query_params.add("sample_rate", sample_rate)
if search is not None:
query_params = query_params.add("search", search)
if isinstance(search, (list, tuple)):
for item in search:
query_params = query_params.add("search", str(item))
else:
query_params = query_params.add("search", search)
if smart_format is not None:
query_params = query_params.add("smart_format", smart_format)
if tag is not None:
query_params = query_params.add("tag", tag)
if isinstance(tag, (list, tuple)):
for item in tag:
query_params = query_params.add("tag", str(item))
else:
query_params = query_params.add("tag", tag)
if utterance_end_ms is not None:
query_params = query_params.add("utterance_end_ms", utterance_end_ms)
if vad_events is not None:
Expand Down Expand Up @@ -262,23 +290,23 @@ async def connect(
dictation: typing.Optional[str] = None,
encoding: typing.Optional[str] = None,
endpointing: typing.Optional[str] = None,
extra: typing.Optional[str] = None,
extra: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
interim_results: typing.Optional[str] = None,
keyterm: typing.Optional[str] = None,
keywords: typing.Optional[str] = None,
keyterm: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
keywords: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
language: typing.Optional[str] = None,
mip_opt_out: typing.Optional[str] = None,
model: str,
multichannel: typing.Optional[str] = None,
numerals: typing.Optional[str] = None,
profanity_filter: typing.Optional[str] = None,
punctuate: typing.Optional[str] = None,
redact: typing.Optional[str] = None,
replace: typing.Optional[str] = None,
redact: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
replace: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
sample_rate: typing.Optional[str] = None,
search: typing.Optional[str] = None,
search: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
smart_format: typing.Optional[str] = None,
tag: typing.Optional[str] = None,
tag: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
utterance_end_ms: typing.Optional[str] = None,
vad_events: typing.Optional[str] = None,
version: typing.Optional[str] = None,
Expand Down Expand Up @@ -374,13 +402,25 @@ async def connect(
if endpointing is not None:
query_params = query_params.add("endpointing", endpointing)
if extra is not None:
query_params = query_params.add("extra", extra)
if isinstance(extra, (list, tuple)):
for item in extra:
query_params = query_params.add("extra", str(item))
else:
query_params = query_params.add("extra", extra)
if interim_results is not None:
query_params = query_params.add("interim_results", interim_results)
if keyterm is not None:
query_params = query_params.add("keyterm", keyterm)
if isinstance(keyterm, (list, tuple)):
for term in keyterm:
query_params = query_params.add("keyterm", str(term))
else:
query_params = query_params.add("keyterm", keyterm)
if keywords is not None:
query_params = query_params.add("keywords", keywords)
if isinstance(keywords, (list, tuple)):
for keyword in keywords:
query_params = query_params.add("keywords", str(keyword))
else:
query_params = query_params.add("keywords", keywords)
if language is not None:
query_params = query_params.add("language", language)
if mip_opt_out is not None:
Expand All @@ -396,17 +436,33 @@ async def connect(
if punctuate is not None:
query_params = query_params.add("punctuate", punctuate)
if redact is not None:
query_params = query_params.add("redact", redact)
if isinstance(redact, (list, tuple)):
for item in redact:
query_params = query_params.add("redact", str(item))
else:
query_params = query_params.add("redact", redact)
if replace is not None:
query_params = query_params.add("replace", replace)
if isinstance(replace, (list, tuple)):
for item in replace:
query_params = query_params.add("replace", str(item))
else:
query_params = query_params.add("replace", replace)
if sample_rate is not None:
query_params = query_params.add("sample_rate", sample_rate)
if search is not None:
query_params = query_params.add("search", search)
if isinstance(search, (list, tuple)):
for item in search:
query_params = query_params.add("search", str(item))
else:
query_params = query_params.add("search", search)
if smart_format is not None:
query_params = query_params.add("smart_format", smart_format)
if tag is not None:
query_params = query_params.add("tag", tag)
if isinstance(tag, (list, tuple)):
for item in tag:
query_params = query_params.add("tag", str(item))
else:
query_params = query_params.add("tag", tag)
if utterance_end_ms is not None:
query_params = query_params.add("utterance_end_ms", utterance_end_ms)
if vad_events is not None:
Expand Down
44 changes: 32 additions & 12 deletions src/deepgram/listen/v2/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ def connect(
eager_eot_threshold: typing.Optional[str] = None,
eot_threshold: typing.Optional[str] = None,
eot_timeout_ms: typing.Optional[str] = None,
keyterm: typing.Optional[str] = None,
keyterm: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
mip_opt_out: typing.Optional[str] = None,
tag: typing.Optional[str] = None,
tag: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
authorization: typing.Optional[str] = None,
request_options: typing.Optional[RequestOptions] = None,
) -> typing.Iterator[V2SocketClient]:
Expand All @@ -67,11 +67,13 @@ def connect(

eot_timeout_ms : typing.Optional[str]

keyterm : typing.Optional[str]
keyterm : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Keyterm prompting can improve recognition of specialized terminology. Pass a single string or a list of strings.

mip_opt_out : typing.Optional[str]

tag : typing.Optional[str]
tag : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Label your requests for the purpose of identification during usage reporting. Pass a single string or a list of strings.

authorization : typing.Optional[str]
Use your API key for authentication, or alternatively generate a [temporary token](/guides/fundamentals/token-based-authentication) and pass it via the `token` query parameter.
Expand Down Expand Up @@ -100,11 +102,19 @@ def connect(
if eot_timeout_ms is not None:
query_params = query_params.add("eot_timeout_ms", eot_timeout_ms)
if keyterm is not None:
query_params = query_params.add("keyterm", keyterm)
if isinstance(keyterm, (list, tuple)):
for term in keyterm:
query_params = query_params.add("keyterm", str(term))
else:
query_params = query_params.add("keyterm", keyterm)
if mip_opt_out is not None:
query_params = query_params.add("mip_opt_out", mip_opt_out)
if tag is not None:
query_params = query_params.add("tag", tag)
if isinstance(tag, (list, tuple)):
for t in tag:
query_params = query_params.add("tag", str(t))
else:
query_params = query_params.add("tag", tag)
ws_url = ws_url + f"?{query_params}"
headers = self._raw_client._client_wrapper.get_headers()
if authorization is not None:
Expand Down Expand Up @@ -154,9 +164,9 @@ async def connect(
eager_eot_threshold: typing.Optional[str] = None,
eot_threshold: typing.Optional[str] = None,
eot_timeout_ms: typing.Optional[str] = None,
keyterm: typing.Optional[str] = None,
keyterm: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
mip_opt_out: typing.Optional[str] = None,
tag: typing.Optional[str] = None,
tag: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
authorization: typing.Optional[str] = None,
request_options: typing.Optional[RequestOptions] = None,
) -> typing.AsyncIterator[AsyncV2SocketClient]:
Expand All @@ -178,11 +188,13 @@ async def connect(

eot_timeout_ms : typing.Optional[str]

keyterm : typing.Optional[str]
keyterm : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Keyterm prompting can improve recognition of specialized terminology. Pass a single string or a list of strings.

mip_opt_out : typing.Optional[str]

tag : typing.Optional[str]
tag : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Label your requests for the purpose of identification during usage reporting. Pass a single string or a list of strings.

authorization : typing.Optional[str]
Use your API key for authentication, or alternatively generate a [temporary token](/guides/fundamentals/token-based-authentication) and pass it via the `token` query parameter.
Expand Down Expand Up @@ -211,11 +223,19 @@ async def connect(
if eot_timeout_ms is not None:
query_params = query_params.add("eot_timeout_ms", eot_timeout_ms)
if keyterm is not None:
query_params = query_params.add("keyterm", keyterm)
if isinstance(keyterm, (list, tuple)):
for term in keyterm:
query_params = query_params.add("keyterm", str(term))
else:
query_params = query_params.add("keyterm", keyterm)
if mip_opt_out is not None:
query_params = query_params.add("mip_opt_out", mip_opt_out)
if tag is not None:
query_params = query_params.add("tag", tag)
if isinstance(tag, (list, tuple)):
for t in tag:
query_params = query_params.add("tag", str(t))
else:
query_params = query_params.add("tag", tag)
ws_url = ws_url + f"?{query_params}"
headers = self._raw_client._client_wrapper.get_headers()
if authorization is not None:
Expand Down
2 changes: 1 addition & 1 deletion src/deepgram/types/listen_v1extra.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

import typing

ListenV1Extra = typing.Optional[typing.Any]
ListenV1Extra = typing.Optional[typing.Union[str, typing.Sequence[str]]]
2 changes: 1 addition & 1 deletion src/deepgram/types/listen_v1keyterm.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

import typing

ListenV1Keyterm = typing.Optional[typing.Any]
ListenV1Keyterm = typing.Optional[typing.Union[str, typing.Sequence[str]]]
2 changes: 1 addition & 1 deletion src/deepgram/types/listen_v1keywords.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

import typing

ListenV1Keywords = typing.Optional[typing.Any]
ListenV1Keywords = typing.Optional[typing.Union[str, typing.Sequence[str]]]
8 changes: 6 additions & 2 deletions src/deepgram/types/listen_v1redact.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

import typing

ListenV1Redact = typing.Union[
typing.Literal["true", "false", "pci", "numbers", "aggressive_numbers", "ssn"], typing.Any
ListenV1Redact = typing.Optional[
typing.Union[
typing.Literal["true", "false", "pci", "numbers", "aggressive_numbers", "ssn"],
str,
typing.Sequence[str],
]
]
2 changes: 1 addition & 1 deletion src/deepgram/types/listen_v1replace.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

import typing

ListenV1Replace = typing.Optional[typing.Any]
ListenV1Replace = typing.Optional[typing.Union[str, typing.Sequence[str]]]
2 changes: 1 addition & 1 deletion src/deepgram/types/listen_v1search.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

import typing

ListenV1Search = typing.Optional[typing.Any]
ListenV1Search = typing.Optional[typing.Union[str, typing.Sequence[str]]]
2 changes: 1 addition & 1 deletion src/deepgram/types/listen_v1tag.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

import typing

ListenV1Tag = typing.Optional[typing.Any]
ListenV1Tag = typing.Optional[typing.Union[str, typing.Sequence[str]]]
2 changes: 1 addition & 1 deletion src/deepgram/types/listen_v2tag.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

import typing

ListenV2Tag = typing.Optional[typing.Any]
ListenV2Tag = typing.Optional[typing.Union[str, typing.Sequence[str]]]
6 changes: 3 additions & 3 deletions tests/unit/test_type_definitions.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ def test_listen_v1callback_usage(self):
assert isinstance(callback2, str)
assert isinstance(callback3, dict)

def test_listen_v1tag_is_optional_any(self):
"""Test that ListenV1Tag is Optional[Any]."""
assert ListenV1Tag == typing.Optional[typing.Any]
def test_listen_v1tag_is_optional_union(self):
"""Test that ListenV1Tag is Optional[Union[str, Sequence[str]]]."""
assert ListenV1Tag == typing.Optional[typing.Union[str, typing.Sequence[str]]]

def test_listen_v1tag_usage(self):
"""Test that ListenV1Tag can accept None or any value."""
Expand Down