Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -4,6 +4,11 @@ import os
|
|
4 |
import io
|
5 |
from PIL import Image
|
6 |
import base64
|
|
|
|
|
|
|
|
|
|
|
7 |
|
8 |
# --- Konfiguration ---
|
9 |
# Hole den Together API Key aus den Umgebungsvariablen (wird als Secret gesetzt)
|
@@ -13,14 +18,21 @@ TOGETHER_API_KEY = os.environ.get("TOGETHER_API_KEY")
|
|
13 |
FLUX_MODEL = "black-forest-labs/FLUX.1-schnell-Free"
|
14 |
|
15 |
# Initialisiere den Together.ai Client
|
16 |
-
client = None
|
17 |
if TOGETHER_API_KEY:
|
18 |
try:
|
19 |
client = Together(api_key=TOGETHER_API_KEY)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
except Exception as e:
|
21 |
-
|
22 |
else:
|
23 |
-
|
24 |
|
25 |
# --- Bildgenerierungsfunktion ---
|
26 |
def generate_image(prompt: str, steps: int = 10, n_images: int = 1) -> list[Image.Image] or str:
|
@@ -29,49 +41,52 @@ def generate_image(prompt: str, steps: int = 10, n_images: int = 1) -> list[Imag
|
|
29 |
Gibt eine Liste von PIL.Image-Objekten oder eine Fehlermeldung zurück.
|
30 |
"""
|
31 |
if not client:
|
|
|
32 |
return "Fehler: Together.ai Client konnte nicht initialisiert werden. Bitte API-Key prüfen und sicherstellen, dass er gesetzt ist."
|
33 |
if not prompt:
|
34 |
return "Bitte geben Sie einen Prompt ein."
|
35 |
|
36 |
try:
|
37 |
-
#
|
|
|
38 |
response = client.images.generations.create(
|
39 |
model=FLUX_MODEL,
|
40 |
prompt=prompt,
|
41 |
steps=steps,
|
42 |
n=n_images
|
43 |
)
|
|
|
44 |
|
45 |
images = []
|
46 |
for image_data in response.data:
|
47 |
-
# Together.ai gibt Base64-codierte Bilder zurück
|
48 |
img_bytes = base64.b64decode(image_data.b64_json)
|
49 |
img = Image.open(io.BytesIO(img_bytes))
|
50 |
images.append(img)
|
51 |
return images
|
52 |
except Exception as e:
|
53 |
-
# Hier
|
54 |
-
|
55 |
-
return f"Fehler bei der Bildgenerierung: {e}. Eventuell API-Limit erreicht
|
56 |
|
57 |
# --- Gradio Interface Definition ---
|
58 |
with gr.Blocks() as demo:
|
59 |
gr.Markdown(
|
60 |
"""
|
61 |
# FLUX.1 [schnell] Bildgenerator
|
62 |
-
Generiere Bilder mit dem FLUX.1-Modell von Black Forest Labs über
|
|
|
63 |
"""
|
64 |
)
|
65 |
with gr.Row():
|
66 |
with gr.Column():
|
67 |
prompt_input = gr.Textbox(
|
68 |
label="Prompt",
|
69 |
-
placeholder="Gib deinen Prompt hier ein, z.B. '
|
70 |
lines=3
|
71 |
)
|
72 |
steps_slider = gr.Slider(
|
73 |
minimum=1,
|
74 |
-
maximum=50,
|
75 |
value=10,
|
76 |
step=1,
|
77 |
label="Schritte (Steps)",
|
@@ -79,7 +94,7 @@ with gr.Blocks() as demo:
|
|
79 |
)
|
80 |
num_images_slider = gr.Slider(
|
81 |
minimum=1,
|
82 |
-
maximum=4,
|
83 |
value=1,
|
84 |
step=1,
|
85 |
label="Anzahl der Bilder",
|
@@ -91,7 +106,7 @@ with gr.Blocks() as demo:
|
|
91 |
label="Generierte Bilder",
|
92 |
show_label=False,
|
93 |
elem_id="gallery",
|
94 |
-
height="auto"
|
95 |
)
|
96 |
|
97 |
# Verknüpfung der Eingaben mit der Generierungsfunktion
|
|
|
4 |
import io
|
5 |
from PIL import Image
|
6 |
import base64
|
7 |
+
import logging
|
8 |
+
|
9 |
+
# --- Konfiguration des Loggers ---
|
10 |
+
logging.basicConfig(level=logging.INFO)
|
11 |
+
logger = logging.getLogger(__name__)
|
12 |
|
13 |
# --- Konfiguration ---
|
14 |
# Hole den Together API Key aus den Umgebungsvariablen (wird als Secret gesetzt)
|
|
|
18 |
FLUX_MODEL = "black-forest-labs/FLUX.1-schnell-Free"
|
19 |
|
20 |
# Initialisiere den Together.ai Client
|
21 |
+
client = None
|
22 |
if TOGETHER_API_KEY:
|
23 |
try:
|
24 |
client = Together(api_key=TOGETHER_API_KEY)
|
25 |
+
logger.info(f"Together.ai Client erfolgreich initialisiert. Client-Typ: {type(client)}")
|
26 |
+
if hasattr(client, 'images'):
|
27 |
+
logger.info(f"Client hat 'images' Attribut. Typ von client.images: {type(client.images)}")
|
28 |
+
logger.info(f"Methoden von client.images: {dir(client.images)}")
|
29 |
+
else:
|
30 |
+
logger.error("Client hat KEIN 'images' Attribut!")
|
31 |
+
|
32 |
except Exception as e:
|
33 |
+
logger.error(f"FEHLER: Together.ai Client konnte NICHT initialisiert werden: {e}. API-Key prüfen!")
|
34 |
else:
|
35 |
+
logger.warning("WARNUNG: TOGETHER_API_KEY ist NICHT gesetzt. Bilder können nicht generiert werden.")
|
36 |
|
37 |
# --- Bildgenerierungsfunktion ---
|
38 |
def generate_image(prompt: str, steps: int = 10, n_images: int = 1) -> list[Image.Image] or str:
|
|
|
41 |
Gibt eine Liste von PIL.Image-Objekten oder eine Fehlermeldung zurück.
|
42 |
"""
|
43 |
if not client:
|
44 |
+
logger.error("generate_image: Client ist nicht initialisiert.")
|
45 |
return "Fehler: Together.ai Client konnte nicht initialisiert werden. Bitte API-Key prüfen und sicherstellen, dass er gesetzt ist."
|
46 |
if not prompt:
|
47 |
return "Bitte geben Sie einen Prompt ein."
|
48 |
|
49 |
try:
|
50 |
+
# Dies ist der kritische Aufrufpunkt
|
51 |
+
logger.info(f"Versuche, Bildgenerierung mit Modell {FLUX_MODEL} zu starten...")
|
52 |
response = client.images.generations.create(
|
53 |
model=FLUX_MODEL,
|
54 |
prompt=prompt,
|
55 |
steps=steps,
|
56 |
n=n_images
|
57 |
)
|
58 |
+
logger.info("Bildgenerierung erfolgreich angefordert.")
|
59 |
|
60 |
images = []
|
61 |
for image_data in response.data:
|
|
|
62 |
img_bytes = base64.b64decode(image_data.b64_json)
|
63 |
img = Image.open(io.BytesIO(img_bytes))
|
64 |
images.append(img)
|
65 |
return images
|
66 |
except Exception as e:
|
67 |
+
# Hier werden Fehler vom API-Aufruf abgefangen
|
68 |
+
logger.error(f"FEHLER bei der Bildgenerierung: {e}", exc_info=True) # exc_info zeigt den vollständigen Traceback
|
69 |
+
return f"Fehler bei der Bildgenerierung: {e}. Eventuell API-Limit erreicht, Prompt ungültig oder Together.ai Problem."
|
70 |
|
71 |
# --- Gradio Interface Definition ---
|
72 |
with gr.Blocks() as demo:
|
73 |
gr.Markdown(
|
74 |
"""
|
75 |
# FLUX.1 [schnell] Bildgenerator
|
76 |
+
Generiere Bilder mit dem FLUX.1-Modell von Black Forest Labs über Together.ai.
|
77 |
+
Dies ist eine schnelle, kostenlose API-Integration für dein Projekt.
|
78 |
"""
|
79 |
)
|
80 |
with gr.Row():
|
81 |
with gr.Column():
|
82 |
prompt_input = gr.Textbox(
|
83 |
label="Prompt",
|
84 |
+
placeholder="Gib deinen Prompt hier ein, z.B. 'Ein futuristischer Roboter in einem tropischen Wald'",
|
85 |
lines=3
|
86 |
)
|
87 |
steps_slider = gr.Slider(
|
88 |
minimum=1,
|
89 |
+
maximum=50,
|
90 |
value=10,
|
91 |
step=1,
|
92 |
label="Schritte (Steps)",
|
|
|
94 |
)
|
95 |
num_images_slider = gr.Slider(
|
96 |
minimum=1,
|
97 |
+
maximum=4,
|
98 |
value=1,
|
99 |
step=1,
|
100 |
label="Anzahl der Bilder",
|
|
|
106 |
label="Generierte Bilder",
|
107 |
show_label=False,
|
108 |
elem_id="gallery",
|
109 |
+
height="auto"
|
110 |
)
|
111 |
|
112 |
# Verknüpfung der Eingaben mit der Generierungsfunktion
|