arina-hf-spaces-api / app /core /feedback_management.py
adsurkasur's picture
clone from arina-hf-spaces
68964c2
from app.core.fact_management import save_user_fact, get_user_fact
from app.core.db_setup import feedback_collection
from app.core.logging_setup import logger
def save_feedback(conversation_id, user_input, arina_reply, reason):
"""Save user feedback including reasoning."""
try:
if not conversation_id or not user_input or not arina_reply or not reason:
raise ValueError("All feedback fields must be provided.")
new_feedback = {
"conversation_id": conversation_id,
"user_input": user_input,
"arina_reply": arina_reply,
"reason": reason
}
feedback_collection.insert_one(new_feedback)
logger.info("Feedback saved to database.")
except ValueError as ve:
logger.error(f"Validation error: {ve}")
except Exception as e:
logger.error(f"Unexpected error: {e}")
def analyze_feedback(conversation_id):
"""Analyze past feedback and adjust response behavior."""
try:
feedbacks = feedback_collection.find({"conversation_id": conversation_id}, {"reason": 1, "_id": 0})
except Exception as e:
logger.error(f"Unexpected error: {e}")
return
feedbacks = list(feedbacks)
if not feedbacks:
logger.info("No feedback found for this conversation.")
return
issue_counts = {}
# Process feedback to detect common complaints
for feedback in feedbacks:
reason = feedback["reason"]
words = reason.lower().split()
for word in words:
if word in issue_counts:
issue_counts[word] += 1
else:
issue_counts[word] = 1
# Identify most common complaints
common_issues = sorted(issue_counts, key=issue_counts.get, reverse=True)[:3]
# Apply personalized feedback adjustments
try:
user_facts = {fact: get_user_fact(fact) for fact in ["response_tone", "response_length", "clarity"]}
for issue in common_issues:
if "robotic" in issue and user_facts["response_tone"] != "casual":
save_user_fact("response_tone", "casual")
elif ("too short" in issue or "brief" in issue) and user_facts["response_length"] != "long":
save_user_fact("response_length", "long")
elif "confusing" in issue and user_facts["clarity"] != "improve":
save_user_fact("clarity", "improve")
except Exception as e:
logger.error(f"Error updating user fact: {e}")
def apply_feedback_adjustments(messages):
"""Modify responses based on stored user feedback preferences."""
try:
response_tone = get_user_fact("response_tone") or "neutral"
response_length = get_user_fact("response_length") or "default"
clarity = get_user_fact("clarity") or "normal"
if not response_tone or not response_length or not clarity:
logger.info("⚠️ Some user preferences are missing, using defaults.")
for message in messages:
if message["role"] == "system":
if response_tone == "casual":
message["content"] += " Make your tone friendly and engaging."
if response_length == "long":
message["content"] += " Provide detailed and expanded answers."
if clarity == "improve":
message["content"] += " Make sure your response is clear and easy to understand."
except TypeError as e:
logger.error(f"🚨 TypeError in apply_feedback_adjustments: {e}")
raise
except Exception as e:
logger.error(f"🚨 Unexpected error in apply_feedback_adjustments: {e}")
raise
return messages