diff --git a/components/model/gemini/README.md b/components/model/gemini/README.md index 91df5f43b..80e8c1d5d 100644 --- a/components/model/gemini/README.md +++ b/components/model/gemini/README.md @@ -678,6 +678,11 @@ func main() { cm, err := gemini.NewChatModel(ctx, &gemini.Config{ Client: client, Model: modelName, + // you can set the necessary parameters for image generation + ImageConfig: &genai.ImageConfig{ + AspectRatio: "16:9", + ImageSize: "1K", + }, ResponseModalities: []gemini.GeminiResponseModality{ gemini.GeminiResponseModalityText, gemini.GeminiResponseModalityImage, diff --git a/components/model/gemini/README_zh.md b/components/model/gemini/README_zh.md index d89f88142..a55f9a17e 100644 --- a/components/model/gemini/README_zh.md +++ b/components/model/gemini/README_zh.md @@ -678,6 +678,11 @@ func main() { cm, err := gemini.NewChatModel(ctx, &gemini.Config{ Client: client, Model: modelName, + // you can set the necessary parameters for image generation + ImageConfig: &genai.ImageConfig{ + AspectRatio: "16:9", + ImageSize: "1K", + }, ResponseModalities: []gemini.GeminiResponseModality{ gemini.GeminiResponseModalityText, gemini.GeminiResponseModalityImage, diff --git a/components/model/gemini/examples/image_generate/image_generate.go b/components/model/gemini/examples/image_generate/image_generate.go index 2599ab54c..74f73583e 100644 --- a/components/model/gemini/examples/image_generate/image_generate.go +++ b/components/model/gemini/examples/image_generate/image_generate.go @@ -43,6 +43,11 @@ func main() { cm, err := gemini.NewChatModel(ctx, &gemini.Config{ Client: client, Model: modelName, + // you can set the necessary parameters for image generation + ImageConfig: &genai.ImageConfig{ + AspectRatio: "16:9", + ImageSize: "1K", + }, ResponseModalities: []gemini.GeminiResponseModality{ gemini.GeminiResponseModalityText, gemini.GeminiResponseModalityImage, diff --git a/components/model/gemini/gemini.go b/components/model/gemini/gemini.go index 362fe84a4..71c0b1ae6 100644 --- a/components/model/gemini/gemini.go +++ b/components/model/gemini/gemini.go @@ -73,6 +73,7 @@ func NewChatModel(_ context.Context, cfg *Config) (*ChatModel, error) { enableGoogleMaps: cfg.EnableGoogleMaps, safetySettings: cfg.SafetySettings, thinkingConfig: cfg.ThinkingConfig, + imageConfig: cfg.ImageConfig, responseModalities: cfg.ResponseModalities, mediaResolution: cfg.MediaResolution, cache: cfg.Cache, @@ -130,6 +131,11 @@ type Config struct { ThinkingConfig *genai.ThinkingConfig + // ImageConfig is the image generation configuration. + // Note: an error will be returned if this field is set for a model that does not support the configuration options. + // Optional. + ImageConfig *genai.ImageConfig + // ResponseModalities specifies the modalities the model can return. // Optional. ResponseModalities []GeminiResponseModality @@ -170,6 +176,7 @@ type ChatModel struct { enableGoogleMaps *genai.GoogleMaps safetySettings []*genai.SafetySetting thinkingConfig *genai.ThinkingConfig + imageConfig *genai.ImageConfig responseModalities []GeminiResponseModality mediaResolution genai.MediaResolution cache *CacheConfig @@ -455,6 +462,7 @@ func (cm *ChatModel) genInputAndConf(input []*schema.Message, opts ...model.Opti TopK: cm.topK, ResponseJSONSchema: cm.responseJSONSchema, ResponseModalities: cm.responseModalities, + ImageConfig: cm.imageConfig, }, opts...) conf := &model.Config{} @@ -570,6 +578,10 @@ func (cm *ChatModel) genInputAndConf(input []*schema.Message, opts ...model.Opti m.ThinkingConfig = geminiOptions.ThinkingConfig } + if geminiOptions.ImageConfig != nil { + m.ImageConfig = geminiOptions.ImageConfig + } + if len(geminiOptions.CachedContentName) > 0 { m.CachedContent = geminiOptions.CachedContentName // remove system instruction and tools when using cached content @@ -577,6 +589,7 @@ func (cm *ChatModel) genInputAndConf(input []*schema.Message, opts ...model.Opti m.Tools = nil m.ToolConfig = nil } + return conf.Model, nInput, m, conf, nil } diff --git a/components/model/gemini/option.go b/components/model/gemini/option.go index 69fdb5259..0ffed7e71 100644 --- a/components/model/gemini/option.go +++ b/components/model/gemini/option.go @@ -28,8 +28,8 @@ type options struct { ResponseJSONSchema *jsonschema.Schema ThinkingConfig *genai.ThinkingConfig ResponseModalities []GeminiResponseModality - - CachedContentName string + ImageConfig *genai.ImageConfig + CachedContentName string } func WithTopK(k int32) model.Option { @@ -63,3 +63,12 @@ func WithCachedContentName(name string) model.Option { o.CachedContentName = name }) } + +// WithImageConfig sets the image generation configuration. +// Note: an error will be returned for a model that does not support the configuration options. +// Optional. +func WithImageConfig(cfg *genai.ImageConfig) model.Option { + return model.WrapImplSpecificOptFn(func(o *options) { + o.ImageConfig = cfg + }) +}