feat(gtm): upgrade to google-genai, fix image gen & frontend crash
This commit is contained in:
@@ -63,6 +63,8 @@ Das Projekt nutzt ein zentrales `helpers.py`, das von mehreren Services geteilt
|
||||
* **Fix (in `requirements.txt`):** Stellen Sie sicher, dass die f.r die App **unmittelbar** ben.tigten Bibliotheken vorhanden sind. F.r `gtm-architect` sind das:
|
||||
```text
|
||||
google-generativeai
|
||||
google-genai
|
||||
Pillow
|
||||
requests
|
||||
beautifulsoup4
|
||||
```
|
||||
@@ -377,6 +379,79 @@ def call_gemini_flash(prompt, system_instruction=None, temperature=0.3, json_mod
|
||||
|
||||
---
|
||||
|
||||
### A.5 Image Generation 2.0 (Hybrid Approach - Jan 04)
|
||||
|
||||
Um die Einschr.nkungen der "Text-only" Modelle und die regionale Verf.gbarkeit von Imagen 3 zu umgehen, nutzen wir einen hybriden Ansatz.
|
||||
|
||||
**1. Anforderungen**
|
||||
* **Bibliothek:** `google-genai` (v1.x) MUSS installiert sein (`pip install google-genai`). `google-generativeai` (v0.x) ist veraltet.
|
||||
* **Bildverarbeitung:** `Pillow` muss installiert sein (`pip install Pillow`).
|
||||
|
||||
**2. Die Logik (Text vs. Bild)**
|
||||
Das System entscheidet automatisch, welches Modell genutzt wird:
|
||||
|
||||
* **Szenario A: Generisches Bild (Text-to-Image)**
|
||||
* **Modell:** `imagen-4.0-generate-001` (oder `fast`/`ultra` Varianten).
|
||||
* **Warum:** Imagen ist spezialisiert auf Text-zu-Bild, aber Imagen 3.0 ist oft 404 (nicht verf.gbar). Imagen 4.0 ist der aktuelle Standard.
|
||||
* **Code:** `client.models.generate_images(...)`
|
||||
|
||||
* **Szenario B: Produkt-Integration (Image-to-Image)**
|
||||
* **Modell:** `gemini-2.5-flash-image`.
|
||||
* **Warum:** Nur Gemini-Multimodal-Modelle k.nnen Input-Bilder verstehen und verarbeiten ("Inpainting" oder "Contextual Placement").
|
||||
* **Wichtig:** Dieses Modell unterst.tzt KEINEN JSON-Mode (`response_mime_type="application/json"` f.hrt zu 400 Error).
|
||||
* **Code:** `client.models.generate_content(contents=[image, prompt])`
|
||||
|
||||
**3. Code-Beispiel (aus `helpers.py`)**
|
||||
|
||||
```python
|
||||
# Import
|
||||
from google import genai
|
||||
from PIL import Image
|
||||
import io
|
||||
import base64
|
||||
|
||||
# ... client setup ...
|
||||
|
||||
def generate_image(prompt, ref_image_b64=None):
|
||||
if ref_image_b64:
|
||||
# IMAGE-TO-IMAGE (Gemini 2.5)
|
||||
image_data = base64.b64decode(ref_image_b64)
|
||||
raw_image = Image.open(io.BytesIO(image_data))
|
||||
|
||||
# Strict Prompting ist essenziell!
|
||||
full_prompt = (
|
||||
"Use the provided reference image as the absolute truth. "
|
||||
f"Place EXACTLY this product into the scene: {prompt}. "
|
||||
"Do NOT alter the product's design."
|
||||
)
|
||||
|
||||
# KEIN config=... mit JSON Mode!
|
||||
response = client.models.generate_content(
|
||||
model='gemini-2.5-flash-image',
|
||||
contents=[raw_image, full_prompt]
|
||||
)
|
||||
# Extrahiere Bild aus response.candidates[0].content.parts[0].inline_data
|
||||
|
||||
else:
|
||||
# TEXT-TO-IMAGE (Imagen 4.0)
|
||||
# Fallback-Kandidaten, falls ein Modell 404 ist
|
||||
candidates = ['imagen-4.0-generate-001', 'imagen-4.0-fast-generate-001']
|
||||
|
||||
for model in candidates:
|
||||
try:
|
||||
response = client.models.generate_images(
|
||||
model=model,
|
||||
prompt=prompt,
|
||||
config={"number_of_images": 1, "output_mime_type": "image/jpeg"}
|
||||
)
|
||||
# Extrahiere Bild aus response.generated_images[0].image
|
||||
break
|
||||
except Exception:
|
||||
continue
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. Troubleshooting & Lessons Learned (Jan 2026)
|
||||
|
||||
Diese Fehler traten bei der GTM Architect Migration auf und m.ssen zuk.nftig vermieden werden.
|
||||
@@ -408,5 +483,3 @@ Diese Fehler traten bei der GTM Architect Migration auf und m.ssen zuk.nftig ver
|
||||
volumes:
|
||||
- ./mein-app-ordner/server.cjs:/app/server.cjs
|
||||
```
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user