fix: resolve mypy type error in LazyGraphRAG and Gradio caching crash
Browse files- AGENTS.md +17 -0
- app.py +2 -1
- src/retrieval/finRetrieval.py +1 -0
AGENTS.md
CHANGED
|
@@ -46,6 +46,23 @@ FinGraph/
|
|
| 46 |
- 'src/references/' νμΌ μμ κΈμ§(μ°Έκ³ μλ£)
|
| 47 |
- Neo4j λλΌμ΄λ² μ°κ²° μ `NEO4J_USERNAME`, `NEO4J_PASSWORD`λ§μ μꡬνκ±°λ μ¬μ©νλ λ°©μμ μλ μ½λ μμ± μ λ κΈμ§ (Connection Client Credentials λ³ν λ§€ν νμ)
|
| 48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
## COMMIT κ·μΉ
|
| 50 |
- μ»€λ° λ©μμ§: 'feat:', 'fix:', 'refactor:' μ λμ¬ μ¬μ©
|
| 51 |
- push νλμ νλμ λ³κ²½λ§
|
|
|
|
| 46 |
- 'src/references/' νμΌ μμ κΈμ§(μ°Έκ³ μλ£)
|
| 47 |
- Neo4j λλΌμ΄λ² μ°κ²° μ `NEO4J_USERNAME`, `NEO4J_PASSWORD`λ§μ μꡬνκ±°λ μ¬μ©νλ λ°©μμ μλ μ½λ μμ± μ λ κΈμ§ (Connection Client Credentials λ³ν λ§€ν νμ)
|
| 48 |
|
| 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 λ΄λΆ μλ¬λ₯Ό λΏμΌλ©° λ»μ΄λ²λ¦¬λ μ¬κ°ν μ΄μ μ₯μ λ°μ.
|
| 59 |
+
- **κ·μΉ**: λ°°ν¬ μ§μ
μ (`app.py`) ꡬλ μμ μλ μ§μ° μ΄κΈ°νλ₯Ό 무μνκ³ κ°μ λ‘ μ¦μ μ°κ²°(`graphrag._init_once()`)μ μλνμ¬, μ€ν¨ μ μ± κ΅¬λ μ체λ₯Ό μ€ν¨μν€λ `Fail-Fast` μκ° μ§λ¨ μ½λλ₯Ό `app.py` μλ¨μ λ°λμ μ μ§ν κ².
|
| 60 |
+
|
| 61 |
+
- **3. ν¨ν€μ§ μμ‘΄μ± λ° νμ
μ격 κ²μ¦ (Hugging Face λΉλ ν¬λμ λ°©μ§)**
|
| 62 |
+
- **μμΈ**: λ‘컬μμλ μ λμκ°λλ°, νκΉ
νμ΄μ€ νλ‘λμ
νκ²½μμ `audioop`, `huggingface_hub` λ± λͺ¨λ λλ½μ΄λ MyPy νμ
μλ¬(`Format Error`)λ‘ λ°νμ ν¬λμκ° 3ν μ΄μ λ°μ.
|
| 63 |
+
- **κ·μΉ**: μλ‘μ΄ λΌμ΄λΈλ¬λ¦¬λ κΈ°λ₯ μΆκ° μ 무쑰건 `requirements.txt`μ λͺ
μν κ². μ»€λ° μ§μ `mypy src tests --ignore-missing-imports` λ° `ruff check .`λ₯Ό λλ € λ¨ 1κ°μ κ²½κ³ λ λ¨κΈ°μ§ λ§ κ².
|
| 64 |
+
- **λ°©μ΄ ν
μ€νΈ**: μ»€λ° μ 무쑰건 ν°λ―Έλμμ `python -c "import app"`μ μ€ννμ¬ Gradio λΉλ λ¨κ³ λ° μμ‘΄μ± μλ¬κ° μλμ§ νμ₯ μ κ² ν νΈμν κ².
|
| 65 |
+
|
| 66 |
## COMMIT κ·μΉ
|
| 67 |
- μ»€λ° λ©μμ§: 'feat:', 'fix:', 'refactor:' μ λμ¬ μ¬μ©
|
| 68 |
- push νλμ νλμ λ³κ²½λ§
|
app.py
CHANGED
|
@@ -150,10 +150,11 @@ with gr.Blocks(
|
|
| 150 |
"μ΄λ€ κΈ°μ
μ΄ LLM κΈ°μ μ κ°λ°νλμ?",
|
| 151 |
"μ΅κ·Ό AI κ΄λ ¨ λ΄μ€ κΈ°μ¬λ₯Ό μμ½ν΄μ€",
|
| 152 |
],
|
|
|
|
| 153 |
retry_btn=None,
|
| 154 |
undo_btn="β©οΈ λλ리기",
|
| 155 |
clear_btn="ποΈ λν μ΄κΈ°ν",
|
| 156 |
)
|
| 157 |
|
| 158 |
if __name__ == "__main__":
|
| 159 |
-
demo.launch()
|
|
|
|
| 150 |
"μ΄λ€ κΈ°μ
μ΄ LLM κΈ°μ μ κ°λ°νλμ?",
|
| 151 |
"μ΅κ·Ό AI κ΄λ ¨ λ΄μ€ κΈ°μ¬λ₯Ό μμ½ν΄μ€",
|
| 152 |
],
|
| 153 |
+
cache_examples=False,
|
| 154 |
retry_btn=None,
|
| 155 |
undo_btn="β©οΈ λλ리기",
|
| 156 |
clear_btn="ποΈ λν μ΄κΈ°ν",
|
| 157 |
)
|
| 158 |
|
| 159 |
if __name__ == "__main__":
|
| 160 |
+
demo.launch(server_name="0.0.0.0", server_port=7860)
|
src/retrieval/finRetrieval.py
CHANGED
|
@@ -240,6 +240,7 @@ class LazyGraphRAG:
|
|
| 240 |
|
| 241 |
def search(self, *args: Any, **kwargs: Any) -> Any:
|
| 242 |
self._init_once()
|
|
|
|
| 243 |
return self._graphrag.search(*args, **kwargs)
|
| 244 |
|
| 245 |
def __getattr__(self, name: str) -> Any:
|
|
|
|
| 240 |
|
| 241 |
def search(self, *args: Any, **kwargs: Any) -> Any:
|
| 242 |
self._init_once()
|
| 243 |
+
assert self._graphrag is not None
|
| 244 |
return self._graphrag.search(*args, **kwargs)
|
| 245 |
|
| 246 |
def __getattr__(self, name: str) -> Any:
|