Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
514a2b0
[fern-generated] Update SDK
fern-api[bot] Sep 14, 2026
4359b1d
[fern-replay] Applied customizations
fern-api[bot] Sep 14, 2026
ba388b5
Merge pull request #92 from AgoraIO/fern-bot/2026-09-14_09-39-49_869
seymourtang Sep 14, 2026
24c405e
[fern-generated] Update SDK
fern-api[bot] Sep 14, 2026
070bdb7
[fern-replay] Applied customizations
fern-api[bot] Sep 14, 2026
0b31e6d
Merge remote-tracking branch 'origin/engine-v2.13' into fern-bot/2026…
Sep 14, 2026
2b19549
Merge pull request #93 from AgoraIO/fern-bot/2026-09-14_13-10-54_037
seymourtang Sep 14, 2026
e799036
feat(agentkit): support v2.13 generated capabilities
seymourtang Sep 14, 2026
8e64804
test: narrow optional filler words content
seymourtang Sep 14, 2026
a97a948
refactor: transition OpenAIGPTLive to production, removing preview re…
seymourtang Sep 15, 2026
013e69a
Merge remote-tracking branch 'github/main' into engine-v2.13
seymourtang Sep 16, 2026
e48c9e6
Update Gemini Live to use production routing for all models, maintain…
seymourtang Sep 16, 2026
26a08fa
[fern-generated] Update SDK
fern-api[bot] Sep 16, 2026
cdaae71
[fern-replay] Applied customizations
fern-api[bot] Sep 16, 2026
651db53
Merge pull request #98 from AgoraIO/fern-bot/2026-09-16_08-58-12_175
seymourtang Sep 16, 2026
8c630cf
[fern-generated] Update SDK
fern-api[bot] Sep 16, 2026
0f4dc6b
[fern-replay] Applied customizations
fern-api[bot] Sep 16, 2026
fd4754a
Merge pull request #99 from AgoraIO/fern-bot/2026-09-16_11-18-47_847
seymourtang Sep 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .fern/metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
},
"exclude_types_from_init_exports": true
},
"originGitCommit": "3fdb45ab45802742325afca544fdc22f5ae58db8"
"originGitCommit": "26314a9d3199f5e135302c3c3645b6bbb8f556d4"
}
78 changes: 75 additions & 3 deletions .fern/replay.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/).

## [v2.10.0] — 2026-09-16

### Changed

- **Gemini Live production routing and compatibility** — Gemini 3.8 sessions now use the normal production gateway without a preview feature header. Existing imports from `agora_agent.agentkit.preview` remain compatible and resolve to the production `GeminiLive` implementation and model constants.

## [v2.9.0] — 2026-09-15

### Added
Expand All @@ -19,6 +25,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).

### Changed

- **OpenAI GPT Live production routing** — moved `OpenAIGPTLive` to the production MLLM vendors and removed its preview registration. Existing imports from `agora_agent.agentkit.preview` remain compatible and now route to Production automatically.
- **OpenAI GPT Live defaults** — `OpenAIGPTLive` now defaults to the shortened `gpt-live-1` model name and omits the alpha selector. Explicit `model` and `alpha_selector` options remain available for future preview contracts.

## [v2.8.0] — 2026-09-10
Expand Down
4 changes: 2 additions & 2 deletions compat/agora-agent-server-sdk/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name = "agora-agent-server-sdk"

[tool.poetry]
name = "agora-agent-server-sdk"
version = "v2.9.0"
version = "v2.10.0"
description = "Compatibility shim for the renamed agora-agents package."
readme = "README.md"
authors = []
Expand Down Expand Up @@ -35,7 +35,7 @@ Repository = 'https://github.com/AgoraIO/agora-agents-python'

[tool.poetry.dependencies]
python = "^3.8"
agora-agents = ">=2.9.0,<3.0.0"
agora-agents = ">=2.10.0,<3.0.0"

[build-system]
requires = ["poetry-core"]
Expand Down
4 changes: 2 additions & 2 deletions docs/concepts/vendors.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,9 +158,9 @@ Used with `agent.with_mllm()` for the [MLLM flow](../guides/mllm-flow.md). These
| Class | Provider | Area | Required Parameters |
|---|---|---|---|
| `OpenAIRealtime` | OpenAI Realtime | Global | `api_key`; optional `turn_detection` |
| `OpenAIGPTLive` (preview) | OpenAI GPT Live | Global | `api_key`; optional `greeting` |
| `OpenAIGPTLive` | OpenAI GPT Live | Global | `api_key`; optional `greeting` |
| `AzureOpenAIRealtime` | Azure OpenAI Realtime | Global | `api_key`, `url`, `turn_detection`; optional `max_history` |
| `GeminiLive` | Google Gemini Live API | Global | `api_key`; `model` defaults to `models/gemini-3.8-live`. The two 3.8 IDs use preview routing; older IDs use production. |
| `GeminiLive` | Google Gemini Live API | Global | `api_key`; `model` defaults to `models/gemini-3.8-live`. All model IDs use production routing. |
| `VertexAI` | Vertex AI (Gemini Live) | Global | `model`, `project_id`, `location`, `adc_credentials_string`; optional `turn_detection` |
| `XaiGrok` | xAI Grok (`mllm.vendor`: `xai`) | Global | `api_key`; optional `voice`, `language`, `sample_rate`, `turn_detection` |
| `QwenOmni` | Alibaba Cloud Qwen Omni Realtime | CN | `api_key`, `url`; optional `turn_detection` |
Expand Down
2 changes: 1 addition & 1 deletion docs/guides/mllm-flow.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ asyncio.run(main())

## Gemini Live

Use `GeminiLive` for the existing Gemini Live models and both Gemini 3.8 models. The 3.8 IDs select the preview route automatically; Extended Thinking also accepts `thinking_level`. See the [Preview Endpoint guide](./preview-endpoint.md).
Use `GeminiLive` for the existing Gemini Live models and both Gemini 3.8 models. All use the production route; Extended Thinking also accepts `thinking_level`.

Gemini Live uses a Google AI API key:

Expand Down
10 changes: 5 additions & 5 deletions docs/guides/openai-gpt-live-v3.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# GPT Live v3 preview
# GPT Live v3

This preview targets `gpt-live-1` on `/v1/live/sessions`. Use an alpha-enabled OpenAI key. Do not use this alpha for production traffic.
GPT Live targets `gpt-live-1` on `/v1/live/sessions` through the production gateway. Existing imports from `agora_agent.agentkit.preview` remain supported as compatibility aliases.

<!-- snippet: fragment -->
```python
Expand Down Expand Up @@ -51,15 +51,15 @@ GPT Live places MCP at `properties.mllm.mcp_servers`, the tool gate at `properti
}
```

This fragment omits the normal name, channel, token and UID fields populated by the SDK session. The preview route and `agora-feature: live-models` gate are selected automatically from the vendor.
This fragment omits the normal name, channel, token and UID fields populated by the SDK session. The production route is selected automatically from the vendor.

The SDK omits `alpha_selector` by default. Set it only when a future preview contract requires an `OpenAI-Alpha` selector.

## Silence and backend rollout

Keep silence settings in the existing agent parameters builder, never in vendor params. The public API spelling is `silence_config`, with `{timeout_ms, action, content}`. The supplied extension contract describes internal `parameters.main.silence` and supports `action: "think"`; the public documentation currently says `silence_config` does not apply to MLLM. Serialization is covered by tests, but the public documentation does not establish that the preview allocator maps it to GPT Live's internal MAIN setting. Confirm that backend mapping before relying on silence nudges. The SDK does not invent a new public `main` field.
Keep silence settings in the existing agent parameters builder, never in vendor params. The public API spelling is `silence_config`, with `{timeout_ms, action, content}`. The supplied extension contract describes internal `parameters.main.silence` and supports `action: "think"`; the public documentation currently says `silence_config` does not apply to MLLM. Serialization is covered by tests, but the public documentation does not establish that the allocator maps it to GPT Live's internal MAIN setting. Confirm that backend mapping before relying on silence nudges. The SDK does not invent a new public `main` field.

## Preview-only options
## Compatibility options

The supplied backend contract marks custom voice objects, `responses_params`, and first-class context management as pending PR #1522. The SDK does not expose typed options for those fields. Use raw params only once your target backend supports that PR. Until then, context management is reachable via `session_params.context_management`.

Expand Down
21 changes: 8 additions & 13 deletions docs/guides/preview-endpoint.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,8 @@ Some providers may be released through a preview gateway before their production
and `AsyncAgentSession` detect registered preview providers from the resolved start request and route the entire
session automatically.

OpenAI GPT Live uses the `live-models` feature. Gemini 3.8 MLLMs use `gemini-live`.
Gemini STT has graduated to
production and uses the normal regional endpoint. Existing imports of `GeminiSTT` and `GeminiSTTModels` from
`agora_agent.agentkit.preview` remain supported as compatibility aliases.
OpenAI GPT Live, Gemini STT, and Gemini Live have graduated to the production gateway and use the normal regional
endpoint. Existing imports from `agora_agent.agentkit.preview` remain supported as compatibility aliases.

```python
from agora_agent import Agent, OpenAIGPTLive
Expand All @@ -26,16 +24,13 @@ session = (
agent_id = session.start()
```

This session uses the preview base URL and sends `agora-feature: live-models`. A session using `GeminiSTT` uses the
client's normal GA regional endpoint without that header.
Preview providers use the preview base URL and `agora-feature` gate. Sessions using `GeminiSTT`, `GeminiLive`, or GPT
Live use the client's normal production regional endpoint without that header.

Use the single `GeminiLive(api_key=..., model=...)` class with `with_mllm`.
The model IDs are `models/gemini-3.8-live` and
`models/gemini-3.8-live-extended-thinking`; the low-latency ID is the default.
Set `thinking_level="medium"` for extended thinking. `GeminiLive` sends it
only for the extended-thinking ID. The Gemini
Use the single production `GeminiLive(api_key=..., model=...)` class with `with_mllm`. The model IDs are
`models/gemini-3.8-live` and `models/gemini-3.8-live-extended-thinking`; the low-latency ID is the default. Set
`thinking_level="medium"` for extended thinking. `GeminiLive` sends it only for the extended-thinking ID. The Gemini
credential is sent once as `mllm.api_key`, never as `mllm.params.api_key`.
Gemini sessions send `agora-feature: gemini-live`, while GPT Live retains `live-models`.

## Session-scoped routing

Expand All @@ -61,7 +56,7 @@ The registry is keyed first by request category and then by the serialized vendo
```python
_PREVIEW_FEATURES_BY_CATEGORY = {
"asr": {"new_vendor": "new-vendor-feature"},
"mllm": {"openai_gpt_live": "live-models"},
"mllm": {},
}
```

Expand Down
2 changes: 1 addition & 1 deletion docs/reference/agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ filler_words = FillerWordsConfig(
agent = agent.with_filler_words(filler_words)
```

`generated_config` is optional. Its `llm_provider`, `prompt`, and `fallback_strategy` fields are optional as well; when omitted, the service uses its defaults.
`generated_config` is optional. Its `llm_provider`, `prompt`, and `fallback_strategy` fields are optional as well; when omitted, the service uses its defaults. Set `context_message_limit` to cap the number of recent messages and `history_character_limit` to cap the number of conversation-history characters passed to the filler-word model.

## `create_session()`

Expand Down
Loading
Loading