Ë
    I»jÁ  ã                   óH   — d Z ddlmZmZmZ ddlmZ ddlmZ  G d„ d«      Z	y)zAnswer evaluation.é    )ÚAnswerEvaluationRequestÚAnswerEvaluationResponseÚEvaluatedAnswer)Ú	JobStatus)Úgenerate_jsonc                   ó   — e Zd Zdedefd„Zy)ÚAnswerEvaluationServiceÚpayloadÚreturnc              ƒ   óN  ‡K  — d}‰j                   D �cg c]G  }|j                  |j                  |j                  |j                  |j
                  |j                  dœ‘ŒI }}d‰j                  j                  › d‰j                  › d|› �}dt        fˆfd„}t        |||¬«      ƒ d {  –—† \  }}}	|j                  d	«      xs g D �
cg c]�  }
t        |
t        «      r{t        t        |
j                  d
d«      «      t!        |
j                  dd«      «      t!        |
j                  dd«      «      |
j                  d«      |
j                  d«      g i ¬«      ‘Œ� }}
t!        |j                  d«      �|j                  d«      nt#        d„ ‰j                   D «       «      «      }t!        |j                  d«      �|j                  d«      nt#        d„ |D «       «      «      }t%        ‰j&                  ‰j(                  t*        j,                  |d|	› �|||¬«      S c c}w 7 �Œuc c}
w ­w)NzŒGrade answers fairly. Return JSON: {"results":[{"question_id","score","max_score","is_correct","feedback"}],"total_score","max_total_score"})Úquestion_idÚquestion_textÚexpected_answerÚstudent_answerÚ	max_scoreÚrubriczmode=z

language=z	
answers=r   c            	      óÚ  •— g } d}d}‰j                   D ]Ð  }||j                  z  }|j                  xs dj                  «       j	                  «       }|j
                  j                  «       j	                  «       }t        |«      xr ||k(  }|r|j                  n|r|j                  dz  nd}||z  }| j                  |j                  ||j                  |r|nd |rdnddœ«       ŒÒ | ||dœS )Ng        Ú g      à?zExact match.u0   Partial credit â€” expand with clearer evidence.)r   Úscorer   Ú
is_correctÚfeedback)ÚresultsÚtotal_scoreÚmax_total_score)	Úanswersr   r   ÚstripÚlowerr   ÚboolÚappendr   )	r   ÚtotalÚ	max_totalÚaÚexpectedÚgivenÚcorrectr   r
   s	           €ú./var/www/html/TJ-AI/tj/app/services/answers.pyÚlocalz/AnswerEvaluationService.evaluate.<locals>.local   sï   ø€ ØˆGØˆEØˆIØ—_”_�Ø˜QŸ[™[Ñ(�	Ø×-Ñ-Ò3°×:Ñ:Ó<×BÑBÓD�Ø×(Ñ(×.Ñ.Ó0×6Ñ6Ó8�Ü˜x›.Ò>¨X¸Ñ->�Ù'.˜ŸšÉ%°Q·[±[À3Ò5FÐUX�Ø˜‘�Ø—‘à'(§}¡}Ø!&Ø%&§[¡[Ù19¡g¸tñ  'ñ +à!Sñ
õð %ð* #Ø$Ø#,ñð ó    )ÚsystemÚuserÚlocal_factoryr   r   r   r   r   r   é   r   r   )r   r   r   r   r   Ú	breakdownÚmetadatar   c              3   ó4   K  — | ]  }|j                   –— Œ y ­w©N)r   )Ú.0r"   s     r&   Ú	<genexpr>z3AnswerEvaluationService.evaluate.<locals>.<genexpr>M   s   è ø€ Ð:©/ Q�Q—[•[©/ùó   ‚r   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr0   )r   )r1   Úrs     r&   r2   z3AnswerEvaluationService.evaluate.<locals>.<genexpr>P   s   è ø€ ÐSmÑelÐ`aÐTU×T[ÕT[Ñelùr3   zEvaluated answers via )Úcorrelation_idÚassessment_idÚstatusÚstubÚmessager   r   r   )r   r   r   r   r   r   r   ÚmodeÚvalueÚlanguageÚdictr   ÚgetÚ
isinstancer   ÚstrÚfloatÚsumr   r6   r7   r   Ú	SUCCEEDED)Úselfr
   r)   r"   Úanswers_blobr*   r'   Údatar9   Úproviderr5   r   r!   r    s    `            r&   Úevaluatez AnswerEvaluationService.evaluate
   s%  øè ø€ ð_ð 	ð —_’_ó

ñ %�ð  !Ÿ}™}Ø!"§¡Ø#$×#4Ñ#4Ø"#×"2Ñ"2ØŸ[™[ØŸ(™(óð %ð 	ð 

ð �w—|‘|×)Ñ)Ð*¨+°g×6FÑ6FÐ5GÀzÐR^ÐQ_Ð`ˆð	”tõ 	ô< &3Ø °Eô&
÷  
Ñˆˆd�Hð —h‘h˜yÓ)Ò/¨RÐ/ó
ñ 0�Ü˜!œTÔ"ô Ü §¡ m°RÓ 8Ó9Ü˜AŸE™E '¨1Ó-Ó.Ü §¡ k°1Ó 5Ó6ØŸ5™5 Ó.ØŸ™˜zÓ*ØØöð 0ð 	ð 
ô à�x‰xÐ)Ó*Ð6ð �H‰HÐ&Ô'äÑ:¨'¯/ª/Ó:Ó:ó
ˆ	ô
 Ø'+§x¡x°Ó'>Ð'JˆD�H‰H�]Ô#ÔPSÑSmÑelÓSmÓPmó
ˆô (Ø"×1Ñ1Ø!×/Ñ/Ü×&Ñ&ØØ,¨X¨JÐ7ØØ%Øô	
ð 		
ùòG

ðV 
ûò
ùs2   ƒH%”AHÁ AH%Â(HÂ)H%ÃBH ÅCH%È H%N)Ú__name__Ú
__module__Ú__qualname__r   r   rI   © r(   r&   r	   r	   	   s   „ ðQ
Ð&=ð Q
ÐBZô Q
r(   r	   N)
Ú__doc__Úapp.schemas.answersr   r   r   Úapp.schemas.commonr   Úapp.services.ai_generater   r	   rM   r(   r&   Ú<module>rR      s$   ðÙ ÷ñ å (Ý 2÷R
ò R
r(   