feat(transcribe): the gateway sends language=sv, omits it for auto, and refuses anything else (#61)
The request used to hard-code language=sv for every upload, so a recording in another language was decoded as Swedish. The language now comes from the context; no language in the context is still sv. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -71,9 +71,20 @@ func (g *Gateway) Transcribe(ctx context.Context, path string) (domain.Transcrip
|
||||
return domain.Transcription{}, fmt.Errorf("transcribe: stat audio: %w", err)
|
||||
}
|
||||
|
||||
// The language is one request field and a closed set: sv is sent, auto sends nothing so
|
||||
// the engine detects it, and anything else never leaves this process (tapir#61).
|
||||
fields := [][2]string{{"model", g.model}, {"response_format", "verbose_json"}}
|
||||
switch lang := domain.LanguageFrom(ctx); lang {
|
||||
case domain.LangSwedish:
|
||||
fields = append(fields, [2]string{"language", string(lang)})
|
||||
case domain.LangAuto:
|
||||
default:
|
||||
return domain.Transcription{}, fmt.Errorf("transcribe: language %q is not one tapir sends", lang)
|
||||
}
|
||||
|
||||
var prefix bytes.Buffer
|
||||
mw := multipart.NewWriter(&prefix)
|
||||
for _, kv := range [][2]string{{"model", g.model}, {"response_format", "verbose_json"}, {"language", "sv"}} {
|
||||
for _, kv := range fields {
|
||||
if err := mw.WriteField(kv[0], kv[1]); err != nil {
|
||||
return domain.Transcription{}, fmt.Errorf("transcribe: build request: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user