@@ -139,20 +139,31 @@ def render_llm_section(config: Config | None = None) -> None:
139139 values : dict [str , str | None ] = {}
140140 non_secret_values : dict [str , str | None ] = {}
141141 for label , env_key , is_secret in fields :
142- prefill = st .session_state .get (env_key ) or os .getenv (env_key ) or ""
142+ current_val = st .session_state .get (env_key ) or os .getenv (env_key ) or ""
143143 if is_secret :
144- values [env_key ] = st .text_input (
145- label , value = prefill , type = "password" , key = f"llm_{ env_key } "
144+ # 비밀키는 값을 미리 채우지 않음 (보안)
145+ # 값이 설정되어 있으면 placeholder로 표시
146+ placeholder = (
147+ "값 설정됨 (변경하려면 입력)" if current_val else "값 없음"
146148 )
149+ new_val = st .text_input (
150+ label ,
151+ value = "" ,
152+ type = "password" ,
153+ key = f"llm_{ env_key } " ,
154+ placeholder = placeholder ,
155+ )
156+ # 입력값이 없으면 기존 값 유지, 있으면 새 값 사용
157+ values [env_key ] = new_val if new_val else current_val
147158 else :
148- v = st .text_input (label , value = prefill , key = f"llm_{ env_key } " )
159+ v = st .text_input (label , value = current_val , key = f"llm_{ env_key } " )
149160 values [env_key ] = v
150161 non_secret_values [env_key ] = v
151162
152163 # 메시지 영역
153164 llm_msg = st .empty ()
154165
155- st .markdown ("**프로파일 저장 (비밀키 제외) **" )
166+ st .markdown ("**프로파일 저장**" )
156167 with st .form ("llm_profile_save_form" ):
157168 prof_cols = st .columns ([2 , 2 ])
158169 with prof_cols [0 ]:
@@ -185,10 +196,16 @@ def render_llm_section(config: Config | None = None) -> None:
185196 with st .expander ("저장된 LLM 프로파일" , expanded = False ):
186197 for p in reg .profiles :
187198 if p .fields :
188- pairs = [
189- f"{ k } ={ p .fields .get (k , '' )} "
190- for k in sorted (p .fields .keys ())
191- ]
199+ # 필드 정의 가져오기 (시크릿 여부 확인용)
200+ fields_def = _llm_fields (p .provider )
201+ secret_keys = {k for _ , k , is_secret in fields_def if is_secret }
202+
203+ pairs = []
204+ for k in sorted (p .fields .keys ()):
205+ val = p .fields .get (k , "" )
206+ if k in secret_keys :
207+ val = "***"
208+ pairs .append (f"{ k } ={ val } " )
192209 fields_text = ", " .join (pairs )
193210 else :
194211 fields_text = "-"
@@ -217,20 +234,28 @@ def render_llm_section(config: Config | None = None) -> None:
217234 e_fields = _embedding_fields (e_provider )
218235 e_values : dict [str , str | None ] = {}
219236 for label , env_key , is_secret in e_fields :
220- prefill = st .session_state .get (env_key ) or os .getenv (env_key ) or ""
237+ current_val = st .session_state .get (env_key ) or os .getenv (env_key ) or ""
221238 if is_secret :
222- e_values [ env_key ] = st . text_input (
223- label , value = prefill , type = "password" , key = f"emb_ { env_key } "
239+ placeholder = (
240+ "값 설정됨 (변경하려면 입력)" if current_val else "값 없음 "
224241 )
242+ new_val = st .text_input (
243+ label ,
244+ value = "" ,
245+ type = "password" ,
246+ key = f"emb_{ env_key } " ,
247+ placeholder = placeholder ,
248+ )
249+ e_values [env_key ] = new_val if new_val else current_val
225250 else :
226251 e_values [env_key ] = st .text_input (
227- label , value = prefill , key = f"emb_{ env_key } "
252+ label , value = current_val , key = f"emb_{ env_key } "
228253 )
229254
230255 # 메시지 영역: 버튼 컬럼 밖(섹션 폭)
231256 emb_msg = st .empty ()
232257
233- st .markdown ("**Embeddings 프로파일 저장 (시크릿 포함) **" )
258+ st .markdown ("**Embeddings 프로파일 저장**" )
234259 with st .form ("embedding_profile_save_form" ):
235260 e_prof_cols = st .columns ([2 , 2 ])
236261 with e_prof_cols [0 ]:
@@ -263,10 +288,16 @@ def render_llm_section(config: Config | None = None) -> None:
263288 with st .expander ("저장된 Embeddings 프로파일" , expanded = False ):
264289 for p in e_reg .profiles :
265290 if p .fields :
266- pairs = [
267- f"{ k } ={ p .fields .get (k , '' )} "
268- for k in sorted (p .fields .keys ())
269- ]
291+ # 필드 정의 가져오기 (시크릿 여부 확인용)
292+ fields_def = _embedding_fields (p .provider )
293+ secret_keys = {k for _ , k , is_secret in fields_def if is_secret }
294+
295+ pairs = []
296+ for k in sorted (p .fields .keys ()):
297+ val = p .fields .get (k , "" )
298+ if k in secret_keys :
299+ val = "***"
300+ pairs .append (f"{ k } ={ val } " )
270301 fields_text = ", " .join (pairs )
271302 else :
272303 fields_text = "-"
0 commit comments