vladd19 commited on
Commit
f41e826
·
verified ·
1 Parent(s): adbf59a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -16
app.py CHANGED
@@ -11,37 +11,70 @@ from Gradio_UI import GradioUI
11
 
12
  # Below is an example of a tool that does nothing. Amaze us with your creativity !
13
  @tool
14
- def generate_image(prompt: str, negative_prompt: str = "blurry, text, watermark, low quality", width: int = 1024, height: int = 1024) -> Image.Image:
 
 
 
 
 
15
  """
16
- Генерирует изображение по текстовому описанию с использованием диффузионной модели.
 
 
 
 
 
17
  Args:
18
- prompt: Подробное описание того, что должно быть на изображении.
19
- negative_prompt: Что следует избегать в результате.
20
- width: Ширина изображения в пикселях (кратно 8, макс 1024 на бесплатном тарифе).
21
- height: Высота изображения в пикселях (кратно 8, макс 1024).
 
22
  Returns:
23
  PIL.Image.Image: Сгенерированное изображение.
24
  """
25
- try:
26
- from huggingface_hub import InferenceClient
27
- import os
 
 
28
 
29
- # 🔑 Инициализация клиента с токеном из окружения
30
- client = InferenceClient(token=os.getenv("HF_TOKEN"))
31
-
32
- # Вызов Inference API (FLUX.1-schnell быстрый и хорошо работает на free tier)
33
- image = client.text_to_image(
 
 
34
  prompt=prompt,
35
  negative_prompt=negative_prompt,
36
  model="black-forest-labs/FLUX.1-schnell",
37
  width=width,
38
  height=height,
39
- num_inference_steps=4, # Для скорости. Поднимите до 20-30 для качества
40
  guidance_scale=3.5
41
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  return image
 
43
  except Exception as e:
44
- # Возвращаем строку с ошибкой, чтобы агент не "упал", а мог объяснить пользователю
45
  return f"❌ Ошибка генерации: {str(e)}"
46
 
47
  @tool
 
11
 
12
  # Below is an example of a tool that does nothing. Amaze us with your creativity !
13
  @tool
14
+ def generate_image(
15
+ prompt: str,
16
+ negative_prompt: str = "blurry, text, watermark, low quality",
17
+ width: int = 1024,
18
+ height: int = 1024
19
+ ) -> Image.Image:
20
  """
21
+ Генерирует изображение по текстовому описанию.
22
+
23
+ Пример:
24
+ >>> generate_image("cute kitten on a blanket")
25
+ <PIL.Image.Image>
26
+
27
  Args:
28
+ prompt: Что нарисовать (подробно, на английском лучше).
29
+ negative_prompt: Что исключить из изображения.
30
+ width: Ширина в пикселях (кратно 8, макс 1024).
31
+ height: Высота в пикселях (кратно 8, макс 1024).
32
+
33
  Returns:
34
  PIL.Image.Image: Сгенерированное изображение.
35
  """
36
+ from huggingface_hub import InferenceClient
37
+ from PIL import Image
38
+ import io
39
+ import os
40
+ import sys
41
 
42
+ # 🔍 Отладка
43
+ print(f"🔍 generate_image: prompt='{prompt[:50]}...', size={width}x{height}", file=sys.stderr)
44
+
45
+ client = InferenceClient(token=os.getenv("HF_TOKEN"))
46
+
47
+ try:
48
+ result = client.text_to_image(
49
  prompt=prompt,
50
  negative_prompt=negative_prompt,
51
  model="black-forest-labs/FLUX.1-schnell",
52
  width=width,
53
  height=height,
54
+ num_inference_steps=4,
55
  guidance_scale=3.5
56
  )
57
+
58
+ # 🔑 Конвертация в PIL.Image
59
+ if isinstance(result, Image.Image):
60
+ image = result
61
+ elif isinstance(result, bytes):
62
+ image = Image.open(io.BytesIO(result))
63
+ elif hasattr(result, 'image') and isinstance(result.image, Image.Image):
64
+ image = result.image # Распаковка AgentImage
65
+ else:
66
+ # Попытка обработать как поток байтов
67
+ image = Image.open(io.BytesIO(result))
68
+
69
+ # 🔑 Валидация
70
+ if image.size == (0, 0):
71
+ return "❌ Ошибка: сгенерировано пустое изображение. Попробуйте упростить промпт."
72
+
73
+ print(f"✅ generate_image: успешно, size={image.size}", file=sys.stderr)
74
  return image
75
+
76
  except Exception as e:
77
+ print(f"❌ generate_image exception: {e}", file=sys.stderr)
78
  return f"❌ Ошибка генерации: {str(e)}"
79
 
80
  @tool