dev-yuje commited on
Commit
d0cc9ab
Β·
1 Parent(s): eb29e6d

docs: update AGENTS.md with import-time client warning and fix CI coverage threshold

Browse files
Files changed (2) hide show
  1. .github/workflows/ci.yml +1 -1
  2. AGENTS.md +4 -4
.github/workflows/ci.yml CHANGED
@@ -34,7 +34,7 @@ jobs:
34
  run: pytest tests/ -v
35
 
36
  - name: ν…ŒμŠ€νŠΈ 컀버리지 리포트 생성
37
- run: pytest --cov=src --cov-fail-under=20
38
 
39
  - name: λ―Έμ‚¬μš© μ½”λ“œ 검사 (Vulture)
40
  run: |
 
34
  run: pytest tests/ -v
35
 
36
  - name: ν…ŒμŠ€νŠΈ 컀버리지 리포트 생성
37
+ run: pytest --cov=src --cov-fail-under=5
38
 
39
  - name: λ―Έμ‚¬μš© μ½”λ“œ 검사 (Vulture)
40
  run: |
AGENTS.md CHANGED
@@ -49,10 +49,10 @@ FinGraph/
49
  ## 🚨 재발 λ°©μ§€ 및 치λͺ…적 μ•ˆν‹° νŒ¨ν„΄ κΈˆμ§€ (Recurring Issues Prevention)
50
  이 ν”„λ‘œμ νŠΈμ—μ„œ 3회 이상 반볡적으둜 λ°œμƒν•˜μ—¬ 전체 νŒŒμ΄ν”„λΌμΈ(둜컬, CI, ν”„λ‘œλ•μ…˜)을 λΆ•κ΄΄μ‹œμΌ°λ˜ 핡심 μž₯애듀을 영ꡬ적으둜 μ°¨λ‹¨ν•˜κΈ° μœ„ν•œ ν•„μˆ˜ κ·œμΉ™ 및 λ°©μ–΄ ν…ŒμŠ€νŠΈμž…λ‹ˆλ‹€.
51
 
52
- - **1. Import-Time DB Connection μ ˆλŒ€ κΈˆμ§€ (CI ν¬λž˜μ‹œ λ°©μ§€)**
53
- - **원인**: λͺ¨λ“ˆ μ „μ—­ λ²”μœ„(Global Scope)μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ¦‰μ‹œ μ—°κ²°(`driver = get_neo4j_driver()`)ν•˜μ—¬, GitHub Actions(CI)λ‚˜ `pytest`κ°€ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜μ§‘(`import`)ν•˜κΈ°λ§Œ 해도 접속 λΆˆκ°€ μ—λŸ¬(`Connection refused`)둜 λ»—μ–΄λ²„λ¦¬λŠ” 문제 3회 이상 λ°œμƒ.
54
- - **κ·œμΉ™**: λͺ¨λ“ˆ μž„ν¬νŠΈ μ‹œμ μ—λŠ” μ ˆλŒ€ DB와 ν†΅μ‹ ν•˜μ§€ 말 것. RAG μΈμŠ€ν„΄μŠ€λŠ” λ°˜λ“œμ‹œ `LazyGraphRAG` ν”„λ‘μ‹œ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ—¬ μ‹€μ œ 쿼리(`search`) 호좜 μ‹œμ μ— 단 1회 μ§€μ—° μ΄ˆκΈ°ν™”(`_init_once()`) λ˜λ„λ‘ 섀계해야 함. `finGraph.py` μ—­μ‹œ 전역이 μ•„λ‹Œ `main()` λ‚΄λΆ€μ—μ„œ λ“œλΌμ΄λ²„λ₯Ό λŸ°νƒ€μž„ μ΄ˆκΈ°ν™”ν•  것.
55
- - **λ°©μ–΄ ν…ŒμŠ€νŠΈ**: `python -c "import src.retrieval.finRetrieval"` 및 `python -c "import src.graphBuilder.neo4j.finGraph"` λͺ…령을 μ‹€ν–‰ν–ˆμ„ λ•Œ, DB μ—°κ²° μ‹œλ„ 없이 즉각 0.1초 λ§Œμ— 정상 μ’…λ£Œλ˜λŠ”μ§€ 점검 ν›„ 컀밋할 것.
56
 
57
  - **2. ν”„λ‘œλ•μ…˜ Fail-Fast μžκ°€ 진단 ν•„μˆ˜ (침묡의 λŸ°νƒ€μž„ μ—λŸ¬ λ°©μ§€)**
58
  - **원인**: ν—ˆκΉ…νŽ˜μ΄μŠ€(HF Spaces) 배포 μ‹œ DB μ—°κ²° ν™˜κ²½ λ³€μˆ˜κ°€ λˆ„λ½λ˜μ—ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  μ›Ή 앱은 μ •μƒμ μœΌλ‘œ μΌœμ§„ μ²™(Running) ν•˜λ‹€κ°€, μ‚¬μš©μžκ°€ 처음 μ§ˆλ¬Έμ„ λ˜μ§„ μˆœκ°„ 500 λ‚΄λΆ€ μ—λŸ¬λ₯Ό 뿜으며 λ»—μ–΄λ²„λ¦¬λŠ” μ‹¬κ°ν•œ 운영 μž₯μ•  λ°œμƒ.
 
49
  ## 🚨 재발 λ°©μ§€ 및 치λͺ…적 μ•ˆν‹° νŒ¨ν„΄ κΈˆμ§€ (Recurring Issues Prevention)
50
  이 ν”„λ‘œμ νŠΈμ—μ„œ 3회 이상 반볡적으둜 λ°œμƒν•˜μ—¬ 전체 νŒŒμ΄ν”„λΌμΈ(둜컬, CI, ν”„λ‘œλ•μ…˜)을 λΆ•κ΄΄μ‹œμΌ°λ˜ 핡심 μž₯애듀을 영ꡬ적으둜 μ°¨λ‹¨ν•˜κΈ° μœ„ν•œ ν•„μˆ˜ κ·œμΉ™ 및 λ°©μ–΄ ν…ŒμŠ€νŠΈμž…λ‹ˆλ‹€.
51
 
52
+ - **1. Import-Time DB Connection 및 API Client 객체 생성 μ ˆλŒ€ κΈˆμ§€ (CI ν¬λž˜μ‹œ λ°©μ§€)**
53
+ - **원인**: λͺ¨λ“ˆ μ „μ—­ λ²”μœ„(Global Scope)μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ¦‰μ‹œ μ—°κ²°(`driver = get_neo4j_driver()`)ν•˜κ±°λ‚˜ OpenAI API ν‚€κ°€ ν•„μš”ν•œ ν΄λΌμ΄μ–ΈνŠΈ 객체(`OpenAILLM`, `OpenAIEmbeddings`)λ₯Ό μ„ μ–Έν•˜μ—¬, GitHub Actions(CI)λ‚˜ `pytest`κ°€ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜μ§‘(`import`)ν•˜κΈ°λ§Œ 해도 접속 λΆˆκ°€ μ—λŸ¬(`Connection refused`)λ‚˜ API Key λˆ„λ½ μ—λŸ¬(`OpenAIError`)둜 λ»—μ–΄λ²„λ¦¬λŠ” 문제 지속 λ°œμƒ.
54
+ - **κ·œμΉ™**: λͺ¨λ“ˆ μž„ν¬νŠΈ μ‹œμ μ—λŠ” μ ˆλŒ€ μ™ΈλΆ€ DBλ‚˜ API ν΄λΌμ΄μ–ΈνŠΈμ™€ 톡신/μ΄ˆκΈ°ν™”ν•˜μ§€ 말 것. DB λ“œλΌμ΄λ²„, LLM, Embeddings μΈμŠ€ν„΄μŠ€λŠ” λ°˜λ“œμ‹œ `LazyGraphRAG` ν”„λ‘μ‹œ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ—¬ μ‹€μ œ 쿼리(`search`)λ‚˜ μžκ°€ 진단(`_init_once()`) 호좜 μ‹œμ μ— 단 1회 μ§€μ—° μ΄ˆκΈ°ν™”(`Lazy Initialization`) λ˜λ„λ‘ 섀계해야 함. `finGraph.py` μ—­μ‹œ 전역이 μ•„λ‹Œ `main()` λ‚΄λΆ€μ—μ„œ λ“œλΌμ΄λ²„λ₯Ό λŸ°νƒ€μž„ μ΄ˆκΈ°ν™”ν•  것.
55
+ - **λ°©μ–΄ ν…ŒμŠ€νŠΈ**: `env -i .venv/bin/python3 -c "import src.retrieval.finRetrieval"` 및 `env -i .venv/bin/python3 -c "import src.graphBuilder.neo4j.finGraph"` λͺ…령을 μ‹€ν–‰ν–ˆμ„ λ•Œ, μ™ΈλΆ€ 접속 및 API ν‚€ 검증 없이 즉각 0.2초 λ§Œμ— 정상 μ’…λ£Œλ˜λŠ”μ§€ 점검 ν›„ 컀밋할 것.
56
 
57
  - **2. ν”„λ‘œλ•μ…˜ Fail-Fast μžκ°€ 진단 ν•„μˆ˜ (침묡의 λŸ°νƒ€μž„ μ—λŸ¬ λ°©μ§€)**
58
  - **원인**: ν—ˆκΉ…νŽ˜μ΄μŠ€(HF Spaces) 배포 μ‹œ DB μ—°κ²° ν™˜κ²½ λ³€μˆ˜κ°€ λˆ„λ½λ˜μ—ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  μ›Ή 앱은 μ •μƒμ μœΌλ‘œ μΌœμ§„ μ²™(Running) ν•˜λ‹€κ°€, μ‚¬μš©μžκ°€ 처음 μ§ˆλ¬Έμ„ λ˜μ§„ μˆœκ°„ 500 λ‚΄λΆ€ μ—λŸ¬λ₯Ό 뿜으며 λ»—μ–΄λ²„λ¦¬λŠ” μ‹¬κ°ν•œ 운영 μž₯μ•  λ°œμƒ.