OpenAI provider adapters for the omni-* ecosystem, wrapping the official openai-go SDK.
- 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
go get github.com/plexusone/omni-openaipackage 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)
}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)
}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
}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
}Set the OPENAI_API_KEY environment variable or pass the API key directly:
client := openai.NewClient("your-api-key")| 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 |
omni-openai/
├── openai.go # Direct OpenAI client (STT/TTS)
├── omnillm/ # OmniLLM provider adapter
│ └── adapter.go
└── omnivoice/ # OmniVoice provider adapters
├── stt.go
└── tts.go
MIT License - see LICENSE for details.