Spaces:
Running
Running
File size: 4,579 Bytes
f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe 13c2b9b f56c599 13c2b9b eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 eae04fe f56c599 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | # μμ΄μ νΈ μν€ν
μ²
## κ°μ
νλ‘μ νΈλ μΈ κ°μ UI μ§μ
μ κ³Ό νλμ κ³΅μ© μ±ν
λ°νμμΌλ‘ ꡬμ±λ©λλ€.
1. `app.py`
2. `app_gradio.py`
3. `app_gradio_messenger.py`
4. `megumin_agent/`
κ° UI κ³μΈ΅μ κ°μ μ±ν
μλΉμ€ ν¬νΌλ₯Ό νΈμΆνκ³ , μ±ν
μλΉμ€λ κ²μ, μμ΄μ νΈ μ€ν, μ€νΈλ¦¬λ°, μΈμ
μν κ΄λ¦¬λ₯Ό λ΄λΉν©λλ€.
## λ°νμ νλ¦
1. `megumin_agent/bootstrap.py`κ° νκ²½ λ³μλ₯Ό λΆλ¬μ€κ³ λ‘컬 λλ μ격 λ°μ΄ν° νμΌμ μ€λΉν©λλ€.
2. `megumin_agent/retrieval.py`κ° νλ₯΄μλ/μ¬μ€ κ²μμ νμν FAISS μΈλ±μ€μ λ©νλ°μ΄ν°λ₯Ό λ‘λν©λλ€.
3. `megumin_agent/agent.py`κ° ADK μμ΄μ νΈλ₯Ό ꡬμ±νκ³ κ²μ κΈ°λ° λꡬλ₯Ό μ°κ²°ν©λλ€.
4. `megumin_agent/chat.py`κ° μ±ν
μλΉμ€λ₯Ό λ§λ€κ³ λΆλΆ μλ΅ μ€νΈλ¦¬λ°κ³Ό μΈμ
λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬ν©λλ€.
5. UI λͺ¨λμ΄ νλ©΄μ λ λλ§νκ³ μ¬μ©μ λ©μμ§λ₯Ό `stream_chat()`μΌλ‘ μ λ¬ν©λλ€.
## λͺ¨λλ³ μ€λͺ
### `megumin_agent/bootstrap.py`
- `.env`λ₯Ό λ‘λν©λλ€.
- νμ μ λ‘컬 `adk-python/src` κ²½λ‘λ₯Ό μ€λΉν©λλ€.
- κ°λ₯νλ©΄ Hugging Faceμμ λ°μ΄ν°μ
μμ°μ λ΄λ €λ°μ΅λλ€.
- μ격 μμ°μ μ¬μ©ν μ μμΌλ©΄ λ‘컬 μ²λ¦¬ λ°μ΄ν°λ‘ ν΄λ°±ν©λλ€.
### `megumin_agent/retrieval.py`
- QA JSON μμ€μ FAISS μΈλ±μ€λ₯Ό λ‘λν©λλ€.
- νλ₯΄μλν λ°μ΄ν°μ μ¬μ€ν λ°μ΄ν°μ λν΄ κ²μμ μνν©λλ€.
- ν둬ννΈ κ΅¬μ±μ μ¬μ©ν κ°κ²°ν κ²μ κ²°κ³Όλ₯Ό λ°νν©λλ€.
### `megumin_agent/agent.py`
- λ©κ΅¬λ° νλ₯΄μλ ν둬ννΈμ κ²μ λꡬλ₯Ό μ μν©λλ€.
- νλ₯΄μλ κ²μκ³Ό μ¬μ€ κ²μμ νλμ μμ΄μ νΈ νλ¦μΌλ‘ ν©μΉ©λλ€.
- λ©ν°ν΄ λνμ νμν μμ½ μνλ₯Ό κ΄λ¦¬ν©λλ€.
### `megumin_agent/chat.py`
- κ³΅μ© λ¬λμ λ©λͺ¨λ¦¬ κΈ°λ° μΈμ
μλΉμ€λ₯Ό μμ±ν©λλ€.
- `stream_chat()`μΌλ‘ SSE μ€νμΌμ λΆλΆ μλ΅μ μ 곡ν©λλ€.
- μ΅κ·Ό ν΄ μνμ μμ½ μ 보λ₯Ό μ μ§ν΄ νμ λνλ₯Ό μ§μν©λλ€.
### `app_gradio.py`
- κΈ°μ‘΄ λ€μ€ ν¨λ ꡬμ±μ λ©μΈ μ±ν
UIμ
λλ€.
- 첫 μμ² μμ μ μ±ν
μλΉμ€λ₯Ό μ§μ° μ΄κΈ°νν©λλ€.
- μ΄μμ€ν΄νΈμ λΆλΆ μλ΅μ νλ©΄μ μ±ν
μμμ μ€νΈλ¦¬λ°ν©λλ€.
### `app_gradio_messenger.py`
- λμΌν κ³΅μ© μ±ν
μλΉμ€ κ³μΈ΅ μμ λ©μ μ ν UIλ₯Ό μ¬λ¦° νμΌμ
λλ€.
- μ’μΈ‘κ³Ό μ°μΈ‘ μΉν°λ Gradio `Column(scale=3)`κ³Ό `Column(scale=7)`μΌλ‘ `3:7` λΉμ¨μ μ μ§ν©λλ€.
- λ°μ€ν¬ν± λ©μ μ λ μ΄μμμ μλμ μΌλ‘ κ³ μ λμ΄λ₯Ό μ¬μ©ν©λλ€.
- μ°μΈ‘ μΉν°λ `μλ¨ ν€λ`, `λ©μμ§ νμ μμ`, `μ
λ ₯ μμ`μ μΈ ννΈλ‘ λλλ©°, κ³ μ 3ν gridλ‘ λ°°μΉλ©λλ€.
- `μλ¨ ν€λ`μ `μ
λ ₯ μμ`μ λͺ
μμ μΈ ν½μ
λμ΄λ₯Ό μ¬μ©ν©λλ€.
- λ©μμ§ λ·°ν¬νΈλ `calc(...)`λ‘ λ¨λ λμ΄λ§ μ¬μ©ν©λλ€.
- μλ°ν μ΄λ―Έμ§λ μΈλΆ μ μ₯μ λμ νλ‘μ νΈ λ΄λΆ `source_file` ν΄λμ λ‘컬 μ΄λ―Έμ§ νμΌμ Gradio νμΌ λΌμ°νΈλ‘ μλΉν©λλ€.
- μ°μ μ μΌλ‘ `megumin_profile` μ΄λ¦μ `png`, `jpg`, `jpeg`, `webp` νμΌμ μ°Ύκ³ , μμΌλ©΄ κ°μ ν΄λμ 첫 λ²μ§Έ μ΄λ―Έμ§ νμΌμ μ¬μ©ν©λλ€.
- fallback SVGλ λ‘컬 μ΄λ―Έμ§ λ‘λ μ€ν¨ μμλ§ νμλλ©°, `source_file` ν΄λλ λ©μ μ λ¨λ
μ€νκ³Ό `app.py` κ²½μ μ€ν λͺ¨λμμ `allowed_paths`λ‘ λͺ
μμ μΌλ‘ λ
ΈμΆν©λλ€.
- Gradio μλ stretch λνΌκ° μΈλ‘ νμ₯μ λ€μ μ λ°ν μ μμΌλ―λ‘ μ΄ νμΌμμλ `gr.Blocks(fill_height=True)`λ₯Ό μ¬μ©νμ§ μμ΅λλ€.
### `app.py`
- Hugging Face Spaces μ§μ
μ μ
λλ€.
- `MEGUMIN_UI` κ°μ λ°λΌ κΈ°λ³Έ UIμ λ©μ μ UI μ€ νλλ₯Ό μ νν©λλ€.
## μΈμ
λͺ¨λΈ
- νμ¬ μΈμ
μ μ₯μλ λ©λͺ¨λ¦¬ κΈ°λ°μ
λλ€.
- μ± νλ‘μΈμ€κ° μ΄μ μλ λμ λν μ°μμ±μ΄ μ μ§λ©λλ€.
- μ΅κ·Ό λ©μμ§λ μ§μ 보쑴νκ³ , μ€λλ λ§₯λ½μ μμ½ μνλ‘ μΆμ½ν©λλ€.
## λ©μ μ λ μ΄μμ μ μ§λ³΄μ κ·μΉ
- `app_gradio_messenger.py`λ λ·°ν¬νΈλ₯Ό κ½ μ±μ°λ flex μ€νμ΄ μλλΌ κ³ μ λμ΄ λ μ΄μμμΌλ‘ λ€λ£Ήλλ€.
- λ©μ μ ν¨λ λμ΄κ° λ°λλ©΄ CSS λ³μμ μ΄ λ¬Έμλ₯Ό ν¨κ» μμ ν©λλ€.
- μ’μ° λΉμ¨μ΄ λ°λλ©΄ Gradio `scale` κ°κ³Ό README λ©λͺ¨λ₯Ό ν¨κ» μμ ν©λλ€.
- νΉλ³ν μ΄μ μ λΈλΌμ°μ κ²μ¦ μμ΄ λ΄λΆ λνΌμ μ€μ²©λ κ³ μ `min-height` 체μΈμ λ€μ λμ
νμ§ μμ΅λλ€.
|