ai-service / utils /text_builder.py
Doanh Van Vu
Refactor mentor and mentee models by removing timezone and budget fields
614e905
from typing import Dict, Any, List, Optional
from datetime import datetime
def build_mentor_text(mentor_data: Dict[str, Any]) -> str:
parts = []
full_name = mentor_data.get("full_name", "")
if full_name:
parts.append(f"Mentor Profile: {full_name}")
bio = mentor_data.get("bio", "")
if bio:
parts.append(f"Bio: {bio}")
career = mentor_data.get("career", {})
if isinstance(career, dict) and career.get("name"):
parts.append(f"Career: {career['name']}")
elif isinstance(career, str):
parts.append(f"Career: {career}")
skills = mentor_data.get("skills", [])
if skills:
skill_names = []
for skill in skills:
if isinstance(skill, dict):
skill_names.append(skill.get("name", ""))
elif isinstance(skill, str):
skill_names.append(skill)
if skill_names:
parts.append(f"Skills: {', '.join(skill_names)}")
domains = mentor_data.get("domains", [])
if domains:
domain_names = []
for domain in domains:
if isinstance(domain, dict):
domain_names.append(domain.get("name", ""))
elif isinstance(domain, str):
domain_names.append(domain)
if domain_names:
parts.append(f"Domains: {', '.join(domain_names)}")
experiences = mentor_data.get("experiences", [])
if experiences:
exp_parts = []
for exp in experiences:
if isinstance(exp, dict):
position = exp.get("position", "")
company = exp.get("company", "")
start_date = exp.get("start_date", "")
end_date = exp.get("end_date", "") or "Present"
description = exp.get("description", "")
exp_str = f" - {position}"
if company:
exp_str += f" at {company}"
if start_date:
exp_str += f" ({start_date} - {end_date})"
if description:
exp_str += f": {description}"
exp_parts.append(exp_str)
if exp_parts:
parts.append("Experience Details:")
parts.extend(exp_parts)
educations = mentor_data.get("educations", [])
if educations:
edu_parts = []
for edu in educations:
if isinstance(edu, dict):
degree = edu.get("degree", "")
school = edu.get("school", "")
start_date = edu.get("start_date", "")
end_date = edu.get("end_date", "")
description = edu.get("description", "")
edu_str = " -"
if degree:
edu_str += f" {degree}"
if school:
edu_str += f" from {school}"
if start_date:
edu_str += f" ({start_date} - {end_date})"
if description:
edu_str += f": {description}"
edu_parts.append(edu_str)
if edu_parts:
parts.append("Education:")
parts.extend(edu_parts)
rating = mentor_data.get("rating", 0.0)
total_ratings = mentor_data.get("total_ratings", 0)
if rating or total_ratings:
parts.append(f"Rating: {rating:.1f}/5.0 ({total_ratings} reviews)")
session_count = mentor_data.get("session_count", 0)
if session_count:
parts.append(f"Sessions Conducted: {session_count}")
available_slots = mentor_data.get("available_slots", 0)
if available_slots:
parts.append(f"Available Slots: {available_slots}")
schedules = mentor_data.get("schedules", [])
if schedules:
schedule_summary = _build_schedule_summary(schedules)
if schedule_summary:
parts.append(f"Availability: {schedule_summary}")
return "\n".join(parts)
def build_mentee_query_text(mentee_data: Dict[str, Any]) -> str:
parts = ["Looking for mentor to help with:"]
goals = mentee_data.get("goals", "")
if goals:
parts.append(f"Goals: {goals}")
desired_skills = mentee_data.get("desired_skills", [])
if desired_skills:
skill_names = []
for skill in desired_skills:
if isinstance(skill, dict):
skill_names.append(skill.get("name", ""))
elif isinstance(skill, str):
skill_names.append(skill)
if skill_names:
parts.append(f"Desired Skills: {', '.join(skill_names)}")
current_skills = mentee_data.get("current_skills", [])
if current_skills:
skill_names = []
for skill in current_skills:
if isinstance(skill, dict):
skill_names.append(skill.get("name", ""))
elif isinstance(skill, str):
skill_names.append(skill)
if skill_names:
parts.append(f"Current Skills: {', '.join(skill_names)}")
interests = mentee_data.get("interests", [])
domains = mentee_data.get("domains", [])
if interests:
domain_names = []
for domain in interests:
if isinstance(domain, dict):
domain_names.append(domain.get("name", ""))
elif isinstance(domain, str):
domain_names.append(domain)
if domain_names:
parts.append(f"Interests: {', '.join(domain_names)}")
elif domains:
domain_names = []
for domain in domains:
if isinstance(domain, dict):
domain_names.append(domain.get("name", ""))
elif isinstance(domain, str):
domain_names.append(domain)
if domain_names:
parts.append(f"Interests: {', '.join(domain_names)}")
availability = mentee_data.get("availability", "")
preferred_availability = mentee_data.get("preferred_availability", "")
if availability or preferred_availability:
parts.append(f"Preferred Availability: {availability or preferred_availability}")
return "\n".join(parts)
def _build_schedule_summary(schedules: List[Dict[str, Any]]) -> str:
if not schedules:
return ""
day_names = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
active_schedules = [s for s in schedules if s.get("is_active", 1) == 1]
if not active_schedules:
return ""
schedule_groups = {}
for schedule in active_schedules:
day = schedule.get("day_of_week", 0)
start = schedule.get("start_time", "")
end = schedule.get("end_time", "")
if day < 7:
day_name = day_names[day]
time_str = f"{start}-{end}" if start and end else ""
if day_name not in schedule_groups:
schedule_groups[day_name] = []
if time_str:
schedule_groups[day_name].append(time_str)
if not schedule_groups:
return ""
summary_parts = []
for day, times in sorted(schedule_groups.items()):
if times:
summary_parts.append(f"{day} {', '.join(times)}")
return "; ".join(summary_parts)