Skip to content

Commit 351bf1f

Browse files
marcusolssonAssemblyAI
andauthored
chore: sync sdk code with DeepLearning repo (#133)
Co-authored-by: AssemblyAI <engineering.sdk@assemblyai.com>
1 parent 546cf6f commit 351bf1f

File tree

5 files changed

+206
-1
lines changed

5 files changed

+206
-1
lines changed

assemblyai/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
IABResponse,
2020
IABResult,
2121
LanguageCode,
22+
LanguageDetectionOptions,
2223
LemurActionItemsResponse,
2324
LemurError,
2425
LemurModel,
@@ -92,6 +93,7 @@
9293
"IABResponse",
9394
"IABResult",
9495
"LanguageCode",
96+
"LanguageDetectionOptions",
9597
"Lemur",
9698
"LemurActionItemsResponse",
9799
"LemurError",

assemblyai/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.42.1"
1+
__version__ = "0.43.0"

assemblyai/types.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,18 @@ class SpeechModel(str, Enum):
489489
"The model optimized for accuracy, low latency, ease of use, and multi-language support"
490490

491491

492+
class LanguageDetectionOptions(BaseModel):
493+
"""Options for controlling the behavior or Automatic Language Detection"""
494+
495+
expected_languages: Optional[List[str]] = Field(
496+
None, description="A list of languages that the audio could be expected to be."
497+
)
498+
fallback_language: Optional[str] = Field(
499+
None,
500+
description="The language to fallback to in case the language detection does not predict any of the expected ones.",
501+
)
502+
503+
492504
class SpeakerOptions(BaseModel):
493505
"""
494506
Speaker options for controlling speaker diarization parameters
@@ -633,6 +645,9 @@ class RawTranscriptionConfig(BaseModel):
633645
if the language confidence is below this threshold. Valid values are in the range [0,1] inclusive.
634646
"""
635647

648+
language_detection_options: Optional[LanguageDetectionOptions] = None
649+
"Options for controlling the behavior or Automatic Language Detection."
650+
636651
speech_threshold: Optional[float] = None
637652
"Reject audio files that contain less than this fraction of speech. Valid values are in the range [0,1] inclusive."
638653

@@ -688,6 +703,7 @@ def __init__(
688703
auto_highlights: Optional[bool] = None,
689704
language_detection: Optional[bool] = None,
690705
language_confidence_threshold: Optional[float] = None,
706+
language_detection_options: Optional[LanguageDetectionOptions] = None,
691707
speech_threshold: Optional[float] = None,
692708
raw_transcription_config: Optional[RawTranscriptionConfig] = None,
693709
speech_model: Optional[SpeechModel] = None,
@@ -731,6 +747,7 @@ def __init__(
731747
language_detection: Identify the dominant language that's spoken in an audio file, and route the file to the appropriate model for the detected language.
732748
language_confidence_threshold: The confidence threshold that must be reached if `language_detection` is enabled.
733749
An error will be returned if the language confidence is below this threshold. Valid values are in the range [0,1] inclusive.
750+
language_detection_options: Options for controlling the behavior or Automatic Language Detection.
734751
speech_threshold: Reject audio files that contain less than this fraction of speech. Valid values are in the range [0,1] inclusive.
735752
raw_transcription_config: Create the config from a `RawTranscriptionConfig`
736753
"""
@@ -780,6 +797,7 @@ def __init__(
780797
self.auto_highlights = auto_highlights
781798
self.language_detection = language_detection
782799
self.language_confidence_threshold = language_confidence_threshold
800+
self.language_detection_options = language_detection_options
783801
self.speech_threshold = speech_threshold
784802
self.speech_model = speech_model
785803
self.prompt = prompt
@@ -1175,6 +1193,20 @@ def language_confidence_threshold(self, threshold: Optional[float]) -> None:
11751193

11761194
self._raw_transcription_config.language_confidence_threshold = threshold
11771195

1196+
@property
1197+
def language_detection_options(self) -> Optional[LanguageDetectionOptions]:
1198+
"Returns the options for controlling the behavior or Automatic Language Detection."
1199+
1200+
return self._raw_transcription_config.language_detection_options
1201+
1202+
@language_detection_options.setter
1203+
def language_detection_options(
1204+
self, options: Optional[LanguageDetectionOptions]
1205+
) -> None:
1206+
"Set the options for controlling the behavior or Automatic Language Detection."
1207+
1208+
self._raw_transcription_config.language_detection_options = options
1209+
11781210
@property
11791211
def speech_threshold(self) -> Optional[float]:
11801212
"Returns the current speech threshold."
@@ -1441,6 +1473,44 @@ def set_summarize(
14411473

14421474
return self
14431475

1476+
def set_language_detection(
1477+
self,
1478+
enable: Optional[bool] = True,
1479+
confidence_threshold: Optional[float] = None,
1480+
expected_languages: Optional[List[str]] = None,
1481+
fallback_language: Optional[str] = None,
1482+
) -> Self:
1483+
"""
1484+
Enable Automatic Language Detection with optional configuration.
1485+
1486+
Args:
1487+
enable: whether to enable or disable the Language Detection feature.
1488+
confidence_threshold: The confidence threshold that must be reached.
1489+
expected_languages: A list of languages that the audio could be expected to be.
1490+
fallback_language: The language to fallback to if detection fails.
1491+
"""
1492+
1493+
if not enable:
1494+
self._raw_transcription_config.language_detection = None
1495+
self._raw_transcription_config.language_confidence_threshold = None
1496+
self._raw_transcription_config.language_detection_options = None
1497+
return self
1498+
1499+
self._raw_transcription_config.language_detection = True
1500+
self._raw_transcription_config.language_confidence_threshold = (
1501+
confidence_threshold
1502+
)
1503+
1504+
if expected_languages or fallback_language:
1505+
self._raw_transcription_config.language_detection_options = (
1506+
LanguageDetectionOptions(
1507+
expected_languages=expected_languages,
1508+
fallback_language=fallback_language,
1509+
)
1510+
)
1511+
1512+
return self
1513+
14441514
# endregion
14451515

14461516

@@ -1818,6 +1888,9 @@ class BaseTranscript(BaseModel):
18181888
language_confidence_threshold: Optional[float] = None
18191889
"The confidence threshold that must be reached if `language_detection` is enabled."
18201890

1891+
language_detection_options: Optional[LanguageDetectionOptions] = None
1892+
"Options for controlling the behavior or Automatic Language Detection."
1893+
18211894
language_confidence: Optional[float] = None
18221895
"The confidence score for the detected language, between 0.0 (low confidence) and 1.0 (high confidence)."
18231896

tests/unit/test_domains.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ def test_configuration_drift():
2020
"set_webhook", # webhook
2121
"set_speaker_diarization", # speaker diarization
2222
"set_content_safety", # content safety
23+
"set_language_detection", # language detection
2324
}
2425

2526
# get all members
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
import assemblyai as aai
2+
3+
4+
def test_language_detection_options_creation():
5+
"""Test that LanguageDetectionOptions can be created with valid parameters."""
6+
options = aai.LanguageDetectionOptions(
7+
expected_languages=["en", "es", "fr"], fallback_language="en"
8+
)
9+
assert options.expected_languages == ["en", "es", "fr"]
10+
assert options.fallback_language == "en"
11+
12+
13+
def test_language_detection_options_expected_languages_only():
14+
"""Test that LanguageDetectionOptions can be created with only expected_languages."""
15+
options = aai.LanguageDetectionOptions(expected_languages=["en", "de"])
16+
assert options.expected_languages == ["en", "de"]
17+
assert options.fallback_language is None
18+
19+
20+
def test_language_detection_options_fallback_language_only():
21+
"""Test that LanguageDetectionOptions can be created with only fallback_language."""
22+
options = aai.LanguageDetectionOptions(fallback_language="es")
23+
assert options.expected_languages is None
24+
assert options.fallback_language == "es"
25+
26+
27+
def test_language_detection_options_empty():
28+
"""Test that LanguageDetectionOptions can be created with no parameters."""
29+
options = aai.LanguageDetectionOptions()
30+
assert options.expected_languages is None
31+
assert options.fallback_language is None
32+
33+
34+
def test_transcription_config_with_language_detection_options():
35+
"""Test that TranscriptionConfig accepts language_detection_options parameter."""
36+
options = aai.LanguageDetectionOptions(
37+
expected_languages=["en", "fr"], fallback_language="en"
38+
)
39+
40+
config = aai.TranscriptionConfig(
41+
language_detection=True, language_detection_options=options
42+
)
43+
44+
assert config.language_detection is True
45+
assert config.language_detection_options == options
46+
assert config.language_detection_options.expected_languages == ["en", "fr"]
47+
assert config.language_detection_options.fallback_language == "en"
48+
49+
50+
def test_language_detection_options_property_getter():
51+
"""Test the language_detection_options property getter."""
52+
options = aai.LanguageDetectionOptions(
53+
expected_languages=["ja", "ko"], fallback_language="ja"
54+
)
55+
56+
config = aai.TranscriptionConfig()
57+
config.language_detection_options = options
58+
59+
assert config.language_detection_options == options
60+
assert config.language_detection_options.expected_languages == ["ja", "ko"]
61+
assert config.language_detection_options.fallback_language == "ja"
62+
63+
64+
def test_language_detection_options_property_setter():
65+
"""Test the language_detection_options property setter."""
66+
config = aai.TranscriptionConfig()
67+
68+
options = aai.LanguageDetectionOptions(
69+
expected_languages=["zh", "zh_cn"], fallback_language="zh"
70+
)
71+
config.language_detection_options = options
72+
73+
assert config.language_detection_options == options
74+
75+
76+
def test_language_detection_options_property_setter_none():
77+
"""Test setting language_detection_options to None."""
78+
options = aai.LanguageDetectionOptions(fallback_language="en")
79+
config = aai.TranscriptionConfig(language_detection_options=options)
80+
81+
# Verify it was set
82+
assert config.language_detection_options == options
83+
84+
# Now set to None
85+
config.language_detection_options = None
86+
assert config.language_detection_options is None
87+
88+
89+
def test_language_detection_options_in_raw_config():
90+
"""Test that language_detection_options is properly set in the raw config."""
91+
options = aai.LanguageDetectionOptions(
92+
expected_languages=["en", "es"], fallback_language="en"
93+
)
94+
95+
config = aai.TranscriptionConfig(language_detection_options=options)
96+
97+
assert config.raw.language_detection_options == options
98+
99+
100+
def test_set_language_detection():
101+
"""Test the set_language_detection method."""
102+
config = aai.TranscriptionConfig().set_language_detection(
103+
confidence_threshold=0.8,
104+
expected_languages=["en", "fr"],
105+
fallback_language="en",
106+
)
107+
108+
assert config.language_detection is True
109+
assert config.language_confidence_threshold == 0.8
110+
assert config.language_detection_options.expected_languages == ["en", "fr"]
111+
assert config.language_detection_options.fallback_language == "en"
112+
113+
114+
def test_set_language_detection_disable():
115+
"""Test disabling language detection clears all related options."""
116+
config = aai.TranscriptionConfig().set_language_detection(
117+
expected_languages=["en", "es"], fallback_language="en"
118+
)
119+
120+
# Verify it was set
121+
assert config.language_detection is True
122+
assert config.language_detection_options is not None
123+
124+
# Now disable
125+
config.set_language_detection(enable=False)
126+
127+
assert config.language_detection is None
128+
assert config.language_confidence_threshold is None
129+
assert config.language_detection_options is None

0 commit comments

Comments
 (0)