Ë
    I»jg  ã                   ót   — d Z ddlmZ ddlmZ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mZ  G d„ d	«      Zy
)zAssessment generate / grade.é    )Úuuid4)ÚAssessmentGenerateRequestÚAssessmentGenerateResponseÚAssessmentGradeRequestÚAssessmentGradeResponse)Ú	JobStatus)ÚQuestionType)Úgenerate_json)Ú_local_questionsÚ_parse_questionsc                   ó,   — e Zd Zdedefd„Zdedefd„Zy)ÚAssessmentsServiceÚpayloadÚreturnc              ƒ   óX  ‡‡
K  — d}d‰j                   › d‰j                  j                  › d‰j                  › d‰j                  j                  › d‰j
                  D �cg c]  }|j                  ‘Œ c}› d‰j                  › d‰j                  › d	‰j                  › �}‰j
                  r‰j
                  d
   nt        j                  Š
dt        fˆˆ
fd„}t        |||¬«      ƒ d {  –—† \  }}}t        |j                  dg «      ‰
‰j                  «      }	|	s$t         |«       d   ‰
‰j                  «      }	d\  }}t        ‰j                   t#        t%        «       «      ‰j                  ‰j                   t&        j(                  |d|› �|	|j                  d«      xs i ¬«	      S c c}w 7 ŒÁ­w)NzDGenerate an assessment. Return JSON: {"questions":[...],"rubric":{}}zRole: z
Kind: z
JD: z
Difficulty: z
Types: z
Count: z	
Skills: z
Time limit: r   r   c                  óÚ   •— t        ‰ j                  ‰‰ j                  ‰ j                  j                  › d‰ j
                  › �¬«      d‰ j                  ‰ j                  j                  dœdœS )Nz / )ÚcountÚqtypeÚ
difficultyÚtopicçffffffæ?)Úpassing_scoreÚtime_limit_minutesÚkind)Ú	questionsÚrubric)r   r   r   r   ÚvalueÚ
role_titler   )r   Úprimarys   €€ú2/var/www/html/TJ-AI/tj/app/services/assessments.pyÚlocalz*AssessmentsService.generate.<locals>.local   sh   ø€ ä-Ø!Ÿ-™-Ø!Ø&×1Ñ1Ø$Ÿ\™\×/Ñ/Ð0°°G×4FÑ4FÐ3GÐHô	ð &)Ø*1×*DÑ*DØ#ŸL™L×.Ñ.ññð ó    ©ÚsystemÚuserÚlocal_factoryr   )Tr!   zAssessment generated via r   )	Úcorrelation_idÚassessment_idr   r   ÚstatusÚstubÚmessager   r   )r   r   r   Újob_descriptionr   Úquestion_typesr   Úskillsr   r	   ÚMCQÚdictr
   r   Úgetr   r'   Ústrr   r   Ú	SUCCEEDED)Úselfr   r$   Útr%   r!   Údatar*   Úproviderr   r   s    `        @r    ÚgeneratezAssessmentsService.generate   sµ  ùè ø€ ð Wð 	ð �W×'Ñ'Ð(¨°·±×1CÑ1CÐ0Dð EØ×*Ñ*Ð+¨>¸'×:LÑ:L×:RÑ:RÐ9Sð TØ(/×(>Ò(>Ó?Ñ(> 1�q—w“wÐ(>Ñ?Ð@À	È'Ï-É-Èð YØ—~‘~Ð& n°W×5OÑ5OÐ4PðRð 	ð 07×/EÒ/E�'×(Ñ(¨Ò+Ì<×K[ÑK[ˆð	”tö 	ô &3Ø °Eô&
÷  
Ñˆˆd�Hô %Ø�H‰H�[ "Ó% w°×0BÑ0Bó
ˆ	ñ Ü(Ù“˜Ñ$ g¨w×/AÑ/AóˆIð +‰NˆD�(ä)Ø"×1Ñ1Üœe›g›,Ø—‘Ø×)Ñ)Ü×&Ñ&ØØ/°¨zÐ:ØØ—8‘8˜HÓ%Ò+¨ô

ð 
	
ùòA @ð( 
ús    „AF*ÁF#Á1A5F*Ã&F(Ã'CF*c              ƒ   ó8  ‡K  — d}d‰j                   › d‰j                  j                  › d‰j                  › d‰j                  › �}dt
        fˆfd„}t        |||¬«      ƒ d {  –—† \  }}}t        ‰j                  ‰j                   t        j                  |d	|› �t        |j                  d
«      xs d«      t        |j                  d«      xs d«      |j                  d«      |j                  d«      t        |j                  d«      xs g «      ¬«
      S 7 Œ´­w)Nz{Grade assessment submissions. Return JSON: {"total_score","max_total_score","passed","feedback_markdown","item_results":[]}zassessment_id=z
kind=z
rubric=z	
answers=r   c                  ó¾   •— t        ‰j                  «      } t        | «      }t        |dz  d«      }||||dz  k\  dt	        | «      D �cg c]  }|dddœ‘Œ
 c}dœS c c}w )Nr   é   z.Solid attempt. Strengthen edge-case reasoning.g      ð?)ÚindexÚscoreÚ	max_score)Útotal_scoreÚmax_total_scoreÚpassedÚfeedback_markdownÚitem_results)ÚlenÚanswersÚfloatÚroundÚrange)ÚnÚ	max_totalÚtotalÚir   s       €r    r!   z'AssessmentsService.grade.<locals>.localL   sv   ø€ Ü�G—O‘OÓ$ˆAÜ˜a›ˆIÜ˜) c™/¨1Ó-ˆEà$Ø#,Ø 9¨s¡?Ñ2Ø%Uô # 1œXó!á%˜ð  ¨#¸CÓ@Ø%ñ!ñ	ð 	ùò
!s   ÁAr#   zAssessment graded via r?   r   r@   rA   rB   rC   )
r'   r(   r)   r*   r+   r?   r@   rA   rB   rC   )r(   r   r   r   rE   r0   r
   r   r'   r   r3   rF   r1   Úlist)r4   r   r$   r%   r!   r6   r*   r7   s    `      r    ÚgradezAssessmentsService.gradeB   s  øè ø€ ðið 	ð
 ˜W×2Ñ2Ð3°7¸7¿<¹<×;MÑ;MÐ:Nð OØ—n‘nÐ% Z°·±Ð/@ðBð 	ð
	”tõ 	ô &3Ø °Eô&
÷  
Ñˆˆd�Hô 'Ø"×1Ñ1Ø!×/Ñ/Ü×&Ñ&ØØ,¨X¨JÐ7Ü˜dŸh™h }Ó5Ò:¸Ó;Ü! $§(¡(Ð+<Ó"=Ò"BÀÓCØ—8‘8˜HÓ%Ø"Ÿh™hÐ':Ó;Ü˜dŸh™h ~Ó6Ò<¸"Ó=ô
ð 	
ð 
ús   ƒA DÁ#DÁ$B5DN)	Ú__name__Ú
__module__Ú__qualname__r   r   r8   r   r   rN   © r"   r    r   r      s-   „ ð3
Ø0ð3
à	#ó3
ðj'
Ð#9ð '
Ð>Uô '
r"   r   N)Ú__doc__Úuuidr   Úapp.schemas.assessmentsr   r   r   r   Úapp.schemas.commonr   Úapp.schemas.questionsr	   Úapp.services.ai_generater
   Úapp.services.questionsr   r   r   rR   r"   r    Ú<module>rZ      s/   ðÙ "å ÷ Kó  KÝ (Ý .Ý 2ß E÷]
ò ]
r"   