ssboost commited on
Commit
7b339a1
·
verified ·
1 Parent(s): b86b06a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +73 -12
app.py CHANGED
@@ -111,20 +111,68 @@ class GradioClientController:
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:
@@ -137,6 +185,8 @@ class GradioClientController:
137
  def update_dropdowns(self, bg_type: str) -> Tuple:
138
  """배경 유형에 따른 드롭다운 업데이트"""
139
  try:
 
 
140
  if not self._ensure_client():
141
  logger.error("클라이언트 연결 실패")
142
  # 캐시된 데이터가 있으면 사용
@@ -148,7 +198,14 @@ class GradioClientController:
148
  else:
149
  # 실시간으로 API 호출
150
  result = self.client.predict(bg_type, api_name="/update_dropdowns")
151
- logger.info(f"실시간 드롭다운 업데이트 완료: {bg_type}")
 
 
 
 
 
 
 
152
 
153
  # 결과를 Gradio 업데이트 형식으로 변환
154
  if isinstance(result, (list, tuple)) and len(result) >= 7:
@@ -157,19 +214,24 @@ class GradioClientController:
157
 
158
  for i, choices in enumerate(result[:7]):
159
  is_visible = (bg_type == visibility_map[i])
 
 
 
 
160
  updates.append(gr.update(
161
  visible=is_visible,
162
  choices=choices if choices else [],
163
- value=choices[0] if choices and len(choices) > 0 else None
164
  ))
165
 
166
  return tuple(updates)
167
  else:
168
- logger.warning("API에서 예상과 다른 형식의 결과를 반환했습니다.")
169
  return tuple([gr.update() for _ in range(7)])
170
 
171
  except Exception as e:
172
  logger.error(f"드롭다운 업데이트 오류: {str(e)}")
 
173
  # 캐시된 데이터 시도
174
  if bg_type in self.background_options:
175
  try:
@@ -345,10 +407,9 @@ def create_gradio_interface():
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
 
111
  logger.error(f"초기 드롭다운 데이터 로드 실패: {str(e)}")
112
  return tuple([[] for _ in range(7)])
113
 
114
+ def _parse_dropdown_result(self, result):
115
+ """API 응답에서 실제 선택지 데이터만 추출"""
116
+ try:
117
+ if isinstance(result, (list, tuple)):
118
+ parsed_choices = []
119
+ for item in result:
120
+ if isinstance(item, dict):
121
+ # Gradio 응답에서 choices 추출
122
+ if 'choices' in item:
123
+ choices = item['choices']
124
+ elif '__type__' in item and 'choices' in str(item):
125
+ # __type__ 구조에서 choices 찾기
126
+ choices = item.get('choices', [])
127
+ else:
128
+ # 직접 리스트인 경우
129
+ choices = item if isinstance(item, list) else []
130
+ elif isinstance(item, list):
131
+ # 이미 리스트인 경우
132
+ choices = item
133
+ else:
134
+ # 문자열이거나 기타 타입
135
+ choices = [str(item)] if item else []
136
+
137
+ parsed_choices.append(choices)
138
+
139
+ return parsed_choices
140
+ else:
141
+ logger.warning(f"예상하지 못한 응답 형식: {type(result)}")
142
+ return [[] for _ in range(7)]
143
+ except Exception as e:
144
+ logger.error(f"드롭다운 결과 파싱 오류: {str(e)}")
145
+ return [[] for _ in range(7)]
146
+
147
  def get_initial_simple_choices(self) -> list:
148
  """심플 배경 초기 선택지만 반환"""
149
  try:
150
+ logger.info("심플 배경 선택지 로드 시작")
151
+
152
  if "심플 배경" in self.background_options:
153
+ result = self.background_options["심플 배경"]
154
+ logger.info("캐시에서 심플 배경 선택지 로드")
155
  elif self.client:
156
+ logger.info("API에서 심플 배경 선택지 로드")
157
  result = self.client.predict("심플 배경", api_name="/update_dropdowns")
158
+ logger.info(f"API 응답: {result}")
159
+
160
+ # 응답 파싱
161
+ parsed_result = self._parse_dropdown_result(result)
162
+ self.background_options["심플 배경"] = parsed_result
163
+
164
+ if len(parsed_result) > 0:
165
+ choices = parsed_result[0]
166
+ logger.info(f"파싱된 심플 배경 선택지: {choices}")
167
+ return choices
168
+ else:
169
+ logger.error("클라이언트가 초기화되지 않음")
170
+ return []
171
+
172
  except Exception as e:
173
  logger.error(f"심플 배경 선택지 로드 실패: {str(e)}")
174
+ logger.error(traceback.format_exc())
175
+
176
  return []
177
 
178
  def _ensure_client(self) -> bool:
 
185
  def update_dropdowns(self, bg_type: str) -> Tuple:
186
  """배경 유형에 따른 드롭다운 업데이트"""
187
  try:
188
+ logger.info(f"드롭다운 업데이트 시작: {bg_type}")
189
+
190
  if not self._ensure_client():
191
  logger.error("클라이언트 연결 실패")
192
  # 캐시된 데이터가 있으면 사용
 
198
  else:
199
  # 실시간으로 API 호출
200
  result = self.client.predict(bg_type, api_name="/update_dropdowns")
201
+ logger.info(f"API 응답 원본: {result}")
202
+
203
+ # 응답 파싱
204
+ parsed_result = self._parse_dropdown_result(result)
205
+ self.background_options[bg_type] = parsed_result
206
+ result = parsed_result
207
+
208
+ logger.info(f"파싱된 결과: {result}")
209
 
210
  # 결과를 Gradio 업데이트 형식으로 변환
211
  if isinstance(result, (list, tuple)) and len(result) >= 7:
 
214
 
215
  for i, choices in enumerate(result[:7]):
216
  is_visible = (bg_type == visibility_map[i])
217
+ first_choice = choices[0] if choices and len(choices) > 0 else None
218
+
219
+ logger.info(f"드롭다운 {i} ({visibility_map[i]}): visible={is_visible}, choices_count={len(choices) if choices else 0}, first_choice={first_choice}")
220
+
221
  updates.append(gr.update(
222
  visible=is_visible,
223
  choices=choices if choices else [],
224
+ value=first_choice
225
  ))
226
 
227
  return tuple(updates)
228
  else:
229
+ logger.warning(f"API에서 예상과 다른 형식의 결과를 반환했습니다: {type(result)}, length={len(result) if hasattr(result, '__len__') else 'N/A'}")
230
  return tuple([gr.update() for _ in range(7)])
231
 
232
  except Exception as e:
233
  logger.error(f"드롭다운 업데이트 오류: {str(e)}")
234
+ logger.error(traceback.format_exc())
235
  # 캐시된 데이터 시도
236
  if bg_type in self.background_options:
237
  try:
 
407
  value="심플 배경"
408
  )
409
 
410
+ # 드롭다운 컴포넌트들 - 초기에는 상태로 시작
411
  simple_dropdown = gr.Dropdown(
412
+ choices=[],
 
413
  label="심플 배경 선택",
414
  visible=True,
415
  interactive=True