Deepgram Provider
Deepgram provides speech-to-text transcription models. The current Go provider
implements the shared provider.TranscriptionModel interface and is used
through ai.Transcribe.
Setup
import (
"context"
"fmt"
"log"
"os"
"github.com/digitallysavvy/go-ai/pkg/ai"
"github.com/digitallysavvy/go-ai/pkg/providers/deepgram"
)
provider := deepgram.New(deepgram.Config{
APIKey: os.Getenv("DEEPGRAM_API_KEY"),
})
model, err := provider.TranscriptionModel("nova-2")
if err != nil {
log.Fatal(err)
}
Transcribe Audio
audioData, err := os.ReadFile("recording.mp3")
if err != nil {
log.Fatal(err)
}
result, err := ai.Transcribe(context.Background(), ai.TranscribeOptions{
Model: model,
Audio: audioData,
MimeType: "audio/mpeg",
ProviderOptions: map[string]interface{}{
"deepgram": map[string]interface{}{
"language": "en",
},
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Text)
Timestamps
Use Deepgram provider options to request word timing data. The high-level
ai.Transcribe result exposes normalized segment fields.
result, err := ai.Transcribe(context.Background(), ai.TranscribeOptions{
Model: model,
Audio: audioData,
MimeType: "audio/mpeg",
ProviderOptions: map[string]interface{}{
"deepgram": map[string]interface{}{
"utterances": true,
},
},
})
if err != nil {
log.Fatal(err)
}
for _, segment := range result.Segments {
fmt.Printf("[%.2f-%.2f] %s\n", segment.StartSecond, segment.EndSecond, segment.Text)
}
Models
Common Deepgram model IDs include:
| Model ID | Best For |
|---|---|
nova-2 | General transcription (default when the model ID is empty) |
nova-2-phonecall | Phone audio |
nova-2-meeting | Meetings |
enhanced | General-purpose transcription |
base | Cost-sensitive use cases |
Speech Synthesis
Deepgram also exposes Aura text-to-speech through provider.SpeechModel(modelID):
speechModel, err := provider.SpeechModel("aura-2-thalia-en")
if err != nil {
log.Fatal(err)
}
result, err := ai.GenerateSpeech(ctx, ai.GenerateSpeechOptions{
Model: speechModel,
Text: "Hello from Deepgram.",
})
Deepgram does not support reranking — provider.RerankingModel returns an
error.
Array Query Options
Deepgram provider options that take a list (e.g. keywords) are sent as
comma-joined query values, matching the Deepgram REST API's expected query
string format.
DEEPGRAM_API_KEY is read automatically when no API key is passed to
Config.
Workflow Serialization
Deepgram speech and transcription models can cross a workflow boundary
with provider.SerializeSpeechModel / DeserializeSpeechModel and
provider.SerializeTranscriptionModel / DeserializeTranscriptionModel. See
Provider Serialization
for the mechanism.