o
    h5                     @   sH   d dl Z d dlmZmZmZ G dd dZdd Zedkr"e  dS dS )    N)ListDictAnyc                   @   sP   e Zd Zdd Zddee dee ded	ed
ededeeeef  fddZ	dS )
YouTubeMCPc                 C   s   d| _ d| _d S )Nz'AIzaSyCx593S7DDye-DdsWwh_trEH0yr1TLBDJwz%https://www.googleapis.com/youtube/v3)api_keybase_url)self r	   >/var/www/eduai.edurigo.com/my_career/production/youtube_mcp.py__init__   s   
zYouTubeMCP.__init__N 	   user_skills
skill_gapsjob_profile_data
user_querytarget_rolemax_resultsreturnc           -   
      s  g } r   }dd | D }	||	dd  |r)| }
||
dd  dd |D }dd |D }|dd D ]}|d	    }|| q=|dd
 D ]}t|dk rl|d	    }||dd  qS|s|r|drt|dk r|d    }||dd  t|dk rdd |D }|dd D ]}|d	    }||dd
  qt }g }|D ]}||vrt|dkr|| || qg d}|st fdddD rg d}d	|dd  dd	|dd  }| j
 d}d|d|| jdddd}ztd|  tj||d}|jdkr| dg }|D ]}|di d d!  }|di d"d!  }d#} rqd$d   D }|D ]}||v rf|d7 }qY||v ro|d
7 }qYd#} |r|   }
|
D ]}||v r| d7 } q~||v r| d
7 } q~d#}!|D ]}|d	   }"|"|v r|!d7 }!q|"|v r|!d
7 }!qd#}#|s|r|dr|d    }|D ]}||v r|#d
7 }#q||v r|#d%7 }#q|d | d  |!d  |#d
  }$g }%g }&g }'t|d&d' d(}(|(D ]3}|d	   }"|"|v s|"|v r:|%|" |&|d)d* |'|d+d t|%dkr: nqg })|rY| d#krO|)d,|  n,|)d-| d. n" rg|d#krg|)d/ n|r{|dr{|)d0|d  d1 |%rd2d t|%|'D }*d3d t|%|'D }+|*r|)d4d5	|*  n|+r|)d6d5	|+  n|)d7d5	|%dd   |)s|)d8 |%|d9< |&|d:< |'|d;< ||d<< | |d=< |!|d>< |#|d?< |$|d@< dA	|)|dB< dC|dD dE  |dF< t|p |d#k|dG< q.|jdHd' dIdJ |W S tdK|j dL tdM|j  g W S  tyC }, ztdNt|,  g W  Y d},~,S d},~,ww )OzMFetch courses from YouTube API prioritizing user query over job profile data.c                 S   s   g | ]}|d vr|qS ))iwanttotheaanandorbutgivebestforthisr	   .0wordr	   r	   r
   
<listcomp>   s    z,YouTubeMCP.fetch_courses.<locals>.<listcomp>N      c                 S      g | ]}| d dkr|qS )prioritycriticalgetr#   gapr	   r	   r
   r%          c                 S   r(   )r)   highr+   r-   r	   r	   r
   r%      r/      
skill_name      job_profile_name   c                 S   r(   )r)   mediumr+   r-   r	   r	   r
   r%   3   r/   )coursetutorialtrainingguidec                 3   s    | ]	}|   v V  qd S )N)lowerr"   r   r	   r
   	<genexpr>D   s    z+YouTubeMCP.fetch_courses.<locals>.<genexpr>)
transitionchangeswitchbecome)zcareer changeztransition guider8   r:    z/searchsnippetvideoenr7   	relevance)partqtype
maxResultskeyrelevanceLanguagevideoDurationorderz1YouTube search query (prioritizing user intent): )params   itemstitler   descriptionr   c                 S   s,   g | ]}t |d kr| dvr| qS )r1   )r   r   r    r   r   )lenr<   r"   r	   r	   r
   r%   g   s    g      ?c                 S   s   ddddd |  dddS )Nr3   r1   r'   r&   )r*   r0   r7   lowr)   r7   r+   xr	   r	   r
   <lambda>   r/   z*YouTubeMCP.fetch_courses.<locals>.<lambda>)rL   gap_typeunknownr)   zPerfect for transitioning to zRecommended for z career transitionz*Directly addresses your query requirementszRelevant for z rolec                 S      g | ]
\}}|d kr|qS )r*   r	   r#   r.   r)   r	   r	   r
   r%          c                 S   r\   )r0   r	   r]   r	   r	   r
   r%      r^   z$Teaches critical transition skills: z, zCovers essential skills: zHelps develop: z.Course content aligns with your learning goalsaddressed_gaps	gap_typesgap_prioritiesquery_alignment_scoretarget_role_scorecritical_skills_scorejob_alignment_scoretotal_relevance_scorez. reasonz https://www.youtube.com/watch?v=idvideoIdurluser_query_focusedc                 S   s   |  ddS )Nrf   r   r+   rW   r	   r	   r
   rY      s    T)rL   reversezError: Received status code z from YouTube APIz
Response: z Error fetching YouTube courses: )r<   splitextendrU   r,   setaddappendanyjoinr   r   printrequestsstatus_codejsonsortedzipboolsorttext	Exceptionstr)-r   r   r   r   r   r   r   query_termsquery_lowerimportant_wordstarget_wordscritical_gapshigh_priority_gapsr.   skill_wordsjob_name_wordsmedium_gapsseenunique_query_termstermeducational_termsqueryendpointrP   responseresultsitemrS   rT   rb   query_wordsr$   rc   rd   gap_namere   rf   r_   r`   ra   all_gaps_by_priorityreason_partscritical_addressedhigh_addresseder	   r=   r
   fetch_courses	   s4  

*











zYouTubeMCP.fetch_courses)Nr   r   r   )
__name__
__module____qualname__r   r   r   r~   intr   r   r	   r	   r	   r
   r      s    @r   c            
   
   C   s  dddddddddd	d
dg} 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ddddd ddg}t  }|| ||||}td! td"t|  td# t|dD ]Z\}}|d$i }	t| d%|	d&  td'|	d(  td)|d*  td+|d,d  td-|d.g   td/|d0d  td1|d2d3  td# qhd S )4N63
Leadership)skill_id
skill_typer2   71
Management92Communicationzdata scientist20zMachine Learning15Python)r5   job_profile_skillszCi want transition to sales manager give best career advice for thiszsales managers1zSales Managementr   r'   transition_skillr*   )r   r2   current_leveltarget_levelrZ   r)   s2z Customer Relationship Managements3Negotiationr0   r3   transition_upgradezFetched Courses:zTotal courses found: zF----------------------------------------------------------------------rD   z	. Title: rS   z   Channel: channelTitlez   URL: rj   z   Relevance Score: relevance_scorez   Addressed Gaps: r_   z   Job Alignment Score: re   z   Reason: rg   zN/A)r   r   rt   rU   	enumerater,   )
r   r   r   r   r   youtube_mcpcoursesr   r8   rD   r	   r	   r
   main   s@   




	
r   __main__)ru   typingr   r   r   r   r   r   r	   r	   r	   r
   <module>   s     [1
