o
    cÞiñ6  ã                   @   s„  d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	 ej
ejdd e d¡Ze d¡ dZd	Ze j d
e j e j e j e¡¡d¡¡Ze jedd G dd„ deeƒZdedefdd„Zdedefdd„Zdedefdd„Z d3dd„Z!dd„ Z"dd„ Z#dd „ Z$d!d"„ Z%d#d$„ Z&d%ed&efd'd(„Z'd)ede(fd*d+„Z)d3ded,ee d-ee d.ee d/ee d0eeeee f  fd1d2„Z*dS )4é    N)ÚEnum)ÚDictÚListÚOptionalÚAnyz4%(asctime)s | %(levelname)s | %(name)s | %(message)s)ÚlevelÚformatÚassessment_report_processorz>Initializing Agentic Analytics Processor with os module ready.ÚnoneÚ ÚTRAINED_DATA_DIRÚtrained_dataT©Úexist_okc                   @   s   e Zd ZdZdZdZdZdS )ÚTrainingStatusÚqueuedÚ
processingÚ	completedÚfailedN)Ú__name__Ú
__module__Ú__qualname__ÚQUEUEDÚ
PROCESSINGÚ	COMPLETEDÚFAILED© r   r   úT/var/www/eduai.edurigo.com/response_iq_kunal/assessment_report_analysis_processor.pyr      s
    r   Ú	client_idÚreturnc                 C   s   t j tt| ƒ¡S ©N)ÚosÚpathÚjoinÚ	DATA_ROOTÚstr©r   r   r   r   Ú_client_dir   s   r'   c                 C   s   t | ƒ}tj|dd |S )NTr   )r'   r!   Úmakedirs)r   r"   r   r   r   Ú_ensure_client_dir   s   r)   Úqc                 C   s|   t |  dd¡ƒ}t |  d¡pdƒ ¡ }| d¡d  d¡d  ¡ }|r)| ¡ dv r,d	}n| ¡ }| ¡ d
kr8d}|||dœS )NÚidr   ÚcategoryNamezGeneral Knowledgeú>r   ú-)z
input typeÚtestÚuncategorizedÚdefaultzGeneral AssessmentÚgk)Úquestion_idr,   Úskill)r%   ÚgetÚstripÚsplitÚlowerÚtitle)r*   ÚqidÚcatÚroot_domainr4   r   r   r   Ú_classify_question!   s   r=   c           	      C   sZ   t | ƒ}dtjji}ttj |d¡dƒ}t 	||¡ W d   ƒ |S 1 s&w   Y  |S )NÚstatusústatus.jsonÚw)
r)   r   r   ÚvalueÚopenr!   r"   r#   ÚjsonÚdump)	r   Úquestion_bankÚassessment_summaryÚcompleted_users_dataÚuser_attempt_detailsÚmanager_mappingr"   ÚmetaÚfr   r   r   Ústart_training_meta6   s   
ÿþrL   c                 C   óZ   t j t| ƒd¡}t j |¡sd S t|dƒ}t |¡W  d   ƒ S 1 s&w   Y  d S )Nr?   Úr©r!   r"   r#   r'   ÚexistsrB   rC   Úload©r   r"   rK   r   r   r   Úget_training_status=   ó
   $ÿrS   c                 C   rM   )Núresult.jsonrN   rO   rR   r   r   r   Úget_analysis_resultC   rT   rV   c                   C   s   g S r    r   r   r   r   r   Úlist_all_clientsI   ó    rW   c                 C   s   d S r    r   r&   r   r   r   Údelete_client_dataJ   rX   rY   c                   C   s   dS )NTr   r   r   r   r   Úcheck_ollama_healthK   rX   rZ   Úskill_statsr9   c           	      C   s€   t |  ¡ ƒ}g }|D ]*}| | }| dd¡}| dd¡}|dkr/|| d }| t|dƒ¡ q
| d¡ q
|d|dœgd	|d
œS )NÚquestions_attemptedr   Úquestions_correctéd   é   ç        z
Accuracy %)ÚlabelÚdataÚbar)ÚlabelsÚdatasetsÚtyper9   )ÚlistÚkeysr5   ÚappendÚround)	r[   r9   rd   Údata_accuracyÚskÚs_dataÚ	attemptedÚcorrectÚaccr   r   r   Úbuild_skill_chartM   s$   þÿ÷rq   Úq_datac                 C   sL  t |  dd¡ƒ}|dkrdS t|  d¡pdƒ ¡  ¡ }t|  d¡p"dƒ ¡  ¡ }|s,dS ||kr2dS d|v rXd|v rXtd	d
„ | d¡D ƒƒ}tdd
„ | d¡D ƒƒ}||krXdS |  dg ¡}|r¤t|tƒr¤d}d}d}	|D ](}
t	|
 dd¡ƒ}t	|
 dd¡ƒ}|r…|d7 }|r|r|d7 }|r•|s•|	d7 }	qm|dkr¤||kr¤|	dkr¤dS dS )NÚobtained_marksr   TÚcorrect_answerr   Úuser_answerFú,c                 S   ó   g | ]}|  ¡ ‘qS r   ©r6   ©Ú.0Úxr   r   r   Ú
<listcomp>x   ó    z)_evaluate_correctness.<locals>.<listcomp>c                 S   rw   r   rx   ry   r   r   r   r|   y   r}   Úquestion_optionÚcorrect_answer_optioné   )
Úfloatr5   r%   r6   r8   Úsortedr7   Ú
isinstancerg   Úbool)rr   ÚobtainedÚexpectedÚactualÚexp_listÚact_listÚ	q_optionsÚtrue_correctsÚ	user_hitsÚuser_missesÚoptÚis_truth_corrÚis_user_selr   r   r   Ú_evaluate_correctnessh   s@   €r‘   rE   rF   rG   rH   rI   c           <      C   s8  z8t | ƒ}dtjji}ttj |d¡dƒ}t 	||¡ W d   ƒ n1 s'w   Y  t
 d| › ¡ i }	i }
|D ] }t|ƒ}|d }|d }|d }||
|< |	 |d¡d	 |	|< q:t|	 ¡ ƒt|	 ¡ ƒd
ddœ}i }|	 ¡ D ]	}dddœ||< qpi }i }i }i }i }d}d}t|ƒ}tƒ }|D ]M}t| dd¡ƒ}t| d¡p¨| d¡p¨|ƒ}t| d¡p¶| d¡p¶dƒ}t| d|¡ƒ} | ||< | |¡ ||vrÚi ||< tƒ ||< i ||< ||  |¡ ||vrï|i ddi dœ||< | dg ¡D ]é}!|! dd¡sþqõt|! d¡ƒ}|
 |d¡}t|!ƒ}"|"rd	nd}#|d	7 }||#7 }||vr*dddœ||< || d  |#7  < || d  d	7  < ||| vrNdddœ|| |< || | d  |#7  < || | d  d	7  < ||| vrttƒ || |< || |  |¡ ||| d vr‘dddœ|| d |< || d | d  |#7  < || d | d  d	7  < || d  d	7  < || d  |#7  < ||| d  vrÓtƒ || d  |< || d  |  |¡ qõq‘t|d!ƒ}$|dkrót|| d" d#ƒnd$}%|t|ƒ|%t| ¡ ƒd%œ}&g }'| ¡ D ]k\}(})td&d'„ |) ¡ D ƒƒ}*td(d'„ |) ¡ D ƒƒ}+|*dkr0t|+|* d" d#ƒnd$},d)d*„ | |(i ¡ ¡ D ƒ}-t|- ¡ ƒ}.t|- ¡ ƒt|- ¡ ƒd
d+dœ}/|' |(| |(|(¡|.t| |(g ¡ƒ|,d,œ|/t|)d-ƒd.œd/œ¡ qg }0| ¡ D ]^\}1}2|2d0 }3|2d })|2d }4|2d }5|4dkrœt|5|4 d" d#ƒnd$}6d1d*„ |2 d i ¡ ¡ D ƒ}7t|7 ¡ ƒ}8t|7 ¡ ƒt|7 ¡ ƒd
d2dœ}9|0 |1|3|8|6d3œ|9t|)d4|3› d5ƒd.œd6œ¡ qz|&||$d.œd7œ|'|0d8œ}:ttj |d9¡dƒ}tj	|:|d:d; W d   ƒ n	1 sw   Y  dtjji}ttj |d¡dƒ}t 	||¡ W d   ƒ n	1 s*w   Y  t
 d<| › ¡ W d S  ty› }; zUt
 d=| › d>|;› ¡ tjjt|;ƒd?œ}t| ƒ}tj  |¡r‰ttj |d¡dƒ}t 	||¡ W d   ƒ n1 s}w   Y  W Y d };~;d S W Y d };~;d S W Y d };~;d S d };~;ww )@Nr>   r?   r@   zProcessing client r,   r4   r3   r   r€   ÚdoughnutzQuestion Skill Mapping)rd   rb   rf   r9   )r]   r\   ÚuserNameÚUnknown_UserÚuserIdÚuser_idÚ	managerIdÚ
manager_idÚ
UnassignedÚmanagerName)Ú	user_nameÚskillsrn   ro   Úunique_qrb   Úis_attemptedTÚUncategorizedr]   r\   rœ   rn   ro   r   z%Overall Skill Distribution & Accuracyr^   r_   r`   )Útotal_questions_in_bankÚtotal_usersÚaverage_accuracyÚtotal_managersc                 s   ó    | ]	}|  d d¡V  qdS )r\   r   N©r5   ©rz   Úsr   r   r   Ú	<genexpr>	  ó   € z(run_training_pipeline.<locals>.<genexpr>c                 s   r¤   )r]   r   Nr¥   r¦   r   r   r   r¨   
  r©   c                 S   ó   i | ]	\}}|t |ƒ“qS r   ©Úlen©rz   rl   Úqidsr   r   r   Ú
<dictcomp>  ó    z)run_training_pipeline.<locals>.<dictcomp>zTeam Question Skill Mapping)Útotal_questionsr¡   r¢   z"Team Skill Distribution & Accuracy)Úquestion_skill_mapping_chartÚ!skill_distribution_accuracy_chart)r˜   Úmanager_nameÚsummaryÚ
chart_datar›   c                 S   rª   r   r«   r­   r   r   r   r¯   -  r°   zUser Question Skill Mapping)r±   r¢   z$User Skill Distribution & Accuracy (ú))r–   r›   rµ   r¶   )rµ   r¶   )Úadmin_reportÚmanager_reportsÚuser_reportsrU   é   )ÚindentzSuccessfully processed client zError processing client z: )r>   Úerror)!r)   r   r   rA   rB   r!   r"   r#   rC   rD   ÚloggerÚinfor=   r5   rg   rh   Úvaluesr¬   Úsetr%   Úaddr‘   rq   rj   ÚitemsÚsumri   r   Ú	Exceptionr½   r   r'   rP   )<r   rE   rF   rG   rH   rI   r"   rJ   rK   Ú
cat_countsÚqid_to_skillr*   Úclsr;   r4   r:   Úchart1_adminÚadmin_skill_statsr§   Úmanager_statsÚmanager_unique_qÚ
user_statsÚmanager_usersÚmanager_namesÚglobal_attemptedÚglobal_correctÚtotal_q_bankÚall_user_idsÚattemptr›   r–   r˜   r´   rr   Ú
is_correctÚcorr_valÚchart2_adminÚ
global_accÚadmin_summaryr¹   ÚmidÚstatsÚmgr_attemptedÚmgr_correctÚmgr_accÚmgr_cat_countsÚmgr_total_questionsÚchart1_managerrº   ÚuidÚudataÚunameÚu_attemptedÚ	u_correctÚu_accÚusr_cat_countsÚusr_total_questionsÚchart1_userÚresultÚer   r   r   Úrun_training_pipeline”   s>  ÿ

ü



Ù
) 
ü 

ü
ýþø 

üþþùþþ÷ÿÿ,ÿÿ€ûrí   r    )+r!   rC   ÚloggingÚenumr   Útypingr   r   r   r   ÚbasicConfigÚINFOÚ	getLoggerr¾   r¿   ÚOLLAMA_MODELÚOLLAMA_BASE_URLÚenvironr5   r"   r#   ÚdirnameÚabspathÚ__file__r$   r(   r%   r   Úintr'   r)   Údictr=   rL   rS   rV   rW   rY   rZ   rq   r„   r‘   rí   r   r   r   r   Ú<module>   s2    

(
H,