diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-01 20:14:03 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-01 20:14:03 +0300 |
| commit | 4727a188102d8166e4acabc4fd62863245e6cdce (patch) | |
| tree | 1e9edac79d1fb348dee86f43974ed729e03f9173 /internal/cli | |
| parent | 3ed1c1ba41709c0de75512643c50b064f7dce650 (diff) | |
z8: preserve Nano Banana CLI precedence
Diffstat (limited to 'internal/cli')
| -rw-r--r-- | internal/cli/command.go | 7 | ||||
| -rw-r--r-- | internal/cli/command_test.go | 28 | ||||
| -rw-r--r-- | internal/cli/flags.go | 4 | ||||
| -rw-r--r-- | internal/cli/flags_test.go | 4 |
4 files changed, 42 insertions, 1 deletions
diff --git a/internal/cli/command.go b/internal/cli/command.go index 924740e..327c869 100644 --- a/internal/cli/command.go +++ b/internal/cli/command.go @@ -91,6 +91,13 @@ func setupFlags(cmd *cobra.Command, flags *Flags) { } } +// MarkExplicitFlagValues records which CLI flags were explicitly set by the user. +func MarkExplicitFlagValues(cmd *cobra.Command, flags *Flags) { + flags.ImageAPISpecified = cmd.Flags().Changed("image-api") + flags.NanoBananaModelSpecified = cmd.Flags().Changed("nanobanana-model") + flags.NanoBananaTextModelSpecified = cmd.Flags().Changed("nanobanana-text-model") +} + func bindFlagsToViper(cmd *cobra.Command) error { bindings := map[string]string{ "audio.format": "format", diff --git a/internal/cli/command_test.go b/internal/cli/command_test.go index 67ef6c4..37e2533 100644 --- a/internal/cli/command_test.go +++ b/internal/cli/command_test.go @@ -435,3 +435,31 @@ func TestBindFlagsToViper(t *testing.T) { t.Errorf("Expected image.provider to be openai by default, got %s", viper.GetString("image.provider")) } } + +func TestMarkExplicitFlagValues(t *testing.T) { + flags := NewFlags() + cmd := &cobra.Command{} + setupFlags(cmd, flags) + + if err := cmd.Flags().Set("image-api", "nanobanana"); err != nil { + t.Fatalf("Failed to set image-api flag: %v", err) + } + if err := cmd.Flags().Set("nanobanana-model", defaultNanoBananaModel); err != nil { + t.Fatalf("Failed to set nanobanana-model flag: %v", err) + } + if err := cmd.Flags().Set("nanobanana-text-model", defaultNanoBananaTextModel); err != nil { + t.Fatalf("Failed to set nanobanana-text-model flag: %v", err) + } + + MarkExplicitFlagValues(cmd, flags) + + if !flags.ImageAPISpecified { + t.Error("Expected ImageAPISpecified to be true") + } + if !flags.NanoBananaModelSpecified { + t.Error("Expected NanoBananaModelSpecified to be true") + } + if !flags.NanoBananaTextModelSpecified { + t.Error("Expected NanoBananaTextModelSpecified to be true") + } +} diff --git a/internal/cli/flags.go b/internal/cli/flags.go index 1e18766..5fcab40 100644 --- a/internal/cli/flags.go +++ b/internal/cli/flags.go @@ -38,8 +38,12 @@ type Flags struct { // NanoBananaModel is the Gemini image model used for Nano Banana generation. NanoBananaModel string + // NanoBananaModelSpecified records whether the Nano Banana image model was explicitly set on the CLI. + NanoBananaModelSpecified bool // NanoBananaTextModel is the Gemini text model used for Nano Banana prompt generation. NanoBananaTextModel string + // NanoBananaTextModelSpecified records whether the Nano Banana text model was explicitly set on the CLI. + NanoBananaTextModelSpecified bool } // NewFlags creates a new Flags instance with default values diff --git a/internal/cli/flags_test.go b/internal/cli/flags_test.go index 2a63d8d..7ab6425 100644 --- a/internal/cli/flags_test.go +++ b/internal/cli/flags_test.go @@ -17,6 +17,8 @@ func TestNewFlags(t *testing.T) { {"AudioFormat", flags.AudioFormat, "mp3"}, {"ImageAPI", flags.ImageAPI, "openai"}, {"ImageAPISpecified", flags.ImageAPISpecified, false}, + {"NanoBananaModelSpecified", flags.NanoBananaModelSpecified, false}, + {"NanoBananaTextModelSpecified", flags.NanoBananaTextModelSpecified, false}, {"DeckName", flags.DeckName, "Bulgarian Vocabulary"}, {"OpenAIModel", flags.OpenAIModel, "gpt-4o-mini-tts"}, {"OpenAISpeed", flags.OpenAISpeed, 0.9}, @@ -90,7 +92,7 @@ func TestFlagsStructure(t *testing.T) { "ListModels", "AllVoices", "NoAutoPlay", "OpenAIModel", "OpenAIVoice", "OpenAISpeed", "OpenAIInstruction", "OpenAIImageModel", "OpenAIImageSize", "OpenAIImageQuality", "OpenAIImageStyle", - "NanoBananaModel", "NanoBananaTextModel", + "NanoBananaModel", "NanoBananaModelSpecified", "NanoBananaTextModel", "NanoBananaTextModelSpecified", } for _, fieldName := range expectedFields { |
