diff --git a/src/google/adk/cli/adk_web_server.py b/src/google/adk/cli/adk_web_server.py index 917aadf7d0..c60563b2fd 100644 --- a/src/google/adk/cli/adk_web_server.py +++ b/src/google/adk/cli/adk_web_server.py @@ -2106,8 +2106,21 @@ async def run_agent_live( async def forward_events(): runner = await self.get_runner_async(app_name) + + # Native-audio models (e.g., gemini-live-2.5-flash-native-audio) only + # support AUDIO modality. When TEXT is requested, fall back to AUDIO. + effective_modalities = modalities + if isinstance(runner.agent, LlmAgent): + model_name = '' + if isinstance(runner.agent.model, str): + model_name = runner.agent.model + elif runner.agent.model: # BaseLlm instance + model_name = runner.agent.model.model + if 'native-audio' in model_name.lower(): + effective_modalities = ['AUDIO'] + run_config = RunConfig( - response_modalities=modalities, + response_modalities=effective_modalities, proactivity=( types.ProactivityConfig(proactive_audio=proactive_audio) if proactive_audio is not None diff --git a/src/google/adk/runners.py b/src/google/adk/runners.py index f52f07abb3..31171f6752 100644 --- a/src/google/adk/runners.py +++ b/src/google/adk/runners.py @@ -1101,6 +1101,12 @@ async def run_live( # AUDIO by default. if run_config.response_modalities is None: run_config.response_modalities = ['AUDIO'] + elif ( + 'AUDIO' not in run_config.response_modalities + and hasattr(self.agent, 'canonical_model') + and 'native-audio' in self.agent.canonical_model.model.lower() + ): + run_config.response_modalities = ['AUDIO'] if session is None and (user_id is None or session_id is None): raise ValueError( 'Either session or user_id and session_id must be provided.'