From 2b55e214ba79c7b3fb3fc0517dde4681dcb36a1f Mon Sep 17 00:00:00 2001 From: AssemblyAI Date: Tue, 3 Mar 2026 21:41:24 -0500 Subject: [PATCH] Project import generated by Copybara. GitOrigin-RevId: 14c0d0d86d21f83979032028254aff1fe4c9e609 --- assemblyai/__version__.py | 2 +- assemblyai/streaming/v3/__init__.py | 2 ++ assemblyai/streaming/v3/client.py | 3 +++ assemblyai/streaming/v3/models.py | 7 +++++++ tests/unit/test_streaming.py | 12 ++++++++++++ 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/assemblyai/__version__.py b/assemblyai/__version__.py index 450ee12..3043a40 100644 --- a/assemblyai/__version__.py +++ b/assemblyai/__version__.py @@ -1 +1 @@ -__version__ = "0.54.0" +__version__ = "0.54.1" diff --git a/assemblyai/streaming/v3/__init__.py b/assemblyai/streaming/v3/__init__.py index 7deb8f5..0f4bdeb 100644 --- a/assemblyai/streaming/v3/__init__.py +++ b/assemblyai/streaming/v3/__init__.py @@ -5,6 +5,7 @@ EventMessage, LLMGatewayResponseEvent, SpeechModel, + SpeechStartedEvent, StreamingClientOptions, StreamingError, StreamingEvents, @@ -21,6 +22,7 @@ "EventMessage", "LLMGatewayResponseEvent", "SpeechModel", + "SpeechStartedEvent", "StreamingClient", "StreamingClientOptions", "StreamingError", diff --git a/assemblyai/streaming/v3/client.py b/assemblyai/streaming/v3/client.py index 453d8d0..2eee03e 100644 --- a/assemblyai/streaming/v3/client.py +++ b/assemblyai/streaming/v3/client.py @@ -20,6 +20,7 @@ ForceEndpoint, LLMGatewayResponseEvent, OperationMessage, + SpeechStartedEvent, StreamingClientOptions, StreamingError, StreamingErrorCodes, @@ -236,6 +237,8 @@ def _parse_message(self, data: Dict[str, Any]) -> Optional[EventMessage]: return TerminationEvent.model_validate(data) elif event_type == StreamingEvents.Turn: return TurnEvent.model_validate(data) + elif event_type == StreamingEvents.SpeechStarted: + return SpeechStartedEvent.model_validate(data) elif event_type == StreamingEvents.LLMGatewayResponse: return LLMGatewayResponseEvent.model_validate(data) else: diff --git a/assemblyai/streaming/v3/models.py b/assemblyai/streaming/v3/models.py index 773ff0e..3f9b4c7 100644 --- a/assemblyai/streaming/v3/models.py +++ b/assemblyai/streaming/v3/models.py @@ -49,6 +49,11 @@ class TerminationEvent(BaseModel): session_duration_seconds: Optional[int] = None +class SpeechStartedEvent(BaseModel): + type: Literal["SpeechStarted"] = "SpeechStarted" + timestamp: int + + class ErrorEvent(BaseModel): error: str @@ -64,6 +69,7 @@ class LLMGatewayResponseEvent(BaseModel): BeginEvent, TerminationEvent, TurnEvent, + SpeechStartedEvent, ErrorEvent, LLMGatewayResponseEvent, ] @@ -175,5 +181,6 @@ class StreamingEvents(Enum): Begin = "Begin" Termination = "Termination" Turn = "Turn" + SpeechStarted = "SpeechStarted" Error = "Error" LLMGatewayResponse = "LLMGatewayResponse" diff --git a/tests/unit/test_streaming.py b/tests/unit/test_streaming.py index 63d2076..94c05e5 100644 --- a/tests/unit/test_streaming.py +++ b/tests/unit/test_streaming.py @@ -4,6 +4,7 @@ from assemblyai.streaming.v3 import ( SpeechModel, + SpeechStartedEvent, StreamingClient, StreamingClientOptions, StreamingParameters, @@ -352,3 +353,14 @@ def test_turn_event_without_speaker_label(): } event = TurnEvent.parse_obj(data) assert event.speaker_label is None + + +def test_speech_started_event(): + """Test SpeechStarted event parsing (u3-rt-pro only)""" + data = { + "type": "SpeechStarted", + "timestamp": 1280, + } + event = SpeechStartedEvent.parse_obj(data) + assert event.type == "SpeechStarted" + assert event.timestamp == 1280