Skip to content

Commit 63ffbb4

Browse files
authored
Add input transcription handling for Gemini 3.1
1 parent fafafb3 commit 63ffbb4

1 file changed

Lines changed: 40 additions & 26 deletions

File tree

src/google/adk/models/gemini_llm_connection.py

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -304,32 +304,46 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]:
304304
# generation_complete, causing transcription to appear after
305305
# tool_call in the session log.
306306
if message.server_content.input_transcription:
307-
if message.server_content.input_transcription.text:
308-
self._input_transcription_text += (
309-
message.server_content.input_transcription.text
310-
)
311-
yield LlmResponse(
312-
input_transcription=types.Transcription(
313-
text=message.server_content.input_transcription.text,
314-
finished=False,
315-
),
316-
partial=True,
317-
model_version=self._model_version,
318-
live_session_id=live_session_id,
319-
)
320-
# finished=True and partial transcription may happen in the same
321-
# message.
322-
if message.server_content.input_transcription.finished:
323-
yield LlmResponse(
324-
input_transcription=types.Transcription(
325-
text=self._input_transcription_text,
326-
finished=True,
327-
),
328-
partial=False,
329-
model_version=self._model_version,
330-
live_session_id=live_session_id,
331-
)
332-
self._input_transcription_text = ''
307+
# Gemini 3.1 Flash Live only sends a single final input
308+
# transcription
309+
if self._is_gemini_3_1_flash_live:
310+
if message.server_content.input_transcription.text:
311+
yield LlmResponse(
312+
input_transcription=types.Transcription(
313+
text=message.server_content.input_transcription.text,
314+
finished=True,
315+
),
316+
partial=False,
317+
model_version=self._model_version,
318+
live_session_id=live_session_id,
319+
)
320+
else:
321+
if message.server_content.input_transcription.text:
322+
self._input_transcription_text += (
323+
message.server_content.input_transcription.text
324+
)
325+
yield LlmResponse(
326+
input_transcription=types.Transcription(
327+
text=message.server_content.input_transcription.text,
328+
finished=False,
329+
),
330+
partial=True,
331+
model_version=self._model_version,
332+
live_session_id=live_session_id,
333+
)
334+
# finished=True and partial transcription may happen in the same
335+
# message.
336+
if message.server_content.input_transcription.finished:
337+
yield LlmResponse(
338+
input_transcription=types.Transcription(
339+
text=self._input_transcription_text,
340+
finished=True,
341+
),
342+
partial=False,
343+
model_version=self._model_version,
344+
live_session_id=live_session_id,
345+
)
346+
self._input_transcription_text = ''
333347
if message.server_content.output_transcription:
334348
if message.server_content.output_transcription.text:
335349
self._output_transcription_text += (

0 commit comments

Comments
 (0)