From a574e5290261f9ea2cc39fd0a9a2ba756fc1f67a Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 1 Apr 2026 12:51:04 +0300 Subject: z4: anchor genai dependency --- internal/image/nanobanana.go | 32 ++++++++++++++++++++++++++++++++ internal/image/nanobanana_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 internal/image/nanobanana.go create mode 100644 internal/image/nanobanana_test.go (limited to 'internal') diff --git a/internal/image/nanobanana.go b/internal/image/nanobanana.go new file mode 100644 index 0000000..f65833f --- /dev/null +++ b/internal/image/nanobanana.go @@ -0,0 +1,32 @@ +package image + +import "google.golang.org/genai" + +const ( + // DefaultNanoBananaModel is the model name planned for Nano Banana image generation. + DefaultNanoBananaModel = "gemini-3.1-flash-image-preview" + + // DefaultNanoBananaTextModel is the text model planned for prompt and translation work. + DefaultNanoBananaTextModel = "gemini-2.5-flash" +) + +// NanoBananaConfig holds the settings needed to build a Gemini-backed image generator. +type NanoBananaConfig struct { + APIKey string + Model string + TextModel string +} + +// NewNanoBananaConfig returns a normalized Nano Banana configuration. +func NewNanoBananaConfig(apiKey string) *NanoBananaConfig { + return &NanoBananaConfig{ + APIKey: apiKey, + Model: DefaultNanoBananaModel, + TextModel: DefaultNanoBananaTextModel, + } +} + +// ClientConfig returns the Google GenAI client config for this provider. +func (c *NanoBananaConfig) ClientConfig() *genai.ClientConfig { + return &genai.ClientConfig{APIKey: c.APIKey} +} diff --git a/internal/image/nanobanana_test.go b/internal/image/nanobanana_test.go new file mode 100644 index 0000000..bde91a1 --- /dev/null +++ b/internal/image/nanobanana_test.go @@ -0,0 +1,26 @@ +package image + +import "testing" + +func TestNewNanoBananaConfig(t *testing.T) { + t.Parallel() + + cfg := NewNanoBananaConfig("test-key") + if cfg.APIKey != "test-key" { + t.Fatalf("expected API key to be preserved, got %q", cfg.APIKey) + } + if cfg.Model != DefaultNanoBananaModel { + t.Fatalf("expected default model %q, got %q", DefaultNanoBananaModel, cfg.Model) + } + if cfg.TextModel != DefaultNanoBananaTextModel { + t.Fatalf("expected default text model %q, got %q", DefaultNanoBananaTextModel, cfg.TextModel) + } + + clientCfg := cfg.ClientConfig() + if clientCfg == nil { + t.Fatal("expected client config") + } + if clientCfg.APIKey != "test-key" { + t.Fatalf("expected client config API key to be preserved, got %q", clientCfg.APIKey) + } +} -- cgit v1.2.3