dev-yuje commited on
Commit
e1ae1af
Β·
1 Parent(s): 2a84ec0

fix: resolve Gradio ValueError by explicitly binding server to 0.0.0.0 and port 7860 in Hugging Face Spaces

Browse files
Files changed (2) hide show
  1. AGENTS.md +7 -1
  2. app.py +1 -2
AGENTS.md CHANGED
@@ -109,7 +109,6 @@ def test_portfolio_showcase_aggregation_query():
109
  - [x] **2. 지식 κ·Έλž˜ν”„ 밀도 ν–₯상**: ν™•λ³΄λœ 데이터λ₯Ό `finGraph.py`λ₯Ό 톡해 Neo4j에 μ μž¬ν•˜μ—¬ Company, Technology λ“±μ˜ λ…Έλ“œμ™€ 관계선(Edge) λŒ€ν­ ν™•μž₯. (총 296개의 λ…Έλ“œ 및 346개의 κ΄€κ³„μ„ μœΌλ‘œ μ΄ˆκ³ λ°€λ„ μ€ν•˜μˆ˜ μŠ€μΌ€μΌ κ·Έλž˜ν”„ ꡬ좕 μ™„λ£Œ)
110
  - [x] **3. ν™˜κ°(Hallucination) λ°©μ§€ ν”„λ‘¬ν”„νŠΈ κ°•ν™”**: `finRetrieval.py`의 ν”„λ‘¬ν”„νŠΈμ— "λ°˜λ“œμ‹œ 제곡된 검색 κ²°κ³Ό 기반으둜만 λ‹΅λ³€ν•˜κ³ , μ—†λŠ” κΈ°μ—…μ΄λ‚˜ κ°€μ§œ URL(example.com λ“±)은 μ ˆλŒ€ μ§€μ–΄λ‚΄μ§€ 말 것"을 λͺ…μ‹œ. (μ² λ²½ ν”„λ‘¬ν”„νŠΈ κ°€λ“œλ ˆμΌ 섀계 μ™„λ£Œ)
111
  - [x] **4. 3λŒ€ μ‹œλ‚˜λ¦¬μ˜€ μ΅œμ’… 톡과**: `tests/smoke_test_rag.py`λ₯Ό μž¬μ‹€ν–‰ν•˜μ—¬ κ°€μ§œ λ§ν¬λ‚˜ μ™ΈλΆ€ 지식 κ°œμž… 없이, μˆ˜μ§‘λœ κ΅­λ‚΄ λ‰΄μŠ€ 기반으둜 μ™„λ²½νžˆ λ‹΅λ³€ν•˜λŠ”μ§€ 검증. (ν•˜μ΄λΈŒλ¦¬λ“œ μ˜ˆλΉ„ 검색기 κ²°ν•©μœΌλ‘œ 3λŒ€ κ³¨λ“œ μ‹œλ‚˜λ¦¬μ˜€ 100% μ™„μ „ PASS 검증 성곡)
112
- - [x] **5. Hugging Face λŸ°νƒ€μž„ μ—λŸ¬ ν•΄κ²°**: Spaces 격리 ν™˜κ²½μ—μ„œμ˜ 루프백 바인딩 였λ₯˜(ValueError) 및 Jinja2 ν˜Έν™˜μ„±(TypeError) 문제 μ™„λ²½ μˆ˜μ • μ™„λ£Œ.
113
 
114
  ## 배포 및 μžλ™ν™” νŒŒμ΄ν”„λΌμΈ (Pipeline Automation)
115
  - [x] **맀일 μƒˆλ²½ 1μ‹œ(KST) μ΅œμ‹ ν™” νŒŒμ΄ν”„λΌμΈ ꡬ좕**: 크둀링(`finScrapping.py`) ➑️ 지식 κ·Έλž˜ν”„ 적재(`finGraph.py`)둜 μ΄μ–΄μ§€λŠ” μ—”λ“œνˆ¬μ—”λ“œ(End-to-End) μžλ™ν™”.
@@ -117,3 +116,10 @@ def test_portfolio_showcase_aggregation_query():
117
  - **λΉ„ν™œμ„±ν™” μ‚¬μœ **: 무인 μžλ™ μŠ€μΌ€μ€„ μ‹€ν–‰ μ‹œ λ°œμƒν•˜λŠ” OpenAI API 토큰 λΉ„μš©μ„ μ„Έμ΄λΈŒν•˜κ³ , ν–₯ν›„ μ˜ˆμ •λœ Neo4j ν΄λΌμš°λ“œ μΈμŠ€ν„΄μŠ€ λ³€κ²½ 및 이전(Migration) μž‘μ—…μ— μœ μ—°ν•˜κ²Œ λŒ€μ²˜ν•˜κΈ° μœ„ν•΄ μž„μ‹œ λΉ„ν™œμ„±ν™” μ²˜λ¦¬ν•΄ λ‘μ—ˆμŠ΅λ‹ˆλ‹€.
118
  - **κ΅¬ν˜„ μ™„λ£Œ λ‚΄μ—­**: `.github/workflows/daily_pipeline.yml` μ›Œν¬ν”Œλ‘œμš° λͺ…μ„Έ 및 연쇄 배포(HF Spaces) 동기화 μ²΄κ³„λŠ” 100% μ™„μ „ν•˜κ²Œ 섀계/κ΅¬ν˜„λ˜μ–΄ μž₯μ°©λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬λŠ” μŠ€μΌ€μ€„ 크둠(`schedule cron`) λΆ€λΆ„λ§Œ μ£Όμ„μœΌλ‘œ 막아둔 μ•ˆμ „ μƒνƒœμ΄λ©°, ν–₯ν›„ μΈμŠ€ν„΄μŠ€ 이전이 μ™„λ£Œλ˜λ©΄ μ£Όμ„λ§Œ ν’€μ–΄ μ¦‰μ‹œ 가동할 수 μžˆμŠ΅λ‹ˆλ‹€.
119
 
 
 
 
 
 
 
 
 
109
  - [x] **2. 지식 κ·Έλž˜ν”„ 밀도 ν–₯상**: ν™•λ³΄λœ 데이터λ₯Ό `finGraph.py`λ₯Ό 톡해 Neo4j에 μ μž¬ν•˜μ—¬ Company, Technology λ“±μ˜ λ…Έλ“œμ™€ 관계선(Edge) λŒ€ν­ ν™•μž₯. (총 296개의 λ…Έλ“œ 및 346개의 κ΄€κ³„μ„ μœΌλ‘œ μ΄ˆκ³ λ°€λ„ μ€ν•˜μˆ˜ μŠ€μΌ€μΌ κ·Έλž˜ν”„ ꡬ좕 μ™„λ£Œ)
110
  - [x] **3. ν™˜κ°(Hallucination) λ°©μ§€ ν”„λ‘¬ν”„νŠΈ κ°•ν™”**: `finRetrieval.py`의 ν”„λ‘¬ν”„νŠΈμ— "λ°˜λ“œμ‹œ 제곡된 검색 κ²°κ³Ό 기반으둜만 λ‹΅λ³€ν•˜κ³ , μ—†λŠ” κΈ°μ—…μ΄λ‚˜ κ°€μ§œ URL(example.com λ“±)은 μ ˆλŒ€ μ§€μ–΄λ‚΄μ§€ 말 것"을 λͺ…μ‹œ. (μ² λ²½ ν”„λ‘¬ν”„νŠΈ κ°€λ“œλ ˆμΌ 섀계 μ™„λ£Œ)
111
  - [x] **4. 3λŒ€ μ‹œλ‚˜λ¦¬μ˜€ μ΅œμ’… 톡과**: `tests/smoke_test_rag.py`λ₯Ό μž¬μ‹€ν–‰ν•˜μ—¬ κ°€μ§œ λ§ν¬λ‚˜ μ™ΈλΆ€ 지식 κ°œμž… 없이, μˆ˜μ§‘λœ κ΅­λ‚΄ λ‰΄μŠ€ 기반으둜 μ™„λ²½νžˆ λ‹΅λ³€ν•˜λŠ”μ§€ 검증. (ν•˜μ΄λΈŒλ¦¬λ“œ μ˜ˆλΉ„ 검색기 κ²°ν•©μœΌλ‘œ 3λŒ€ κ³¨λ“œ μ‹œλ‚˜λ¦¬μ˜€ 100% μ™„μ „ PASS 검증 성곡)
 
112
 
113
  ## 배포 및 μžλ™ν™” νŒŒμ΄ν”„λΌμΈ (Pipeline Automation)
114
  - [x] **맀일 μƒˆλ²½ 1μ‹œ(KST) μ΅œμ‹ ν™” νŒŒμ΄ν”„λΌμΈ ꡬ좕**: 크둀링(`finScrapping.py`) ➑️ 지식 κ·Έλž˜ν”„ 적재(`finGraph.py`)둜 μ΄μ–΄μ§€λŠ” μ—”λ“œνˆ¬μ—”λ“œ(End-to-End) μžλ™ν™”.
 
116
  - **λΉ„ν™œμ„±ν™” μ‚¬μœ **: 무인 μžλ™ μŠ€μΌ€μ€„ μ‹€ν–‰ μ‹œ λ°œμƒν•˜λŠ” OpenAI API 토큰 λΉ„μš©μ„ μ„Έμ΄λΈŒν•˜κ³ , ν–₯ν›„ μ˜ˆμ •λœ Neo4j ν΄λΌμš°λ“œ μΈμŠ€ν„΄μŠ€ λ³€κ²½ 및 이전(Migration) μž‘μ—…μ— μœ μ—°ν•˜κ²Œ λŒ€μ²˜ν•˜κΈ° μœ„ν•΄ μž„μ‹œ λΉ„ν™œμ„±ν™” μ²˜λ¦¬ν•΄ λ‘μ—ˆμŠ΅λ‹ˆλ‹€.
117
  - **κ΅¬ν˜„ μ™„λ£Œ λ‚΄μ—­**: `.github/workflows/daily_pipeline.yml` μ›Œν¬ν”Œλ‘œμš° λͺ…μ„Έ 및 연쇄 배포(HF Spaces) 동기화 μ²΄κ³„λŠ” 100% μ™„μ „ν•˜κ²Œ 섀계/κ΅¬ν˜„λ˜μ–΄ μž₯μ°©λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬λŠ” μŠ€μΌ€μ€„ 크둠(`schedule cron`) λΆ€λΆ„λ§Œ μ£Όμ„μœΌλ‘œ 막아둔 μ•ˆμ „ μƒνƒœμ΄λ©°, ν–₯ν›„ μΈμŠ€ν„΄μŠ€ 이전이 μ™„λ£Œλ˜λ©΄ μ£Όμ„λ§Œ ν’€μ–΄ μ¦‰μ‹œ 가동할 수 μžˆμŠ΅λ‹ˆλ‹€.
118
 
119
+ ## πŸ› οΈ 졜근 이슈 ν•΄κ²° λ‚΄μ—­ (2026-05-19)
120
+ - [x] **Hugging Face Spaces λŸ°νƒ€μž„ μ—λŸ¬(ValueError 및 Internal Server Error) ν•΄κ²°**:
121
+ - **ν˜„μƒ**: Hugging Face Spaces ν™˜κ²½μ—μ„œ λΉŒλ“œλŠ” μ„±κ³΅ν•˜μ˜€μœΌλ‚˜ ꡬ동 μ‹œ ν˜Ήμ€ 첫 질의 μ‹œ λŸ°νƒ€μž„ μ—λŸ¬(ValueError) ν˜Ήμ€ 500 Internal Server Error λ°œμƒ.
122
+ - **원인**: `demo.launch()`에 ν˜ΈμŠ€νŠΈμ™€ 포트(`server_name="0.0.0.0"`, `server_port=7860`)λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ£Όμ§€ μ•Šμ•„ localhost 바인딩 μ‹œ μ™ΈλΆ€ 접근이 μ°¨λ‹¨λ˜λ©΄μ„œ `ValueError: When localhost is not accessible, a shareable link must be created.` μ—λŸ¬ λ°œμƒ.
123
+ - **쑰치**: `app.py`의 `launch_kwargs`에 `server_name="0.0.0.0"`κ³Ό `server_port=7860`을 μƒμ‹œλ‘œ μ£Όμž…ν•˜λ„λ‘ μ •λ°€ν•˜κ²Œ κ΅¬μ‘°ν™”ν•˜μ—¬ 둜컬 및 원격 가상 μƒŒλ“œλ°•μŠ€ ν™˜κ²½ λͺ¨λ‘μ—μ„œ ν¬λž˜μ‹œ 없이 μ™„λ²½ν•˜κ²Œ κ΅¬λ™λ˜λ„λ‘ μˆ˜μ • μ™„λ£Œ.
124
+ - **검증**: `ruff`, `mypy` 검사λ₯Ό 단 1개의 였λ₯˜λ„ 없이 ν†΅κ³Όν•˜κ³  `pytest tests/` 및 3λŒ€ κ³¨λ“œ μ‹œλ‚˜λ¦¬μ˜€ `smoke_test_rag.py`λ₯Ό 100% μ™„μ „ ν†΅κ³Όν•˜μ—¬ 완벽성을 보μž₯함.
125
+
app.py CHANGED
@@ -146,8 +146,7 @@ interface_kwargs = {
146
  "cache_examples": False
147
  }
148
 
149
- # HF Spaces μ»¨ν…Œμ΄λ„ˆ λ‚΄ 루프백 검증 μ‹€νŒ¨(ValueError)λ₯Ό μ™„λ²½νžˆ μš°νšŒν•˜κΈ° μœ„ν•΄
150
- # server_nameκ³Ό server_portλ₯Ό λ°”μΈλ”©ν•˜κ³  theme을 λΆ„κΈ°ν•˜μ—¬ μ£Όμž…ν•©λ‹ˆλ‹€.
151
  launch_kwargs = {
152
  "server_name": "0.0.0.0",
153
  "server_port": 7860,
 
146
  "cache_examples": False
147
  }
148
 
149
+ # HF Spaces μ»¨ν…Œμ΄λ„ˆ λ‚΄ 루프백 검증 μ‹€νŒ¨(ValueError) 우회 및 둜컬/원격 ν˜Έν™˜ ꡬ동을 μœ„ν•΄ launch 인자 μ •λ°€ 섀계
 
150
  launch_kwargs = {
151
  "server_name": "0.0.0.0",
152
  "server_port": 7860,