LeafCat79 commited on
Commit
5cd7582
Β·
verified Β·
1 Parent(s): 64a9cae

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -20
app.py CHANGED
@@ -19,19 +19,17 @@ import traceback
19
 
20
  import gradio as gr
21
  from openai import OpenAI
22
- from huggingface_hub import InferenceClient
23
  from PIL import Image
24
 
25
  # ---------------------------------------------------------------------------
26
  # Clients
27
  # ---------------------------------------------------------------------------
28
 
29
- GROQ_API_KEY = os.environ.get("GROQ_API_KEY", "")
30
- HF_TOKEN = os.environ.get("HF_TOKEN", "")
31
 
32
- CODE_MODEL = "llama-3.1-8b-instant" # Groq β€” game code
33
- PROMPT_MODEL = "llama-3.3-70b-versatile" # Groq β€” better model for creative prompts
34
- IMAGE_MODEL = "black-forest-labs/FLUX.1-schnell" # hf-inference
35
 
36
 
37
  def get_groq_client():
@@ -46,10 +44,14 @@ def get_groq_client():
46
  )
47
 
48
 
49
- def get_image_client():
50
- if not HF_TOKEN:
 
51
  return None
52
- return InferenceClient(provider="hf-inference", api_key=HF_TOKEN)
 
 
 
53
 
54
 
55
  # ---------------------------------------------------------------------------
@@ -251,29 +253,36 @@ def _colored_placeholder(name: str) -> str:
251
 
252
 
253
  def generate_sprites(image_prompts: dict) -> tuple:
254
- """Generate actual images from enhanced prompts via FLUX.1-schnell.
255
  Returns (sprite_map, errors_list)"""
256
- image_client = get_image_client()
257
  sprite_map = {}
258
  errors = []
259
 
260
- if not image_client:
261
- errors.append("HF_TOKEN not set - using placeholder sprites. Add HF_TOKEN as a Space secret.")
262
  for sprite_name in image_prompts:
263
  sprite_map[sprite_name] = _colored_placeholder(sprite_name.replace(".png", ""))
264
  return sprite_map, errors
265
 
266
  for sprite_name, prompt in image_prompts.items():
267
  try:
268
- is_bg = "background" in sprite_name
269
- pil_img = image_client.text_to_image(prompt, model=IMAGE_MODEL)
 
 
 
 
 
 
 
270
  size = None if is_bg else (64, 64)
271
  sprite_map[sprite_name] = _pil_to_data_uri(pil_img, size=size)
272
- print(f"[FLUX] OK: {sprite_name}")
273
  except Exception as exc:
274
  error_msg = str(exc)
275
  errors.append(f"{sprite_name}: {error_msg}")
276
- print(f"[FLUX] FAILED {sprite_name}: {error_msg}")
277
  sprite_map[sprite_name] = _colored_placeholder(sprite_name.replace(".png", ""))
278
 
279
  return sprite_map, errors
@@ -355,12 +364,12 @@ def generate_game_code(game_type: str, theme: str, temperature: float, max_new_t
355
  if sprite_errors:
356
  error_detail = " | ".join(sprite_errors)
357
  status = (
358
- f"Code generated. Images: {n_real} FLUX, {n_fallback} fallback. "
359
  f"FLUX errors: {error_detail}"
360
  )
361
  else:
362
  status = (
363
- f"Done! {n_real} sprite(s) generated by FLUX. "
364
  "Click Launch Game to play."
365
  )
366
 
@@ -538,7 +547,7 @@ def build_ui():
538
  gr.Markdown(
539
  "---\n"
540
  "**Pipeline:** Theme β†’ [Groq Llama] game code + [Groq 70B as Z-Image-Engineer] "
541
- "cinematic prompts β†’ [FLUX.1-schnell/nscale] sprites β†’ embedded in game. "
542
  "Edit the HTML and click **Launch Game** to hot-reload."
543
  )
544
 
 
19
 
20
  import gradio as gr
21
  from openai import OpenAI
 
22
  from PIL import Image
23
 
24
  # ---------------------------------------------------------------------------
25
  # Clients
26
  # ---------------------------------------------------------------------------
27
 
28
+ GROQ_API_KEY = os.environ.get("GROQ_API_KEY", "")
29
+ GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY", "")
30
 
31
+ CODE_MODEL = "llama-3.1-8b-instant" # Groq β€” game code
32
+ PROMPT_MODEL = "llama-3.3-70b-versatile" # Groq β€” creative prompts
 
33
 
34
 
35
  def get_groq_client():
 
44
  )
45
 
46
 
47
+ def get_gemini_image_client():
48
+ """Gemini image generation β€” 500 free images/day, no credit card needed."""
49
+ if not GOOGLE_API_KEY:
50
  return None
51
+ return OpenAI(
52
+ base_url="https://generativelanguage.googleapis.com/v1beta/openai/",
53
+ api_key=GOOGLE_API_KEY,
54
+ )
55
 
56
 
57
  # ---------------------------------------------------------------------------
 
253
 
254
 
255
  def generate_sprites(image_prompts: dict) -> tuple:
256
+ """Generate images via Gemini imagen API (500 free/day, no credit card).
257
  Returns (sprite_map, errors_list)"""
258
+ client = get_gemini_image_client()
259
  sprite_map = {}
260
  errors = []
261
 
262
+ if not client:
263
+ errors.append("GOOGLE_API_KEY not set - using placeholder sprites. Add GOOGLE_API_KEY as a Space secret.")
264
  for sprite_name in image_prompts:
265
  sprite_map[sprite_name] = _colored_placeholder(sprite_name.replace(".png", ""))
266
  return sprite_map, errors
267
 
268
  for sprite_name, prompt in image_prompts.items():
269
  try:
270
+ response = client.images.generate(
271
+ model="imagen-3.0-generate-002",
272
+ prompt=prompt,
273
+ n=1,
274
+ response_format="b64_json",
275
+ )
276
+ b64 = response.data[0].b64_json
277
+ pil_img = Image.open(io.BytesIO(base64.b64decode(b64)))
278
+ is_bg = "background" in sprite_name
279
  size = None if is_bg else (64, 64)
280
  sprite_map[sprite_name] = _pil_to_data_uri(pil_img, size=size)
281
+ print(f"[Gemini Imagen] OK: {sprite_name}")
282
  except Exception as exc:
283
  error_msg = str(exc)
284
  errors.append(f"{sprite_name}: {error_msg}")
285
+ print(f"[Gemini Imagen] FAILED {sprite_name}: {error_msg}")
286
  sprite_map[sprite_name] = _colored_placeholder(sprite_name.replace(".png", ""))
287
 
288
  return sprite_map, errors
 
364
  if sprite_errors:
365
  error_detail = " | ".join(sprite_errors)
366
  status = (
367
+ f"Code generated. Images: {n_real} by Gemini Imagen, {n_fallback} fallback. "
368
  f"FLUX errors: {error_detail}"
369
  )
370
  else:
371
  status = (
372
+ f"Done! {n_real} sprite(s) generated by Gemini Imagen. "
373
  "Click Launch Game to play."
374
  )
375
 
 
547
  gr.Markdown(
548
  "---\n"
549
  "**Pipeline:** Theme β†’ [Groq Llama] game code + [Groq 70B as Z-Image-Engineer] "
550
+ "cinematic prompts β†’ [Gemini Imagen-3] sprites β†’ embedded in game. "
551
  "Edit the HTML and click **Launch Game** to hot-reload."
552
  )
553