Files
google__adk-docs/docs/runtime/runconfig.md
Shahin Saadati fd7c7a3dca feat: Merge all the typescript code samples and snippets into the main repo. (#1063)
* Deleted redundant files.

* Deleted redundant files.

* Deleted redundant files.

* Deleted redundant files.

* Deleted redundant files.

* Deleted redundant files.

* Delete .gitignore

Deleted redundant files.

* Delete .gitignore

Deleted redundant files.

* Delete .gitignore

* Delete .gitignore

* Delete .gitignore

* Revert changes to .gitignore

* Revert changes to .gitignore

* Revert changes to .gitignore

* Revert changes to .gitignore

* Revert changes to .gitignore

* Revert changes to .gitignore

* Add MCP Tools TS example

* Removed unnecessary changes

* Removed extra slashes

* Added the custom agent sample.

* Corrected an error in the package.json file.

* Updated custom-agent.md

* Made small fixes.

* Add Session TS examples

* Added the typescript code snippets for multi agent.

* added the code sample for loop agent

* Added the code sample for loop agent

* Added the code sample for parallel agent

* Fixed a few issues and bugs

* Added the code sample for sequential agent

* Renamed run back to runAsync

* Updated the capital agent code sample.

* Corrected the snippet

* Renamed run() to runAsync()

* Add Runtime TS examples

* Fixed the snippets after library updates.

* Fixed the sample code after library changes.

* Added final touchups and fixes.

* Updated the code based on recent library changes.

* Updated package.json

* Updated package.json

* Updated package.json

* Updated the code with runAsync and package.json

* Updated the typescript sample.

* Updated after_tool_callback.ts with runAsync

* Updated after_model_callback.ts

* Updated before_model_callback.ts

* Updated before_tool_callback.ts

* Created before_agent_callback.ts

* Update before_agent_callback.ts

Changed the condition

* Update before_model_callback.ts

Changed the condition

* Update after_model_callback.ts

Changed the condition

* Update after_tool_callback.ts

Changed the condition

* Update after_agent_callback.ts

Changed the condition

* Update callback_basic.ts

Changed the condition

* Update storyflow_agent.ts

Changed the condition

* Update sequential_agent_code_development_agent.ts

Changed the condition

* Updated before_agent_callback.ts

* Removed unnecessary comment.

* Updated comment

* Renamed run to runAsync

* Added artifact code snippets.

* Fixed .link-checker-config.json

* Added tsconfig.json

* Update .gitignore with node modules files

* Added 7 typescript code snippets

* Cleaned up and corrected the snippets for plugins

* Update index.md

Undid the changes in artifacts/index.md

* Escaped properly.

* Add Long Running Function Tool TS examples

* Resolved code review feedback

* Fixed the code sample per git comments.

* Fixed the code per git comments.

* Fixed the md file per git comments.

* Fixed the issues per git comments.

* Fixed issues per github comments.

* Fixed the issues per PR comments.

* Fixed issues per PR comments.

* Added a code sample for HITL

* Fixed the indentations in the typescript code

* Used createPartFromBase64 when appropriate.

* Switched to use createUserContent.

* docs: Add JavaScript Quickstart, short unified format

* Added a simulated user delay to the code sample.

* Made some cosmetic improvements

* Added the code snippet with HITL with policy

* Made cosmetic modifications to multi-agents.md

* Added more tutorial for the HITL with policy

* Modularized the main function and added helper functions.

* Resolved code review feedback

* Resolved code review feedback

* Resolved code review feedback

* Fixed minor things in the typescript code per PR comments.

* Fixed the import for Event and used createEventActions.

* Simplified functionResponse code.

* Corrected the Event import and used createEventActions.

* Updated ADK versions in package.json.

* Final review of all changes & Add Safety TS example

* Make tsconfig.json files consistent

* Generated the API Reference for typescript

* Resolved code review feedback

* feat: Add Typescript API reference to docs

This commit adds the generated TypeDoc documentation for the Typescript ADK to the documentation site.

It also updates the main API reference page to include a link to the new Typescript API reference.

* docs: update TypeScript quickstart

* docs: Add version tags for Build Agents topics

- add version tags
- move TS content to second position (after Python)

* docs: Add MCP Toolbox for databases TS SDK Documentation

* Update mcp-toolbox-for-databases.md

* use typescript code block

* minor changes

* Update mcp-toolbox-for-databases.md

* Auto generated the typescript API reference.

* Added the TS code snippets for context.

* Fixed TS code snippets for context.

* Modified the sample based on the comment.

* docs: adding TypeScript language tags (2 of 3)

- Update all Run Agents section topics
- change all TS tags to v0.2.0 per eng agreement

* docs: Add TypeScript language support tags, Components (3 of 3)

- add TS language support tags
- re-order TS examples to be second
- minor fixes: remove trailing spaces

* Added callback samples for typescript to the markdown files.

* Updated adk version in quickstart

* Updated google/adk version for typescript.

---------

Co-authored-by: manchan <manchan@google.com>
Co-authored-by: Mandy Chan <75594070+slothwriter@users.noreply.github.com>
Co-authored-by: Joe Fernandez <joefernandez@google.com>
Co-authored-by: Joe Fernandez <joefernandez@users.noreply.github.com>
Co-authored-by: Twisha Bansal <58483338+twishabansal@users.noreply.github.com>
2025-12-15 12:53:24 -08:00

19 KiB
Raw Permalink Blame History

Runtime Configuration

Supported in ADKPython v0.1.0Typescript v0.2.0Go v0.1.0Java v0.1.0

RunConfig defines runtime behavior and options for agents in the ADK. It controls speech and streaming settings, function calling, artifact saving, and limits on LLM calls.

When constructing an agent run, you can pass a RunConfig to customize how the agent interacts with models, handles audio, and streams responses. By default, no streaming is enabled and inputs aren’t retained as artifacts. Use RunConfig to override these defaults.

Class Definition

The RunConfig class holds configuration parameters for an agent's runtime behavior.

  • Python ADK uses Pydantic for this validation.

  • Go ADK has mutable structs by default.

  • Java ADK typically uses immutable data classes.

  • TypeScript ADK uses a standard interface, with type safety provided by the TypeScript compiler.

=== "Python"

```python
class RunConfig(BaseModel):
    """Configs for runtime behavior of agents."""

    model_config = ConfigDict(
        extra='forbid',
    )

    speech_config: Optional[types.SpeechConfig] = None
    response_modalities: Optional[list[str]] = None
    save_input_blobs_as_artifacts: bool = False
    support_cfc: bool = False
    streaming_mode: StreamingMode = StreamingMode.NONE
    output_audio_transcription: Optional[types.AudioTranscriptionConfig] = None
    max_llm_calls: int = 500
```

=== "TypeScript"

```typescript
export interface RunConfig {
  speechConfig?: SpeechConfig;
  responseModalities?: Modality[];
  saveInputBlobsAsArtifacts: boolean;
  supportCfc: boolean;
  streamingMode: StreamingMode;
  outputAudioTranscription?: AudioTranscriptionConfig;
  maxLlmCalls: number;
  // ... and other properties
}

export enum StreamingMode {
  NONE = 'none',
  SSE = 'sse',
  BIDI = 'bidi',
}
```

=== "Go"

```go
type StreamingMode string

const (
	StreamingModeNone StreamingMode = "none"
	StreamingModeSSE  StreamingMode = "sse"
)

// RunConfig controls runtime behavior.
type RunConfig struct {
	// Streaming mode, None or StreamingMode.SSE.
	StreamingMode StreamingMode
	// Whether or not to save the input blobs as artifacts
	SaveInputBlobsAsArtifacts bool
}
```

=== "Java"

```java
public abstract class RunConfig {

  public enum StreamingMode {
    NONE,
    SSE,
    BIDI
  }

  public abstract @Nullable SpeechConfig speechConfig();

  public abstract ImmutableList<Modality> responseModalities();

  public abstract boolean saveInputBlobsAsArtifacts();

  public abstract @Nullable AudioTranscriptionConfig outputAudioTranscription();

  public abstract int maxLlmCalls();

  // ...
}
```

Runtime Parameters

Parameter Python Type TypeScript Type Go Type Java Type Default (Py / TS / Go / Java) Description
speech_config Optional[types.SpeechConfig] SpeechConfig (optional) N/A SpeechConfig (nullable via @Nullable) None / undefined/ N/A / null Configures speech synthesis (voice, language) using the SpeechConfig type.
response_modalities Optional[list[str]] Modality[] (optional) N/A ImmutableList<Modality> None / undefined / N/A / Empty ImmutableList List of desired output modalities (e.g., Python: ["TEXT", "AUDIO"]; Java/TS: uses structured Modality objects).
save_input_blobs_as_artifacts bool boolean bool boolean False / false / false / false If true, saves input blobs (e.g., uploaded files) as run artifacts for debugging/auditing.
streaming_mode StreamingMode StreamingMode StreamingMode StreamingMode StreamingMode.NONE / StreamingMode.NONE / agent.StreamingModeNone / StreamingMode.NONE Sets the streaming behavior: NONE (default), SSE (server-sent events), or BIDI (bidirectional).
output_audio_transcription Optional[types.AudioTranscriptionConfig] AudioTranscriptionConfig (optional) N/A AudioTranscriptionConfig (nullable via @Nullable) None / undefined / N/A / null Configures transcription of generated audio output using the AudioTranscriptionConfig type.
max_llm_calls int number N/A int 500 / 500 / N/A / 500 Limits total LLM calls per run. 0 or negative means unlimited. Exceeding language limits (e.g. sys.maxsize, Number.MAX_SAFE_INTEGER) raises an error.
support_cfc bool boolean N/A bool False / false / N/A / false Python/TypeScript: Enables Compositional Function Calling. Requires streaming_mode=SSE and uses the LIVE API. Experimental.

speech_config

Supported in ADKPython v0.1.0Java v0.1.0

!!! Note The interface or definition of SpeechConfig is the same, irrespective of the language.

Speech configuration settings for live agents with audio capabilities. The SpeechConfig class has the following structure:

class SpeechConfig(_common.BaseModel):
    """The speech generation configuration."""

    voice_config: Optional[VoiceConfig] = Field(
        default=None,
        description="""The configuration for the speaker to use.""",
    )
    language_code: Optional[str] = Field(
        default=None,
        description="""Language code (ISO 639. e.g. en-US) for the speech synthesization.
        Only available for Live API.""",
    )

The voice_config parameter uses the VoiceConfig class:

class VoiceConfig(_common.BaseModel):
    """The configuration for the voice to use."""

    prebuilt_voice_config: Optional[PrebuiltVoiceConfig] = Field(
        default=None,
        description="""The configuration for the speaker to use.""",
    )

And PrebuiltVoiceConfig has the following structure:

class PrebuiltVoiceConfig(_common.BaseModel):
    """The configuration for the prebuilt speaker to use."""

    voice_name: Optional[str] = Field(
        default=None,
        description="""The name of the prebuilt voice to use.""",
    )

These nested configuration classes allow you to specify:

  • voice_config: The name of the prebuilt voice to use (in the PrebuiltVoiceConfig)
  • language_code: ISO 639 language code (e.g., "en-US") for speech synthesis

When implementing voice-enabled agents, configure these parameters to control how your agent sounds when speaking.

response_modalities

Supported in ADKPython v0.1.0Java v0.1.0

Defines the output modalities for the agent. If not set, defaults to AUDIO. Response modalities determine how the agent communicates with users through various channels (e.g., text, audio).

save_input_blobs_as_artifacts

Supported in ADKPython v0.1.0Go v0.1.0Java v0.1.0

When enabled, input blobs will be saved as artifacts during agent execution. This is useful for debugging and audit purposes, allowing developers to review the exact data received by agents.

support_cfc

Supported in ADKPython v0.1.0Experimental

Enables Compositional Function Calling (CFC) support. Only applicable when using StreamingMode.SSE. When enabled, the LIVE API will be invoked as only it supports CFC functionality.

!!! example "Experimental release"

The `support_cfc` feature is experimental and its API or behavior might
change in future releases.

streaming_mode

Supported in ADKPython v0.1.0Go v0.1.0

Configures the streaming behavior of the agent. Possible values:

  • StreamingMode.NONE: No streaming; responses delivered as complete units
  • StreamingMode.SSE: Server-Sent Events streaming; one-way streaming from server to client
  • StreamingMode.BIDI: Bidirectional streaming; simultaneous communication in both directions

Streaming modes affect both performance and user experience. SSE streaming lets users see partial responses as they're generated, while BIDI streaming enables real-time interactive experiences.

output_audio_transcription

Supported in ADKPython v0.1.0Java v0.1.0

Configuration for transcribing audio outputs from live agents with audio response capability. This enables automatic transcription of audio responses for accessibility, record-keeping, and multi-modal applications.

max_llm_calls

Supported in ADKPython v0.1.0Java v0.1.0

Sets a limit on the total number of LLM calls for a given agent run.

  • Values greater than 0 and less than sys.maxsize: Enforces a bound on LLM calls
  • Values less than or equal to 0: Allows unbounded LLM calls (not recommended for production)

This parameter prevents excessive API usage and potential runaway processes. Since LLM calls often incur costs and consume resources, setting appropriate limits is crucial.

Validation Rules

Supported in ADKPython v0.1.0Typescript v0.2.0Go v0.1.0Java v0.1.0

The RunConfig class validates its parameters to ensure proper agent operation. While Python ADK uses Pydantic for automatic type validation, Java and TypeScript ADK rely on their static type systems and may include explicit checks in the RunConfig's constructor. For the max_llm_calls parameter specifically:

  1. Extremely large values (like sys.maxsize in Python, Integer.MAX_VALUE in Java, or Number.MAX_SAFE_INTEGER in TypeScript) are typically disallowed to prevent issues.

  2. Values of zero or less will usually trigger a warning about unlimited LLM interactions.

Basic runtime configuration

=== "Python"

```python
from google.genai.adk import RunConfig, StreamingMode

config = RunConfig(
    streaming_mode=StreamingMode.NONE,
    max_llm_calls=100
)
```

=== "TypeScript"

```typescript
import { RunConfig, StreamingMode } from '@google/adk';

const config: RunConfig = {
  streamingMode: StreamingMode.NONE,
  maxLlmCalls: 100,
};
```

=== "Go"

```go
import "google.golang.org/adk/agent"

config := agent.RunConfig{
    StreamingMode: agent.StreamingModeNone,
}
```

=== "Java"

```java
import com.google.adk.agents.RunConfig;
import com.google.adk.agents.RunConfig.StreamingMode;

RunConfig config = RunConfig.builder()
        .setStreamingMode(StreamingMode.NONE)
        .setMaxLlmCalls(100)
        .build();
```

This configuration creates a non-streaming agent with a limit of 100 LLM calls, suitable for simple task-oriented agents where complete responses are preferable.

Enabling streaming

=== "Python"

```python
from google.genai.adk import RunConfig, StreamingMode

config = RunConfig(
    streaming_mode=StreamingMode.SSE,
    max_llm_calls=200
)
```

=== "TypeScript"

```typescript
import { RunConfig, StreamingMode } from '@google/adk';

const config: RunConfig = {
  streamingMode: StreamingMode.SSE,
  maxLlmCalls: 200,
};
```

=== "Go"

```go
import "google.golang.org/adk/agent"

config := agent.RunConfig{
    StreamingMode: agent.StreamingModeSSE,
}
```

=== "Java"

```java
import com.google.adk.agents.RunConfig;
import com.google.adk.agents.RunConfig.StreamingMode;

RunConfig config = RunConfig.builder()
    .setStreamingMode(StreamingMode.SSE)
    .setMaxLlmCalls(200)
    .build();
```

Using SSE streaming allows users to see responses as they're generated, providing a more responsive feel for chatbots and assistants.

Enabling speech support

=== "Python"

```python
from google.genai.adk 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", "TEXT"],
    save_input_blobs_as_artifacts=True,
    support_cfc=True,
    streaming_mode=StreamingMode.SSE,
    max_llm_calls=1000,
)
```

=== "TypeScript"

```typescript
import { RunConfig, StreamingMode } from '@google/adk';

const config: RunConfig = {
    speechConfig: {
        languageCode: "en-US",
        voiceConfig: {
            prebuiltVoiceConfig: {
                voiceName: "Kore"
            }
        },
    },
    responseModalities: [
      { modality: "AUDIO" },
      { modality: "TEXT" }
    ],
    saveInputBlobsAsArtifacts: true,
    supportCfc: true,
    streamingMode: StreamingMode.SSE,
    maxLlmCalls: 1000,
};
```

=== "Java"

```java
import com.google.adk.agents.RunConfig;
import com.google.adk.agents.RunConfig.StreamingMode;
import com.google.common.collect.ImmutableList;
import com.google.genai.types.Content;
import com.google.genai.types.Modality;
import com.google.genai.types.Part;
import com.google.genai.types.PrebuiltVoiceConfig;
import com.google.genai.types.SpeechConfig;
import com.google.genai.types.VoiceConfig;

RunConfig runConfig =
    RunConfig.builder()
        .setStreamingMode(StreamingMode.SSE)
        .setMaxLlmCalls(1000)
        .setSaveInputBlobsAsArtifacts(true)
        .setResponseModalities(ImmutableList.of(new Modality("AUDIO"), new Modality("TEXT")))
        .setSpeechConfig(
            SpeechConfig.builder()
                .voiceConfig(
                    VoiceConfig.builder()
                        .prebuiltVoiceConfig(
                            PrebuiltVoiceConfig.builder().voiceName("Kore").build())
                        .build())
                .languageCode("en-US")
                .build())
        .build();
```

This comprehensive example configures an agent with:

  • Speech capabilities using the "Kore" voice (US English)
  • Both audio and text output modalities
  • Artifact saving for input blobs (useful for debugging)
  • Experimental CFC support enabled (Python and TypeScript)
  • SSE streaming for responsive interaction
  • A limit of 1000 LLM calls

Enabling CFC Support

Supported in ADKPython v0.1.0Typescript v0.2.0Experimental

=== "Python"

```python
from google.genai.adk import RunConfig, StreamingMode

config = RunConfig(
    streaming_mode=StreamingMode.SSE,
    support_cfc=True,
    max_llm_calls=150
)
```

=== "TypeScript"

```typescript
import { RunConfig, StreamingMode } from '@google/adk';

const config: RunConfig = {
    streamingMode: StreamingMode.SSE,
    supportCfc: true,
    maxLlmCalls: 150,
};
```

Enabling Compositional Function Calling (CFC) creates an agent that can dynamically execute functions based on model outputs, powerful for applications requiring complex workflows.

!!! example "Experimental release"

The Compositional Function Calling (CFC) streaming feature is an
experimental release.