o
    sJhN                     @   s   d d Z dd Zdd Zdd Zdd	 Zd
d Zd(ddZd)ddZdd Zd*ddZ	dd Z
d+ddZd,ddZdd Zdd Zd-d d!Zd"d# Zd$d% Zd&d' ZdS ).c                    s  |sdS dd | p
g D }dd |D }dd | pg D }dd |D }d}|D ]x}| d | dd	 t| d
d}	d}
d} rR |v rRd}
|  d }n|v r^d}
| d }|
rd} ro |v ro|  d }n
|v ry| d }|dkr|d7 }q(||	k r|	| }|d|d  7 }q(||kr|d7 }q(|d7 }q(|D ]M}| d | dd	 t fdd|D }|sd} rψ |v r|  d }n
|v r| d }|dkr|d7 }qt| d
d|kr|d7 }qt|dS )z
    Calculate priority score based on job profile skills alignment.
    Higher scores for courses that align with job profile requirements.
    Skills required for the target role that the user lacks are given the highest priority.
        c              	   S   :   i | ]}| d r| d | dt| dddqS )skill_id
skill_name
skill_type   )namecurrent_levelgetint.0skill r   X/var/www/eduai.edurigo.com/doc_train/edurigo_ai/my_career/testing/skill_data_analysis.py
<dictcomp>       
z>calculate_job_profile_skill_priority_score.<locals>.<dictcomp>c              	   S   r   )r   r   r   r   )r   course_levelr	   r   r   r   r   r      r   c              	   S   8   i | ]}| d r| d d dt| ddiqS r    r   r   r   r
   lowerr   r   r   r   r   r          
c              	   S   r   r   r   r   r   r   r   r   r   r   r   r       r   r   r   r   r   r   FTr   r   #               c                 3   s:    | ]} r| d  kpo| dd kV  qdS )r   r   r   Nr
   r   )r   target_skillr   r   r   r   	<genexpr>X   s    
z=calculate_job_profile_skill_priority_score.<locals>.<genexpr>
      d   )r
   r   r   anymin)user_skillsjob_profile_skillscourse_skillsuser_skill_mapcourse_skill_mapuser_skill_name_mapcourse_skill_name_mappriority_scorer!   required_levelcourse_covers_skillr   user_current_levelgapcourse_skillis_target_skillr   r"   r   *calculate_job_profile_skill_priority_score   sx   





r7   c                 C   s   |sdS dd | D }dd |D }|| }t |d }d}dd | D }|D ]%}|d}	t|d	d
}
||	d}|dkrL|
|krL||
| d 7 }q't|| dS )z0Calculate bonus for courses that fill skill gapsr   c                 S       h | ]}| d r| d qS r   r
   r   r   r   r   	<setcomp>t        z,calculate_skill_gap_bonus.<locals>.<setcomp>c                 S   r8   r9   r:   r   r   r   r   r;   u   r<   r   c                 S   .   i | ]}| d r| d t| ddqS r   r   r   r	   r   r   r   r   r   }   
    
z-calculate_skill_gap_bonus.<locals>.<dictcomp>r   r   r      r   )lenr
   r   r(   )r)   r+   user_skill_idscourse_skill_ids
new_skillsnew_skill_bonusadvancement_bonususer_skill_levelsr5   r   r   
user_levelr   r   r   calculate_skill_gap_bonuso   s$   
rI   c                    sV  | r|sdS |   }d}ddgg dddg dg dd	dg d
g dddg dg dddg dg dddddgg dddg dg dddg dg dddd}d}| D ]\}}||v ri|} nq]|sndS dd |D }	|d  }
|d! }d}|
D ]}|	D ] t fd"d#| D r|d$7 } nqq|dkr||d%  }t|d&S )'zECalculate bonus based on career progression relevance for designationr   junior	associate)communicationztime managementlearningzbasic technicalr%   )
next_levelskillsbonus)engineer	developeranalyst)programmingproblem solvingteamworkzproject workr$   )zsenior engineerzlead engineer
specialist)
leadershiparchitecture	mentoringzadvanced technical   )lead	principalmanager)rX   strategysystem designteam managementr   )r^   directorr]   )zteam leadershipproject managementzstrategic planningzdecision making   zsenior managerrb   )zpeople management	budgetingstrategic thinkingzstakeholder management   )zsenior analystdata scientist
consultant)data analysisvisualization	reportingzstatistical analysis)zsenior developer	tech lead	architect)zadvanced programmingzcode reviewtechnical leadershipr`   )internrJ   rQ   seniorr\   r^   rS   rR   Nr   c                 S      g | ]
}| d d qS r   r   r    r   r   r   r   
<listcomp>       z;calculate_designation_progression_bonus.<locals>.<listcomp>rO   rP   c                 3       | ]}| v V  qd S Nr   r   keywordcourse_skill_namer   r   r#          z:calculate_designation_progression_bonus.<locals>.<genexpr>r   r@   r   r   itemsr'   splitr(   )designationr+   r)   designation_lowerprogression_bonusprogression_skills_mapprogression_inforole_keyinfocourse_skill_namesrelevant_skills
base_bonusskill_matchesrelevant_skillr   rz   r   'calculate_designation_progression_bonus   sv   ,
r   c           	      C   s   |r| sdS dd | D }dd |D }|r|sdS d}d}|  D ]1\}}|d7 }||v rO|| }||kr;|d7 }q"||d krF|d7 }q"||krN|d7 }q"|d7 }q"|dkrct||d  d dS dS )	z>Original skill matching function (preserved for compatibility)r   c                 S   r=   r>   r	   r   r   r   r   r      r?   z match_skills.<locals>.<dictcomp>c                 S   r=   r>   r	   r   r   r   r   r      r?   r   r@      r&   )r~   r(   )	r)   r+   rG   course_skill_levelsmatch_scoretotal_possible_matchesr   r   rH   r   r   r   match_skills   s6   


r   c                 C   s   |sdg g g |p	ddS dd | D }g }g }g }t |}d}|D ]E}	|	d}
|	d}t|	d	d
}|
|v r^||
 d }||krQ||||d |d
7 }q!|||||| d q!|||d q!|dkrq|| d nd}t|d
||||p}ddS )zJAnalyze how well user's current skills align with job profile requirementsg        zNot specified)alignment_percentagemissing_skills
skill_gaps	strengthsjob_profile_namec              	   S   r   )r   r   r   r   )r   levelr	   r   r   r   r   r     r   z1analyze_job_profile_alignment.<locals>.<dictcomp>r   r   r   r   r   r   )r   rH   r1   )r   rH   r1   r4   )r   r1   r&   )rA   r
   r   appendround)r)   r*   r   r,   r   r   r   total_required_skillsaligned_skillsrequired_skillr   r   r1   rH   r   r   r   r   analyze_job_profile_alignment  sZ   




r   c              
   C   sV   | d }|dkr|ddnd}d| dt | d  d	t | d
  dt | d  d	S )zLBuild the job profile analysis section for the prompt with proper formattingr   r   z.1f%z0.0%z?
PROFESSIONAL ANALYSIS CONTEXT:
Current Job Profile Alignment: z
Missing Critical Skills: r   z skills
Skill Gaps to Address: r   z skills
Current Strengths: r   z skills at required level
)rA   )job_profile_analysisalignment_pctalignment_textr   r   r   build_enhanced_prompt_sectionI  s   


r   Nc                 C   s`  | s.|s.dgddgddddddgd	d
d
dgddgddgddgdddg g g ddS i }| p3g D ]}| d}|rQ| ddt| dddddd||< q4|pUg D ]7}| d}|rt| dd}||v rt||| d || d< d|| d< qV| ddd|ddd||< qVg }| D ]\}}|d |d  }	t|	d|d< || q|jdd d  |d!d" }
d#d$ |
D }d%d$ |
D }d&d$ |
D }d'd$ |
D }|d|ddddd|rd(| d) nd* |d	d
d
dgd|d|d+d$ |
D dgdd}d,d$ |
D }d-d$ |
D }d.d$ |
D }g }|rS|rJd/d$ |D }|r;|d0t| d1| d2 n|d3t| d4| d5 n	|d6| d7 |r`|t| d8 |rn|d9t| d: |rd;d$ |D }|d<| d=d>|  |rd?d$ |D }|d@d>|  |rdA|ndB}|||||t|dS )Cz:Enhanced skill gap analysis with job profile considerationzNo Skills Data AvailableCurrent Skillsr   rgba(54, 162, 235, 0.2)rgba(54, 162, 235, 1)labeldatabackgroundColorborderColorpointBackgroundColorTarget Skillsr@   rgba(255, 99, 132, 0.2)rgba(255, 99, 132, 1)labelsdatasets	Skill Gaprgba(255, 159, 64, 0.7)r   r   r   radarbarzWNo skill data available. Complete a skills assessment for personalized recommendations.
chart_datasummaryjob_profile_gaps
other_gapsr   total_skills_analyzedr   r   zUnknown Skillr   r   TF)r   r   target_levelis_user_skillis_job_profile_skillr   r   r   r4   c                 S   s   | d  | d  | d fS )Nr   r4   r   r   xr   r   r   <lambda>  s    z$analyze_skill_gaps.<locals>.<lambda>keyNr[   c                 S      g | ]}|d  qS r   r   r   r   r   r   rt         z&analyze_skill_gaps.<locals>.<listcomp>c                 S   r   r   r   r   r   r   r   rt     r   c                 S   r   r   r   r   r   r   r   rt     r   c                 S   r   r4   r   r   r   r   r   rt     r    ()r   c                 S   s   g | ]
}|d  r
dndqS )r   zrgba(255, 99, 132, 0.7)r   r   r   r   r   r   rt     s    c                 S   s$   g | ]}|d  r|d dkr|qS r   r4   r   r   r   r   r   r   rt        $ c                 S   $   g | ]}|d  s|d dkr|qS r   r   r   r   r   r   rt     r   c                 S   (   g | ]}|d  dkr|d dkr|qS r4   r   r   r   r   r   r   r   r   rt        ( c                 S   s   g | ]
}|d  dkr|qS )r4   r   r   r   r   r   r   rt     ru   z
CRITICAL: z essential z skills need developmentzMinor gaps in  z skillsu   ✓ All z skill requirements metz) additional skills for career advancementz
Strong in z
 key areasc                 S   (   g | ]}|d   dt |d  dqS r   r   r   r   get_skill_level_namer   r   r   r   rt     r   z	For your z role, priority skill gaps: , c                 S   r   r   r   r   r   r   r   rt     r   z!Additional growth opportunities: . 1Complete skills assessment for detailed analysis.)r
   r   maxr~   r   sortrA   join)r)   r*   r   
all_skillsr   r   r1   skills_analysis
skill_datar4   
top_skillsskill_namescurrent_levelstarget_levels
gap_valuesr   r   r   r   summary_partscritical_gapspriority_skillsgrowth_opportunitiesr   r   r   r   analyze_skill_gapsY  s   (


	


	$r   r   c           &   	   C   sj  t |}|r
t|ng }i }| pg D ]*}|d}|d}	|r<|	r<|	t|ddt|ddddddd||	 < q|D ]5}
|
d }	|	 }|
d }|
d	 }||v rh||| d
< d|| d< ||| d	< q?|	d|ddddd||< q?|pxg D ]E}|d}	|	r|	 }t|dd}||v r|| d st||| d
 || d
< d|| d< d|| d	< qy|	d|ddddd||< qyg }| D ]l}|d
 |d  }t|d|d< |d dkr|d dkr|d rd|d	< d|d< n;|d rd|d	< d|d< n.d|d	< d|d< n%|d r|d	dkrd|d< nd|d< n|d r(d|d< nd|d< || q|jdd d |dd }dd |D }d d |D }d!d |D }d"d |D }g }|D ]H}|d dkr||d ru|d# q`|d$ q`|d	 dkr|d% q`|d r|d& q`|d r|d' q`|d( q`|d)|d*d+d+d,d-|rd.| d/ n
|rd.| d/ nd0 |d1d2d2d,gd3|d4||d5gd3d6}d7d |D }d8d |D }d9d |D }d:d |D }d;d |D }d<d |D }|| | }|sd=d |D }|}g } |r3d>d |dd D }!| d?d@	|!  |rLdAd |dd D }"| dBd@	|"  |rk|rkdCd |dd D }#| dD| dEd@	|#  |r|sdFd |D }$|$r| dGt
|$ dH n| dIt
| dJ |r| dKt
| dL | rdM	| ndN}%||%|||t
|dOS )PzCEnhanced skill gap analysis that prioritizes target role from queryr   r   r   r   TFexisting)r   r   r   r   r   is_target_role_skillpriorityr   r   r   r   criticalr   current_rolehighr   r4   r0   r   r@   r   r      c                 S   s   |  dd| d  | d fS )Nr0   r$   r4   r   r:   r   r   r   r   r   p  s   
z5analyze_skill_gaps_with_target_role.<locals>.<lambda>r   Nr[   c                 S   r   r   r   r   r   r   r   rt   z  r   z7analyze_skill_gaps_with_target_role.<locals>.<listcomp>c                 S   r   r   r   r   r   r   r   rt   {  r   c                 S   r   r   r   r   r   r   r   rt   |  r   c                 S   r   r   r   r   r   r   r   rt   }  r   rgba(220, 53, 69, 0.9)rgba(255, 107, 107, 0.8)rgba(220, 53, 69, 0.7)rgba(255, 193, 7, 0.8)rgba(13, 202, 240, 0.7)rgba(108, 117, 125, 0.6)r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                 S   s(   g | ]}|d  dkr|d dkr|qS )r   r   r4   r   r   r   r   r   rt     r   c                 S   s   g | ]}|d  r|qS r   r   r   r   r   r   rt         c                 S   s   g | ]}|d  s|qS r   r   r   r   r   r   rt     r   c                 S   s0   g | ]}|d  r|d dkr|d dkr|qS )r   r4   r   r   r   r   r   r   r   rt     s   0 c                 S   s,   g | ]}|d  r|d dkr|d s|qS )r   r4   r   r   r   r   r   r   r   rt        , c                 S   s,   g | ]}|d  |d kr|d  dkr|qS )r   r   r   r   r   r   r   r   rt     r   c                 S   r   r   r   r   r   r   r   rt     r   c                 S   r   r   r   r   r   r   r   rt     r   zCRITICAL NEW SKILLS NEEDED: r   c                 S   r   r   r   r   r   r   r   rt     r   zHIGH PRIORITY NEW SKILLS: c              	   S   s6   g | ]}|d   dt |d  dt |d  dqS )r   r   r   u    → r   r   r   r   r   r   r   rt     s   6 zEnhance for z: c                 S      g | ]
}|d  dkr|qS r   r   r   r   r   r   r   rt     ru   zNew skills for current role: z skills to acquirezCurrent role development: z skills to enhanceStrong foundation:  advanced skillsr   r   r   )extract_target_role_from_queryget_target_role_required_skillsr
   r   r   r   valuesr   r   r   rA   )&r)   r*   r   
user_querytarget_roletarget_role_skillsr   r   r   r   
skill_info	skill_keyr1   r   r   r   r4   r   r   r   r   r   
bar_colorsr   new_skills_neededcritical_new_skillshigh_priority_new_skillstarget_role_gapscurrent_role_gapsr   r   r   r   critical_skill_nameshigh_skill_namesexisting_improvementsnew_current_skillsr   r   r   r   #analyze_skill_gaps_with_target_role  s.  














,"r  c                    sR  | sg S |    ddddddddddd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	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	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	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	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	dd(dddd)dddgd*}| D ]'\}}| v s߈ |v r|  S | }  tfd+d,|D r|  S qt fd-d,d.D r'ddddd/dddd0dd	dd1dd	dddddd2dddgS g S )3zAGet required skills for target role from query analysis - UPDATEDzSales Strategyr@   r   )r   r   r   zTeam Leadershipz Customer Relationship ManagementNegotiationr   r   zBusiness DevelopmentzSales ForecastingzMarket AnalysismediumzPresentation SkillszProduct StrategyzMarket ResearchzUser Experience DesignzData AnalysiszAgile MethodologyzStakeholder ManagementzDigital MarketingzBrand ManagementzContent StrategyzSocial Media MarketingzMarketing AnalyticszCampaign ManagementzProject PlanningzRisk ManagementzBudget ManagementzQuality AssurancezBusiness Process AnalysiszRequirements GatheringzData ModelingSQLzProcess ImprovementProgrammingzSoftware Development
AlgorithmszData StructureszSystem Design	Debugging)sales managerproduct managermarketing managerproject managerbusiness analystzsoftware development engineerc                 3   rv   rw   r   r   word)target_wordsr   r   r#   .  r|   z2get_target_role_required_skills.<locals>.<genexpr>c                 3   rv   rw   r   rx   )target_role_lowerr   r   r#   2  r|   )r^   r\   rb   head
supervisorzStrategic PlanningzPeople ManagementzDecision MakingzPerformance Management)r   r~   r   r'   )r  role_skill_mappingr   rO   
role_wordsr   )r!  r   r   r    s   














	





	





	





	




6





	r  c              	   C   s   d}|r.g }|D ]}| dd}tt| dd}	|| d|	 d qdd	| }d}
|ra|rag }|D ]}| dd}tt| dd}	|| d|	 d q8d
| dd	| }
|rhd| nd}d|  d| d|
 d| d	}|S )zLBuild advanced LLM prompt for intelligent skill analysis based on user queryr   r   Unknownr   r   r   r   zCurrent user skills: r   zCurrent job profile 'z' requires: zCurrent designation: z6
ADVANCED CAREER SKILL ANALYSIS REQUEST

User Query: "z"

a  

INSTRUCTIONS:
Analyze the user's query intelligently and provide skill analysis recommendations in EXACT JSON format below.

CRITICAL ANALYSIS RULES:
1. If user asks to transition to a NEW ROLE (e.g., "become sales manager"), focus ONLY on skills needed for that target role
2. Include user's existing skills ONLY if they are relevant to the target role from the query
3. If user asks general skill analysis, include both current role skills and growth opportunities
4. Always prioritize skills mentioned or implied in the user's specific query
5. Generate 8-12 relevant skills maximum for the target role/query
6. Skill levels: 1=Beginner, 2=Intermediate, 3=Advanced

EXACT OUTPUT FORMAT (JSON only, no explanations):
{
    "target_role_extracted": "extracted role from query or null",
    "analysis_type": "role_transition|skill_enhancement|general_analysis",
    "recommended_skills": [
        {
            "skill_name": "Skill Name",
            "current_user_level": 0-3,
            "target_level": 1-3,
            "priority": "critical|high|medium",
            "relevance_reason": "brief reason why this skill is needed"
        }
    ],
    "user_relevant_skills": [
        {
            "skill_name": "User Skill Name",
            "current_level": 1-3,
            "target_enhancement_level": 1-3,
            "relevance_to_query": "how this existing skill relates to the query"
        }
    ]
}
)r
   r   r   r   r   )r  r)   r*   r   r   user_skills_textuser_skills_listr   r   skill_leveljob_profile_textjob_skills_listdesignation_textpromptr   r   r   build_llm_skill_analysis_prompt?  s6   *r/  c              
   C   s   z)|   } | d}| dd }|dks|dkrW dS | || }t|}|W S  tjtfyF } ztd|  W Y d}~dS d}~ww )z=Parse LLM response and extract structured skill analysis data{}r   r   NzError parsing LLM response: )stripfindrfindjsonloadsJSONDecodeError	Exceptionprint)llm_response	start_idxend_idxjson_contentparsed_dataer   r   r   !parse_llm_skill_analysis_response  s   

rA  c           '      C   s  t || |||d}t|}t|}|st| |||S dd | D }i }	|dg D ]7}
|
dd}|r`| }|
dd}||t|
d	d
| |v oO|dkd|
dd|
dddd|	|< q)|dg D ]Y}|dd}|r| }|dd}||	v r||	| d< t|	| d	 t|dd|	| d	< d|	| d< |dd|	| d< qg||t|ddddd|dddd|	|< qgg }|	 D ]<}t|d	 |d  d|d< |d dkrd|d< n|d dkrd|d< nd
|d< |d dkr|d  d8  < |	| q|j
dd d |d d! }d"d# |D }d$d# |D }d%d# |D }d&d# |D }g }|D ]L}|d dkrP|d dkrI|	d' q2|	d( q2|d) rx|d dkrc|	d* q2|d dkrq|	d+ q2|	d, q2|	d- q2|d.pt|}|d/d0}|d1|d2d3d3d4d5|rd6| d7 nd |d8d9d9d4gd:|d;||d<gd:d=}d>d# |D }d?d# |D }d@d# |D }|dAkr|| | }g } ndBd# |D } dCd# |D }dDd# |D }!g }"|rdEd# |d d
 D }#|"	dFdG|#  |r%dHd# |d d
 D }$|"	dIdG|$  |rI|dAkrItdJd# || D }%|%dkrI|"	dK| dL|% dM |!rW|"	dNt|! dO |"r_dP|"ndQ}&||&| ||!t|||dRS )Sz7Generate advanced skill analysis using LLM intelligence)r  r)   r*   r   r   c                 S   s   h | ]
}| d d qS rs   r    r   r   r   r   r;     ru   z<generate_advanced_skill_analysis_with_llm.<locals>.<setcomp>recommended_skillsr   r   current_user_levelr   r   r@   Tr   r  relevance_reason)r   r   r   r   is_llm_recommendedr   rD  r4   user_relevant_skillsr   target_enhancement_levelr   r   relevance_to_queryFr4   r   r   r0   r   g      ?c                 S   s   | d | d  | d fS )Nr0   r4   r   r   r   r   r   r   r     r   z;generate_advanced_skill_analysis_with_llm.<locals>.<lambda>r   Nr[   c                 S   r   r   r   r   r   r   r   rt     r   z=generate_advanced_skill_analysis_with_llm.<locals>.<listcomp>c                 S   r   r   r   r   r   r   r   rt     r   c                 S   r   r   r   r   r   r   r   rt     r   c                 S   r   r   r   r   r   r   r   rt      r   r   r   rE  r   r   r   r   target_role_extractedanalysis_typegeneral_analysisr   r   r   r   r   r   r   r   r   r   r   r   r   c                 S   (   g | ]}|d  dkr|d dkr|qS )r   r   r4   r   r   r   r   r   r   rt   9  r   c                 S   rL  )r   r   r4   r   r   r   r   r   r   rt   :  r   c                 S   rL  )r   r  r4   r   r   r   r   r   r   rt   ;  r   role_transitionc                 S   s(   g | ]}| d dr|d dkr|qS r   Fr4   r   r:   r   r   r   r   rt   C  r   c                 S   s(   g | ]}| d ds|d dkr|qS rN  r:   r   r   r   r   rt   D  r   c                 S   r   r   r   r   r   r   r   rt   F  r   c                 S   r   r   r   r   r   r   r   rt   L  r   zCRITICAL SKILLS NEEDED: r   c                 S   r   r   r   r   r   r   r   rt   P  r   zHIGH PRIORITY: c                 S   r   r   r   )r   sr   r   r   rt   T  ru   zFor z transition: z new skills to developr   r   r   z:Skill analysis completed based on your query requirements.)r   r   r   r   r   r   llm_analysis_typetarget_role_detected)r/  query_ollamarA  r  r
   r   r   r   r  r   r   r   r   rA   )'r)   r*   r   r   r  
llm_promptr;  parsed_analysisuser_skill_namesr   	skill_recr   r  rC  user_skill_recr   r   r   r   r   r   r   r   r  r   r  rJ  r   r   high_priority_gapsmedium_gapsr   r   r   r   critical_names
high_namesr	  r   r   r   r   )generate_advanced_skill_analysis_with_llm  s  	








!

r\  c                 C   sr   | d }| d }| d }| d }|  dd}|dkr#tg g d||d	S |d
kr0tg g d||d	S t|||||d	S )z9Updated function to use advanced LLM-based skill analysisscenariocurrent_job_profile_skillsr)   current_job_profile_namer   r   
scenario_1N)r)   r*   r   r   r  
scenario_2)r
   r\  )user_contextr  r]  r^  r)   r_  r   r   r   r   ,generate_scenario_appropriate_skill_analysisi  s8   
rc  c                    s   | sdS |    }g d}|D ]9}t||}|rI|d }g d  fdd| D }d|}t|dkrIt| d	krI|   S qdS )
zAExtract target role from user query with better parsing - UPDATEDN)zr(?:want to become|become a|become an|transition to|move to|switch to)\s+(?:a\s+|an\s+)?([a-zA-Z\s]+?)(?:\?|$|\.|,)z](?:career in|job as|role as|position as|work as)\s+(?:a\s+|an\s+)?([a-zA-Z\s]+?)(?:\?|$|\.|,)zp(?:interested in|pursuing|targeting)\s+(?:a\s+|an\s+)?([a-zA-Z\s]+?)\s+(?:role|position|career|job)(?:\?|$|\.|,)zN(?:how to become|steps to become)\s+(?:a\s+|an\s+)?([a-zA-Z\s]+?)(?:\?|$|\.|,)zC(?:path to|roadmap to)\s+(?:a\s+|an\s+)?([a-zA-Z\s]+?)(?:\?|$|\.|,)r   )verygood
successfulbettergreat	excellentc                    s   g | ]}| vr|qS r   r   r  filler_wordsr   r   rt     r   z2extract_target_role_from_query.<locals>.<listcomp>r   r   r   )	r   r3  researchgroupr   r   rA   title)r  query_lowerrole_patternspatternmatchextracted_rolewordsr   rj  r   r     s   
r   c              	   C   s   t |}| d }| d }|re|dg }t|}d}	|rF|rFdd |D }
dd |D }|
D ]}|D ]}||v s<||v r@d}	 nq2|	rE nq.|	rYd	|  d
| d| d| d	S d| d| d| dS d| d| dS )zEBuild reasoning that focuses on target role from user query - UPDATEDr   r_  rO   Fc                 S   rr   rs   r    r   r   r   r   rt     ru   zIbuild_scenario_appropriate_reasoning_with_target_role.<locals>.<listcomp>c                 S   s   g | ]}|d    qS r   r   r   r   r   r   rt     r   Tz[CRITICAL FOR z] z( develops essential skills required for z/ role and supports your career transition from z background.z[CAREER TRANSITION] z  builds foundational skills for z[PROFESSIONAL DEVELOPMENT] z enhances your capabilities as z4 and aligns with your career development objectives.)r   r
   r  upper)rb  course_detailscourse_namer  r  r   r_  r+   r  alignment_foundr   target_skill_namesr5   r!   r   r   r   5build_scenario_appropriate_reasoning_with_target_role  s.   "r}  c                 C   s   |rF|rFd| ddd |D  d| d}t |}zttd| }tt|dd	}W n   d}Y t| |d
 }|d }	t||	 d	S t| |}d}
|rUt| ||}
t	||| }t
| |}|d |
d  |d
  |d  }t|d	S )zCUpdated enhanced skill matching with LLM-aware target role analysiszA
        COURSE RELEVANCE ANALYSIS
        
        Target Role: z
        Course Skills: c                 S   s   g | ]}| d dqS rs   r:   r   r   r   r   rt     r   z9enhanced_match_skills_for_target_role.<locals>.<listcomp>z+
        User Query Context: Transition to a(  
        
        Rate relevance (0-100) of this course for the target role. Consider:
        1. Direct skill alignment with target role requirements
        2. Career transition value
        3. Skill gap filling for the target role
        
        Respond with just a number (0-100):
        z\d+r   r&   g?g?g      ?g?g?)rR  floatrl  rm  rn  r(   r   r   r7   r   rI   )r)   r+   r*   r   r  llm_relevance_promptllm_relevance_responsellm_relevance_score
base_score	llm_scorejob_profile_bonusdesignation_bonusskill_gap_bonustotal_scorer   r   r   %enhanced_match_skills_for_target_role  sH   


r  c              
      s   | r|sdS |   }g dg dg dg dg dg dg dg d	g d
d	}g }| D ]\}}||v r:|} nq.|sAg d}dd |D }d}	|D ]}
|D ] |
 v sct fdd|
 D ri|	d7 }	 nqPqLt|	dS )zE
    Calculate alignment score based on target role requirements
    r   )rX   rL   salesnegotiationra   zcustomer relationship)zproduct managementr_   	analyticsrL   rX   zmarket research)zmachine learningpython
statisticsrj   sqlzdeep learning)rT   zsoftware development
algorithmsr`   	debugging)rc   rX   planningzrisk managementrL   )	marketingzdigital marketingzbrand managementr  rL   )zbusiness analysisrj   zrequirements gatheringr  zprocess improvement)ro   rY   rZ   rT   r`   )
consultingrU   rL   zanalytical thinkingzpresentation skills)	r  r  rh   zsoftware engineerr  r  r  rm   ri   )rX   rL   
managementrU   rf   c                 S   rr   rs   r    r   r   r   r   rt   1  ru   z9calculate_target_role_alignment_score.<locals>.<listcomp>c                 3   rv   rw   r   r  rz   r   r   r#   6  r|   z8calculate_target_role_alignment_score.<locals>.<genexpr>r   K   r}   )r  r+   r)   r!  role_skill_requirementsrequired_skillsr   rO   r   alignment_scorer   r   rz   r   %calculate_target_role_alignment_score  s>   "
r  c                    s>  | r|sdS t | }|sdS dd |pg D }dd |D }d}|D ]w}|d   |d }|d }	 |v sCt fdd	| D r| i d
d}
|	dkrh|
dkrZ|d7 }q"|
|k rc|d7 }q"|d7 }q"|	dkr|
dkru|d7 }q"|
|k r~|d7 }q"|d7 }q"|
dkr|d7 }q"|
|k r|d7 }q"|d7 }q"t|dS )z
    Calculate priority score specifically for target role requirements
    CRITICAL priority for missing target role skills
    r   c              	   S   r   r   r   r   r   r   r   r   J  r   z8calculate_target_role_priority_score.<locals>.<dictcomp>c              	   S   r   r   r   r   r   r   r   r   P  r   r   r   r   c                 3   s(    | ]} |  v p|   v V  qd S rw   rw  )r   r{   rv  r   r   r#   ^  s
    
z7calculate_target_role_priority_score.<locals>.<genexpr>r   r      r   r$   r   rg   r   r%   r[   r   r&   )r  r   r'   keysr
   r(   )r  r+   r)   r  r.   r/   r0   target_skill_infor1   skill_priorityr3   r   rv  r   $calculate_target_role_priority_score=  sN   








r  c                 C   s   ddddd}| | dS )z,Convert numeric skill level to readable nameNoneBeginnerIntermediateAdvanced)r   r   r   r@   r:   )r   	level_mapr   r   r   r   ~  s   r   )NN)NNr   )NNNN)NNNr   )r   )NNN)r7   rI   r   r   r   r   r   r  r  r/  rA  r\  rc  r   r}  r  r  r  r   r   r   r   r   <module>   s,    nP.>
 
. e
UF
 
O( 
!=.A