Update app.py
Browse files
app.py
CHANGED
@@ -44,7 +44,6 @@ def get_category_prompt(category):
|
|
44 |
- 바다 환경오염, 식탁으로 되돌아온다. 플라스틱 사용 이대로 괜찮은가요?
|
45 |
- "맥주 한잔이라도 날마다 술이 땡긴다면? 이것 의심해야"
|
46 |
"""
|
47 |
-
|
48 |
elif category == "스토리텔링":
|
49 |
return """
|
50 |
# 스토리텔링 카피라이팅 생성 규칙
|
@@ -175,46 +174,41 @@ with gr.Blocks() as iface:
|
|
175 |
output_boxes[category] = output_box
|
176 |
|
177 |
########################################################
|
178 |
-
#
|
179 |
-
#
|
180 |
########################################################
|
181 |
-
def validate_and_generate(topic):
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
#
|
188 |
-
async for cat, copywriting in generate_copywriting_async(CATEGORIES, topic):
|
189 |
-
results[cat] = copywriting
|
190 |
-
# 현재까지 완료된 내용만 업데이트
|
191 |
-
yield [
|
192 |
-
gr.update(value=f"진행중: [{cat}] 카피라이팅 완료"),
|
193 |
-
*[gr.update(value=results.get(c, "")) for c in CATEGORIES]
|
194 |
-
]
|
195 |
-
|
196 |
-
# 모든 카테고리 완료 후 최종 메세지
|
197 |
yield [
|
198 |
-
gr.update(value="카피라이팅
|
199 |
*[gr.update(value=results.get(c, "")) for c in CATEGORIES]
|
200 |
]
|
201 |
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
]
|
208 |
|
209 |
-
|
210 |
-
|
|
|
|
|
|
|
|
|
211 |
|
|
|
212 |
generate_btn.click(
|
213 |
fn=validate_and_generate,
|
214 |
inputs=[topic],
|
215 |
outputs=[status] + [output_boxes[category] for category in CATEGORIES]
|
216 |
)
|
217 |
|
218 |
-
#
|
219 |
-
iface.queue()
|
220 |
-
iface.launch()
|
|
|
44 |
- 바다 환경오염, 식탁으로 되돌아온다. 플라스틱 사용 이대로 괜찮은가요?
|
45 |
- "맥주 한잔이라도 날마다 술이 땡긴다면? 이것 의심해야"
|
46 |
"""
|
|
|
47 |
elif category == "스토리텔링":
|
48 |
return """
|
49 |
# 스토리텔링 카피라이팅 생성 규칙
|
|
|
174 |
output_boxes[category] = output_box
|
175 |
|
176 |
########################################################
|
177 |
+
# (수정) validate_and_generate 함수를 비동기 함수로 바꿔
|
178 |
+
# 3개의 출력에 맞게 매 yield마다 [status, box1, box2]를 반환
|
179 |
########################################################
|
180 |
+
async def validate_and_generate(topic):
|
181 |
+
try:
|
182 |
+
results = {}
|
183 |
+
# 완료된 순서대로 스트리밍
|
184 |
+
async for cat, copywriting in generate_copywriting_async(CATEGORIES, topic):
|
185 |
+
results[cat] = copywriting
|
186 |
+
# 현재까지 완료된 copywriting을 반영해서 출력
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
187 |
yield [
|
188 |
+
gr.update(value=f"진행중: [{cat}] 카피라이팅 완료"),
|
189 |
*[gr.update(value=results.get(c, "")) for c in CATEGORIES]
|
190 |
]
|
191 |
|
192 |
+
# 모든 카테고리가 완료된 뒤 최종 출력
|
193 |
+
yield [
|
194 |
+
gr.update(value="카피라이팅 생성이 완료되었습니다."),
|
195 |
+
*[gr.update(value=results.get(c, "")) for c in CATEGORIES]
|
196 |
+
]
|
|
|
197 |
|
198 |
+
except Exception as e:
|
199 |
+
logger.error(f"Error during copywriting generation: {str(e)}")
|
200 |
+
yield [
|
201 |
+
gr.update(value=f"오류 발생: {str(e)}"),
|
202 |
+
*[gr.update(value="") for _ in CATEGORIES]
|
203 |
+
]
|
204 |
|
205 |
+
# 비동기 함수를 Gradio 이벤트 핸들러로 등록
|
206 |
generate_btn.click(
|
207 |
fn=validate_and_generate,
|
208 |
inputs=[topic],
|
209 |
outputs=[status] + [output_boxes[category] for category in CATEGORIES]
|
210 |
)
|
211 |
|
212 |
+
# Gradio 3.30+부터는 queue() + async 함수로 스트리밍 가능
|
213 |
+
iface.queue()
|
214 |
+
iface.launch()
|