Ë
    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Bias detection service.é    )ÚBiasDetectionRequestÚBiasDetectionResponseÚBiasFlagItem)Ú	JobStatus)Úgenerate_jsonc                   ó   — e Zd Zdedefd„Zy)ÚBiasDetectionServiceÚpayloadÚreturnc              ƒ   ó*  ‡K  — d}d‰j                   › d‰j                  › d‰j                  › d‰j                  › d‰j                  › �
}dt
        fˆfd„}t        |||¬	«      ƒ d {  –—† \  }}}|j                  d
«      xs g D �cg c]‹  }t        |t
        «      ryt        t        |j                  dd«      «      t        |j                  dd«      «      |j                  d«      t        |j                  dd«      «      |j                  d«      ¬«      ‘Œ� }	}t        ‰j                  ‰j                   t        j                  |d|› �|j                  d«      |j                  d«      |	t        |j                  d«      xs g «      ¬«	      S 7 �Œ%c c}w ­w)Nz»Detect biased or exclusionary language. Return JSON: {"passed":bool,"risk_score":0-1,"flags":[{"category","severity","excerpt","description","recommendation"}],"rewritten_suggestions":[]}zcontent_type=z	
content=z
questions=z
evaluation=z
jd=r   c                  óT  •— dj                  t        d ‰j                  ‰j                  ‰j                  t        ‰j                  «      g«      «      j                  «       } g d¢}g }|D ]!  }|| v sŒ|j                  dd|d|› �ddœ«       Œ# t        |«      dk(  |rd	nd
||rdgdœS g dœS )NÚ )zyoung bloodznative speakerz	guys onlyzcultural fit onlyÚexclusionary_languageÚmediumz$Potentially biased phrase detected: z+Rewrite to inclusive, job-relevant criteria©ÚcategoryÚseverityÚexcerptÚdescriptionÚrecommendationr   gš™™™™™É?gš™™™™™©?zDUse skill- and outcome-based criteria instead of demographic proxies)ÚpassedÚ
risk_scoreÚflagsÚrewritten_suggestions)
ÚjoinÚfilterÚcontentÚevaluation_textÚjob_descriptionÚstrÚ	questionsÚlowerÚappendÚlen)ÚtextÚriskyr   Úphraser
   s       €ú5/var/www/html/TJ-AI/tj/app/services/bias_detection.pyÚlocalz+BiasDetectionService.analyze.<locals>.local   sÛ   ø€ Ø—8‘8ÜØàŸ™Ø×/Ñ/Ø×/Ñ/Ü˜G×-Ñ-Ó.ð	óó
÷ ‰e‹gð ò XˆEØˆEÛ�Ø˜T’>Ø—L‘Là(?Ø(0Ø'-Ø-QÐRXÐQYÐ+ZØ.[ñõð  ô ˜e›*¨™/Ù%*™c°Øñ ð [ð*ñ		ð 	ð ñ	ð 	ó    )ÚsystemÚuserÚlocal_factoryr   r   Úgeneralr   Úlowr   r   Ú r   r   zBias detection via r   r   r   )	Úcorrelation_idÚcontent_typeÚstatusÚstubÚmessager   r   r   r   )r2   r   r!   r   r   Údictr   ÚgetÚ
isinstancer   r    r   r1   r   Ú	SUCCEEDEDÚlist)
Úselfr
   r+   r,   r)   Údatar4   ÚproviderÚfr   s
    `        r(   ÚanalyzezBiasDetectionService.analyze   sŸ  øè ø€ ð]ð 	ð ˜G×0Ñ0Ð1°¸G¿O¹OÐ;Lð MØ ×*Ñ*Ð+¨=¸×9PÑ9PÐ8Qð RØ×)Ñ)Ð*ð,ð 	ð"	”tõ "	ôH &3Ø °Eô&
÷  
Ñˆˆd�Hð —h‘h˜wÓ'Ò-¨2Ð-ó

ñ .�Ü˜!œTÔ"ô Ü˜QŸU™U :¨yÓ9Ó:Ü˜QŸU™U :¨uÓ5Ó6ØŸ™˜iÓ(Ü §¡ m°RÓ 8Ó9Ø Ÿu™uÐ%5Ó6öð .ð 	ð 

ô %Ø"×1Ñ1Ø ×-Ñ-Ü×&Ñ&ØØ)¨(¨Ð4Ø—8‘8˜HÓ%Ø—x‘x Ó-ØÜ"& t§x¡xÐ0GÓ'HÒ'NÈBÓ"Oô

ð 
	
ð 
ûò

ùs&   ƒA#FÁ&FÁ'FÂBFÄA6FÆFN)Ú__name__Ú
__module__Ú__qualname__r   r   r?   © r*   r(   r	   r	      s   „ ðH
Ð%9ð H
Ð>Sô H
r*   r	   N)
Ú__doc__Úapp.schemas.bias_detectionr   r   r   Úapp.schemas.commonr   Úapp.services.ai_generater   r	   rC   r*   r(   Ú<module>rH      s&   ðÙ ÷ñ õ
 )Ý 2÷I
ò I
r*   