package image import ( "crypto/md5" "encoding/hex" "fmt" "strings" "time" ) func (c *GeminiProvider) generateImageID(word string) string { hash := md5.Sum([]byte(word)) return hex.EncodeToString(hash[:])[:8] } func (c *GeminiProvider) buildAttribution(result *SearchResult, prompt string) string { if result == nil { return "" } var attribution strings.Builder attribution.WriteString("Image generated by Google Gemini Nano Banana\n\n") fmt.Fprintf(&attribution, "Model: %s\n", c.modelName()) fmt.Fprintf(&attribution, "Text model: %s\n", c.textModelName()) aspectRatio := geminiAspectRatio if c != nil && c.config != nil && strings.TrimSpace(c.config.AspectRatio) != "" { aspectRatio = strings.TrimSpace(c.config.AspectRatio) } fmt.Fprintf(&attribution, "Aspect ratio: %s\n", aspectRatio) fmt.Fprintf(&attribution, "Size: %dx%d\n", result.Width, result.Height) if result.Description != "" { fmt.Fprintf(&attribution, "Result: %s\n", result.Description) } fmt.Fprintf(&attribution, "\nPrompt used:\n%s\n", prompt) fmt.Fprintf(&attribution, "\nGenerated at: %s\n", time.Now().Format("2006-01-02 15:04:05")) return attribution.String() }