Kims12 commited on
Commit
3166eeb
ยท
verified ยท
1 Parent(s): 5dea409

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +3 -86
app.py CHANGED
@@ -88,92 +88,9 @@ def preprocess_prompt(prompt, image1, image2, image3):
88
 
89
  return prompt
90
 
91
- def generate_with_images(prompt, images, max_retries=2):
92
- """
93
- ๊ณต์‹ ๋ฌธ์„œ์— ๊ธฐ๋ฐ˜ํ•œ ์˜ฌ๋ฐ”๋ฅธ API ํ˜ธ์ถœ ๋ฐฉ์‹ ๊ตฌํ˜„
94
- ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
95
- """
96
- retries = 0
97
- last_error = None
98
-
99
- while retries <= max_retries:
100
- try:
101
- # API ํ‚ค ํ™•์ธ
102
- api_key = os.environ.get("GEMINI_API_KEY")
103
- if not api_key:
104
- return None, "API ํ‚ค๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”."
105
-
106
- # Gemini ํด๋ผ์ด์–ธํŠธ ์ดˆ๊ธฐํ™”
107
- client = genai.Client(api_key=api_key)
108
-
109
- logger.info(f"Gemini API ์š”์ฒญ ์‹œ์ž‘ - ํ”„๋กฌํ”„ํŠธ: {prompt} (์‹œ๋„: {retries+1}/{max_retries+1})")
110
-
111
- # ์ปจํ…์ธ  ์ค€๋น„
112
- contents = []
113
-
114
- # ํ…์ŠคํŠธ ํ”„๋กฌํ”„ํŠธ ์ถ”๊ฐ€
115
- contents.append(prompt)
116
-
117
- # ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ (์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ)
118
- for idx, img in enumerate(images, 1):
119
- if img is not None:
120
- contents.append(img)
121
- logger.info(f"์ด๋ฏธ์ง€ #{idx} ์ถ”๊ฐ€๋จ")
122
-
123
- # ์ƒ์„ฑ ์„ค์ • - ๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ผ responseModalities ์„ค์ •
124
- response = client.models.generate_content(
125
- model="gemini-2.0-flash-exp-image-generation",
126
- contents=contents,
127
- config=types.GenerateContentConfig(
128
- response_modalities=['Text', 'Image'],
129
- temperature=1,
130
- top_p=0.95,
131
- top_k=40,
132
- max_output_tokens=8192
133
- )
134
- )
135
-
136
- # ์ž„์‹œ ํŒŒ์ผ ์ƒ์„ฑ
137
- with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as tmp:
138
- temp_path = tmp.name
139
-
140
- result_text = ""
141
- image_found = False
142
-
143
- # ์‘๋‹ต ์ฒ˜๋ฆฌ
144
- for part in response.candidates[0].content.parts:
145
- if hasattr(part, 'text') and part.text:
146
- result_text += part.text
147
- logger.info(f"์‘๋‹ต ํ…์ŠคํŠธ: {part.text}")
148
- elif hasattr(part, 'inline_data') and part.inline_data:
149
- save_binary_file(temp_path, part.inline_data.data)
150
- image_found = True
151
- logger.info("์‘๋‹ต์—์„œ ์ด๋ฏธ์ง€ ์ถ”์ถœ ์„ฑ๊ณต")
152
-
153
- if not image_found:
154
- if retries < max_retries:
155
- retries += 1
156
- logger.warning(f"API์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์žฌ์‹œ๋„ ์ค‘... ({retries}/{max_retries})")
157
- continue
158
- return None, f"API์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์‘๋‹ต ํ…์ŠคํŠธ: {result_text}"
159
-
160
- # ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€ ๋ฐ˜ํ™˜
161
- result_img = Image.open(temp_path)
162
- if result_img.mode == "RGBA":
163
- result_img = result_img.convert("RGB")
164
-
165
- return result_img, f"์ด๋ฏธ์ง€๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. {result_text}"
166
-
167
- except Exception as e:
168
- last_error = str(e)
169
- logger.exception(f"์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (์‹œ๋„: {retries+1}/{max_retries+1}):")
170
- if retries < max_retries:
171
- retries += 1
172
- logger.info(f"์žฌ์‹œ๋„ ์ค‘... ({retries}/{max_retries})")
173
- continue
174
- return None, f"์˜ค๋ฅ˜ ๋ฐœ์ƒ: {last_error}"
175
-
176
- return None, f"์ตœ๋Œ€ ์žฌ์‹œ๋„ ํšŸ์ˆ˜ ์ดˆ๊ณผ. ๋งˆ์ง€๋ง‰ ์˜ค๋ฅ˜: {last_error}"
177
 
178
  def process_images_with_prompt(image1, image2, image3, prompt):
179
  """
 
88
 
89
  return prompt
90
 
91
+ Untitled
92
+
93
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
 
95
  def process_images_with_prompt(image1, image2, image3, prompt):
96
  """