Runtime Configuration¶
RunConfig controls how agents behave at runtime, including streaming mode,
speech settings, LLM call limits, and live agent options. Pass a RunConfig
to runner.run_async() or runner.run_live() to override default behavior.
Manage sessions and context¶
For long-running sessions, you can control how much history is loaded and whether the context window is compressed:
get_session_config: Limits which events are fetched when loading a session. Usenum_recent_eventsorafter_timestampto avoid loading the full event history on every invocation.context_window_compression: Enables context window compression for LLM input, useful when sessions approach model context limits.include_thoughts_from_other_agents: Controls whether thought parts from other agents are included in the LLM context. Disabled by default.model_input_context: A list oftypes.Contentadded to the LLM request for this invocation only. The runner does not persist it to the session, so you can supply per-turn context without changing the conversation history.
Enable streaming¶
To control how the agent delivers responses, set the streaming_mode parameter:
StreamingMode.NONE(default): The runner returns one complete response per turn. Suitable for CLI tools, batch processing, and synchronous workflows.StreamingMode.SSE: Server-Sent Events streaming. The runner yields partial events as the LLM generates, enabling typewriter-style UIs and real-time chat displays.StreamingMode.BIDI: Reserved for bidirectional streaming, but not used in the standardrun_async()path. For bidirectional streaming, userunner.run_live()instead.
Set support_cfc=True alongside StreamingMode.SSE to enable Compositional
Function Calling (CFC), which allows the model to dynamically compose and
execute function calls. CFC uses the Live API under the hood.
Experimental
CFC support is experimental and its API or behavior may change in future releases.
Configure audio and speech¶
For voice-enabled agents, configure speech synthesis, audio transcription, and response modalities.
Live agents
This section covers the audio fields shared across languages. For the full live
(run_live()) configuration reference — transcription streaming, voice selection,
voice activity detection, and proactive/affective dialog — see
Live agent configuration.
speech_config: Sets the voice and language for speech output (e.g., the "Kore" voice withen-US).response_modalities: Controls the output format. A session accepts exactly one modality — use["AUDIO"]for voice agents and["TEXT"]for text-only ones. To get both speech and text, set["AUDIO"]and read the text from the output audio transcription.output_audio_transcription/input_audio_transcription: Enable transcription of audio output from the model and audio input from the user. Both default toAudioTranscriptionConfig()in Python.
from google.adk.agents.run_config import RunConfig, StreamingMode
from google.genai import types
config = RunConfig(
speech_config=types.SpeechConfig(
language_code="en-US",
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(
voice_name="Kore"
)
),
),
response_modalities=["AUDIO"],
streaming_mode=StreamingMode.SSE,
max_llm_calls=1000,
)
import { RunConfig, StreamingMode } from '@google/adk';
import { Modality } from '@google/genai';
const config: RunConfig = {
speechConfig: {
languageCode: "en-US",
voiceConfig: {
prebuiltVoiceConfig: {
voiceName: "Kore"
}
},
},
responseModalities: [Modality.AUDIO],
streamingMode: StreamingMode.SSE,
maxLlmCalls: 1000,
};
import com.google.adk.agents.RunConfig;
import com.google.adk.agents.RunConfig.StreamingMode;
import com.google.common.collect.ImmutableList;
import com.google.genai.types.Modality;
import com.google.genai.types.PrebuiltVoiceConfig;
import com.google.genai.types.SpeechConfig;
import com.google.genai.types.VoiceConfig;
RunConfig runConfig =
RunConfig.builder()
.streamingMode(StreamingMode.SSE)
.maxLlmCalls(1000)
.responseModalities(ImmutableList.of(new Modality(Modality.Known.AUDIO)))
.speechConfig(
SpeechConfig.builder()
.voiceConfig(
VoiceConfig.builder()
.prebuiltVoiceConfig(
PrebuiltVoiceConfig.builder().voiceName("Kore").build())
.build())
.languageCode("en-US")
.build())
.build();
Configure live agents¶
Live (run_live()) sessions add a set of real-time parameters —
realtime_input_config, session_resumption, save_live_blob,
tool_thread_pool_config, proactivity, enable_affective_dialog, and more. These
are documented in one place, with per-model support and examples, in the live docs:
- Live agent configuration — the full
RunConfigreference for live agents. - Sessions — session resumption and reconnection.
- Configuration: proactivity and affective dialog — native-audio conversational features and the models that support them.
tool_thread_pool_config is the exception: it is a runtime concern rather than a
Live API one, so it stays here. It runs tool executions in a background thread
pool so the event loop keeps responding to user interruptions.
Not all parameters are available in every language. See the API reference for language-specific details.
from google.adk.agents.run_config import RunConfig, ToolThreadPoolConfig
config = RunConfig(
save_live_blob=True,
tool_thread_pool_config=ToolThreadPoolConfig(max_workers=8),
)
Thread pool and the GIL
Thread pools help with blocking I/O and C extensions that release the
GIL (e.g. time.sleep(), network calls, numpy). They do not help
with pure Python CPU-bound code since the GIL prevents true parallel
execution of Python bytecode.
Configure runtime limits and debugging¶
Use these parameters to control runtime guardrails and debugging:
max_llm_calls: Caps the total number of LLM calls per run (default: 500). Set to 0 or negative for unlimited calls, though this is not recommended for production. Values at or abovesys.maxsizeraises an error.save_input_blobs_as_artifacts: WhenTrue, saves input blobs (e.g., uploaded files) as run artifacts for debugging and auditing. Deprecated in Python in favor ofSaveFilesAsArtifactsPlugin.custom_metadata: Adict[str, Any]of arbitrary metadata attached to the invocation, useful for tracing or logging.
API reference¶
For the complete list of fields, types, and defaults, see the API reference for your language: