Skip to content

Commit 9ad7ad9

Browse files
committed
feat: enhance agent and vendor documentation with new features and configurations
- Updated `withTools` method to clarify support for both MCP and inline REST tool invocation. - Added `GeminiSTT` vendor with detailed configuration options for Google Gemini ASR. - Introduced `OpenAIGptLive` vendor for OpenAI GPT Live with specific parameters. - Enhanced documentation for MLLM vendors, including support for new global and CN vendors. - Improved examples for filler words and inline tools in agent configuration. - Updated tests to cover new features and ensure proper serialization of configurations.
1 parent d3aaa19 commit 9ad7ad9

18 files changed

Lines changed: 486 additions & 23 deletions

File tree

docs/concepts/agent.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ Each method returns a new `Agent` instance with the updated configuration. Vendo
7474
| `withGreetingConfigs` | `withGreetingConfigs(configs: LlmGreetingConfigs): Agent<TTSSampleRate, TArea>` | Deprecated. Configure greeting playback on the LLM vendor instead. |
7575
| `withSal` | `withSal(config: SalConfig): Agent<TTSSampleRate, TArea>` | Set SAL configuration |
7676
| `withAdvancedFeatures` | `withAdvancedFeatures(features: AdvancedFeatures): Agent<TTSSampleRate, TArea>` | Set advanced features |
77-
| `withTools` | `withTools(enabled?: boolean): Agent<TTSSampleRate, TArea>` | Enable or disable MCP tool invocation |
77+
| `withTools` | `withTools(enabled?: boolean): Agent<TTSSampleRate, TArea>` | Enable or disable MCP and inline REST tool invocation |
7878
| `withParameters` | `withParameters(parameters: SessionParamsInput): Agent<TTSSampleRate, TArea>` | Set session parameters |
7979
| `withAudioScenario` | `withAudioScenario(audioScenario: ParametersAudioScenario): Agent<TTSSampleRate, TArea>` | Set `parameters.audio_scenario` |
8080
| `withFailureMessage` | `withFailureMessage(message: string): Agent<TTSSampleRate, TArea>` | Deprecated. Use LLM/MLLM vendor `failureMessage` instead. |

docs/concepts/vendors.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ The `sampleRate` is critical when using avatars. See [Avatar Integration](../gui
8686
| `MicrosoftSTT` | Azure Speech | `key`, `region`, `language` |
8787
| `OpenAISTT` | OpenAI Whisper | `apiKey`, `model?`, `language?`, `prompt?` |
8888
| `GoogleSTT` | Google Speech | `projectId`, `location`, `adcCredentialsString`, `language` |
89+
| `GeminiSTT` | Google Gemini ASR | `apiKey`, `model`, `sampleRate?`, `language?`, `wordTimestamp?` |
8990
| `AmazonSTT` | Amazon Transcribe | `accessKey`, `secretKey`, `region`, `language` |
9091
| `AssemblyAISTT` | AssemblyAI | `apiKey`, `language`, `ws_url?` |
9192
| `AresSTT` | Agora ARES | `keywords?`, `additionalParams?` |
@@ -104,13 +105,31 @@ const stt = new DeepgramSTT({
104105
});
105106
```
106107

108+
`GeminiSTT` serializes its API key, model, and optional transcription settings
109+
into the generated Gemini ASR configuration:
110+
111+
```typescript
112+
import { GeminiSTT } from 'agora-agents';
113+
114+
const stt = new GeminiSTT({
115+
apiKey: 'your-gemini-key',
116+
model: 'gemini-transcribe',
117+
language: 'en-US',
118+
wordTimestamp: true,
119+
});
120+
```
121+
122+
ARES and Fengming hotwords are sent as the top-level `asr.keywords` field;
123+
additional provider-specific fields remain under `asr.params`.
124+
107125
## MLLM vendors
108126

109127
MLLM (Multimodal LLM) vendors handle audio end-to-end — no separate STT or TTS step. Call `agent.withMllm(vendor)` and MLLM mode is enabled automatically; no separate `advancedFeatures` flag is needed.
110128

111129
| Class | Provider | Key constructor params |
112130
| ---------------- | ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
113-
| `OpenAIRealtime` | OpenAI Realtime API | `apiKey`, `model?`, `url?`, `greetingMessage?`, `failureMessage?`, `inputModalities?`, `outputModalities?`, `messages?`, `turnDetection?` |
131+
| `OpenAIRealtime` | OpenAI Realtime API (`mllm.vendor: openai`) | `apiKey`, `model?`, `url?`, `greetingMessage?`, `failureMessage?`, `inputModalities?`, `outputModalities?`, `messages?`, `turnDetection?` |
132+
| `OpenAIGptLive` | OpenAI GPT Live (`mllm.vendor: openai_gpt_live`) | `apiKey`, `model?`, `url?`, `greetingMessage?`, `failureMessage?`, `inputModalities?`, `outputModalities?`, `messages?`, `turnDetection?` |
114133
| `AzureOpenAIRealtime` | Azure OpenAI Realtime (global) | `apiKey`, `url`, `turnDetection`, `model?`, `voice?`, `instructions?`, `params?`, `messages?`, `outputModalities?`, `maxHistory?`, `greetingMessage?` |
115134
| `GeminiLive` | Google Gemini Live API | `apiKey`, `model`, `url?`, `voice?`, `greetingMessage?`, `failureMessage?`, `inputModalities?`, `outputModalities?`, `messages?`, `turnDetection?` |
116135
| `VertexAI` | Vertex AI Gemini Live | `model`, `url?`, `projectId`, `location`, `adcCredentialsString`, `voice?`, `greetingMessage?`, `failureMessage?`, `inputModalities?`, `outputModalities?`, `messages?`, `turnDetection?` |

docs/guides/agent-builder-features.md

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ Every example assumes an `AgoraClient` is created first and passed to `new Agent
1616
|---|---|---|
1717
| `sal` | `withSal(config)` | Selective Attention Locking — speaker recognition and noise suppression |
1818
| `advancedFeatures` | `withAdvancedFeatures(features)` | Enable MLLM, RTM, SAL, tools |
19-
| `tools` | `withTools(enabled)` | Enable MCP tool invocation |
19+
| `tools` | `withTools(enabled)` | Enable MCP and inline REST tool invocation |
20+
| `llm.tools` | LLM vendor `tools` option | Define inline synchronous REST function-calling tools |
2021
| `parameters` | `withParameters(params)` | Silence config, farewell config, data channel |
2122
| `failureMessage` | LLM/MLLM vendor option | Message spoken when LLM fails |
2223
| `maxHistory` | LLM vendor option | Max conversation turns in LLM context |
@@ -84,7 +85,8 @@ const mllmAgent = new Agent({ client })
8485
const rtmAgent = new Agent({ client })
8586
.withAdvancedFeatures({ enable_rtm: true });
8687

87-
// Enable tool invocation via MCP
88+
// Enable tool invocation for both MCP servers and inline LLM REST tools.
89+
// This must be enabled when either tool definition is configured.
8890
const toolsAgent = new Agent({ client })
8991
.withTools();
9092
```
@@ -257,6 +259,59 @@ const agent = new Agent({ client })
257259
.withStt(/* ... */);
258260
```
259261

262+
Generated filler words can use an OpenAI-compatible provider. Static phrases
263+
are still required because they are used as the fallback when generation is
264+
not ready, fails, or returns an empty response:
265+
266+
```typescript
267+
.withFillerWords({
268+
enable: true,
269+
trigger: { mode: 'fixed_time', fixed_time_config: { response_wait_ms: 2000 } },
270+
content: {
271+
mode: 'generated',
272+
static_config: {
273+
phrases: ['One moment please.', 'Let me check that.'],
274+
selection_rule: 'shuffle',
275+
},
276+
generated_config: {
277+
llm_provider: {
278+
base_url: 'https://api.openai.com/v1/chat/completions',
279+
api_key: 'your-filler-llm-key',
280+
params: { model: 'gpt-4o-mini' },
281+
},
282+
prompt: 'Generate a short conversational filler phrase.',
283+
fallback_strategy: 'static',
284+
},
285+
},
286+
})
287+
```
288+
289+
The `tools` option on standard text LLM vendors is separate from MCP. It
290+
defines synchronous REST tools using `type: 'function'`, a JSON Schema under
291+
`function.parameters`, and a `server` with `GET` or `POST` plus a URL template:
292+
293+
Call `.withTools(true)` on the agent as well; `llm.tools` is ignored unless
294+
`advanced_features.enable_tools` is enabled.
295+
296+
```typescript
297+
new OpenAI({
298+
apiKey: 'your-openai-key',
299+
model: 'gpt-4o-mini',
300+
url: 'https://api.openai.com/v1/chat/completions',
301+
tools: [{
302+
type: 'function',
303+
function: {
304+
name: 'lookup_order',
305+
parameters: { type: 'object', properties: { orderId: { type: 'string' } } },
306+
},
307+
server: {
308+
method: 'GET',
309+
url: 'https://example.com/orders/{{args.orderId}}',
310+
},
311+
}],
312+
})
313+
```
314+
260315
## Getters
261316

262317
Read back configuration via getter properties:

docs/guides/mllm-flow.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ description: Use global or Chinese mainland MLLM providers for end-to-end audio
66

77
# MLLM Flow (Multimodal)
88

9-
In MLLM mode, a single multimodal model handles audio input and output end-to-end — no separate STT or TTS step. AgentKit supports global OpenAI Realtime, Azure OpenAI Realtime, Gemini Live, Vertex AI, and xAI Grok providers, plus Qwen Omni for Chinese mainland deployments.
9+
In MLLM mode, a single multimodal model handles audio input and output end-to-end — no separate STT or TTS step. AgentKit supports global OpenAI Realtime (`mllm.vendor = 'openai'`), OpenAI GPT Live (`mllm.vendor = 'openai_gpt_live'`), Azure OpenAI Realtime, Gemini Live, Vertex AI, and xAI Grok providers, plus Qwen Omni for Chinese mainland deployments.
1010

1111
## When to use MLLM
1212

docs/reference/agent.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ If you omit `withStt()`, AgentKit still sends an ASR config automatically based
8080

8181
### `withMllm(vendor: GlobalMllmVendor | CNMllmVendor): Agent<TTSSampleRate, TArea>`
8282

83-
Set the MLLM vendor for multimodal mode. Pass a global vendor (`OpenAIRealtime`, `AzureOpenAIRealtime`, `GeminiLive`, `VertexAI`, `XaiGrok`) or the Chinese mainland vendor `QwenOmni`. Calling `withMllm()` automatically sets `mllm.enable = true`. MLLM mode does not require `withTts()` / `withLlm()` / `withStt()`.
83+
Set the MLLM vendor for multimodal mode. Pass a global vendor (`OpenAIRealtime`, `OpenAIGptLive`, `AzureOpenAIRealtime`, `GeminiLive`, `VertexAI`, `XaiGrok`) or the Chinese mainland vendor `QwenOmni`. Calling `withMllm()` automatically sets `mllm.enable = true`. MLLM mode does not require `withTts()` / `withLlm()` / `withStt()`.
8484

8585
> Avatars are only supported with the cascading ASR + LLM + TTS pipeline. Combining `withMllm()` with `withAvatar()` throws at `toProperties()` and `session.start()`.
8686
@@ -118,7 +118,9 @@ Set advanced features (e.g. `enable_rtm`).
118118

119119
### `withTools(enabled = true): Agent<TTSSampleRate, TArea>`
120120

121-
Enable or disable MCP tool invocation by setting `advanced_features.enable_tools`.
121+
Enable or disable tool invocation by setting `advanced_features.enable_tools`.
122+
This shared switch is required for both `llm.mcp_servers` and the inline
123+
`llm.tools` REST tool definitions.
122124

123125
### `withParameters(parameters: SessionParamsInput): Agent<TTSSampleRate, TArea>`
124126

@@ -251,8 +253,12 @@ In the cascading pipeline, `toProperties()` also fills in a default `asr` block
251253

252254
Public aliases over Fern-generated types include `LlmConfig`, `SttConfig`, `AsrConfig` (= `SttConfig`), `MllmConfig`, `AvatarConfig`, session/conversation types, and think types (`ThinkOnListeningAction`, etc.).
253255

256+
LLM configs also expose `LlmTool`, `LlmToolFunction`, `LlmToolServer`, and
257+
`LlmToolExecution` for inline synchronous REST tools. These are distinct from
258+
MCP servers configured through `mcp_servers`.
259+
254260
Builder vendor unions: `LlmVendor`, `TtsVendor<SR>`, `SttVendor`, `AvatarVendor<SR>` (class instances accepted by `.withLlm()` / `.withTts()` / `.withStt()` / `.withAvatar()`).
255261

256262
Wire vendor name aliases: `AsrVendorName` (ASR vendor string), `AvatarWireVendor` (avatar vendor string on `AvatarConfig`).
257263

258-
Think value constants: `ThinkOnListeningActionInject`, `ThinkOnListeningActionInterrupt`, `ThinkOnListeningActionIgnore`, `ThinkOnThinkingActionInterrupt`, `ThinkOnThinkingActionIgnore`, `ThinkOnSpeakingActionInterrupt`, `ThinkOnSpeakingActionIgnore`.
264+
Think value constants include `ThinkOnListeningActionInject`, `ThinkOnListeningActionInterrupt`, `ThinkOnListeningActionIgnore`, and `ThinkOnListeningActionAppend`; corresponding `Append` constants are also available for thinking and speaking states. `append` queues the instruction until the current state finishes without interrupting the active interaction.

docs/reference/vendors.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ new OpenAI(options: OpenAIOptions)
105105
| `greetingAudioUrl` | `string` | No | Publicly accessible greeting audio URL |
106106
| `greetingConfigs` | `LlmGreetingConfigs` | No | Greeting playback configuration |
107107
| `templateVariables` | `Record<string, string>` | No | Template variables for messages |
108+
| `tools` | `LlmTool[]` | No | Inline synchronous REST function-calling tools; separate from MCP. Requires `agent.withTools(true)`. |
108109

109110
For supported Agora-managed models, `apiKey` is optional:
110111

@@ -376,18 +377,24 @@ When `.withStt()` is omitted, AgentKit now selects the wire ASR vendor from `cli
376377
| `MicrosoftSTT` | `key`, `region`, `language` |
377378
| `OpenAISTT` | `apiKey`, `model?`, `language?`, `prompt?`, `inputAudioTranscription?` |
378379
| `GoogleSTT` | `projectId`, `location`, `adcCredentialsString`, `language`, `model?` |
380+
| `GeminiSTT` | `apiKey`, `model`, `sampleRate?`, `language?`, `wordTimestamp?`, `additionalParams?` |
379381
| `AmazonSTT` | `accessKey`, `secretKey`, `region`, `language` |
380382
| `AssemblyAISTT` | `apiKey`, `language`, `ws_url?` |
381383
| `AresSTT` | `keywords?`, `additionalParams?` |
382384
| `SarvamSTT` | `apiKey`, `language` |
383385
| `XAiSTT` | `apiKey`, `language?`, `baseUrl?`, `sampleRate?`, `additionalParams?` |
384386

387+
`AresSTT` and `FengmingSTT` serialize `keywords` to the top-level ASR field
388+
(`asr.keywords`). Additional provider fields remain under `asr.params`.
389+
385390
---
386391

387392
## MLLM vendors
388393

389394
### OpenAIRealtime
390395

396+
The legacy OpenAI Realtime wrapper emits `mllm.vendor = 'openai'`.
397+
391398
<!-- snippet: fragment -->
392399
```typescript
393400
new OpenAIRealtime(options: OpenAIRealtimeOptions)
@@ -406,6 +413,30 @@ new OpenAIRealtime(options: OpenAIRealtimeOptions)
406413
| `params` | `Record<string, unknown>` | No | Additional MLLM parameters |
407414
| `turnDetection` | `MllmTurnDetectionConfig` | No | MLLM turn detection configuration; overrides top-level `turn_detection` |
408415

416+
### OpenAIGptLive
417+
418+
`OpenAIGptLive` is a separate vendor for `mllm.vendor = 'openai_gpt_live'`.
419+
Its `greetingMessage` option is serialized to `mllm.greeting_message`.
420+
This vendor does not use the generated `greeting` field.
421+
422+
<!-- snippet: fragment -->
423+
```typescript
424+
new OpenAIGptLive(options: OpenAIGptLiveOptions)
425+
```
426+
427+
| Option | Type | Required | Description |
428+
|---|---|---|---|
429+
| `apiKey` | `string` | Yes | OpenAI API key |
430+
| `model` | `string` | No | Model name |
431+
| `url` | `string` | No | WebSocket URL (defaults to `wss://api.openai.com/v1/live`) |
432+
| `greetingMessage` | `string` | No | MLLM greeting sent as `mllm.greeting_message` |
433+
| `failureMessage` | `string` | No | Message played when the model call fails |
434+
| `inputModalities` | `string[]` | No | Input modalities |
435+
| `outputModalities` | `string[]` | No | Output modalities |
436+
| `messages` | `Record<string, unknown>[]` | No | Conversation messages |
437+
| `params` | `Record<string, unknown>` | No | Additional MLLM parameters |
438+
| `turnDetection` | `MllmTurnDetectionConfig` | No | MLLM turn detection configuration |
439+
409440
### AzureOpenAIRealtime
410441

411442
<!-- snippet: fragment -->
@@ -431,7 +462,6 @@ Global Azure OpenAI Realtime wrapper. It emits `mllm.vendor = 'azure'`; `maxHist
431462

432463
### GeminiLive
433464

434-
<!-- snippet: fragment -->
435465
```typescript
436466
new GeminiLive(options: GeminiLiveOptions)
437467
```

src/agentkit/Agent.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,8 @@ export class Agent<TTSSampleRate extends number = number, TArea extends AgoraAre
441441
}
442442

443443
/**
444-
* Returns a new Agent with MCP tool invocation enabled or disabled.
444+
* Returns a new Agent with MCP and inline LLM tool invocation enabled or disabled.
445+
* Both `llm.mcp_servers` and `llm.tools` require `advanced_features.enable_tools`.
445446
*/
446447
withTools(enabled = true): Agent<TTSSampleRate, TArea> {
447448
const newAgent = this._clone();

src/agentkit/constants.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ export const Geofence: typeof StartAgentsRequestNS.Properties.Geofence = StartAg
4040
export const FillerWordsSelectionRule: typeof StartAgentsRequestNS.Properties.FillerWords.Content.StaticConfig.SelectionRule =
4141
StartAgentsRequestNS.Properties.FillerWords.Content.StaticConfig.SelectionRule;
4242

43+
/** Filler word content mode: `static` | `generated`. */
44+
export const FillerWordsContentModeValues: typeof StartAgentsRequestNS.Properties.FillerWords.Content.Mode =
45+
StartAgentsRequestNS.Properties.FillerWords.Content.Mode;
46+
4347
/**
4448
* Turn detection type (deprecated; use `TurnDetectionNestedConfig.EndOfSpeech` instead).
4549
* - `AgoraVad`: Agora VAD
@@ -109,6 +113,10 @@ export const ThinkOnListeningActionInterrupt: AgentThinkRequestNS.OnListeningAct
109113
export const ThinkOnListeningActionIgnore: AgentThinkRequestNS.OnListeningAction =
110114
AgentThinkRequestNS.OnListeningAction.Ignore;
111115

116+
/** Queue the think instruction until the current listening turn completes. */
117+
export const ThinkOnListeningActionAppend: AgentThinkRequestNS.OnListeningAction =
118+
AgentThinkRequestNS.OnListeningAction.Append;
119+
112120
/** Think action when the agent is thinking: interrupt and start a new turn. */
113121
export const ThinkOnThinkingActionInterrupt: AgentThinkRequestNS.OnThinkingAction =
114122
AgentThinkRequestNS.OnThinkingAction.Interrupt;
@@ -117,10 +125,18 @@ export const ThinkOnThinkingActionInterrupt: AgentThinkRequestNS.OnThinkingActio
117125
export const ThinkOnThinkingActionIgnore: AgentThinkRequestNS.OnThinkingAction =
118126
AgentThinkRequestNS.OnThinkingAction.Ignore;
119127

128+
/** Queue the think instruction until the current LLM turn completes. */
129+
export const ThinkOnThinkingActionAppend: AgentThinkRequestNS.OnThinkingAction =
130+
AgentThinkRequestNS.OnThinkingAction.Append;
131+
120132
/** Think action when the agent is speaking: interrupt and start a new turn. */
121133
export const ThinkOnSpeakingActionInterrupt: AgentThinkRequestNS.OnSpeakingAction =
122134
AgentThinkRequestNS.OnSpeakingAction.Interrupt;
123135

124136
/** Think action when the agent is speaking: ignore the request. */
125137
export const ThinkOnSpeakingActionIgnore: AgentThinkRequestNS.OnSpeakingAction =
126138
AgentThinkRequestNS.OnSpeakingAction.Ignore;
139+
140+
/** Queue the think instruction until the current TTS playback completes. */
141+
export const ThinkOnSpeakingActionAppend: AgentThinkRequestNS.OnSpeakingAction =
142+
AgentThinkRequestNS.OnSpeakingAction.Append;

src/agentkit/index.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export {
6060
CredentialMode,
6161
DataChannel,
6262
FillerWordsSelectionRule,
63+
FillerWordsContentModeValues,
6364
Geofence,
6465
InterruptionDisabledStrategy,
6566
InterruptionDisabledStrategyAppend,
@@ -78,11 +79,14 @@ export {
7879
SpeakPriorityInterrupt,
7980
SpeakPriorityValues,
8081
ThinkOnListeningActionIgnore,
82+
ThinkOnListeningActionAppend,
8183
ThinkOnListeningActionInject,
8284
ThinkOnListeningActionInterrupt,
8385
ThinkOnSpeakingActionIgnore,
86+
ThinkOnSpeakingActionAppend,
8487
ThinkOnSpeakingActionInterrupt,
8588
ThinkOnThinkingActionIgnore,
89+
ThinkOnThinkingActionAppend,
8690
ThinkOnThinkingActionInterrupt,
8791
TurnDetectionTypeValues,
8892
} from "./constants.js";
@@ -158,6 +162,9 @@ export type {
158162
FillerWordsContent,
159163
FillerWordsContentSelectionRule,
160164
FillerWordsContentStaticConfig,
165+
FillerWordsContentGeneratedConfig,
166+
FillerWordsContentGeneratedLlmProvider,
167+
FillerWordsContentMode,
161168
FillerWordsTrigger,
162169
FillerWordsTriggerFixedTimeConfig,
163170
FishAudioTts,
@@ -180,6 +187,10 @@ export type {
180187
Labels,
181188
// Core configuration types
182189
LlmConfig,
190+
LlmTool,
191+
LlmToolExecution,
192+
LlmToolFunction,
193+
LlmToolServer,
183194
LlmGreetingConfigs,
184195
LlmGreetingConfigsMode,
185196
LlmStyle,
@@ -229,6 +240,7 @@ export type {
229240
StartOfSpeechMode,
230241
StartOfSpeechVadConfig,
231242
SttConfig,
243+
GeminiAsrParams,
232244
ThinkOnListeningAction,
233245
ThinkOnSpeakingAction,
234246
ThinkOnThinkingAction,
@@ -357,6 +369,7 @@ export type {
357369
AzureOpenAIRealtimeParams,
358370
GeminiLiveOptions,
359371
OpenAIRealtimeOptions,
372+
OpenAIGptLiveOptions,
360373
QwenOmniOptions,
361374
VertexAIOptions,
362375
XaiGrokOptions,
@@ -366,6 +379,7 @@ export {
366379
AzureOpenAIRealtime,
367380
GeminiLive,
368381
OpenAIRealtime,
382+
OpenAIGptLive,
369383
QwenOmni,
370384
VertexAI,
371385
XaiGrok,
@@ -375,6 +389,7 @@ export type {
375389
AresSTTOptions,
376390
AssemblyAISTTOptions,
377391
DeepgramSTTOptions,
392+
GeminiSTTOptions,
378393
GoogleSTTOptions,
379394
MicrosoftSTTOptions,
380395
OpenAISTTOptions,
@@ -388,6 +403,7 @@ export {
388403
AresSTT,
389404
AssemblyAISTT,
390405
DeepgramSTT,
406+
GeminiSTT,
391407
GoogleSTT,
392408
MicrosoftSTT,
393409
OpenAISTT,

0 commit comments

Comments
 (0)