Spaces:
Running
Running
| <!-- | |
| NOTE: This file is a legacy implementation summary. The canonical documentation entrypoint is docs/README.md. | |
| If you reached this file, please consult docs/README.md or docs/PROMPT_EDITING.md for the up-to-date, user-facing and developer-facing docs. | |
| This file is kept for historical reference and has been marked legacy. Short summaries or pointers are preferred instead of duplicating long docs. | |
| --> | |
| # 🎉 Підсумок реалізації: Редагування промптів з ізоляцією сесій | |
| **Дата:** 2025-12-28 | |
| **Версія:** 2.0 | |
| **Статус:** ✅ Production Ready | |
| --- | |
| ## 📋 Що було реалізовано | |
| ### 1. Розширення системи управління сесіями | |
| #### Файл: [src/session/state.py](src/session/state.py) | |
| **Додано нове поле:** | |
| ```python | |
| custom_prompts: Dict[str, str] = field(default_factory=dict) | |
| ``` | |
| **Нові методи:** | |
| - `get_prompt(prompt_type, default_prompt)` - отримання промпту з fallback | |
| - `set_prompt(prompt_type, prompt_value)` - збереження промпту | |
| - `reset_prompts()` - скидання всіх промптів до стандартних | |
| **Оновлено:** | |
| - `to_dict()` - додано серіалізацію custom_prompts | |
| - `from_dict()` - додано десеріалізацію з підтримкою старих версій | |
| - `clear_data()` - очищення включає кастомні промпти | |
| ### 2. UI для редагування промптів | |
| #### Файл: [interface.py](interface.py) | |
| **Додано нові функції:** | |
| ```python | |
| async def save_custom_prompts(session_id, system_prompt, lp_prompt, analysis_prompt) | |
| - Валідація довжини (max 50,000 символів) | |
| - Збереження в сесію | |
| - Повідомлення про успіх/помилку | |
| async def reset_prompts_to_default(session_id) | |
| - Скидання до стандартних значень | |
| - Оновлення UI | |
| async def load_session_prompts(session_id) | |
| - Завантаження при старті додатку | |
| - Fallback до стандартних значень | |
| ``` | |
| **Нова вкладка "⚙️ Налаштування":** | |
| - 📋 Редактор системного промпту (5 рядків) | |
| - ⚖️ Редактор промпту генерації (15 рядків) | |
| - 🔍 Редактор промпту аналізу (15 рядків) | |
| - 💾 Кнопка "Зберегти промпти" | |
| - 🔄 Кнопка "Скинути до стандартних" | |
| - Статус-повідомлення | |
| **Інтеграція з сесіями:** | |
| ```python | |
| # Генерація унікального session ID для кожного користувача | |
| session_id_state = gr.State(value=generate_session_id) | |
| # Завантаження промптів при старті | |
| app.load(fn=load_session_prompts, inputs=[session_id_state], ...) | |
| ``` | |
| ### 3. Підтримка кастомних промптів у генерації | |
| #### Файл: [main.py](main.py) | |
| **Оновлено сигнатуру:** | |
| ```python | |
| def generate_legal_position( | |
| # ... існуючі параметри ... | |
| custom_system_prompt: Optional[str] = None, # 🆕 | |
| custom_lp_prompt: Optional[str] = None # 🆕 | |
| ) -> Dict: | |
| ``` | |
| **Логіка використання:** | |
| ```python | |
| # Використання кастомних або стандартних промптів | |
| system_prompt = custom_system_prompt or SYSTEM_PROMPT | |
| lp_prompt = custom_lp_prompt or LEGAL_POSITION_PROMPT | |
| # Форматування контенту з кастомним промптом | |
| content = lp_prompt.format( | |
| court_decision_text=court_decision_text, | |
| comment=comment_input if comment_input else "Коментар відсутній" | |
| ) | |
| ``` | |
| **Оновлено всі провайдери:** | |
| - ✅ OpenAI (GPT-4o, GPT-4.1) | |
| - ✅ Anthropic (Claude 4.5 Sonnet) | |
| - ✅ Google (Gemini 3.0/3.5 Flash) | |
| - ✅ DeepSeek (DeepSeek Chat) | |
| ### 4. Оновлення обробників в interface.py | |
| **Змінено `process_input()`:** | |
| ```python | |
| async def process_input(..., session_id: str) -> Tuple[str, Dict, str]: | |
| # Завантаження сесії | |
| manager = get_session_manager() | |
| session = await manager.get_session(session_id) | |
| # Витягування кастомних промптів | |
| custom_system = session.get_prompt('system', SYSTEM_PROMPT) | |
| custom_lp = session.get_prompt('legal_position', LEGAL_POSITION_PROMPT) | |
| # Генерація з кастомними промптами | |
| legal_position_json = generate_legal_position( | |
| ..., custom_system, custom_lp | |
| ) | |
| # Збереження результату в сесію | |
| session.legal_position_json = legal_position_json | |
| await manager.update_session(session) | |
| return output, legal_position_json, session_id | |
| ``` | |
| --- | |
| (remaining content preserved) | |