diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-02 08:59:38 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-02 08:59:38 +0300 |
| commit | 7b26fefeae30c5e02d5848ae24405f9b2436decb (patch) | |
| tree | 2ca4da8cbb14f7ce8db4e8693d5ce0ef0753a72d | |
| parent | c918ee3682f462daf0514738472b1977d37beaa9 (diff) | |
Fix processor audio metadata instruction gating
| -rw-r--r-- | internal/audio/sidecar.go | 6 | ||||
| -rw-r--r-- | internal/audio/sidecar_test.go | 32 | ||||
| -rw-r--r-- | internal/processor/processor_test.go | 16 |
3 files changed, 49 insertions, 5 deletions
diff --git a/internal/audio/sidecar.go b/internal/audio/sidecar.go index be9388b..554afc6 100644 --- a/internal/audio/sidecar.go +++ b/internal/audio/sidecar.go @@ -167,8 +167,10 @@ func BuildSidecarMetadata(params SidecarMetadataParams) string { speed = DefaultProviderConfig().OpenAISpeed } fmt.Fprintf(&b, "speed=%.2f\n", speed) - if instruction := strings.TrimSpace(params.OpenAIInstruction); instruction != "" { - fmt.Fprintf(&b, "instruction=%s\n", instruction) + if openAIModelUsesInstructions(model) { + if instruction := strings.TrimSpace(params.OpenAIInstruction); instruction != "" { + fmt.Fprintf(&b, "instruction=%s\n", instruction) + } } } diff --git a/internal/audio/sidecar_test.go b/internal/audio/sidecar_test.go index b832e1d..0c1a70b 100644 --- a/internal/audio/sidecar_test.go +++ b/internal/audio/sidecar_test.go @@ -113,9 +113,10 @@ func TestInstructionForProvider(t *testing.T) { func TestBuildSidecarMetadata(t *testing.T) { tests := []struct { - name string - got string - want []string + name string + got string + want []string + wantNot []string }{ { name: "gemini bg-bg", @@ -163,6 +164,26 @@ func TestBuildSidecarMetadata(t *testing.T) { "audio_file=audio.mp3", }, }, + { + name: "openai unsupported model omits instruction", + got: BuildSidecarMetadata(SidecarMetadataParams{ + Provider: "openai", + OutputFormat: "mp3", + CardType: "en-bg", + AudioFile: "audio.mp3", + OpenAIModel: "tts-1", + OpenAIInstruction: "Speak clearly.", + }), + want: []string{ + "provider=openai", + "model=tts-1", + "speed=1.00", + "format=mp3", + "cardtype=en-bg", + "audio_file=audio.mp3", + }, + wantNot: []string{"instruction=Speak clearly."}, + }, } for _, tt := range tests { @@ -172,6 +193,11 @@ func TestBuildSidecarMetadata(t *testing.T) { t.Fatalf("metadata = %q, missing %q", tt.got, want) } } + for _, want := range tt.wantNot { + if strings.Contains(tt.got, want) { + t.Fatalf("metadata = %q, unexpectedly contained %q", tt.got, want) + } + } }) } } diff --git a/internal/processor/processor_test.go b/internal/processor/processor_test.go index d6326f6..b746a84 100644 --- a/internal/processor/processor_test.go +++ b/internal/processor/processor_test.go @@ -922,6 +922,22 @@ func TestGenerateAudioOmitsOpenAIInstructionsForUnsupportedModel(t *testing.T) { t.Fatalf("captured OpenAIInstruction = %q, want %q", capturedConfig.OpenAIInstruction, "Speak clearly.") } + wordDir := p.findCardDirectory("ябълка!?") + if wordDir == "" { + t.Fatal("expected generated word directory") + } + metadataData, err := os.ReadFile(filepath.Join(wordDir, "audio_metadata.txt")) + if err != nil { + t.Fatalf("expected metadata file: %v", err) + } + metadata := string(metadataData) + if strings.Contains(metadata, "instruction=Speak clearly.") { + t.Fatalf("openai metadata unexpectedly recorded unsupported instructions: %q", metadata) + } + if !strings.Contains(metadata, "provider=openai") || !strings.Contains(metadata, "model=tts-1") { + t.Fatalf("openai metadata missing provider/model semantics: %q", metadata) + } + attrPath := audio.AttributionPath(fakeProvider.lastOutputFile) attributionData, err := os.ReadFile(attrPath) if err != nil { |
