Spaces:
Running
Running
A newer version of the Gradio SDK is available: 6.14.0
🎉 Підсумок реалізації: Редагування промптів з ізоляцією сесій
Дата: 2025-12-28 Версія: 2.0 Статус: ✅ Production Ready
📋 Що було реалізовано
1. Розширення системи управління сесіями
Файл: src/session/state.py
Додано нове поле:
custom_prompts: Dict[str, str] = field(default_factory=dict)
Нові методи:
get_prompt(prompt_type, default_prompt)- отримання промпту з fallbackset_prompt(prompt_type, prompt_value)- збереження промптуreset_prompts()- скидання всіх промптів до стандартних
Оновлено:
to_dict()- додано серіалізацію custom_promptsfrom_dict()- додано десеріалізацію з підтримкою старих версійclear_data()- очищення включає кастомні промпти
2. UI для редагування промптів
Файл: interface.py
Додано нові функції:
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 рядків)
- 💾 Кнопка "Зберегти промпти"
- 🔄 Кнопка "Скинути до стандартних"
- Статус-повідомлення
Інтеграція з сесіями:
# Генерація унікального session ID для кожного користувача
session_id_state = gr.State(value=generate_session_id)
# Завантаження промптів при старті
app.load(fn=load_session_prompts, inputs=[session_id_state], ...)
3. Підтримка кастомних промптів у генерації
Файл: main.py
Оновлено сигнатуру:
def generate_legal_position(
# ... існуючі параметри ...
custom_system_prompt: Optional[str] = None, # 🆕
custom_lp_prompt: Optional[str] = None # 🆕
) -> Dict:
Логіка використання:
# Використання кастомних або стандартних промптів
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():
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)