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 ID | Best For |
|---|---|
best | Highest-accuracy transcription |
nano | Lower-latency transcription |
Workflow Serialization
AssemblyAI transcription models can cross a workflow boundary with
provider.SerializeTranscriptionModel / DeserializeTranscriptionModel. See
Provider Serialization
for the mechanism.