o
    Lg.                     @   s:   d dl Z d dlZd dlZejejd dd Zdd ZdS )    N)levelc           $         s6  z|t d|  dd}t|}W d    n1 sw   Y  t| d }td|  |d }|d }|d }|d	 }td
|  g }	t|| d }
t|| d }dd || d D }|| d td| d   |
s|s|s st	d |D ]}|d |
vr|d |vr|	
|d ddd q|	d d W S |
s|s|s rt	d  |v r fdd| D }|D ]"}||kr|| d }|D ]}||
vr||vr|	
|ddd qq|	r|	d d W S t	d |D ]}|d |
vr|d |vr|	
|d ddd q|	d d W S |r]| D ]6\}}|D ].}d|v rY|d D ]!}|d |krWt|d  |krW|	
|d! dd"| d q7q,q&td#|	  | D ]\}}d$}d$}|D ]@}|d% }|d& }||krd'}|D ]+}|D ]%}d|v r|d D ]}|d |kr|	
|d! d(d)| d qqqqs|s|D ]6}|d& }||v rd'}|D ]%}d|v r|d D ]}|d |kr|	
|d! d(d)| d qӐqȐq|s|s|D ]%}d|v r|d D ]}|d |kr|	
|d! d*d+| d qqqitd,|	  t }|D ]}|d! }||
vrB||vrB|| q-|D ]}|	
|d-d.d qFtd/|	   r |v r fd0d| D }|D ]'}||kr|| d }|D ]}||
vr||vr|	
|ddd qqptd1|	  |D ]j}|d! }||
vr||vrd-}d2}d3|v rd4|d3 v r|d57 }|d67 }d7|v rd4|d7 v r|d57 }|sd8n|d9 }d:|v rd4|d: v r|d57 }|sd;n|d< }|r|	
||d=| d qtd>|	  g }t }|	D ]} | d! |vr1|
|  || d!  qt|dk rSt||
|}!|!rL|
|!dd?d t|dk s:|jd@dA d'dB |rwt|dCdA dDdE }"|D ]} | dE  |"  < qk|d d W S  ty }# ztdF|#  g W  Y d }#~#S d }#~#ww )GNztrained_models/model_z.pklrbr   z	User ID: courses_datacompetency_data
users_datatop_rated_courseszCourses Data: assignedCoursescompletedCoursesc                 S   s   i | ]}|d  t |d qS )skill_id
skill_type)int).0skill r   Z/var/www/eduai.edurigo.com/doc_train/edurigo_ai/get_recommendations/prod/recommendation.py
<dictcomp>   s    z'get_recommendations.<locals>.<dictcomp>skills	managerIdzUser Skills: z, Manager ID: zCUser is completely new. Providing top-rated course recommendations.lms_course_id   zTop-rated course for new user)courseIdscorereason
   zMUser has only manager ID. Attempting collaborative filtering recommendations.c                    "   g | ]\}}| d  kr|qS r   getr   uiddata
manager_idr   r   
<listcomp>-      " z'get_recommendations.<locals>.<listcomp>g?zORecommended based on collaborative filtering with users under the same manager.zQInsufficient data for collaborative filtering. Falling back to top-rated courses.r
   r   r   zBRecommended for upgrading existing user skills. Skill to improve: z+Recommendations based on upgrading skills: Fparent_skill_idchild_skillsTg?zORecommended based on competency data matching with user skills. Matched skill: g333333?z?Recommended based on individual skill matching. Matched skill: z*Recommendations based on competency data: g      ?zGRecommended based on similar courses to assigned and completed courses.z9Recommendations based on assigned and completed courses: c                    r   r   r   r   r!   r   r   r#      r$   z2Recommendations based on collaborative filtering:  nameLaravelg?zname matchingshort_descriptionzshort description matchingz, short description matchingdescriptionzdescription matchingz, description matchingzRecommended based on zFinal Recommendations: zAdditional recommendationc                 S      | d S Nr   r   xr   r   r   <lambda>       z%get_recommendations.<locals>.<lambda>)keyreversec                 S   r,   r-   r   r.   r   r   r   r0      r1   )r2   r   zError: )openpickleloadlistkeysloggingdebugsetr   infoappenditemsr   addlenselect_additional_coursesortmax	Exceptionerror)$	client_id	user_datafiletrained_modeluser_idr   r   r   r   recommendationsassigned_coursescompleted_coursesuser_skillscourseusers_under_managerr   user_assigned_courses	course_idr
   r   course_skillparent_matchedchild_matchedparent_skill_datar%   r&   child_skill_id+similar_courses_based_on_assigned_completedr   r   unique_recommendationsseen_course_idsrecommendationadditional_course	max_scoreer   r!   r   get_recommendations   sr  



 


	





r_   c                    s*    fdd| D }|rt |}|S d S )Nc                    s,   g | ]}|d   vr|d  vr|d  qS )r   r   )r   rO   rL   rM   r   r   r#      s    z,select_additional_course.<locals>.<listcomp>)randomchoice)r   rL   rM   available_coursesr\   r   r`   r   rA      s
   
rA   )r5   r9   ra   basicConfigDEBUGr_   rA   r   r   r   r   <module>   s     K