Update app.py
Browse files
app.py
CHANGED
|
@@ -58,8 +58,8 @@ class GradioClientController:
|
|
| 58 |
try:
|
| 59 |
self.client = Client(self.api_endpoint)
|
| 60 |
logger.info("API 클라이언트가 성공적으로 초기화되었습니다.")
|
| 61 |
-
# 초기화 성공 시 배경 옵션 로드
|
| 62 |
-
self.
|
| 63 |
return
|
| 64 |
except Exception as e:
|
| 65 |
if attempt < max_retries - 1:
|
|
@@ -72,21 +72,60 @@ class GradioClientController:
|
|
| 72 |
logger.error(f"클라이언트 초기화 실패: {str(e)}")
|
| 73 |
self.client = None
|
| 74 |
|
| 75 |
-
def
|
| 76 |
-
"""배경
|
| 77 |
try:
|
| 78 |
if self.client:
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
result = self.client.predict(bg_type, api_name="/update_dropdowns")
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
except Exception as e:
|
| 88 |
-
logger.
|
| 89 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 90 |
|
| 91 |
def _ensure_client(self) -> bool:
|
| 92 |
"""클라이언트 연결 상태 확인 및 재연결"""
|
|
@@ -306,9 +345,10 @@ def create_gradio_interface():
|
|
| 306 |
value="심플 배경"
|
| 307 |
)
|
| 308 |
|
| 309 |
-
# 드롭다운 컴포넌트들
|
| 310 |
simple_dropdown = gr.Dropdown(
|
| 311 |
-
choices=
|
|
|
|
| 312 |
label="심플 배경 선택",
|
| 313 |
visible=True,
|
| 314 |
interactive=True
|
|
@@ -451,10 +491,20 @@ def create_gradio_interface():
|
|
| 451 |
]
|
| 452 |
)
|
| 453 |
|
| 454 |
-
# 앱 로드 시
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 455 |
app.load(
|
| 456 |
-
fn=
|
| 457 |
-
inputs=[background_type],
|
| 458 |
outputs=[simple_dropdown, studio_dropdown, nature_dropdown,
|
| 459 |
indoor_dropdown, special_dropdown, jewelry_dropdown, special_effects_dropdown]
|
| 460 |
)
|
|
|
|
| 58 |
try:
|
| 59 |
self.client = Client(self.api_endpoint)
|
| 60 |
logger.info("API 클라이언트가 성공적으로 초기화되었습니다.")
|
| 61 |
+
# 초기화 성공 시 심플 배경 옵션 먼저 로드
|
| 62 |
+
self._load_simple_background()
|
| 63 |
return
|
| 64 |
except Exception as e:
|
| 65 |
if attempt < max_retries - 1:
|
|
|
|
| 72 |
logger.error(f"클라이언트 초기화 실패: {str(e)}")
|
| 73 |
self.client = None
|
| 74 |
|
| 75 |
+
def _load_simple_background(self):
|
| 76 |
+
"""심플 배경 옵션만 먼저 로드"""
|
| 77 |
try:
|
| 78 |
if self.client:
|
| 79 |
+
result = self.client.predict("심플 배경", api_name="/update_dropdowns")
|
| 80 |
+
if isinstance(result, (list, tuple)) and len(result) >= 7:
|
| 81 |
+
self.background_options["심플 배경"] = result
|
| 82 |
+
logger.info("심플 배경 옵션 로드 완료")
|
| 83 |
+
return result[0] # 심플 배경 선택지 반환
|
| 84 |
+
except Exception as e:
|
| 85 |
+
logger.warning(f"심플 배경 옵션 로드 실패: {str(e)}")
|
| 86 |
+
return []
|
| 87 |
+
def get_initial_dropdown_data(self, bg_type: str = "심플 배경") -> Tuple:
|
| 88 |
+
"""초기 드롭다운 데이터 가져오기"""
|
| 89 |
+
try:
|
| 90 |
+
# 캐시된 데이터 먼저 확인
|
| 91 |
+
if bg_type in self.background_options:
|
| 92 |
+
result = self.background_options[bg_type]
|
| 93 |
+
logger.info(f"캐시에서 초기 드롭다운 데이터 로드: {bg_type}")
|
| 94 |
+
else:
|
| 95 |
+
# API 호출로 데이터 가져오기
|
| 96 |
+
if self.client:
|
| 97 |
result = self.client.predict(bg_type, api_name="/update_dropdowns")
|
| 98 |
+
self.background_options[bg_type] = result # 캐시에 저장
|
| 99 |
+
logger.info(f"API에서 초기 드롭다운 데이터 로드: {bg_type}")
|
| 100 |
+
else:
|
| 101 |
+
logger.error("클라이언트가 초기화되지 않음")
|
| 102 |
+
return tuple([[] for _ in range(7)])
|
| 103 |
+
|
| 104 |
+
# 결과 반환 (실제 선택지만)
|
| 105 |
+
if isinstance(result, (list, tuple)) and len(result) >= 7:
|
| 106 |
+
return result[:7]
|
| 107 |
+
else:
|
| 108 |
+
return tuple([[] for _ in range(7)])
|
| 109 |
+
|
| 110 |
except Exception as e:
|
| 111 |
+
logger.error(f"초기 드롭다운 데이터 로드 실패: {str(e)}")
|
| 112 |
+
return tuple([[] for _ in range(7)])
|
| 113 |
+
|
| 114 |
+
def get_initial_simple_choices(self) -> list:
|
| 115 |
+
"""심플 배경 초기 선택지만 반환"""
|
| 116 |
+
try:
|
| 117 |
+
if "심플 배경" in self.background_options:
|
| 118 |
+
choices = self.background_options["심플 배경"][0]
|
| 119 |
+
return choices if choices else []
|
| 120 |
+
elif self.client:
|
| 121 |
+
result = self.client.predict("심플 배경", api_name="/update_dropdowns")
|
| 122 |
+
if isinstance(result, (list, tuple)) and len(result) >= 1:
|
| 123 |
+
choices = result[0]
|
| 124 |
+
self.background_options["심플 배경"] = result
|
| 125 |
+
return choices if choices else []
|
| 126 |
+
except Exception as e:
|
| 127 |
+
logger.error(f"심플 배경 선택지 로드 실패: {str(e)}")
|
| 128 |
+
return []
|
| 129 |
|
| 130 |
def _ensure_client(self) -> bool:
|
| 131 |
"""클라이언트 연결 상태 확인 및 재연결"""
|
|
|
|
| 345 |
value="심플 배경"
|
| 346 |
)
|
| 347 |
|
| 348 |
+
# 드롭다운 컴포넌트들 - 심플 배경은 즉시 로드
|
| 349 |
simple_dropdown = gr.Dropdown(
|
| 350 |
+
choices=controller.get_initial_simple_choices(),
|
| 351 |
+
value=None, # 첫 번째 값은 로드 후 설정
|
| 352 |
label="심플 배경 선택",
|
| 353 |
visible=True,
|
| 354 |
interactive=True
|
|
|
|
| 491 |
]
|
| 492 |
)
|
| 493 |
|
| 494 |
+
# 앱 로드 시 모든 드롭다운 초기 설정 (더 강력한 초기화)
|
| 495 |
+
def initialize_all_dropdowns():
|
| 496 |
+
"""모든 드롭다운을 초기화하는 함수"""
|
| 497 |
+
try:
|
| 498 |
+
logger.info("드롭다운 초기화 시작")
|
| 499 |
+
updates = controller.update_dropdowns("심플 배경")
|
| 500 |
+
logger.info("드롭다운 초기화 완료")
|
| 501 |
+
return updates
|
| 502 |
+
except Exception as e:
|
| 503 |
+
logger.error(f"드롭다운 초기화 실패: {str(e)}")
|
| 504 |
+
return tuple([gr.update() for _ in range(7)])
|
| 505 |
+
|
| 506 |
app.load(
|
| 507 |
+
fn=initialize_all_dropdowns,
|
|
|
|
| 508 |
outputs=[simple_dropdown, studio_dropdown, nature_dropdown,
|
| 509 |
indoor_dropdown, special_dropdown, jewelry_dropdown, special_effects_dropdown]
|
| 510 |
)
|