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)