49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
"""
|
|
===============================================================================
|
|
FILE: services/prompts/service.py
|
|
PROJECT: SCUD Orion AI (Unified Architecture)
|
|
MODULE: services / prompts
|
|
ROLE: Единый доменный сервис управления системным промптом.
|
|
===============================================================================
|
|
"""
|
|
|
|
from typing import Tuple, Dict, Any, List, Optional
|
|
from .repository import repo_get_active_prompt, repo_apply_prompt_action, repo_save_full_prompt
|
|
from .diff_engine import build_prompt_diff
|
|
|
|
|
|
def get_active_system_prompt() -> str:
|
|
"""Получить текущий активный системный промпт."""
|
|
return repo_get_active_prompt()
|
|
|
|
|
|
def apply_prompt_action(action: str, section_id: int, item_id: int, content: str = "") -> None:
|
|
"""Применить точечное изменение к узлу промпта."""
|
|
repo_apply_prompt_action(action, section_id, item_id, content)
|
|
|
|
|
|
def save_full_prompt_draft(draft_text: str, prompt_name: str = "main_agent") -> None:
|
|
"""Сохранить полный черновик промпта."""
|
|
repo_save_full_prompt(draft_text, prompt_name=prompt_name)
|
|
|
|
|
|
def create_prompt_preview(
|
|
action: str,
|
|
section_id: Optional[int] = None,
|
|
item_id: Optional[int] = None,
|
|
content: str = "",
|
|
delete_nodes: Optional[List[Tuple[int, int]]] = None
|
|
) -> Tuple[str, str, str]:
|
|
"""
|
|
Формирует черновик и diff.
|
|
Возвращает (merged_draft, diff_html, baseline_prompt).
|
|
"""
|
|
baseline = repo_get_active_prompt()
|
|
draft, diff_html = build_prompt_diff(
|
|
action=action,
|
|
section_id=section_id,
|
|
item_id=item_id,
|
|
content=content,
|
|
delete_nodes=delete_nodes
|
|
)
|
|
return draft, diff_html, baseline |