Skip to content

Commit 80c581f

Browse files
Merge branch 'fern-bot/2026-06-04_20-31-12_964': add new vendors and fields, fix fern-replay artifacts
- Add InteractionLanguage field to Deepgram, Speechmatics, and Sarvam STT options - Add XaiGrok MLLM vendor, GenericAvatar, AnamAvatar vendors - Add with_audio_scenario() builder method to Agent - Fix VertexAI MLLM: move project_id, location, adc_credentials_string into params (not top-level) - Fix agent_session LLM merge to use key-existence checks (Issue 9 parity with agent.py) - Remove duplicate imports, method declarations, and dead XaiRealtime test reference - Remove unused StartAgentsRequestPropertiesLlmGreetingConfigs import (type never generated) - Update tests for new OpenAISTT required-field validation, correct vendor-wins precedence behavior
2 parents f663438 + 83e9b9c commit 80c581f

15 files changed

Lines changed: 18825 additions & 26 deletions

File tree

.fern/replay.lock

Lines changed: 17989 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/vendors.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,7 @@ Use `turn_detection.language` for Agora interaction language; it defaults to `en
336336
| `api_key` | `str` | BYOK only | `None` | Deepgram API key. Optional only for Agora-managed `nova-2` and `nova-3`. |
337337
| `model` | `str` | No | `None` | Model (e.g., `nova-2`) |
338338
| `language` | `str` | No | `None` | Language code (e.g., `en-US`) |
339+
| `interaction_language` | `str` | No | `None` | Agora `asr.language` override |
339340
| `smart_format` | `bool` | No | `None` | Enable smart formatting |
340341
| `punctuation` | `bool` | No | `None` | Enable punctuation |
341342
| `additional_params` | `Dict[str, Any]` | No | `None` | Additional parameters |

src/agora_agent/agentkit/agent_session.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
is_generic_avatar,
2525
is_heygen_avatar,
2626
is_live_avatar_avatar,
27+
is_rtc_avatar,
2728
validate_avatar_config,
2829
validate_tts_sample_rate,
2930
)
@@ -333,15 +334,15 @@ def _build_start_properties(
333334
properties["tts"] = self._dump_model(self._agent.tts)
334335
if self._agent.llm is not None:
335336
llm = dict(self._agent.llm)
336-
if self._agent.instructions is not None:
337+
if self._agent.instructions is not None and "system_messages" not in llm:
337338
llm["system_messages"] = [{"role": "system", "content": self._agent.instructions}]
338-
if self._agent.greeting is not None:
339+
if self._agent.greeting is not None and "greeting_message" not in llm:
339340
llm["greeting_message"] = self._agent.greeting
340-
if self._agent.greeting_configs is not None:
341+
if self._agent.greeting_configs is not None and "greeting_configs" not in llm:
341342
llm["greeting_configs"] = self._dump_model(self._agent.greeting_configs)
342-
if self._agent.failure_message is not None:
343+
if self._agent.failure_message is not None and "failure_message" not in llm:
343344
llm["failure_message"] = self._agent.failure_message
344-
if self._agent.max_history is not None:
345+
if self._agent.max_history is not None and "max_history" not in llm:
345346
llm["max_history"] = self._agent.max_history
346347
properties["llm"] = llm
347348
if self._agent.stt is not None:

src/agora_agent/agentkit/vendors/avatar.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,3 +206,4 @@ def to_config(self) -> Dict[str, Any]:
206206

207207
enable = self.options.enable if self.options.enable is not None else True
208208
return {"enable": enable, "vendor": "anam", "params": params}
209+

src/agora_agent/agentkit/vendors/llm.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Any, Dict, List, Optional
1+
from typing import Any, Dict, List, Optional, Union
22

33
from pydantic import BaseModel, ConfigDict, Field, model_validator
44

src/agora_agent/agentkit/vendors/mllm.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import warnings
12
from typing import Any, Dict, List, Optional
23

34
from pydantic import BaseModel, ConfigDict, Field
@@ -178,11 +179,12 @@ def to_config(self) -> Dict[str, Any]:
178179
if self.options.http_options is not None:
179180
params["http_options"] = self.options.http_options
180181

182+
params["project_id"] = self.options.project_id
183+
params["location"] = self.options.location
184+
params["adc_credentials_string"] = self.options.adc_credentials_string
185+
181186
config: Dict[str, Any] = {
182187
"vendor": "vertexai",
183-
"project_id": self.options.project_id,
184-
"location": self.options.location,
185-
"adc_credentials_string": self.options.adc_credentials_string,
186188
"params": params,
187189
}
188190

src/agora_agent/agentkit/vendors/stt.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
from .base import BaseSTT
66

7+
# BCP-47 language tag for asr.language (the Agora interaction language).
8+
InteractionLanguage = str
9+
710
_DEEPGRAM_MANAGED_MODELS = {"nova-2", "nova-3"}
811

912

@@ -12,6 +15,7 @@ class SpeechmaticsSTTOptions(BaseModel):
1215

1316
api_key: str = Field(..., description="Speechmatics API key")
1417
language: str = Field(..., description="Language code (e.g., en, es, fr)")
18+
interaction_language: Optional[InteractionLanguage] = Field(default=None, description="Agora interaction language for asr.language")
1519
model: Optional[str] = Field(default=None, description="Model name")
1620
uri: Optional[str] = Field(default=None, description="Speechmatics streaming WebSocket URL")
1721
additional_params: Optional[Dict[str, Any]] = Field(default=None)
@@ -45,6 +49,7 @@ class DeepgramSTTOptions(BaseModel):
4549
model: Optional[str] = Field(default=None, description="Model (e.g., nova-2, enhanced, base)")
4650
language: Optional[str] = Field(default=None, description="Language code (e.g., en-US)")
4751
keyterm: Optional[str] = Field(default=None, description="Boost specialized terms and brands for Deepgram")
52+
interaction_language: Optional[InteractionLanguage] = Field(default=None, description="Agora interaction language for asr.language")
4853
smart_format: Optional[bool] = Field(default=None, description="Enable smart formatting")
4954
punctuation: Optional[bool] = Field(default=None, description="Enable punctuation")
5055
additional_params: Optional[Dict[str, Any]] = Field(default=None)
@@ -262,6 +267,7 @@ class SarvamSTTOptions(BaseModel):
262267

263268
api_key: str = Field(..., description="Sarvam API key")
264269
language: str = Field(..., description="Language code (e.g., en, hi, ta)")
270+
interaction_language: Optional[InteractionLanguage] = Field(default=None, description="Agora interaction language for asr.language")
265271
model: Optional[str] = Field(default=None, description="Model name")
266272
additional_params: Optional[Dict[str, Any]] = Field(default=None)
267273

src/agora_agent/core/client_wrapper.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ def __init__(
2626

2727
def get_headers(self) -> typing.Dict[str, str]:
2828
headers: typing.Dict[str, str] = {
29-
"User-Agent": "agora-agents/v2.1.1",
29+
"User-Agent": "agora-agents/v2.1.2",
3030
"X-Fern-Language": "Python",
3131
"X-Fern-SDK-Name": "agora-agents",
32-
"X-Fern-SDK-Version": "v2.1.1",
32+
"X-Fern-SDK-Version": "v2.1.2",
3333
**(self.get_custom_headers() or {}),
3434
}
3535
headers["Authorization"] = httpx.BasicAuth(self._get_username(), self._get_password())._auth_header

src/agora_agent/types/asr.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ class Asr_Deepgram(UncheckedBaseModel):
5454
vendor: typing.Literal["deepgram"] = "deepgram"
5555
language: typing.Optional[AsrLanguage] = None
5656
params: DeepgramAsrParams
57-
keyterm: typing.Optional[str] = None
5857

5958
if IS_PYDANTIC_V2:
6059
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2

src/agora_agent/types/deepgram_asr.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ class DeepgramAsr(UncheckedBaseModel):
1616

1717
language: typing.Optional[AsrLanguage] = None
1818
params: DeepgramAsrParams
19-
keyterm: typing.Optional[str] = pydantic.Field(default=None)
20-
"""
21-
Boost specialized terms and brands for preset-backed Deepgram usage.
22-
"""
2319

2420
if IS_PYDANTIC_V2:
2521
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2

0 commit comments

Comments
 (0)