
    Y5j0                       S r SSKJr  SSKrSSKrSSKJr  SSKJr  SSK	J
r
  SSKJrJrJrJrJr  SSKJr  S	rS
r1 SkrSS jrSS jrSS jrSS jrSS jrSSS jjrSSS.         S S jjrS!S jr S"SS.           S#S jjjrg)$u@   Selección de archivos del agente relevantes para cada consulta.    )annotationsN)Path)Session)AgentFileModel)familia_form_template_priorityis_familia_form_fileis_familia_form_templateis_familia_tabla_fileis_familia_tabla_template)	agent_dir)
formatocartilla	plantillamodeloinforme_evaluacioninforme_evaluaciinforme de familiafamily_reportinforme_familiainforme_familiar)r   r   r   r   r   >!   deellacondelhazlaslosporqueunaunocomoestaesteparahacersegunalumnaalumnogenerausandoarchivofamiliainformainforme	documento
estudiante
evaluacionpsicopedagogico   según   evaluación   psicopedagógicoc                    [         R                  " SU =(       d    S5      nSR                  S U 5       5      n[        R                  " SSUR                  5       5      R                  5       $ )NNFKD c              3  `   #    U  H$  n[         R                  " U5      (       a  M   Uv   M&     g 7fN)unicodedata	combining).0chs     XC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\utils\agent_file_selection.py	<genexpr>_normalize.<locals>.<genexpr>Q   s     LFb+2G2G2KrrFs   .	.z
[^a-z0-9]+ )r=   	normalizejoinresublowerstrip)textfoldedasciiishs      rA   
_normalizerN   O   sO    ""64:26FwwLFLLH66-hnn&67==??    c                   ^ [        U R                  SS5      R                  SS5      5      m[        U4S j[         5       5      $ )N_rD   -c              3  ,   >#    U  H	  oT;   v   M     g 7fr<    )r?   hintrI   s     rA   rB   $_is_template_file.<locals>.<genexpr>W   s     9u}s   )rN   replaceany_TEMPLATE_HINTS)display_namerI   s    @rA   _is_template_filer[   U   s8    |++C5==c3GHE9999rO   c                    [        U 5      R                  5        Vs/ s H"  n[        U5      S:  d  M  U[        ;  d  M   UPM$     nn[	        [        U5      [        SS9$ s  snf )N   T)keyreverse)rN   splitlen
_STOPWORDSsortedset)messagettokenss      rA   _message_name_tokensrh   Z   sS    #G,224\4AA!aQ[H[a4F\#f+355 ]s   AAAc                    U(       d  g[        SU ;   a  [        U 5      R                  OU 5      nSnU H   n[        U5      S:  a  M  XB;   d  M  US-  nM"     [        U5      S:  a  US:  $ US:  $ )NF.r   r]         )rN   r   stemra   )rZ   rg   haystackmatchedtokens        rA   _file_name_matches_tokensrq   `   st    SL5H$|,11l[HGu:>qLG	  6{a!|a<rO   c                N    [        U 5      nSU;   a  gSU;   d  SU;   d  SU;   a  gg)zfamilia | evaluacion | generalr.   psicopedagogr3   evaluacigeneral)rN   )re   norms     rA   _message_intentrw   p   s3    gDD!5t9KrO   ru   c                n   [        U R                  SS5      R                  SS5      5      nUS:X  a4  [        U 5      (       a  [        U 5      $ SU;   a  g[	        U 5      (       a  gO!US:X  a  SU;   a  g	S
U;   a  SU;   a  gSU;   a  g[        [        5       H  u  p4XB;   d  M  Us  $    [        [        5      $ )NrQ   rD   rR   r.   r   rl   
   r3   r   r   rt   rk   2   )rN   rW   r	   r   r   	enumerate_TEMPLATE_PRIORITYra   )rZ   intentrI   indexrU   s        rA   _template_priorityr   z   s    |++C5==c3GHE#L111,??$\22 3	<	*"5 !34=L 5 !""rO   r}   agent_idc          	       ^^ U  Vs/ s H!  n[        UR                  5      (       d  M  UPM#     nnSU4S jjnTS:X  a  U Vs/ s H(  n[        UR                  U" U5      5      (       d  M&  UPM*     nnU(       a  UnSnONU Vs/ s HA  n[        UR                  U" U5      5      (       d  S[	        UR                  5      ;   d  M?  UPMC     nnUR                  U4S jS9  US U $ s  snf s  snf s  snf )Nc                D   > T(       d  g [        T5      U R                  -  $ r<   )r   id)rowr   s    rA   
_disk_path'_pick_template_rows.<locals>._disk_path   s    "SVV++rO   r.   rk   r   c                Z   > [        U R                  T5      U R                  =(       d    S4$ )Nr   )r   rZ   uploaded_at)r   r}   s    rA   <lambda>%_pick_template_rows.<locals>.<lambda>   s"    +C,<,<fEsG[Z[\rO   )r^   )r   r   returnzPath | None)r[   rZ   r   r
   rN   sort)rowslimitr}   r   r   	templatesr   form_templatess     ``    rA   _pick_template_rowsr      s     !%L(9#:J:J(KIL,
  !
 #C$4$4joF   	 

 &IE %$C()9)9:c?KKC,<,<!== $   NN\   Ve5 M
s"   C&C&%C+,C+>C0C0c                    [        U 5      S:  $ )Nrl   )ra   )rg   s    rA   _is_single_student_queryr      s    v;!rO      )	max_filesc          	       ^^^ U R                  [        5      R                  [        R                  T:H  5      R	                  [        R
                  R                  5       5      R                  5       nU(       d  / $ [        U5      n[        U5      n[        U5      nU(       a  [        US5      nUS:X  a  SO
U(       a  SOSn	U=(       d    /  V
s1 s H  oR                  S5      (       d  M  U
S   iM!     nn
U(       aR  U(       aK  U Vs1 s H>  nUR                  U;   d  M  [        UR                  U5      (       d  M2  UR                  iM@     nn/ m[!        5       mS
UU4S jjn[#        XYUTS9 H  nU" U5        M     U H(  n[        UR                  U5      (       d  M   U" U5        M*     U H  nUR                  U;   d  M  U" U5        M     T(       d  USU $ US:X  a`  [%        U4S	 jU 5       5      (       aF  T Vs/ s H8  n['        UR                  [)        T5      UR                  -  5      (       a  M6  UPM:     snm[+        T5      U:  ad  T Vs/ s H!  n[-        UR                  5      (       d  M  UPM#     nnT Vs/ s H!  n[-        UR                  5      (       a  M  UPM#     nnUU-   SU mT$ s  sn
f s  snf s  snf s  snf s  snf )uT   Reduce archivos enviados a OpenAI: plantillas + estudiante/caso + hits de búsqueda.   r.   r]   rl   fileIdc                   > U R                   T;   a  g TR                  U 5        TR                  U R                   5        g r<   )r   appendadd)r   selectedselected_idss    rA   r   #select_agent_file_rows.<locals>.add   s0    66\! rO   r   Nc              3  |   >#    U  H1  n[        UR                  [        T5      UR                  -  5      v   M3     g 7fr<   )r   rZ   r   r   )r?   rr   s     rA   rB   )select_agent_file_rows.<locals>.<genexpr>   s2      #RVQQ^^Yx-@144-GHHRVs   9<)r   r   r   None)queryr   filterr   order_byr   ascallrh   rw   r   mingetr   rq   rZ   rd   r   rX   r
   r   ra   r[   )dbr   re   knowledge_hitsr   r   rg   r}   single_studentmax_templateshithit_file_idsr   r   r   r   othersr   r   s    `               @@rA   select_agent_file_rowsr      sx    	 	''83	4	.,,002	3		 	 	!'*FW%F-f5N	1%	9,A1AM.<.B.BY.BcwwxGXMCM.BLY, 
vv% *CCDTDTV\*] CFF 	 
 &(H UL! ! #4vPXYC Z $S%5%5v>>H  66\!H  JYs #RV#    
 
(89Lqtt9ST 
 8}y  (N1,=ann,MQ	N%OX->q~~-N!XO&
3O[ Z
@
 OOsB   J7,	J7	J<!J<>J< 5K9KK7KK%K)rK   strr   r   )rZ   r   r   bool)re   r   r   	list[str])rZ   r   rg   r   r   r   )re   r   r   r   )ru   )rZ   r   r}   r   r   int)
r   list[AgentFileModel]r   r   r}   r   r   z
str | Noner   r   )rg   r   r   r   r<   )r   r   r   r   re   r   r   zlist[dict[str, Any]] | Noner   r   r   r   )__doc__
__future__r   rG   r=   pathlibr   sqlalchemy.ormr   app.backend.db.modelsr   (app.backend.utils.agent_familia_templater   r   r	   r
   r   app.backend.utils.agent_filesr   rY   r|   rb   rN   r[   rh   rq   rw   r   r   r   r   rT   rO   rA   <module>r      s    F " 	   " 0  4 "
J@:
6 #4 !
!! 	!
 ! !H 37	F FFF F 0	F F FrO   