Skip to main content

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 IDBest For
nova-2General transcription (default when the model ID is empty)
nova-2-phonecallPhone audio
nova-2-meetingMeetings
enhancedGeneral-purpose transcription
baseCost-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.

See Also​