Skip to content

Release Notes: v0.10.0

Release Date: 2026-06-15

Highlights

  • Unified Registry: Single source of truth via delegation to omnivoice-core
  • Gateway Provider Registry: Full-duplex voice gateway support for telephony
  • Simplified Provider Names: "openai" and "gemini" replace "openai-realtime" and "gemini-live"

Breaking Changes

Provider Name Changes

Provider names have been simplified for consistency:

Old Name New Name
openai-realtime openai
gemini-live gemini

Migration:

// Before (v0.9.x)
rt, _ := omnivoice.GetRealtimeProvider("openai-realtime", ...)
rt, _ := omnivoice.GetRealtimeProvider("gemini-live", ...)

// After (v0.10.0)
rt, _ := omnivoice.GetRealtimeProvider("openai", ...)
rt, _ := omnivoice.GetRealtimeProvider("gemini", ...)

New Features

Gateway Provider Registry

Voice gateway providers for full-duplex telephony are now available via the registry:

import (
    "github.com/plexusone/omnivoice"
    _ "github.com/plexusone/omnivoice/providers/all"
)

// Get Twilio gateway
gw, err := omnivoice.GetGatewayProvider("twilio",
    omnivoice.WithAccountSID(accountSID),
    omnivoice.WithAuthToken(authToken),
    omnivoice.WithPublicURL("https://your-server.com"),
    omnivoice.WithListenAddr(":8080"))

// Get Telnyx gateway
gw, err := omnivoice.GetGatewayProvider("telnyx",
    omnivoice.WithAPIKey(apiKey),
    omnivoice.WithConnectionID(connectionID),
    omnivoice.WithPublicURL("https://your-server.com"))

// List registered gateways
fmt.Println(omnivoice.ListGatewayProviders()) // [twilio telnyx]

Gateway Registry Functions

Function Description
RegisterGatewayProvider Register a gateway factory
GetGatewayProvider Create gateway by name
ListGatewayProviders List registered gateways
HasGatewayProvider Check if gateway exists
GetGatewayProviderPriority Get gateway priority

Gateway Type Aliases

New types re-exported from omnivoice-core:

Type Description
Gateway Full gateway interface
GatewayMinimal Minimal gateway interface for registry
GatewayConfig Gateway configuration
GatewaySession Active voice session
RealtimeConfig Configuration for realtime mode
PipelineConfig Configuration for pipeline mode

Pipeline Mode Constants

Constant Description
PipelineModeText Traditional STT->LLM->TTS pipeline
PipelineModeRealtime Native voice-to-voice mode

Architecture Changes

Unified Registry

The omnivoice package now delegates all registry operations to omnivoice-core:

omnivoice-core           ← Core interfaces + global registry
provider packages        ← Implement interfaces, register via init()
omnivoice               ← Imports all providers, delegates to core registry

Benefits:

  • Single source of truth for provider registration
  • Provider packages register with omnivoice-core, not omnivoice
  • Both packages share the same registry state
  • Consistent priority-based registration

Auto-Registration for Realtime/Gateway

Realtime and Gateway providers now use side-effect imports for automatic registration:

// In providers/all/all.go
import (
    // Auto-register via init()
    _ "github.com/plexusone/omni-google/omnivoice/realtime"
    _ "github.com/plexusone/omni-openai/omnivoice/realtime"
    _ "github.com/plexusone/omni-telnyx/omnivoice/gateway"
    _ "github.com/plexusone/omni-twilio/omnivoice/gateway"
)

Dependencies

Package Change
omnivoice-core v0.13.0 -> v0.14.0 (unified registry)
omni-openai v0.4.0 -> v0.4.1 (registry support)
omni-google v0.5.0 -> v0.6.0 (registry support)
omni-twilio v0.7.0 -> v0.8.0 (gateway registry)
omni-telnyx v0.3.0 -> v0.4.0 (gateway registry)

Installation

go get github.com/plexusone/omnivoice@v0.10.0

Migration Guide

From v0.9.x

  1. Update provider names (breaking change):
  2. "openai-realtime""openai"
  3. "gemini-live""gemini"

  4. Gateway support (new feature):

  5. Use GetGatewayProvider() for telephony gateways
  6. Import gateway types from omnivoice

Quick Start

package main

import (
    "context"
    "os"

    "github.com/plexusone/omnivoice"
    _ "github.com/plexusone/omnivoice/providers/all"
)

func main() {
    ctx := context.Background()

    // Native voice-to-voice (Realtime)
    rt, _ := omnivoice.GetRealtimeProvider("openai",
        omnivoice.WithAPIKey(os.Getenv("OPENAI_API_KEY")))

    // Full-duplex telephony (Gateway)
    gw, _ := omnivoice.GetGatewayProvider("twilio",
        omnivoice.WithAccountSID(os.Getenv("TWILIO_ACCOUNT_SID")),
        omnivoice.WithAuthToken(os.Getenv("TWILIO_AUTH_TOKEN")),
        omnivoice.WithPublicURL("https://your-server.com"),
        omnivoice.WithListenAddr(":8080"))

    // Use providers...
    _ = rt
    _ = gw
}

Full Changelog

See CHANGELOG.md for the complete list of changes.