diff --git a/internal/adapters/transcribe/live_test.go b/internal/adapters/transcribe/live_test.go new file mode 100644 index 0000000..fc48bab --- /dev/null +++ b/internal/adapters/transcribe/live_test.go @@ -0,0 +1,49 @@ +package transcribe_test + +import ( + "context" + "net/http" + "os" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "git.d-ma.be/mathias/tapir/internal/adapters/transcribe" +) + +// TestGateway_LiveGateway is an opt-in check against the REAL gateway, because +// the httptest fake above can only prove what we think the gateway accepts. It +// is skipped unless TAPIR_LIVE_WAV names a 16 kHz mono WAV and the gateway +// coordinates are set: +// +// TAPIR_LIVE_WAV=/path/a.wav TAPIR_LIVE_GATEWAY_URL=http://koala:30401/v1 \ +// TAPIR_LIVE_MODEL=iguana/kb-whisper op run --env-file ~/.op-env -- \ +// go test ./internal/adapters/transcribe -run LiveGateway -v +// +// Use SYNTHETIC audio only: this repo is public and the gateway may be a cloud +// endpoint (#33). +func TestGateway_LiveGateway(t *testing.T) { + wav := os.Getenv("TAPIR_LIVE_WAV") + url := os.Getenv("TAPIR_LIVE_GATEWAY_URL") + if wav == "" || url == "" { + t.Skip("set TAPIR_LIVE_WAV and TAPIR_LIVE_GATEWAY_URL to run against the real gateway") + } + model := os.Getenv("TAPIR_LIVE_MODEL") + if model == "" { + model = "iguana/kb-whisper" + } + key := os.Getenv("LITELLM_MASTER_KEY") + require.NotEmpty(t, key, "LITELLM_MASTER_KEY must be set (via op run)") + + ctx, cancel := context.WithTimeout(context.Background(), 25*time.Minute) + defer cancel() + got, err := transcribe.NewGateway(url, key, model, &http.Client{}).Transcribe(ctx, wav) + + require.NoError(t, err) + assert.NotEmpty(t, got.Text) + assert.NotEmpty(t, got.Segments) + assert.Equal(t, model, got.Endpoint) + t.Logf("endpoint=%s audio_s=%.1f segments=%d chars=%d", got.Endpoint, got.AudioSeconds, len(got.Segments), len(got.Text)) +}