Skip to content

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 LLMClient config 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

go get github.com/plexusone/omni-twilio@v0.7.0

Migration Guide

From v0.6.0

No breaking changes. Existing code using text mode continues to work unchanged.

To enable realtime mode:

  1. Add realtime provider import:
import openaiRealtime "github.com/plexusone/omni-openai/omnivoice/realtime"
  1. Set Mode and realtime configuration:
cfg := gateway.Config{
    // ... existing config ...
    Mode:             coregateway.PipelineModeRealtime,
    RealtimeProvider: openaiRealtime.NewFactory(),
    RealtimeConfig:   &coregateway.RealtimeConfig{...},
}

Changed

  • Replaced omnillm dependency with omnillm-core for minimal dependencies
  • LLM provider creation now uses omnillm-core registry (thin providers) by default
  • Applications can inject thick providers via the new LLMClient config field

Dependencies

  • Updated github.com/plexusone/omnivoice-core from v0.11.0 to v0.13.0
  • Replaced github.com/plexusone/omnillm with github.com/plexusone/omnillm-core v0.17.0
  • Removed transitive dependencies: omni-anthropic, omni-aws, omni-google, omni-openai

Full Changelog

See CHANGELOG.md for the complete list of changes.