summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-02 08:59:38 +0300
committerPaul Buetow <paul@buetow.org>2026-04-02 08:59:38 +0300
commit7b26fefeae30c5e02d5848ae24405f9b2436decb (patch)
tree2ca4da8cbb14f7ce8db4e8693d5ce0ef0753a72d
parentc918ee3682f462daf0514738472b1977d37beaa9 (diff)
Fix processor audio metadata instruction gating
-rw-r--r--internal/audio/sidecar.go6
-rw-r--r--internal/audio/sidecar_test.go32
-rw-r--r--internal/processor/processor_test.go16
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 {