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()
|