Release Notes: v0.7.0¶
Release Date: 2026-06-15
Highlights¶
- Realtime Voice-to-Voice: Native voice-to-voice pipeline with ~100-200ms latency
- Dual Pipeline Modes: Choose between "text" (STT→LLM→TTS) or "realtime" (voice-to-voice)
- LLM Provider Injection: Optional
LLMClientconfig field for injecting thick providers
New Features¶
Realtime Voice Pipeline¶
The voice gateway now supports native voice-to-voice mode using OpenAI Realtime API or Gemini Live:
import (
"github.com/plexusone/omni-twilio/omnivoice/gateway"
coregateway "github.com/plexusone/omnivoice-core/gateway"
openaiRealtime "github.com/plexusone/omni-openai/omnivoice/realtime"
)
gw, err := gateway.New(gateway.Config{
AccountSID: os.Getenv("TWILIO_ACCOUNT_SID"),
AuthToken: os.Getenv("TWILIO_AUTH_TOKEN"),
PhoneNumber: "+15551234567",
PublicURL: "https://your-server.com",
ListenAddr: ":8080",
// Enable realtime mode
Mode: coregateway.PipelineModeRealtime,
// Configure realtime provider
RealtimeProvider: openaiRealtime.NewFactory(),
RealtimeConfig: &coregateway.RealtimeConfig{
Provider: "openai",
APIKey: os.Getenv("OPENAI_API_KEY"),
Model: "gpt-4o-realtime-preview-2024-12-17",
Voice: "alloy",
Instructions: "You are a helpful voice assistant.",
},
})
Pipeline Modes¶
| Mode | Latency | Description |
|---|---|---|
text |
500-1000ms | Traditional STT → LLM → TTS pipeline |
realtime |
100-200ms | Native voice-to-voice via OpenAI Realtime or Gemini Live |
Realtime Providers¶
| Provider | Latency | Model |
|---|---|---|
| OpenAI Realtime | ~100ms | gpt-4o-realtime-preview |
| Gemini Live | ~200ms | gemini-2.0-flash-live |
LLM Provider Injection¶
The gateway now supports injecting an LLM provider directly via config, allowing applications to use thick providers (official SDKs) from omnillm:
import (
"github.com/plexusone/omni-twilio/omnivoice/gateway"
"github.com/plexusone/omnillm"
)
// Create omnillm client with thick providers
llmClient, _ := omnillm.NewClient(omnillm.ClientConfig{
Providers: []omnillm.ProviderConfig{
{Provider: omnillm.ProviderNameAnthropic, APIKey: os.Getenv("ANTHROPIC_API_KEY")},
},
})
// Inject into gateway
gw, err := gateway.New(gateway.Config{
// ... other config ...
LLMClient: llmClient.Provider(), // Inject thick provider
})
If LLMClient is not provided, the gateway uses omnillm-core's thin providers (native HTTP).
New Config Fields¶
| Field | Type | Description |
|---|---|---|
Mode |
PipelineMode |
Pipeline mode: "text" or "realtime" |
RealtimeProvider |
RealtimeProviderFactory |
Factory for creating realtime providers |
RealtimeConfig |
*RealtimeConfig |
Configuration for realtime sessions |
LLMClient |
provider.Provider |
Optional pre-configured LLM provider |
Installation¶
Migration Guide¶
From v0.6.0¶
No breaking changes. Existing code using text mode continues to work unchanged.
To enable realtime mode:
- Add realtime provider import:
- Set
Modeand realtime configuration:
cfg := gateway.Config{
// ... existing config ...
Mode: coregateway.PipelineModeRealtime,
RealtimeProvider: openaiRealtime.NewFactory(),
RealtimeConfig: &coregateway.RealtimeConfig{...},
}
Changed¶
- Replaced
omnillmdependency withomnillm-corefor minimal dependencies - LLM provider creation now uses omnillm-core registry (thin providers) by default
- Applications can inject thick providers via the new
LLMClientconfig field
Dependencies¶
- Updated
github.com/plexusone/omnivoice-corefrom v0.11.0 to v0.13.0 - Replaced
github.com/plexusone/omnillmwithgithub.com/plexusone/omnillm-corev0.17.0 - Removed transitive dependencies: omni-anthropic, omni-aws, omni-google, omni-openai
Full Changelog¶
See CHANGELOG.md for the complete list of changes.