summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-01 12:51:04 +0300
committerPaul Buetow <paul@buetow.org>2026-04-01 12:51:04 +0300
commita574e5290261f9ea2cc39fd0a9a2ba756fc1f67a (patch)
treef8ac396d322c2356b43d2ed9ead0898eb9fff7ec /internal
parenta61af67138c42762f905b75c4c660167e04bbd7b (diff)
z4: anchor genai dependency
Diffstat (limited to 'internal')
-rw-r--r--internal/image/nanobanana.go32
-rw-r--r--internal/image/nanobanana_test.go26
2 files changed, 58 insertions, 0 deletions
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)
+ }
+}