Spaces:
Running
Running
| # μμ΄μ νΈ μν€ν μ² | |
| ## κ°μ | |
| νλ‘μ νΈλ μΈ κ°μ 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` 체μΈμ λ€μ λμ νμ§ μμ΅λλ€. | |