Skip to main content

AssemblyAI Provider

AssemblyAI 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/assemblyai"
)
provider := assemblyai.New(assemblyai.Config{
APIKey: os.Getenv("ASSEMBLYAI_API_KEY"),
})

model, err := provider.TranscriptionModel("best")
if err != nil {
log.Fatal(err)
}

Transcribe Audio​

Pass local audio bytes to ai.Transcribe; the AssemblyAI provider uploads the audio and polls until the transcript is complete.

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{}{
"assemblyai": map[string]interface{}{
"languageCode": "en",
},
},
})
if err != nil {
log.Fatal(err)
}

fmt.Println(result.Text)

You can also provide a URL and let the SDK download it before invoking the provider:

result, err := ai.Transcribe(context.Background(), ai.TranscribeOptions{
Model: model,
AudioURL: "https://example.com/recording.mp3",
ProviderOptions: map[string]interface{}{
"assemblyai": map[string]interface{}{
"languageCode": "en",
},
},
})

Timestamps​

AssemblyAI word timings are returned as normalized segments when available.

result, err := ai.Transcribe(context.Background(), ai.TranscribeOptions{
Model: model,
Audio: audioData,
MimeType: "audio/mpeg",
ProviderOptions: map[string]interface{}{
"assemblyai": map[string]interface{}{
"speakerLabels": 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​

Model IDBest For
bestHighest-accuracy transcription
nanoLower-latency transcription

Workflow Serialization​

AssemblyAI transcription models can cross a workflow boundary with provider.SerializeTranscriptionModel / DeserializeTranscriptionModel. See Provider Serialization for the mechanism.

See Also​