Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -42,6 +42,7 @@ def choose_alternative(transformation):
|
|
42 |
else:
|
43 |
return random.choice([left, right])
|
44 |
|
|
|
45 |
# ์ฐฝ์์ ์ธ ๋ชจ๋ธ/์ปจ์
/ํ์ ๋ณํ ์์ด๋์ด๋ฅผ ์ํ ์นดํ
๊ณ ๋ฆฌ (๊ธฐ์กด '๋ฌผ๋ฆฌ์ ๋ณํ' ์ฌ์ ์ ์ง)
|
46 |
physical_transformation_categories = {
|
47 |
"๊ณต๊ฐ ์ด๋": [
|
@@ -184,6 +185,118 @@ physical_transformation_categories = {
|
|
184 |
]
|
185 |
}
|
186 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
187 |
##############################################################################
|
188 |
# Gemini API ํธ์ถ ํจ์ (์: gemini-2.0-flash-thinking-exp-01-21 -> ๋ค๋ฅธ ๋ชจ๋ธ ์ฌ์ฉ ์ ์์ )
|
189 |
##############################################################################
|
@@ -281,16 +394,31 @@ def generate_three_objects_interaction(obj1, obj2, obj3):
|
|
281 |
##############################################################################
|
282 |
# ์์ฑ๋ ๊ธฐ๋ณธ ์ค๋ช
์ LLM์ ํตํด ํ์ฅ
|
283 |
##############################################################################
|
284 |
-
def enhance_descriptions(results, objects):
|
285 |
obj_name = " ๋ฐ ".join([obj for obj in objects if obj])
|
286 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
287 |
result["enhanced"] = enhance_with_llm(result["base"], obj_name, category)
|
|
|
|
|
|
|
|
|
|
|
288 |
return results
|
289 |
|
290 |
##############################################################################
|
291 |
# ์ฌ์ฉ์ ์
๋ ฅ(์ต๋ 3๊ฐ ํค์๋)์ ๋ฐ๋ผ ์ฐฝ์์ ๋ณํ ์์ด๋์ด ์์ฑ
|
292 |
##############################################################################
|
293 |
-
def generate_transformations(text1, text2=None, text3=None):
|
|
|
|
|
|
|
294 |
if text2 and text3:
|
295 |
results = generate_three_objects_interaction(text1, text2, text3)
|
296 |
objects = [text1, text2, text3]
|
@@ -300,7 +428,11 @@ def generate_transformations(text1, text2=None, text3=None):
|
|
300 |
else:
|
301 |
results = generate_single_object_transformations(text1)
|
302 |
objects = [text1]
|
303 |
-
|
|
|
|
|
|
|
|
|
304 |
|
305 |
##############################################################################
|
306 |
# ๊ฒฐ๊ณผ ํฌ๋งทํ
|
@@ -314,29 +446,33 @@ def format_results(results):
|
|
314 |
##############################################################################
|
315 |
# Gradio UI์์ ํธ์ถํ ํจ์
|
316 |
##############################################################################
|
317 |
-
def process_inputs(text1, text2, text3):
|
318 |
-
messages = []
|
319 |
-
messages.append("์
๋ ฅ๊ฐ ํ์ธ ์ค...")
|
320 |
-
time.sleep(0.3)
|
321 |
text1 = text1.strip() if text1 else None
|
322 |
text2 = text2.strip() if text2 else None
|
323 |
text3 = text3.strip() if text3 else None
|
|
|
324 |
if not text1:
|
325 |
-
|
326 |
-
return "\n\n".join(messages)
|
327 |
|
328 |
-
|
329 |
-
time.sleep(0.3)
|
330 |
-
results = generate_transformations(text1, text2, text3)
|
331 |
|
332 |
-
|
333 |
-
|
334 |
-
|
|
|
|
|
|
|
|
|
|
|
335 |
|
336 |
-
|
337 |
-
|
338 |
|
339 |
-
|
|
|
|
|
|
|
|
|
340 |
|
341 |
##############################################################################
|
342 |
# API ํค ๊ฒฝ๊ณ ๋ฉ์์ง
|
@@ -361,6 +497,7 @@ with gr.Blocks(title="ํค์๋ ๊ธฐ๋ฐ ์ฐฝ์์ ๋ณํ ์์ด๋์ด ์์ฑ๊ธฐ",
|
|
361 |
h2 { color: #555; }
|
362 |
.output { background-color: #ffffff; padding: 15px; border-radius: 8px; }
|
363 |
.gr-button { background-color: #4CAF50; color: white; border: none; border-radius: 4px; padding: 8px 16px; }
|
|
|
364 |
</style>
|
365 |
""")
|
366 |
|
@@ -375,12 +512,15 @@ with gr.Blocks(title="ํค์๋ ๊ธฐ๋ฐ ์ฐฝ์์ ๋ณํ ์์ด๋์ด ์์ฑ๊ธฐ",
|
|
375 |
text_input1 = gr.Textbox(label="ํค์๋ 1 (ํ์)", placeholder="์: ์ค๋งํธํฐ")
|
376 |
text_input2 = gr.Textbox(label="ํค์๋ 2 (์ ํ)", placeholder="์: ์ธ๊ณต์ง๋ฅ")
|
377 |
text_input3 = gr.Textbox(label="ํค์๋ 3 (์ ํ)", placeholder="์: ํฌ์ค์ผ์ด")
|
378 |
-
|
|
|
|
|
|
|
|
|
379 |
|
380 |
-
# ์ฐ์ธก ์ถ๋ ฅ ์์ญ
|
381 |
with gr.Column(scale=2):
|
382 |
-
|
383 |
-
idea_output = gr.Markdown(label="์์ด๋์ด ๊ฒฐ๊ณผ")
|
384 |
|
385 |
# ์์ ์
๋ ฅ
|
386 |
gr.Examples(
|
@@ -393,10 +533,12 @@ with gr.Blocks(title="ํค์๋ ๊ธฐ๋ฐ ์ฐฝ์์ ๋ณํ ์์ด๋์ด ์์ฑ๊ธฐ",
|
|
393 |
inputs=[text_input1, text_input2, text_input3],
|
394 |
)
|
395 |
|
396 |
-
# ๋ฒํผ
|
397 |
-
submit_button.click(
|
398 |
-
|
399 |
-
|
|
|
|
|
400 |
|
401 |
if __name__ == "__main__":
|
402 |
-
demo.launch(debug=True)
|
|
|
42 |
else:
|
43 |
return random.choice([left, right])
|
44 |
|
45 |
+
|
46 |
# ์ฐฝ์์ ์ธ ๋ชจ๋ธ/์ปจ์
/ํ์ ๋ณํ ์์ด๋์ด๋ฅผ ์ํ ์นดํ
๊ณ ๋ฆฌ (๊ธฐ์กด '๋ฌผ๋ฆฌ์ ๋ณํ' ์ฌ์ ์ ์ง)
|
47 |
physical_transformation_categories = {
|
48 |
"๊ณต๊ฐ ์ด๋": [
|
|
|
185 |
]
|
186 |
}
|
187 |
|
188 |
+
import os
|
189 |
+
import gradio as gr
|
190 |
+
import random
|
191 |
+
import time
|
192 |
+
import logging
|
193 |
+
import google.generativeai as genai
|
194 |
+
|
195 |
+
# ๋ก๊น
์ค์
|
196 |
+
logging.basicConfig(
|
197 |
+
level=logging.INFO,
|
198 |
+
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
199 |
+
handlers=[
|
200 |
+
logging.FileHandler("api_debug.log"),
|
201 |
+
logging.StreamHandler()
|
202 |
+
]
|
203 |
+
)
|
204 |
+
logger = logging.getLogger("idea_generator")
|
205 |
+
|
206 |
+
# Gemini API ํค๋ ํ๊ฒฝ ๋ณ์ GEMINI_API_KEY์์ ๊ฐ์ ธ์ต๋๋ค.
|
207 |
+
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
|
208 |
+
genai.configure(api_key=GEMINI_API_KEY)
|
209 |
+
|
210 |
+
# ์ฌ๋์("/")๊ฐ ํฌํจ๋ ๋ณํ ๋ฌธ์์ด์์ ๋ ์ต์
์ค ํ๋๋ง ์ ํํ๋ ํฌํผ ํจ์
|
211 |
+
def choose_alternative(transformation):
|
212 |
+
if "/" not in transformation:
|
213 |
+
return transformation
|
214 |
+
parts = transformation.split("/")
|
215 |
+
if len(parts) != 2:
|
216 |
+
return random.choice([part.strip() for part in parts])
|
217 |
+
left = parts[0].strip()
|
218 |
+
right = parts[1].strip()
|
219 |
+
if " " in left:
|
220 |
+
tokens = left.split(" ", 1)
|
221 |
+
prefix = tokens[0]
|
222 |
+
if not right.startswith(prefix):
|
223 |
+
option1 = left
|
224 |
+
option2 = prefix + " " + right
|
225 |
+
else:
|
226 |
+
option1 = left
|
227 |
+
option2 = right
|
228 |
+
return random.choice([option1, option2])
|
229 |
+
else:
|
230 |
+
return random.choice([left, right])
|
231 |
+
|
232 |
+
# ์ฐฝ์์ ์ธ ๋ชจ๋ธ/์ปจ์
/ํ์ ๋ณํ ์์ด๋์ด๋ฅผ ์ํ ์นดํ
๊ณ ๋ฆฌ (๊ธฐ์กด '๋ฌผ๋ฆฌ์ ๋ณํ' ์ฌ์ ์ ์ง)
|
233 |
+
physical_transformation_categories = {
|
234 |
+
"๊ณต๊ฐ ์ด๋": [
|
235 |
+
"์/๋ค ์ด๋", "์ข/์ฐ ์ด๋", "์/์๋ ์ด๋", "์ธ๋ก์ถ ํ์ (๊ณ ๊ฐ ๋๋์)",
|
236 |
+
"๊ฐ๋ก์ถ ํ์ (๊ณ ๊ฐ ์ ๊ธฐ)", "๊ธธ์ด์ถ ํ์ (์์ผ๋ก ๊ธฐ์ธ์)", "์ ์ด๋", "๋์ ํ ์ด๋",
|
237 |
+
"๊ด์ฑ์ ์ํ ๋ฏธ๋๋ฌ์ง", "ํ์ ์ถ ๋ณํ", "๋ถ๊ท์น ํ์ ", "ํ๋ค๋ฆผ ์ด๋", "ํฌ๋ฌผ์ ์ด๋",
|
238 |
+
"๋ฌด์ค๋ ฅ ๋ถ์ ", "์๋ฉด ์ ๋ถ์ ", "์ ํ/๋์ฝ", "์ฌ๋ผ์ด๋ฉ", "๋กค๋ง", "์์ ๋ํ",
|
239 |
+
"์๋ณต ์ด๋", "ํ์ฑ ํ๊น", "๊ดํต", "ํํผ ์์ง์", "์ง๊ทธ์ฌ๊ทธ ์ด๋", "์ค์ ์ด๋"
|
240 |
+
],
|
241 |
+
|
242 |
+
# [๊ธฐ์กด ์นดํ
๊ณ ๋ฆฌ๋ค ์ ์ง]
|
243 |
+
# ... ๋ค๋ฅธ ๋ชจ๋ ์นดํ
๊ณ ๋ฆฌ๋ค์ ์๋ ์ฝ๋์ ๋์ผํ๊ฒ ์ ์ง ...
|
244 |
+
|
245 |
+
"ํฌ๊ธฐ์ ํํ ๋ณํ": [
|
246 |
+
"๋ถํผ ๋์ด๋จ/์ค์ด๋ฆ", "๊ธธ์ด ๋์ด๋จ/์ค์ด๋ฆ", "๋๋น ๋์ด๋จ/์ค์ด๋ฆ", "๋์ด ๋์ด๋จ/์ค์ด๋ฆ",
|
247 |
+
"๋ฐ๋ ๋ณํ", "๋ฌด๊ฒ ์ฆ๊ฐ/๊ฐ์", "๋ชจ์ ๋ณํ", "์ํ ๋ณํ", "๋ถ๊ท ๋ฑ ๋ณํ",
|
248 |
+
"๋ณต์กํ ํํ ๋ณํ", "๋นํ๋ฆผ/๊ผฌ์", "๋ถ๊ท ์ผํ ํ์ฅ/์ถ์", "๋ชจ์๋ฆฌ ๋ฅ๊ธ๊ฒ/๋ ์นด๋กญ๊ฒ",
|
249 |
+
"๊นจ์ง/๊ฐ๋ผ์ง", "์ฌ๋ฌ ์กฐ๊ฐ ๋๋ ์ง", "๋ฌผ ์ ํญ", "๋จผ์ง ์ ํญ", "์ฐ๊ทธ๋ฌ์ง/๋ณต์",
|
250 |
+
"์ ํ/ํผ์ณ์ง", "์์ฐฉ/ํฝ์ฐฝ", "๋์ด๋จ/์์ถ", "๊ตฌ๊ฒจ์ง/ํํํด์ง", "๋ญ๊ฐ์ง/๋จ๋จํด์ง",
|
251 |
+
"๋ง๋ฆผ/ํด์ง", "๊บพ์/๊ตฌ๋ถ๋ฌ์ง"
|
252 |
+
],
|
253 |
+
|
254 |
+
"ํ๋ฉด ๋ฐ ์ธ๊ด ๋ณํ": [
|
255 |
+
"์์ ๋ณํ", "์ง๊ฐ ๋ณํ", "ํฌ๋ช
/๋ถํฌ๋ช
๋ณํ", "๋ฐ์ง์/๋ฌด๊ด ๋ณํ",
|
256 |
+
"๋น ๋ฐ์ฌ ์ ๋ ๋ณํ", "๋ฌด๋ฌ ๋ณํ", "๊ฐ๋์ ๋ฐ๋ฅธ ์์ ๋ณํ", "๋น์ ๋ฐ๋ฅธ ์์ ๋ณํ",
|
257 |
+
"์จ๋์ ๋ฐ๋ฅธ ์์ ๋ณํ", "ํ๋ก๊ทธ๋จ ํจ๊ณผ", "ํ๋ฉด ๊ฐ๋๋ณ ๋น ๋ฐ์ฌ", "ํ๋ฉด ๋ชจ์ ๋ณํ",
|
258 |
+
"์ด๋ฏธ์ธ ํ๋ฉด ๊ตฌ์กฐ ๋ณํ", "์๊ฐ ์ธ์ ํจ๊ณผ", "์ผ๋ฃฉ/ํจํด ์์ฑ", "ํ๋ฆผ/์ ๋ช
ํจ ๋ณํ",
|
259 |
+
"๊ดํ/์ค๊ธฐ ๋ณํ", "์์กฐ/์ฑ๋ ๋ณํ", "๋ฐ๊ด/ํ๊ด", "๋น ์ฐ๋ ํจ๊ณผ",
|
260 |
+
"๋น ํก์ ๋ณํ", "๋ฐํฌ๋ช
ํจ๊ณผ", "๊ทธ๋ฆผ์ ํจ๊ณผ ๋ณํ", "์์ธ์ ๋ฐ์ ๋ณํ",
|
261 |
+
"์ผ๊ด ํจ๊ณผ"
|
262 |
+
],
|
263 |
+
|
264 |
+
"๋ฌผ์ง์ ์ํ ๋ณํ": [
|
265 |
+
"๊ณ ์ฒด/์ก์ฒด/๊ธฐ์ฒด ์ ํ", "๊ฒฐ์ ํ/์ฉํด", "์ฐํ/๋ถ์", "๋ฑ๋ฑํด์ง/๋ถ๋๋ฌ์์ง",
|
266 |
+
"ํน์ ์ํ ์ ํ", "๋ฌด์ ํ/๊ฒฐ์ ํ ์ ํ", "์ฑ๋ถ ๋ถ๋ฆฌ", "๋ฏธ์ธ ์
์ ํ์ฑ/๋ถํด",
|
267 |
+
"์ ค ํ์ฑ/ํ์ด์ง", "์ค์์ ์ํ ๋ณํ", "๋ถ์ ์๊ฐ ์ ๋ ฌ/๋ถํด", "์ํ๋ณํ ์ง์ฐ ํ์",
|
268 |
+
"๋
น์", "๊ตณ์", "์ฆ๋ฐ/์์ถ", "์นํ/์ฆ์ฐฉ", "์นจ์ /๋ถ์ ", "๋ถ์ฐ/์์ง",
|
269 |
+
"๊ฑด์กฐ/์ต์ค", "ํฝ์ค/์์ถ", "๋๊ฒฐ/ํด๋", "ํํ/์นจ์", "์ถฉ์ /๋ฐฉ์ ",
|
270 |
+
"๊ฒฐํฉ/๋ถ๋ฆฌ", "๋ฐํจ/๋ถํจ"
|
271 |
+
],
|
272 |
+
|
273 |
+
"์ด ๊ด๋ จ ๋ณํ": [
|
274 |
+
"์จ๋ ์์น/ํ๊ฐ", "์ด์ ์ํ ํฝ์ฐฝ/์์ถ", "์ด ์ ๋ฌ/์ฐจ๋จ", "์๋ ฅ ์์น/ํ๊ฐ",
|
275 |
+
"์ด ๋ณํ์ ๋ฐ๋ฅธ ์ํ", "๋ฌด์ง์๋ ๋ณํ", "์ด์ ๊ธฐ ํ์", "์๊ธฐ์ฅ์ ์ํ ์ด ๋ณํ",
|
276 |
+
"์ํ๋ณํ ์ค ์ด ์ ์ฅ/๋ฐฉ์ถ", "์ด ์คํธ๋ ์ค ๋ฐ์/ํด์", "๊ธ๊ฒฉํ ์จ๋ ๋ณํ ์ํฅ",
|
277 |
+
"๋ณต์ฌ์ด์ ์ํ ๋๊ฐ/๊ฐ์ด", "๋ฐ์ด/ํก์ด", "์ด ๋ถํฌ ๋ณํ", "์ด ๋ฐ๏ฟฝ๏ฟฝ๏ฟฝ/ํก์",
|
278 |
+
"๋๊ฐ ์์ถ", "์ด ํ์ฑํ", "์ด ๋ณ์", "์ด ํฝ์ฐฝ ๊ณ์ ๋ณํ", "์ด ์์ ์ฑ ๋ณํ",
|
279 |
+
"๋ด์ด์ฑ/๋ดํ์ฑ", "์๊ธฐ๋ฐ์ด", "์ด์ ํํ/๋ถ๊ท ํ", "์ด์ ๋ณํ", "์ด ๋ถ์ฐ/์ง์ค"
|
280 |
+
],
|
281 |
+
|
282 |
+
"์์ง์ ํน์ฑ ๋ณํ": [
|
283 |
+
"๊ฐ์/๊ฐ์", "์ผ์
|
284 |
+
# ์ถ์ฝ๋ ๋ถ๋ถ, ์ค์ ์ฝ๋์์๋ ๋ชจ๋ ์นดํ
๊ณ ๋ฆฌ๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค
|
285 |
+
# ๋ค๋ฅธ ๋ชจ๋ ์นดํ
๊ณ ๋ฆฌ๋ค์ ์๋ ์ฝ๋์ ๋์ผํ๊ฒ ์ ์งํด์ผ ํฉ๋๋ค
|
286 |
+
"์ผ์ ๊ธฐ๋ฅ": [
|
287 |
+
"์๊ฐ ์ผ์/๊ฐ์ง", "์ฒญ๊ฐ ์ผ์/๊ฐ์ง", "์ด๊ฐ ์ผ์/๊ฐ์ง", "๋ฏธ๊ฐ ์ผ์/๊ฐ์ง", "ํ๊ฐ ์ผ์/๊ฐ์ง",
|
288 |
+
"์จ๋ ์ผ์/๊ฐ์ง", "์ต๋ ์ผ์/๊ฐ์ง", "์๋ ฅ ์ผ์/๊ฐ์ง", "๊ฐ์๋ ์ผ์/๊ฐ์ง", "ํ์ ์ผ์/๊ฐ์ง",
|
289 |
+
"๊ทผ์ ์ผ์/๊ฐ์ง", "์์น ์ผ์/๊ฐ์ง", "์ด๋ ์ผ์/๊ฐ์ง", "๊ฐ์ค ์ผ์/๊ฐ์ง", "์ ์ธ์ ์ผ์/๊ฐ์ง",
|
290 |
+
"์์ธ์ ์ผ์/๊ฐ์ง", "๋ฐฉ์ฌ์ ์ผ์/๊ฐ์ง", "์๊ธฐ์ฅ ์ผ์/๊ฐ์ง", "์ ๊ธฐ์ฅ ์ผ์/๊ฐ์ง", "ํํ๋ฌผ์ง ์ผ์/๊ฐ์ง",
|
291 |
+
"์์ฒด์ ํธ ์ผ์/๊ฐ์ง", "์ง๋ ์ผ์/๊ฐ์ง", "์์ ์ผ์/๊ฐ์ง", "๋น ์ธ๊ธฐ ์ผ์/๊ฐ์ง", "๋น ํ์ฅ ์ผ์/๊ฐ์ง",
|
292 |
+
"๊ธฐ์ธ๊ธฐ ์ผ์/๊ฐ์ง", "pH ์ผ์/๊ฐ์ง", "์ ๋ฅ ์ผ์/๊ฐ์ง", "์ ์ ์ผ์/๊ฐ์ง", "์ด๋ฏธ์ง ์ผ์/๊ฐ์ง",
|
293 |
+
"๊ฑฐ๋ฆฌ ์ผ์/๊ฐ์ง", "๊น์ด ์ผ์/๊ฐ์ง", "์ค๋ ฅ ์ผ์/๊ฐ์ง", "์๋ ์ผ์/๊ฐ์ง", "ํ๋ฆ ์ผ์/๊ฐ์ง",
|
294 |
+
"์์ ์ผ์/๊ฐ์ง", "ํ๋ ์ผ์/๊ฐ์ง", "์ผ๋ ์ผ์/๊ฐ์ง", "๊ธ์ ๊ฐ์ง", "์์ ์ผ์/๊ฐ์ง",
|
295 |
+
"๊ด์ ์ผ์/๊ฐ์ง", "์ด์ ๋ ์ผ์/๊ฐ์ง", "ํ ํจ๊ณผ ์ผ์/๊ฐ์ง", "์ด์ํ ์ผ์/๊ฐ์ง", "๋ ์ด๋ ์ผ์/๊ฐ์ง",
|
296 |
+
"๋ผ์ด๋ค ์ผ์/๊ฐ์ง", "ํฐ์น ์ผ์/๊ฐ์ง", "์ ์ค์ฒ ์ผ์/๊ฐ์ง", "์ฌ๋ฐ ์ผ์/๊ฐ์ง", "ํ์ ์ผ์/๊ฐ์ง"
|
297 |
+
]
|
298 |
+
}
|
299 |
+
|
300 |
##############################################################################
|
301 |
# Gemini API ํธ์ถ ํจ์ (์: gemini-2.0-flash-thinking-exp-01-21 -> ๋ค๋ฅธ ๋ชจ๋ธ ์ฌ์ฉ ์ ์์ )
|
302 |
##############################################################################
|
|
|
394 |
##############################################################################
|
395 |
# ์์ฑ๋ ๊ธฐ๋ณธ ์ค๋ช
์ LLM์ ํตํด ํ์ฅ
|
396 |
##############################################################################
|
397 |
+
def enhance_descriptions(results, objects, progress=None):
|
398 |
obj_name = " ๋ฐ ".join([obj for obj in objects if obj])
|
399 |
+
total_categories = len(results)
|
400 |
+
|
401 |
+
for i, (category, result) in enumerate(results.items()):
|
402 |
+
# ํ๋ก๊ทธ๋ ์ค ์
๋ฐ์ดํธ (์งํ๋ฅ ์ 0.2~0.9 ์ฌ์ด๋ก ๋งคํ)
|
403 |
+
if progress:
|
404 |
+
progress_value = 0.2 + (i / total_categories) * 0.7
|
405 |
+
progress(progress_value, f"์นดํ
๊ณ ๋ฆฌ '{category}' ์ฒ๋ฆฌ ์ค...")
|
406 |
+
|
407 |
result["enhanced"] = enhance_with_llm(result["base"], obj_name, category)
|
408 |
+
|
409 |
+
# ์๋ฃ ๋ฉ์์ง
|
410 |
+
if progress:
|
411 |
+
progress(0.95, "๊ฒฐ๊ณผ ์ ๋ฆฌ ์ค...")
|
412 |
+
|
413 |
return results
|
414 |
|
415 |
##############################################################################
|
416 |
# ์ฌ์ฉ์ ์
๋ ฅ(์ต๋ 3๊ฐ ํค์๋)์ ๋ฐ๋ผ ์ฐฝ์์ ๋ณํ ์์ด๋์ด ์์ฑ
|
417 |
##############################################################################
|
418 |
+
def generate_transformations(text1, text2=None, text3=None, progress=None):
|
419 |
+
if progress:
|
420 |
+
progress(0.1, "์์ด๋์ด ๊ธฐ๋ณธ ๊ตฌ์กฐ ์์ฑ ์ค...")
|
421 |
+
|
422 |
if text2 and text3:
|
423 |
results = generate_three_objects_interaction(text1, text2, text3)
|
424 |
objects = [text1, text2, text3]
|
|
|
428 |
else:
|
429 |
results = generate_single_object_transformations(text1)
|
430 |
objects = [text1]
|
431 |
+
|
432 |
+
if progress:
|
433 |
+
progress(0.2, "Gemini API๋ฅผ ํตํ ์์ด๋์ด ํ์ฅ ์ค...")
|
434 |
+
|
435 |
+
return enhance_descriptions(results, objects, progress)
|
436 |
|
437 |
##############################################################################
|
438 |
# ๊ฒฐ๊ณผ ํฌ๋งทํ
|
|
|
446 |
##############################################################################
|
447 |
# Gradio UI์์ ํธ์ถํ ํจ์
|
448 |
##############################################################################
|
449 |
+
def process_inputs(text1, text2, text3, progress=gr.Progress()):
|
|
|
|
|
|
|
450 |
text1 = text1.strip() if text1 else None
|
451 |
text2 = text2.strip() if text2 else None
|
452 |
text3 = text3.strip() if text3 else None
|
453 |
+
|
454 |
if not text1:
|
455 |
+
return "์ค๋ฅ: ์ต์ ํ๋์ ํค์๋๋ฅผ ์
๋ ฅํด์ฃผ์ธ์."
|
|
|
456 |
|
457 |
+
progress(0.05, "์์ด๋์ด ์์ฑ ์ค๋น ์ค...")
|
|
|
|
|
458 |
|
459 |
+
# ํค์๋ ์ ๋ณด ํ์ธ
|
460 |
+
keyword_info = f"ํค์๋: {text1}"
|
461 |
+
if text2:
|
462 |
+
keyword_info += f", {text2}"
|
463 |
+
if text3:
|
464 |
+
keyword_info += f", {text3}"
|
465 |
+
|
466 |
+
progress(0.1, "์ฐฝ์์ ์ธ ๋ชจ๋ธ/์ปจ์
/ํ์ ๋ณํ ์์ด๋์ด ์์ฑ ์์...")
|
467 |
|
468 |
+
# ๊ฒฐ๊ณผ ์์ฑ
|
469 |
+
results = generate_transformations(text1, text2, text3, progress)
|
470 |
|
471 |
+
progress(0.95, "๊ฒฐ๊ณผ ํฌ๋งทํ
์ค...")
|
472 |
+
formatted = format_results(results)
|
473 |
+
|
474 |
+
progress(1.0, "์๋ฃ!")
|
475 |
+
return formatted
|
476 |
|
477 |
##############################################################################
|
478 |
# API ํค ๊ฒฝ๊ณ ๋ฉ์์ง
|
|
|
497 |
h2 { color: #555; }
|
498 |
.output { background-color: #ffffff; padding: 15px; border-radius: 8px; }
|
499 |
.gr-button { background-color: #4CAF50; color: white; border: none; border-radius: 4px; padding: 8px 16px; }
|
500 |
+
.progress-message { color: #2196F3; font-weight: bold; margin-top: 10px; }
|
501 |
</style>
|
502 |
""")
|
503 |
|
|
|
512 |
text_input1 = gr.Textbox(label="ํค์๋ 1 (ํ์)", placeholder="์: ์ค๋งํธํฐ")
|
513 |
text_input2 = gr.Textbox(label="ํค์๋ 2 (์ ํ)", placeholder="์: ์ธ๊ณต์ง๋ฅ")
|
514 |
text_input3 = gr.Textbox(label="ํค์๋ 3 (์ ํ)", placeholder="์: ํฌ์ค์ผ์ด")
|
515 |
+
|
516 |
+
# ์ํ ๋ฉ์์ง๋ฅผ ํ์ํ ์์ญ ์ถ๊ฐ
|
517 |
+
status_msg = gr.Markdown("๐ก '์์ด๋์ด ์์ฑํ๊ธฐ' ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํ๋ก๊ทธ๋ ์ค ๋ฐ๊ฐ ๋ํ๋ฉ๋๋ค.")
|
518 |
+
|
519 |
+
submit_button = gr.Button("์์ด๋์ด ์์ฑํ๊ธฐ", variant="primary")
|
520 |
|
521 |
+
# ์ฐ์ธก ์ถ๋ ฅ ์์ญ
|
522 |
with gr.Column(scale=2):
|
523 |
+
idea_output = gr.Markdown(label="์์ด๋์ด ๊ฒฐ๊ณผ")
|
|
|
524 |
|
525 |
# ์์ ์
๋ ฅ
|
526 |
gr.Examples(
|
|
|
533 |
inputs=[text_input1, text_input2, text_input3],
|
534 |
)
|
535 |
|
536 |
+
# ๋ฒํผ ์ด๋ฒคํธ
|
537 |
+
submit_button.click(
|
538 |
+
fn=process_inputs,
|
539 |
+
inputs=[text_input1, text_input2, text_input3],
|
540 |
+
outputs=idea_output
|
541 |
+
)
|
542 |
|
543 |
if __name__ == "__main__":
|
544 |
+
demo.launch(debug=True)
|