Gladia Provider
Gladia provides speech-to-text transcription. 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/gladia"
)
provider := gladia.New(gladia.Config{
APIKey: os.Getenv("GLADIA_API_KEY"),
})
model, err := provider.TranscriptionModel("")
if err != nil {
log.Fatal(err)
}
Gladia has a single transcription model, not a selectable catalog — the model ID argument is kept for interface parity with other providers but is not sent in the request; pass an empty string.
Transcribe Audio
audioData, err := os.ReadFile("meeting.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{}{
"gladia": map[string]interface{}{
"language": "en",
},
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Text)
if result.DurationInSeconds != nil {
fmt.Printf("Duration: %.2f seconds\n", *result.DurationInSeconds)
}
Timestamps
result, err := ai.Transcribe(context.Background(), ai.TranscribeOptions{
Model: model,
Audio: audioData,
MimeType: "audio/mpeg",
ProviderOptions: map[string]interface{}{
"gladia": map[string]interface{}{
"detectLanguage": true,
},
},
})
if err != nil {
log.Fatal(err)
}
for _, segment := range result.Segments {
fmt.Printf("[%.2f-%.2f] %s\n", segment.StartSecond, segment.EndSecond, segment.Text)
}
Workflow Serialization
Gladia transcription models can cross a workflow boundary with
provider.SerializeTranscriptionModel / DeserializeTranscriptionModel. See
Provider Serialization
for the mechanism.