Ë
    I»j“  ã                   ó¨   — d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZ ddlmZ  G d„ d«      Z G d„ d	«      Z G d
„ d«      Z G d„ d«      Zy)z?Custom persona, scorecards, interview summarize, DEI analytics.é    )Úuuid4)Ú	JobStatus)	ÚCustomPersonaRequestÚCustomPersonaResponseÚDeiAnalyticsRequestÚDeiAnalyticsResponseÚInterviewSummarizeRequestÚInterviewSummarizeResponseÚScorecardCriterionÚScorecardGenerateRequestÚScorecardGenerateResponse)Úgenerate_jsonc                   ó   — e Zd Zdedefd„Zy)ÚCustomPersonaServiceÚpayloadÚreturnc              ƒ   óþ  ‡K  — d}d‰j                   › d‰j                  › d‰j                  › d‰j                  › d‰j                  › d‰j
                  › d‰j                  › �}d	t        fˆfd
„}t        |||¬«      ƒ d {  –—† \  }}}t        ‰j                  ‰j                   t        t        «       «      ‰j                  t        j                  |d|› �|j                  d«      |j                  d«      ¬«	      S 7 Œz­w)NzRBuild a custom interviewer persona. Return JSON: {"system_prompt","style_summary"}z	Company: z
Name: z
Style: z	
Values: z

Samples: z
Criteria: z
Tone: r   c            	      óÆ   •— dj                  ‰j                  «      xs d} d‰j                  › d‰j                  › d| › d‰j                  xs d› d�	d	‰j                  › d
�dœS )Nz, zcompany standardsz	You are `z$`, a custom interviewer for company z. Emphasize z	. Style: zstructured and fairÚ.zCustom persona `zB` aligned to company values and role-specific evaluation criteria.)Úsystem_promptÚstyle_summary)ÚjoinÚcompany_valuesÚnameÚ
company_idÚinterview_style)Úvaluesr   s    €ú,/var/www/html/TJ-AI/tj/app/services/extra.pyÚlocalz*CustomPersonaService.create.<locals>.local!   s   ø€ Ø—Y‘Y˜w×5Ñ5Ó6ÒMÐ:MˆFð   §¡˜~Ð-QØ×)Ñ)Ð*¨,°v°hð ?Ø%×5Ñ5ÒNÐ9NÐOÈqðRð
 ' w§|¡| nð 59ð 9ñ
ð 
ó    ©ÚsystemÚuserÚlocal_factoryzCustom persona via r   r   )	Úcorrelation_idr   Ú
persona_idr   ÚstatusÚstubÚmessager   r   )r   r   r   r   Úsample_questionsÚevaluation_criteriaÚ
tone_notesÚdictr   r   r%   Ústrr   r   Ú	SUCCEEDEDÚget©Úselfr   r"   r#   r   Údatar(   Úproviders    `      r   ÚcreatezCustomPersonaService.create   s  øè ø€ ð4ð 	ð
 ˜×*Ñ*Ð+¨8°G·L±L°>ð BØ×-Ñ-Ð.¨j¸×9OÑ9OÐ8Pð QØ×0Ñ0Ð1°¸g×>YÑ>YÐ=Zð [Ø×'Ñ'Ð(ð*ð 	ð	”tõ 	ô &3Ø °Eô&
÷  
Ñˆˆd�Hô %Ø"×1Ñ1Ø×)Ñ)Üœ5›7“|Ø—‘Ü×&Ñ&ØØ)¨(¨Ð4ØŸ(™( ?Ó3ØŸ(™( ?Ó3ô

ð 
	
ð 
ús   ƒA=C=Â C;ÂA;C=N)Ú__name__Ú
__module__Ú__qualname__r   r   r5   © r    r   r   r      s   „ ð'
Ð$8ð '
Ð=Rô '
r    r   c                   ó   — e Zd Zdedefd„Zy)ÚScorecardsServicer   r   c              ƒ   óÂ  ‡K  — d}d‰j                   › d‰j                  › d‰j                  › d‰j                  › �}dt        fˆfd„}t        |||¬«      ƒ d {  –—† \  }}}t        |j                  d	«      xs g «      D ��	cg c]„  \  }}	t        |	t        «      rot        t        |	j                  d
d|› �«      «      t        |	j                  dd«      «      t        |	j                  d«      xs d«      |	j                  d«      ¬«      ‘Œ† }
}}	t        ‰j                  ‰j                   t        t        «       «      t        j                   |d|› �|
¬«      S 7 Œýc c}	}w ­w)Nz_Create an interview scorecard. Return JSON: {"criteria":[{"id","name","weight","description"}]}úRole: z
JD: z

Persona: z
Hints: r   c                  ó6  •— ‰j                   xs g d¢} t        dt        | «      z  d«      }dt        | «      D ��cg c]P  \  }}d|dz   › �|j	                  dd«      j                  «       |d	|j	                  dd«      › d
‰j                  › �dœ‘ŒR c}}iS c c}}w )N)Útechnical_depthÚproblem_solvingÚcommunicationÚrole_fitç      ð?é   Úcriteriaúc-é   Ú_Ú z	Evaluate z for ©Úidr   ÚweightÚdescription)Úcriteria_hintsÚroundÚlenÚ	enumerateÚreplaceÚtitleÚ
role_title)ÚbaserL   Úir   r   s       €r   r   z)ScorecardsService.generate.<locals>.localL   s¶   ø€ Ø×)Ñ)ò ò .ˆDô ˜3¤ T£™?¨AÓ.ˆFàô $-¨T¤?ôñ $3™˜˜4ð !# 1 q¡5 '˜lØ $§¡¨S°#Ó 6× <Ñ <Ó >Ø"(Ø)2°4·<±<ÀÀSÓ3IÐ2JÈ%ÐPW×PbÑPbÐOcÐ'dó	ð $3òð
ð 
ùós   »ABr!   rE   rK   rF   r   Ú	CriterionrL   rC   rM   rJ   zScorecard generated via )r%   rT   Úscorecard_idr'   r(   r)   rE   )rT   Újob_descriptionÚpersonarN   r-   r   rQ   r0   Ú
isinstancer   r.   Úfloatr   r%   r   r   r/   )r2   r   r"   r#   r   r3   r(   r4   rV   ÚcrE   s    `         r   ÚgeneratezScorecardsService.generate@   sh  øè ø€ ðLð 	ð
 �W×'Ñ'Ð(¨¨w×/FÑ/FÐ.Gð HØŸ™Ð(¨	°'×2HÑ2HÐ1IðKð 	ð
	”tõ 	ô( &3Ø °Eô&
÷  
Ñˆˆd�Hô " $§(¡(¨:Ó"6Ò"<¸"Ô=ô	
ñ >‘��1Ü˜!œTÔ"ô Ü�q—u‘u˜T R¨ s 8Ó,Ó-Ü˜Ÿ™˜v {Ó3Ó4Ü˜QŸU™U 8›_Ò3°Ó4ØŸE™E -Ó0ö	ð >ð 	ñ 	
ô )Ø"×1Ñ1Ø×)Ñ)ÜœU›W›Ü×&Ñ&ØØ.¨x¨jÐ9Øô
ð 	
ð 
úó	
ùs&   ƒAEÁEÁ)EÂB	EÄAEÅEN)r6   r7   r8   r   r   r^   r9   r    r   r;   r;   ?   s   „ ð5
Ø/ð5
à	"ô5
r    r;   c                   ó   — e Zd Zdedefd„Zy)ÚInterviewSummarizeServicer   r   c              ƒ   ó°  ‡K  — d}d‰j                   › d‰j                  › d‰j                  › d‰j                  › �}dt        fˆfd„}t        |||¬«      ƒ d {  –—† \  }}}t        ‰j                  ‰j                   t        j                  |d	|› �|j                  d
«      t        |j                  d«      xs g «      |j                  d«      ¬«      S 7 Œz­w)NzfSummarize a completed interview. Return JSON: {"summary_markdown","key_takeaways":[],"recommendation"}zInterview: z
Role: z
Scorecard: z
Transcript: r   c                  óJ   •— d‰ j                   › d‰ j                  › d�ddgddœS )Nu   ## Interview summary â€” z

Session `zP` completed. Candidate showed relevant experience with room for deeper evidence.zRelevant domain experiencez"Needs stronger quantified outcomesÚadvance_or_hold)Úsummary_markdownÚkey_takeawaysÚrecommendation)rT   Úinterview_id)r   s   €r   r   z2InterviewSummarizeService.summarize.<locals>.local…   sM   ø€ ð 0°×0BÑ0BÐ/Cð D Ø '× 4Ñ 4Ð5ð 6ZðZð
 1Ø8ð"ð #4ñð r    r!   zInterview summary via rd   re   rf   )r%   rg   r'   r(   r)   rd   re   rf   )rg   rT   Ú	scorecardÚ
transcriptr-   r   r
   r%   r   r/   r0   Úlistr1   s    `      r   Ú	summarizez#InterviewSummarizeService.summarizey   sð   øè ø€ ðMð 	ð
 ˜'×.Ñ.Ð/¨x¸×8JÑ8JÐ7Kð LØ!×+Ñ+Ð,¨N¸7×;MÑ;MÐ:NðPð 	ð
	”tõ 	ô &3Ø °Eô&
÷  
Ñˆˆd�Hô *Ø"×1Ñ1Ø ×-Ñ-Ü×&Ñ&ØØ,¨X¨JÐ7Ø!ŸX™XÐ&8Ó9Ü˜tŸx™x¨Ó8Ò>¸BÓ?ØŸ8™8Ð$4Ó5ô	
ð 		
ð 
ús   ƒACÁCÁA;CN)r6   r7   r8   r	   r
   rk   r9   r    r   r`   r`   x   s   „ ð&
Ø0ð&
à	#ô&
r    r`   c                   ó   — e Zd Zdedefd„Zy)ÚDeiAnalyticsServicer   r   c              ƒ   óì  ‡K  — d}d‰j                   › dt        ‰j                  «      › d‰j                  d d › �}dt        fˆfd„}t	        |||¬«      ƒ d {  –—† \  }}}t        ‰j                  t        j                  |d	|› �|j                  d
«      t        |j                  d«      xs g «      t        |j                  d«      xs g «      t        |j                  d«      xs g «      ¬«      S 7 Œ™­w)NzŒProduce DEI / fairness insights from anonymized eval data. Return JSON: {"fairness_score":0-1,"insights":[],"risks":[],"recommendations":[]}r=   z
Dataset size: z	
Sample: é   r   c                  ód   •— t        ‰j                  «      } | rdnddd| › d�g| dk  rdndgd	d
gdœS )Ngö(\�Âõè?g      à?zBScore distribution appears broadly consistent across provided rowsz	Analyzed z anonymized evaluation recordsé   z#Small sample may hide subgroup gapsz Monitor score variance by sourcezKeep questions skill-basedz2Run bias-detection on new templates before publish)Úfairness_scoreÚinsightsÚrisksÚrecommendations)rP   Údataset)Únr   s    €r   r   z*DeiAnalyticsService.analyze.<locals>.localª   sX   ø€ Ü�G—O‘OÓ$ˆAá*+¡$°àXØ ˜sÐ"@ÐAðð
 >?ÀºVÑ9ÐIkðð 1ØHð$ñð r    r!   zDEI analytics via rr   rs   rt   ru   )r%   r'   r(   r)   rr   rs   rt   ru   )rT   rP   rv   r-   r   r   r%   r   r/   r0   rj   r1   s    `      r   ÚanalyzezDeiAnalyticsService.analyze£   sþ   øè ø€ ð[ð 	ð ˜×*Ñ*Ð+Ð+;¼CÀÇÁÓ<PÐ;QÐQ[Ð\c×\kÑ\kÐloÐmoÐ\pÐ[qÐrˆð	”tõ 	ô" &3Ø °Eô&
÷  
Ñˆˆd�Hô $Ø"×1Ñ1Ü×&Ñ&ØØ(¨¨
Ð3ØŸ8™8Ð$4Ó5Ü˜$Ÿ(™( :Ó.Ò4°"Ó5Ü�t—x‘x Ó(Ò.¨BÓ/Ü  §¡Ð*;Ó!<Ò!BÀÓCô	
ð 		
ð 
ús   ƒAC4ÁC2ÁBC4N)r6   r7   r8   r   r   rx   r9   r    r   rm   rm   ¢   s   „ ð$
Ð%8ð $
Ð=Qô $
r    rm   N)Ú__doc__Úuuidr   Úapp.schemas.commonr   Úapp.schemas.extrar   r   r   r   r	   r
   r   r   r   Úapp.services.ai_generater   r   r;   r`   rm   r9   r    r   Ú<module>r~      sM   ðÙ Eå å (÷
÷ 
õ 
õ 3÷(
ñ (
÷V6
ñ 6
÷r'
ñ '
÷T%
ò %
r    