Skip to content

plexusone/omni-openai

Repository files navigation

Omni-OpenAI

Go CI Go Lint Go SAST Go Report Card Docs Visualization License

OpenAI provider adapters for the omni-* ecosystem, wrapping the official openai-go SDK.

Features

  • OmniLLM: Chat completions provider with streaming, tool calling, and vision support
  • OmniVoice STT: Whisper transcription with word and segment timestamps
  • OmniVoice TTS: OpenAI audio synthesis with multiple voices

Installation

go get github.com/plexusone/omni-openai

Usage

OmniLLM Provider

package main

import (
    "context"
    "log"
    "os"

    core "github.com/plexusone/omnillm-core"
    _ "github.com/plexusone/omni-openai/omnillm" // Auto-registers provider
)

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

    // Create provider via registry
    provider, err := core.NewProvider("openai", core.ProviderConfig{
        APIKey: os.Getenv("OPENAI_API_KEY"),
    })
    if err != nil {
        log.Fatal(err)
    }
    defer provider.Close()

    resp, err := provider.CreateChatCompletion(ctx, &core.ChatCompletionRequest{
        Model: "gpt-4o",
        Messages: []core.Message{
            {Role: core.RoleUser, Content: "Hello!"},
        },
    })
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Response: %s", resp.Choices[0].Message.Content)
}

OmniVoice STT Provider

package main

import (
    "context"
    "log"

    "github.com/plexusone/omnivoice-core/stt"
    "github.com/plexusone/omni-openai/omnivoice"
)

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

    // Create STT provider
    provider, err := omnivoice.NewSTTProviderFromEnv()
    if err != nil {
        log.Fatal(err)
    }

    result, err := provider.Transcribe(ctx, audioData, stt.TranscriptionConfig{
        Encoding: "mp3",
    })
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Transcription: %s", result.Text)
}

OmniVoice TTS Provider

package main

import (
    "context"
    "log"

    "github.com/plexusone/omnivoice-core/tts"
    "github.com/plexusone/omni-openai/omnivoice"
)

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

    // Create TTS provider
    provider, err := omnivoice.NewTTSProviderFromEnv()
    if err != nil {
        log.Fatal(err)
    }

    result, err := provider.Synthesize(ctx, "Hello, world!", tts.SynthesisConfig{
        VoiceID: omnivoice.VoiceNova,
    })
    if err != nil {
        log.Fatal(err)
    }
    // result.Audio contains the MP3 audio data
}

Direct OpenAI Client Usage

package main

import (
    "context"
    "log"

    openai "github.com/plexusone/omni-openai"
)

func main() {
    client, err := openai.NewClientFromEnv()
    if err != nil {
        log.Fatal(err)
    }

    ctx := context.Background()

    // Transcribe audio
    resp, err := client.Transcribe(ctx, openai.TranscriptionRequest{
        Audio:    audioData,
        Filename: "audio.mp3",
    })
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Transcription: %s", resp.Text)

    // Synthesize speech
    ttsResp, err := client.Synthesize(ctx, openai.TTSRequest{
        Input: "Hello, world!",
        Voice: openai.VoiceAlloy,
    })
    if err != nil {
        log.Fatal(err)
    }
    // ttsResp.Audio contains the MP3 audio data
}

Configuration

Set the OPENAI_API_KEY environment variable or pass the API key directly:

client := openai.NewClient("your-api-key")

Available TTS Voices

Voice Description
alloy Neutral, balanced
ash Warm, engaging
ballad Melodic, expressive
coral Clear, articulate
echo Smooth, natural
fable Storytelling, dramatic
nova Bright, energetic
onyx Deep, resonant
sage Calm, wise
shimmer Light, cheerful
verse Poetic, rhythmic
marin Friendly, approachable
cedar Grounded, trustworthy

Package Structure

omni-openai/
├── openai.go           # Direct OpenAI client (STT/TTS)
├── omnillm/            # OmniLLM provider adapter
│   └── adapter.go
└── omnivoice/          # OmniVoice provider adapters
    ├── stt.go
    └── tts.go

License

MIT License - see LICENSE for details.

About

OpenAI audio provider for the OmniVoice voice pipeline framework.

Resources

License

Stars

Watchers

Forks

Contributors

Languages