NOVA / ui /intent_text.py
S-4-G-4-R's picture
Initial commit
20b15f3
Raw
History Blame Contribute Delete
990 Bytes
"""
ui/intent_text.py
-----------------
INTENT text <-> 3-field form conversion.
The backend hands us ONE string with three headed sections. We split it into
three editable fields and MUST rebuild the exact same "Problem: / Objective:
/ Additional Context:" shape before sending it into the search graph -- its
prompts assume that literal structure.
"""
import re
_SECTION_PATTERN = re.compile(
r"Problem:\s*(.*?)\n\s*Objective:\s*(.*?)\n\s*Additional Context:\s*(.*)",
re.S,
)
def split_intent_sections(text: str):
m = _SECTION_PATTERN.search(text or "")
if m:
return m.group(1).strip(), m.group(2).strip(), m.group(3).strip()
return (text or "").strip(), "", ""
def join_intent_sections(problem: str, objective: str, additional_context: str) -> str:
ac = additional_context.strip() or "None specified."
return (
f"Problem:\n{problem.strip()}\n\n"
f"Objective:\n{objective.strip()}\n\n"
f"Additional Context:\n{ac}"
)