Spaces:
Sleeping
Sleeping
File size: 5,023 Bytes
601f5a4 461adca 601f5a4 | 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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | <!--
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)
|