tarujain8's picture
feat: implement backend agent modules for relationship analysis, strategy, guardrails, perspective detection, and OCR services
2cb0d12
Raw
History Blame Contribute Delete
1.92 kB
from backend.llm.factory import get_llm
from backend.utils import safe_invoke
from backend.core.logger import get_logger
logger = get_logger(__name__)
PERSPECTIVE_PROMPT = """
You are Velra's Perspective Detection Engine.
Your job is to perform a lightweight, rapid analysis of a conversation to determine the user's perspective before full emotional analysis.
You must analyze the text/chat to estimate:
1. Which side is the user (uploader)? Look for emotional investment, who seeks clarity, vulnerability patterns, and standard UI heuristics (e.g. right side is usually the sender/uploader in iMessage/WhatsApp).
2. What is your confidence level in your perspective assessment? (0.0 to 1.0).
---
## INPUT CONTEXT
Conversation Text / OCR:
{chat}
User's typed feelings (if any):
{feelings}
---
## RULES
- If there is no chat or very little text, confidence should be low (<0.5).
- If the feelings explicitly state their perspective (e.g., "I said...", "He didn't reply"), confidence should be high.
- Set needs_clarification to true if confidence is less than 0.75.
## OUTPUT JSON FORMAT
{{
"likely_user_side": "left/right/unknown",
"confidence": 0.0,
"needs_clarification": true
}}
Return ONLY the raw JSON without markdown fences.
"""
def detect_perspective(chat, feelings):
try:
logger.info("Starting perspective detection")
llm = get_llm()
chat_block = chat if chat and str(chat).strip() else "No conversation provided."
feelings_block = feelings if feelings and str(feelings).strip() else "No explicit feelings provided."
prompt = PERSPECTIVE_PROMPT.format(chat=chat_block, feelings=feelings_block)
response = safe_invoke(llm, prompt)
logger.info(f"LLM Response: {response}")
return response
except Exception as e:
logger.error(f"Error in detect_perspective: {str(e)}")
return f"[ERROR] {str(e)}"