Skip to content

Commit da7d303

Browse files
dylan-duan-aaiAssemblyAI
andauthored
chore: sync sdk code with DeepLearning repo (#183)
Co-authored-by: AssemblyAI <engineering.sdk@assemblyai.com>
1 parent ce050f4 commit da7d303

File tree

4 files changed

+93
-1
lines changed

4 files changed

+93
-1
lines changed

assemblyai/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
ListTranscriptResponse,
4343
PageDetails,
4444
Paragraph,
45+
PIIRedactedAudioMethod,
4546
PIIRedactedAudioQuality,
4647
PIIRedactionPolicy,
4748
PIISubstitutionPolicy,
@@ -53,6 +54,7 @@
5354
RealtimeSessionOpened,
5455
RealtimeTranscript,
5556
RealtimeWord,
57+
RedactPiiAudioOptions,
5658
Sentence,
5759
Sentiment,
5860
SentimentType,
@@ -159,9 +161,11 @@
159161
"Utterance",
160162
"UtteranceWord",
161163
"Paragraph",
164+
"PIIRedactedAudioMethod",
162165
"PIIRedactedAudioQuality",
163166
"PIISubstitutionPolicy",
164167
"PIIRedactionPolicy",
168+
"RedactPiiAudioOptions",
165169
"RawTranscriptionConfig",
166170
"Word",
167171
"WordBoost",

assemblyai/__version__.py

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

assemblyai/types.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,19 @@ class PIIRedactedAudioQuality(str, Enum):
245245
wav = "wav"
246246

247247

248+
class PIIRedactedAudioMethod(str, Enum):
249+
silence = "silence"
250+
251+
252+
class RedactPiiAudioOptions(BaseModel):
253+
"""Options for controlling PII audio redaction behavior."""
254+
255+
override_audio_redaction_method: Optional[PIIRedactedAudioMethod] = Field(
256+
None,
257+
description="Override the default audio redaction method (beep) with an alternative (silence).",
258+
)
259+
260+
248261
class EntityType(str, Enum):
249262
"""
250263
Used for AssemblyAI's Entity Detection feature.
@@ -854,6 +867,8 @@ class RawTranscriptionConfig(BaseModel):
854867
"Generate a copy of the original media file with spoken PII 'beeped' out."
855868
redact_pii_audio_quality: Optional[PIIRedactedAudioQuality] = None
856869
"The quality of the redacted audio file in case `redact_pii_audio` is enabled."
870+
redact_pii_audio_options: Optional[RedactPiiAudioOptions] = None
871+
"Options for controlling PII audio redaction behavior."
857872
redact_pii_policies: Optional[List[PIIRedactionPolicy]] = None
858873
"The list of PII Redaction policies to enable."
859874
redact_pii_sub: Optional[PIISubstitutionPolicy] = None
@@ -987,6 +1002,7 @@ def __init__(
9871002
redact_pii: Optional[bool] = None,
9881003
redact_pii_audio: Optional[bool] = None,
9891004
redact_pii_audio_quality: Optional[PIIRedactedAudioQuality] = None,
1005+
redact_pii_audio_options: Optional[RedactPiiAudioOptions] = None,
9901006
redact_pii_policies: Optional[List[PIIRedactionPolicy]] = None,
9911007
redact_pii_sub: Optional[PIISubstitutionPolicy] = None,
9921008
speaker_labels: Optional[bool] = None,
@@ -1038,6 +1054,7 @@ def __init__(
10381054
redact_pii: Redact PII from the transcribed text.
10391055
redact_pii_audio: Generate a copy of the original media file with spoken PII 'beeped' out (new audio only available for 24 hours).
10401056
redact_pii_audio_quality: The quality of the redacted audio file in case `redact_pii_audio` is enabled.
1057+
redact_pii_audio_options: Options for controlling PII audio redaction behavior (e.g., override the redaction method to silence).
10411058
redact_pii_policies: The list of PII Redaction policies to enable.
10421059
redact_pii_sub: The replacement logic for detected PII.
10431060
speaker_labels: Enable Speaker Diarization.
@@ -1094,6 +1111,7 @@ def __init__(
10941111
redact_pii,
10951112
redact_pii_audio,
10961113
redact_pii_audio_quality,
1114+
redact_pii_audio_options,
10971115
redact_pii_policies,
10981116
redact_pii_sub,
10991117
)
@@ -1358,6 +1376,12 @@ def redact_pii_audio_quality(self) -> Optional[PIIRedactedAudioQuality]:
13581376

13591377
return self._raw_transcription_config.redact_pii_audio_quality
13601378

1379+
@property
1380+
def redact_pii_audio_options(self) -> Optional[RedactPiiAudioOptions]:
1381+
"Options for controlling PII audio redaction behavior."
1382+
1383+
return self._raw_transcription_config.redact_pii_audio_options
1384+
13611385
@property
13621386
def redact_pii_policies(self) -> Optional[List[PIIRedactionPolicy]]:
13631387
"Returns a list of set of defined PII redaction policies."
@@ -1767,6 +1791,7 @@ def set_redact_pii(
17671791
enable: Optional[bool] = True,
17681792
redact_audio: Optional[bool] = None,
17691793
redact_audio_quality: Optional[PIIRedactedAudioQuality] = None,
1794+
redact_audio_options: Optional[RedactPiiAudioOptions] = None,
17701795
policies: Optional[List[PIIRedactionPolicy]] = None,
17711796
substitution: Optional[PIISubstitutionPolicy] = None,
17721797
) -> Self:
@@ -1777,6 +1802,7 @@ def set_redact_pii(
17771802
enable: whether to enable or disable the PII Redaction feature.
17781803
redact_audio: Generate a copy of the original media file with spoken PII 'beeped' out. NOTE: The copy is available for 24h
17791804
redact_audio_quality: The quality of the redacted audio file in case `redact_audio` is enabled.
1805+
redact_audio_options: Options for controlling PII audio redaction behavior (e.g., override the redaction method to silence).
17801806
policies: A list of PII redaction policies to enable.
17811807
substitution: The replacement logic for detected PII (`PIISubstutionPolicy.hash` by default).
17821808
"""
@@ -1785,6 +1811,7 @@ def set_redact_pii(
17851811
self._raw_transcription_config.redact_pii = None
17861812
self._raw_transcription_config.redact_pii_audio = None
17871813
self._raw_transcription_config.redact_pii_audio_quality = None
1814+
self._raw_transcription_config.redact_pii_audio_options = None
17881815
self._raw_transcription_config.redact_pii_policies = None
17891816
self._raw_transcription_config.redact_pii_sub = None
17901817

@@ -1796,6 +1823,7 @@ def set_redact_pii(
17961823
self._raw_transcription_config.redact_pii = True
17971824
self._raw_transcription_config.redact_pii_audio = redact_audio
17981825
self._raw_transcription_config.redact_pii_audio_quality = redact_audio_quality
1826+
self._raw_transcription_config.redact_pii_audio_options = redact_audio_options
17991827
self._raw_transcription_config.redact_pii_policies = policies
18001828
self._raw_transcription_config.redact_pii_sub = substitution
18011829

@@ -2243,6 +2271,8 @@ class BaseTranscript(BaseModel):
22432271
"Generate a copy of the original media file with spoken PII 'beeped' out."
22442272
redact_pii_audio_quality: Optional[PIIRedactedAudioQuality] = None
22452273
"The quality of the redacted audio file in case `redact_pii_audio` is enabled."
2274+
redact_pii_audio_options: Optional[RedactPiiAudioOptions] = None
2275+
"Options for controlling PII audio redaction behavior."
22462276
redact_pii_policies: Optional[List[PIIRedactionPolicy]] = None
22472277
"The list of PII Redaction policies to enable."
22482278
redact_pii_sub: Optional[PIISubstitutionPolicy] = None

tests/unit/test_redact_pii.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,63 @@ def test_redact_pii_enabled_with_optional_params(httpx_mock: HTTPXMock):
9595
assert request_body.get("redact_pii_sub") == sub_type
9696

9797

98+
def test_redact_pii_audio_options(httpx_mock: HTTPXMock):
99+
"""
100+
Tests that `redact_pii_audio_options` is included in the request body
101+
when provided alongside `redact_pii_audio`.
102+
"""
103+
policies = [
104+
aai.types.PIIRedactionPolicy.person_name,
105+
]
106+
audio_options = aai.RedactPiiAudioOptions(
107+
override_audio_redaction_method=aai.PIIRedactedAudioMethod.silence,
108+
)
109+
110+
request_body, _ = unit_test_utils.submit_mock_transcription_request(
111+
httpx_mock,
112+
mock_response=factories.generate_dict_factory(
113+
TranscriptWithPIIRedactionResponseFactory
114+
)(),
115+
config=aai.TranscriptionConfig(
116+
redact_pii=True,
117+
redact_pii_audio=True,
118+
redact_pii_audio_options=audio_options,
119+
redact_pii_policies=policies,
120+
),
121+
)
122+
123+
assert request_body.get("redact_pii") is True
124+
assert request_body.get("redact_pii_audio") is True
125+
assert request_body.get("redact_pii_audio_options") == {
126+
"override_audio_redaction_method": "silence",
127+
}
128+
129+
130+
def test_redact_pii_audio_options_excluded_when_disabled(httpx_mock: HTTPXMock):
131+
"""
132+
Tests that `redact_pii_audio_options` is excluded from the request body
133+
when `redact_pii` is not enabled.
134+
"""
135+
audio_options = aai.RedactPiiAudioOptions(
136+
override_audio_redaction_method=aai.PIIRedactedAudioMethod.silence,
137+
)
138+
139+
request_body, _ = unit_test_utils.submit_mock_transcription_request(
140+
httpx_mock,
141+
mock_response=factories.generate_dict_factory(
142+
factories.TranscriptCompletedResponseFactory
143+
)(),
144+
config=aai.TranscriptionConfig(
145+
redact_pii=False,
146+
redact_pii_audio=True,
147+
redact_pii_audio_options=audio_options,
148+
redact_pii_policies=[aai.types.PIIRedactionPolicy.date],
149+
),
150+
)
151+
152+
assert request_body.get("redact_pii_audio_options") is None
153+
154+
98155
def test_redact_pii_fails_without_policies(httpx_mock: HTTPXMock):
99156
"""
100157
Tests that enabling `redact_pii` without specifying any policies
@@ -136,6 +193,7 @@ def test_redact_pii_params_excluded_when_disabled(httpx_mock: HTTPXMock):
136193

137194
assert request_body.get("redact_pii") is None
138195
assert request_body.get("redact_pii_audio") is None
196+
assert request_body.get("redact_pii_audio_options") is None
139197
assert request_body.get("redact_pii_policies") is None
140198
assert request_body.get("redact_pii_sub") is None
141199

0 commit comments

Comments
 (0)