o
    #qhbB                     @   sn   d Z ddlmZmZmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlZG d	d
 d
ZdS )zA
Updated agent.py to prioritize user query over job profile data
    )ListDictAny)datetime)
YouTubeMCP)GoogleCoursesMCP)CourseraMCP)KhanAcademyMCPNc                	   @   s   e Zd Zddee dededefddZd	efd
dZd	eeeef  fddZ	d	ee fddZ
ded	ee fddZdd Zdd ZdS )CareerAgentyoutubeNuser_skills
user_queryplatform_namejob_profile_datac                 C   s:   || _ || _|| _|| _|  | _|  | _|  | _	d S N)
r   r   r   r   get_mcp_instancemcpidentify_skill_gaps
skill_gapsextract_target_role_from_querytarget_role)selfr   r   r   r    r   M/var/www/eduai.edurigo.com/doc_train/edurigo_ai/my_career/production/agent.py__init__   s   

zCareerAgent.__init__returnc                 C   s^   | j sdS | j  }g d}|D ]}t||}|r,|d }tdd|}|  S qdS )zDExtract target role from user query for career transition scenarios. )ztransition to\s+([^,.!?]+)zbecome\s+a?\s*([^,.!?]+)zmove to\s+([^,.!?]+)zswitch to\s+([^,.!?]+)zcareer change to\s+([^,.!?]+)zwant to be\s+a?\s*([^,.!?]+)   z\s+ )r   lowerresearchgroupstripsub)r   query_lowertransition_patternspatternmatchr   r   r   r   r      s   
	z*CareerAgent.extract_target_role_from_queryc                 C   s   | j | j| j| j| j| jS )z@Fetch courses from the appropriate MCP with user query priority.)r   fetch_coursesr   r   r   r   r   r   r   r   r   r)   3   s   zCareerAgent.fetch_coursesc                    s"  g }|   }|ri| |}dd | jD }|D ]Q}|d  }||vr@||ddt| |d d|ddd	d
dd q|| }t|dd}|dd}	||	k rh||d|d ||	dddd q| jrt	| jt
r| jdg }
|
r|sdd | jD }|
D ]O}|dd }t|dd}	||}|s||dd|ddd|	dddd qt|dd}||	k r||d|dd||	dddd q|s| jD ]!}t|dd}|dk r||d|d|ddddd qddddd |j fdd d! |S )"zLIdentify skill gaps prioritizing user query intent over current job profile.c                 S      i | ]}| d d |qS 
skill_namer   getr   .0skillr   r   r   
<dictcomp>I       z3CareerAgent.identify_skill_gaps.<locals>.<dictcomp>r-   skill_idtarget_r   required_level   transition_skillcriticaluser_query_target)r5   r-   current_leveltarget_levelgap_typeprioritysource
skill_typer   transition_upgradehighjob_profile_skillsc                 S   r+   r,   r.   r0   r   r   r   r3   o   r4   r   missingcurrent_role_skillmediumcurrent_job_profilecurrent_role_upgradegeneral_improvementlowr         )r:   rC   rG   rK   c                    s     |  dddS )Nr?   rG   r8   r/   xpriority_orderr   r   <lambda>   s    z1CareerAgent.identify_skill_gaps.<locals>.<lambda>)key)r   get_target_role_skillsr   r   appendr/   lenintr   
isinstancedictsort)r   gapsr   target_skillsuser_skill_maptarget_skillskill_name_lowercurrent_skillr<   r7   rD   	job_skilljob_skill_name
user_skillr2   skill_levelr   rQ   r   r   =   s   









zCareerAgent.identify_skill_gapsr   c              
      s&  |   ddddddddddddddddd	dd
d	dgdddddddd	dddddddgddddddddddd	ddddgddddd	ddd	dddddddgd}| D ]\}}| v s|t fdd| D r|  S qgddddddddddd	dgS )zFGet required skills for target role based on common role requirements.zSales Managementr8   )r-   r7   zTeam Leadershipz Customer Relationship ManagementCommunicationNegotiationzStrategic PlanningrL   zPerformance ManagementzProject ManagementzAgile MethodologyzRisk Management
LeadershipzDigital MarketingzBrand ManagementzMarketing Strategy	AnalyticszProduct ManagementzUser Experience DesignzData Analysis)zsales managerzproject managerzmarketing managerzproduct managerc                 3   s    | ]}| v V  qd S r   r   r1   wordtarget_role_lowerr   r   	<genexpr>   s    z5CareerAgent.get_target_role_skills.<locals>.<genexpr>
ManagementzStrategic Thinking)r   itemsanysplit)r   r   role_skills_maproleskillsr   rl   r   rU      sJ   
""z"CareerAgent.get_target_role_skillsc                 C   sL   | j  dkr
t S | j  dkrt S | j  dkrt S td| j  )z<Get the appropriate MCP instance based on the platform name.r   googlekhan_academyzUnsupported platform: )r   r   r   r   r	   
ValueErrorr*   r   r   r   r      s   zCareerAgent.get_mcp_instancec                    s   g }|   }|r
|n| jr| jddnd}t j}|D ]}|di }|dd |dd}|di }	d}
d|	v rF|	d d	}
nd
|	v rR|	d
 d	}
nd|	v r]|	d d	}
g }g }dd | jD }dd | jD }|D ]}|d  }|  v s|| v r|| |d qs|D ]"}|d  }|  v s|| v r||vr|| |d q|s| jrdd | jD dd }|s| jdd }dd |D }dd |D }g }|r|d|  n|r|d|  n|d |r,d|v r|dd	|  nd|v r!|dd	|  n|dd	|  |d|dd  d d	|}d }|rVt
 fd!d"| D rV|d#7 }nd|v r`|d$7 }nd|v rj|d%7 }n	d
|v rs|d&7 }| jr| j  }t fd'd"|D }|t|d( d%7 }|d)i d*d}i d+d,d- d.| jd/|d0dd1d2d3t|d4d5|d6tt|d4d& d7d8d9d	d:| d;d<d=|d>|d?|d@|r|nddAt|}|
r|
|dB< || q|jdCdD d9dE |S )FzBRecommend courses with user query priority and meaningful reasons.job_profile_namer   snippettitledescription
thumbnailsNrC   urlrG   defaultc                 S      g | ]}| d dkr|qS )r?   r:   rN   r1   gapr   r   r   
<listcomp>   r4   z1CareerAgent.recommend_courses.<locals>.<listcomp>c                 S   r   )r?   rC   rN   r   r   r   r   r     r4   r-   r:   c                 S   s   g | ]}| d dv r|qS )r?   )r:   rC   rN   r   r   r   r   r     r4   rL   c                 S   s   g | ]}|d    qS )r-   r   r   r   r   r   r         c                 S   s   g | ]}| d dqS )r?   rG   rN   r   r   r   r   r     r   z(Essential for your career transition to z$Recommended for your target role as z/Recommended to enhance your professional skillsz&Addresses critical transition skills: z, zCovers essential skills: zHelps improve skills in: zCourse content:    z...z. <   c                 3   s    | ]	}|   v V  qd S r   r   rj   r{   r   r   rn   2  s    z0CareerAgent.recommend_courses.<locals>.<genexpr>         
   c                 3   s     | ]}|   v rd V  qdS )r   Nr   rj   r   r   r   rn   >  s       idvideoIdcourseIdzauto-generated
courseNameplatform
instructorchannelTitledurationz
Self-paced
matchScored   reasonscorer   isOnlineCourseTz https://www.youtube.com/watch?v=typevideolastUpdatedaddressed_gapsgap_prioritiestarget_role_alignmenttransition_focused	thumbnailc                 S   s   | d S )Nr   r   rO   r   r   r   rS   ^  s    z/CareerAgent.recommend_courses.<locals>.<lambda>)rT   reverse)r   r   r/   r   nowyearr   r   rV   joinrq   rr   r   summinr   roundboolr[   )r   coursesrecommended_coursesr   primary_contextcurrent_yearcourserz   r|   r}   thumbnail_urlr   r   critical_gaps	high_gapsr   gap_nametop_gapsreason_partsr   match_scorequery_wordstitle_matchesvideo_idcourse_recommendationr   r   r   recommend_courses   s   



 






"






	

zCareerAgent.recommend_courses)r   N)__name__
__module____qualname__r   r   strr   r   r   r)   r   rU   r   r   r   r   r   r   r
      s     

f3r
   )__doc__typingr   r   r   r   youtube_mcpr   google_courses_mcpr   coursera_mcpr   khan_academy_mcpr	   r    r
   r   r   r   r   <module>   s    