174 lines
4.2 KiB
Markdown
174 lines
4.2 KiB
Markdown
|
|
# quiXzoom Academy — Gemini Integration Guide
|
||
|
|
|
||
|
|
> Hur du kopplar AAMOS Gemini till Academy för bildgenerering
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔍 Hitta din Gemini i AAMOS
|
||
|
|
|
||
|
|
### Steg 1: Leta efter Gemini-tjänsten
|
||
|
|
```bash
|
||
|
|
# Sök efter Gemini-relaterade filer
|
||
|
|
find /opt/amos -type f \( -name "*.py" -o -name "*.yaml" -o -name "*.env" \) \
|
||
|
|
-exec grep -l "gemini\|vertex.*ai\|generativelanguage" {} \; 2>/dev/null
|
||
|
|
|
||
|
|
# Kolla om det finns en körande tjänst
|
||
|
|
curl -s http://localhost:8080/health
|
||
|
|
curl -s http://localhost:5000/health
|
||
|
|
netstat -tlnp | grep -E "8080|5000|3000"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Steg 2: Hitta API-nyckeln
|
||
|
|
```bash
|
||
|
|
# Kolla miljövariabler
|
||
|
|
env | grep -i "gemini\|google\|vertex"
|
||
|
|
|
||
|
|
# Kolla i AAMOS-config
|
||
|
|
cat /opt/amos/.env 2>/dev/null | grep -i "gemini\|google"
|
||
|
|
cat /opt/amos/config.yaml 2>/dev/null | grep -i "gemini\|google"
|
||
|
|
|
||
|
|
# Kolla i Kubernetes secrets (om det körs i k8s)
|
||
|
|
kubectl get secrets -n aamos 2>/dev/null | grep -i gemini
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔧 Integration
|
||
|
|
|
||
|
|
### Alternativ A: Direkt API-anrop (enklaste)
|
||
|
|
|
||
|
|
```python
|
||
|
|
# academy_gemini_direct.py
|
||
|
|
import os
|
||
|
|
import requests
|
||
|
|
import json
|
||
|
|
|
||
|
|
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
|
||
|
|
|
||
|
|
def generate_academy_image(lesson_title: str, description: str) -> str:
|
||
|
|
"""
|
||
|
|
Generera pedagogisk bild för Academy-lektion
|
||
|
|
"""
|
||
|
|
url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp-image-generation:generateContent?key={GEMINI_API_KEY}"
|
||
|
|
|
||
|
|
payload = {
|
||
|
|
"contents": [{
|
||
|
|
"parts": [{
|
||
|
|
"text": f"""Generera en pedagogisk illustration för en online-utbildning.
|
||
|
|
|
||
|
|
Titel: {lesson_title}
|
||
|
|
Beskrivning: {description}
|
||
|
|
|
||
|
|
Krav:
|
||
|
|
- Modern, ren stil
|
||
|
|
- Färger: blå (#0066FF), grön (#00C853), svart (#0A0A0A)
|
||
|
|
- Pedagogisk och lätt att förstå
|
||
|
|
- Ingen text i bilden
|
||
|
|
- Format: 16:9
|
||
|
|
"""
|
||
|
|
}]
|
||
|
|
}],
|
||
|
|
"generationConfig": {
|
||
|
|
"responseModalities": ["Text", "Image"]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
response = requests.post(url, json=payload)
|
||
|
|
|
||
|
|
if response.status_code == 200:
|
||
|
|
data = response.json()
|
||
|
|
# Extrahera bild från response
|
||
|
|
# Spara till fil
|
||
|
|
return "image_url"
|
||
|
|
else:
|
||
|
|
raise Exception(f"Fel: {response.status_code} - {response.text}")
|
||
|
|
|
||
|
|
# Exempel
|
||
|
|
image = generate_academy_image(
|
||
|
|
"Fotokvalitet — Ljus och exponering",
|
||
|
|
"Visa skillnaden mellan underexponerad, korrekt exponerad och överexponerad bild"
|
||
|
|
)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Alternativ B: Via AAMOS Gemini-tjänst (om den finns)
|
||
|
|
|
||
|
|
```python
|
||
|
|
# academy_gemini_aamos.py
|
||
|
|
import requests
|
||
|
|
|
||
|
|
AAMOS_GEMINI_URL = "http://localhost:8080/v1/generate" # eller annan port
|
||
|
|
|
||
|
|
def generate_via_aamos(prompt: str) -> bytes:
|
||
|
|
"""
|
||
|
|
Använd AAMOS interna Gemini-tjänst
|
||
|
|
"""
|
||
|
|
response = requests.post(
|
||
|
|
AAMOS_GEMINI_URL,
|
||
|
|
json={
|
||
|
|
"prompt": prompt,
|
||
|
|
"model": "gemini-2.0-flash-exp-image-generation",
|
||
|
|
"output_format": "png"
|
||
|
|
}
|
||
|
|
)
|
||
|
|
|
||
|
|
return response.content
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 Automatisk bildgenerering
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Kör skriptet för att generera alla bilder
|
||
|
|
python academy-image-generator.py --generate
|
||
|
|
|
||
|
|
# Eller generera en specifik bild
|
||
|
|
python -c "
|
||
|
|
from academy_image_generator import generate_image
|
||
|
|
import os
|
||
|
|
os.environ['GEMINI_API_KEY'] = 'din-nyckel-här'
|
||
|
|
generate_image('m2l2', 'din-nyckel-här')
|
||
|
|
"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📁 Filstruktur
|
||
|
|
|
||
|
|
```
|
||
|
|
academy/
|
||
|
|
├── index.html # Huvudsida
|
||
|
|
├── api.json # API-specifikation
|
||
|
|
├── module1/
|
||
|
|
│ └── lesson1/
|
||
|
|
│ └── index.html # Lektion med bilder
|
||
|
|
├── module2/
|
||
|
|
│ └── lesson1/
|
||
|
|
│ └── index.html # Lektion med bilder
|
||
|
|
└── images/ # Genererade bilder
|
||
|
|
├── m1l1-welcome.png
|
||
|
|
├── m2l1-ai-review.png
|
||
|
|
├── m2l2-lighting.png
|
||
|
|
└── ...
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 Nästa steg
|
||
|
|
|
||
|
|
1. **Hitta din Gemini-nyckel** i AAMOS
|
||
|
|
2. **Testa generering** av en bild
|
||
|
|
3. **Ladda upp** till S3
|
||
|
|
4. **Uppdatera** lektionerna med bild-URLer
|
||
|
|
5. **Automatisera** med GitHub Actions eller cron
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📞 Support
|
||
|
|
|
||
|
|
Om du inte hittar Gemini i AAMOS:
|
||
|
|
1. Kolla med Johan (CTO) om det finns en central AI-tjänst
|
||
|
|
2. Eller skapa ett nytt Google Cloud-projekt för quiXzoom
|
||
|
|
3. Aktivera Vertex AI API
|
||
|
|
4. Skapa service account och ladda ner JSON-nyckel
|