
    J5jQ                       S SK Jr  S SKrS SKrS SKJrJ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  S SKJrJrJrJrJrJrJr  S S	KJrJr  S S
KJrJrJrJrJ r J!r!J"r"J#r#J$r$  SS jr%SS jr&SS jr'SS jr( " S S5      r)g)    )annotationsN)datetimetimezone)Path)Any)Session)AgentFileModel
AgentModelAgentResponseFileModel)OpenAIUploadErrorattach_file_to_containerclear_agent_containerdelete_openai_fileis_container_expiredrequire_openai_file_uploadsync_agent_openai_files)delete_file_chunksindex_agent_file)	AgentFileError	agent_dirbuild_agent_storage_pathensure_agent_dirpath_in_foldersafe_display_namevalidate_agent_idvalidate_folder_pathvalidate_stored_filenamec                    U (       d  g U R                   c  U R                  [        R                  S9n U R	                  [        R                  5      R                  5       $ )N)tzinfo)r   replacer   utc
astimezone	isoformat)dts    QC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\agent_class.py_isor&   #   sB    	yyZZx||Z,==&0022    c                    U R                   U R                  [        U R                  =(       d    S5      [	        U R
                  5      S.$ )Nr   )idnamesize
uploadedAt)r)   display_nameint
size_bytesr&   uploaded_atrows    r%   
_file_dictr3   +   s9    ff  CNN'a(3??+	 r'   c                    U R                   U R                  [        U R                  =(       d    S5      [	        U R
                  5      S.$ )Nr   )r)   r*   r+   	createdAt)r)   r-   r.   r/   r&   
created_atr1   s    r%   _response_file_dictr7   4   s9    ff  CNN'a(#..)	 r'   c                    U R                   U R                  U R                  =(       d    S[        U R                  5      [        U R
                  5      U Vs/ s H  n[        U5      PM     snS.$ s  snf )N )r)   r*   roleInstructionsr5   	updatedAtfiles)r)   r*   role_instructionsr&   r6   
updated_atr3   )agentr<   fs      r%   _agent_dictrA   =   s_    hh

!339r%**+%**+)./A*Q-/  0s   A1c                      \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSrg) 
AgentClassH   c                    Xl         g Ndb)selfrH   s     r%   __init__AgentClass.__init__I   s    r'   c                    U R                   R                  [        5      R                  [        R                  U:H  5      R                  [        R                  R                  5       5      R                  5       $ rF   )	rH   queryr	   filteragent_idorder_byr0   descall)rI   rO   s     r%   
_files_forAgentClass._files_forL   sL    GGMM.)VN++x78Xn005578SU		
r'   c           	     r    U R                   R                  [        5      R                  [        R                  R                  5       5      R                  5       nU Vs/ s H'  n[        X R                  UR                  5      5      PM)     sn$ s  snf ! [         a  nS[        U5      S.s S nA$ S nAff = f)Nerrorstatusmessage)rH   rM   r
   rP   r>   rQ   rR   rA   rS   r)   	Exceptionstr)rI   agentsr?   excs       r%   list_allAgentClass.list_allT   s    	<WW]]:.77
8M8M8R8R8TUYY[FOUVveKuxx'@AvVVV 	<%#c(;;	<s0   AB .BB B 
B6B1+B61B6c                    [        U5        U R                  R                  [        5      R	                  [        R
                  U:H  5      R                  5       nU(       d  SSS.$ [        X R                  UR
                  5      5      $ ! [         a  nS[        U5      S.s S nA$ S nAf[         a  nS[        U5      S.s S nA$ S nAff = fNrV   Agente no encontradorW   )r   rH   rM   r
   rN   r)   firstrA   rS   r   r[   rZ   )rI   rO   r?   r]   s       r%   getAgentClass.get[   s    		<h'GGMM*-44Z]]h5NOUUWE")6LMMuooehh&?@@ 	<%#c(;; 	<%#c(;;	<s6   A#B
 &#B
 

CB'!C'C4CCCc                ~    U=(       d%    S[         R                  " 5       R                  S S  3n[        U5        U R                  R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       a  SSS.$ [        R                  " 5       n[        UU=(       d    SR                  5       =(       d    SU=(       d    SUUS9nU R                  R                  U5        U R                  R                  5         U R                  R                  U5        [!        U5        [#        U/ 5      $ ! [$         a2  nU R                  R'                  5         S[)        U5      S.s S nA$ S nAf[*         a2  nU R                  R'                  5         S[)        U5      S.s S nA$ S nAff = f)	Nzagent-   rV   zYa existe un agente con ese idrW   zNuevo agenter9   )r)   r*   r=   r6   r>   )uuiduuid4hexr   rH   rM   r
   rN   r)   rc   r   utcnowstripaddcommitrefreshr   rA   r   rollbackr[   rZ   )	rI   rO   r*   r=   new_idexistingnowr?   r]   s	            r%   storeAgentClass.storeg   sK   	<A6$**,*:*:3B*?)@!AFf%ww}}Z077
8OPVVXH")6VWW//#C,n335G"3"9rE GGKKGGNNGGOOE"V$ub)) 	<GG%#c(;; 	<GG%#c(;;	<s7   BE B1E 
F<'E=7F<=F<
'F71F<7F<c                    [        U5        U R                  R                  [        5      R	                  [        R
                  U:H  5      R                  5       nU(       d  SSS.$ Ub  UR                  5       nU(       a  XTl        Ub  X4l	        [        R                  " 5       Ul        U R                  R                  5         U R                  R                  U5        [        X@R!                  UR
                  5      5      $ ! ["         a2  nU R                  R%                  5         S['        U5      S.s S nA$ S nAf[(         a2  nU R                  R%                  5         S['        U5      S.s S nA$ S nAff = fra   )r   rH   rM   r
   rN   r)   rc   rl   r*   r=   r   rk   r>   rn   ro   rA   rS   r   rp   r[   rZ   )rI   rO   r*   r=   r?   trimmedr]   s          r%   updateAgentClass.update   s   	<h'GGMM*-44Z]]h5NOUUWE")6LMM**,!(J ,*;''0EGGNNGGOOE"uooehh&?@@ 	<GG%#c(;; 	<GG%#c(;;	<s7   A#D &BD 
E8'D93E89E8'E3-E83E8c                    [        U5        U R                  R                  [        5      R	                  [        R
                  U:H  5      R                  5       nU(       d  SSS.$ [        U5      nUR                  5       (       a  [        R                  " U5        U R                  R                  U5        U R                  R                  5         SSS.$ ! [         a2  nU R                  R                  5         S[        U5      S.s S nA$ S nAf[          a2  nU R                  R                  5         S[        U5      S.s S nA$ S nAff = f)NrV   rb   rW   successzAgente eliminado)r   rH   rM   r
   rN   r)   rc   r   is_dirshutilrmtreedeletern   r   rp   r[   rZ   )rI   rO   r?   	directoryr]   s        r%   r   AgentClass.delete   s    	<h'GGMM*-44Z]]h5NOUUWE")6LMM!(+I!!i(GGNN5!GGNN'4FGG 	<GG%#c(;; 	<GG%#c(;;	<s7   A#C &A/C 
E 'DEE'EEEc                    [        U5        U R                  R                  [        5      R	                  [        R
                  U:H  5      R                  5       nU(       d  SSS.$ U R                  U5       Vs/ s H  n[        U5      PM     sn$ s  snf ! [         a  nS[        U5      S.s S nA$ S nAf[         a  nS[        U5      S.s S nA$ S nAff = fra   )r   rH   rM   r
   rN   r)   rc   rS   r3   r   r[   rZ   )rI   rO   r?   r2   r]   s        r%   
list_filesAgentClass.list_files   s    		<h'GGMM*-44Z]]h5NOUUWE")6LMM/3x/HI/HJsO/HIII 	<%#c(;; 	<%#c(;;	<sH   A#B &B 9BB B 
C B3-C3C CCCc                    [        U5        U R                  R                  [        5      R	                  [        R
                  U:H  5      R                  5       nU(       d  SSS.$ U R                  R                  [        5      R	                  [        R                  U:H  5      R                  [        R                  R                  5       5      R                  5       nU Vs/ s H  n[        U5      PM     sn$ s  snf ! [         a  nS[        U5      S.s S nA$ S nAf[          a  nS[        U5      S.s S nA$ S nAff = fra   )r   rH   rM   r
   rN   r)   rc   r   rO   rP   r6   rQ   rR   r7   r   r[   rZ   )rI   rO   r?   rowsr2   r]   s         r%   list_response_filesAgentClass.list_response_files   s    	<h'GGMM*-44Z]]h5NOUUWE")6LMM45.778CD0;;@@BC	  9==',=== 	<%#c(;; 	<%#c(;;	<sI   A#C? &A<C? "C:7C? :C? ?
E	DEE)D<6E<Ec                F    [        U5        [        U5      nUR                  S5      (       d  SSS.$ U R                  R	                  [
        5      R                  [
        R                  U:H  [
        R                  U:H  5      R                  5       nU(       d  SSS.$ [        U5      U-  nUR                  5       (       d  SSS.$ [        U5      UR                  S.$ ! [         a  nS[        U5      S.s S nA$ S nAf[         a  nS[        U5      S.s S nA$ S nAff = f)N
responses/rV   "Archivo de respuesta no encontradorW   z+Archivo de respuesta no encontrado en discopathfilename)r   r   
startswithrH   rM   r   rN   rO   r)   rc   r   is_filer[   r-   r   rZ   rI   rO   stored_filename	safe_namer2   targetr]   s          r%   resolve_response_file AgentClass.resolve_response_file   s    	<h'0AI''55")6Z[[45.778CE[E^E^bkEkl 
 ")6Z[[x(94F>>##")6cddKS5E5EFF 	<%#c(;; 	<%#c(;;	<sA   0C A*C 'C C 
D (C;5D ;D DD D c                8    [        U5        U R                  R                  [        5      R	                  [        R
                  U:H  5      R                  5       nU(       d  SSS.$ U(       d  SSS.$ [        U5      n/ n/ n/ n U GHF  u  p [        U5      u  p[        X5      nUR                  U5        XJ-  nUR                  R                  SSS9  UR                  U	5        UR                  U5        [        R                   " 5       n[#        U
UU[%        U	5      US US9nU R                  R'                  U5        U R                  R)                  5          [+        U R                  XX5        UR0                  (       a1  [3        UR4                  5      (       d   [7        UR0                  U5        UR                  [;        U5      5        GMI     U(       d  SSS.$ [        R                   " 5       Ul        U R                  R?                  5         U$ ! [         a     GM  f = f! [,         a    [/        U R                  X5        e f = f! [,         a    [9        U5         Nf = f! [@         a  nU R                  RC                  5         U H  nURE                  5       (       a  URG                  5         UR                  nUU:w  d  M<  URI                  5       (       d  MS  [K        URM                  5       5      (       a  Ms  URO                  5         M     U H  n[Q        U5        M     SS	U 3S.s S nA$ S nAf[,         a`    U R                  RC                  5         U H*  nURE                  5       (       d  M  URG                  5         M,     U H  n[Q        U5        M     e f = f! [         a2  nU R                  RC                  5         S[S        U5      S.s S nA$ S nAf[,         a2  nU R                  RC                  5         S[S        U5      S.s S nA$ S nAff = f)
NrV   rb   rW   zNo se enviaron archivosT)parentsexist_ok)r)   rO   r-   r/   openai_file_idopenai_upload_errorr0   u    No se subieron archivos válidoszNo se pudo subir a OpenAI: )*r   rH   rM   r
   rN   r)   rc   r   r   r   r   appendparentmkdirwrite_bytesr   rk   r	   lenrm   flushr   rZ   r   openai_container_idr   openai_container_updated_atr   r   r3   r>   rn   r   rp   r   unlinkr|   anyiterdirrmdirr   r[   )rI   rO   uploadsr?   r   saveduploaded_openai_idswritten_pathsoriginal_namecontentstorage_pathr-   r   destinationrs   r2   r]   r   r   	openai_ids                       r%   	add_filesAgentClass.add_files   sf   V	<h'GGMM*-44Z]]h5NOUUWE")6LMM")6OPP(2I*,E-/(*MC.5*M!5Mm5\2 &@%VN'..~>"+":K&&,,TD,I++G4!((5"//+C('!)%1#&w<'5,0$'C GGKK$GGMMO((+d
 009M99: :94U5N5NP^_ LLC1Q /6T &-:\]]#+??#4  Y * ! !2 % *477HK  ) 91%89 % 
[  ")D||~~![[F*v}}s6>>K[G\G\ * "5I&y1 "5")8STWSX6YZZ   ")D||~~ * "5I&y1 "5  	<GG%#c(;; 	<GG%#c(;;	<s   A#N# &N# 2N# I% HB>I% H%0+I% I
2*I% 5I% 
H"I% !H""I% %"II% 
I"I% !I""I% %
N /AL3L3L3>/L3-N .N# 3?N 6*N  N# #
P-'OPP''PPPc                V    [        U5        [        U5      nU R                  R                  [        5      R                  [        R                  U:H  [        R                  U:H  5      R                  5       nU(       d  SSS.$ [        U5      U-  nUR                  5       (       d  SSS.$ [        U5      [        UR                  R                  SS5      5      R                  S.$ ! [          a  nS[        U5      S.s S nA$ S nAf["         a  nS[        U5      S.s S nA$ S nAff = f)NrV   Archivo no encontradorW   \/r   )r   r   rH   rM   r	   rN   rO   r)   rc   r   r   r[   r   r-   r    r*   r   rZ   r   s          r%   resolve_fileAgentClass.resolve_file?  s    	<h'0AIn-//8;^=N=NR[=[\ 
 ")6MNNx(94F>>##")6MNN F !1!1!9!9$!DEJJ   	<%#c(;; 	<%#c(;;	<s<   B C& 'C& +:C& &
D(0D=D(D(D#D(#D(c                    [        U5        [        U5      nU R                  R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       d  SSS.$ U R                  U5       Vs/ s H=  n[        UR                  U5      (       d  [        UR                  U5      (       d  M;  UPM?     nnU(       d  SSS.$ U H  n[        U R                  XR                  5        [        UR                  5        [        U5      UR                  -  nUR                  5       (       a  UR!                  5         U R                  R#                  U5        M     [        U5      U-  nUR%                  5       (       a  [&        R(                  " U5        [+        U5        [,        R.                  " 5       Ul        U R                  R3                  5         U[5        U5      S.$ s  snf ! [6         a2  n	U R                  R9                  5         S[;        U	5      S.s S n	A	$ S n	A	f[<         a2  n	U R                  R9                  5         S[;        U	5      S.s S n	A	$ S n	A	ff = f)NrV   rb   rW   zCarpeta no encontrada)r   deletedFiles)r   r   rH   rM   r
   rN   r)   rc   rS   r   r-   r   r   r   r   r   r   r   r|   r}   r~   r   r   rk   r>   rn   r   r   rp   r[   rZ   )
rI   rO   folder_pathfolder_prefixr?   r2   r   r   folder_on_diskr]   s
             r%   delete_folderAgentClass.delete_folderX  s   %	<h'0=MGGMM*-44Z]]h5NOUUWE")6LMM  ??844C!#&&-88N3K[K[]j<k 4  
 ")6MNN"477Hff="3#5#56"8,svv5>>##MMOs#  'x0=@N$$&&n-!%('0EGGNN)3t9EE12  	<GG%#c(;; 	<GG%#c(;;	<sU   A.G7 1G7 :G2G2G7 DG7 2G7 7
I-'H.(I-.I-;'I("I-(I-c                    [        U5        [        U5      nUR                  S5      (       d  SSS.$ U R                  R	                  [
        5      R                  [
        R                  U:H  [
        R                  U:H  5      R                  5       nU(       d  SSS.$ [        U5      U-  nUR                  5       (       a  UR                  5         U R                  R                  U5        U R                  R	                  [        5      R                  [        R                  U:H  5      R                  5       nU(       a  [        R                   " 5       Ul        U R                  R%                  5         SU0$ ! [&         a2  nU R                  R)                  5         S[+        U5      S.s S nA$ S nAf[,         a2  nU R                  R)                  5         S[+        U5      S.s S nA$ S nAff = f)Nr   rV   r   rW   r)   )r   r   r   rH   rM   r   rN   rO   r)   rc   r   r   r   r   r
   r   rk   r>   rn   r   rp   r[   rZ   rI   rO   r   r   r2   r   r?   r]   s           r%   delete_response_fileAgentClass.delete_response_file  so   	<h'0AI''55")6Z[[45.778CE[E^E^bkEkl 
 ")6Z[[x(94F~~GGNN3GGMM*-44Z]]h5NOUUWE#+??#4 GGNN)$$ 	<GG%#c(;; 	<GG%#c(;;	<s<   0E8 A*E8 CE8 8
G.'F/)G./G.<'G)#G.)G.c                    [        U5        U R                  R                  [        5      R	                  [        R
                  U:H  5      R                  5       nU(       d  SSS.$ U R                  R                  [        5      R	                  [        R                  U:H  5      R                  5       nSnU H`  n[        U5      UR
                  -  nUR                  5       (       a  UR                  5         U R                  R                  U5        US-  nMb     [        R                  " 5       Ul        U R                  R#                  5         SU0$ ! [$         a2  nU R                  R'                  5         S[)        U5      S.s S nA$ S nAf[*         a2  nU R                  R'                  5         S[)        U5      S.s S nA$ S nAff = f)NrV   rb   rW   r      deleted)r   rH   rM   r
   rN   r)   rc   r   rO   rR   r   r   r   r   r   rk   r>   rn   r   rp   r[   rZ   )rI   rO   r?   r   r   r2   r   r]   s           r%   delete_all_response_files$AgentClass.delete_all_response_files  sV   	<h'GGMM*-44Z]]h5NOUUWE")6LMM 45.778CD 
 G"8,svv5>>##MMOs#1   (0EGGNNw'' 	<GG%#c(;; 	<GG%#c(;;	<s7   A#E &C,E 
G	'F
G	
G	'G>G	G	c                    [        U5        [        U5      nU R                  R                  [        5      R                  [        R                  U:H  [        R                  U:H  5      R                  5       nU(       d  SSS.$ [        U R                  X5        [        UR                  5        [        U5      U-  nUR                  5       (       a  UR                  5         U R                  R                  U5        U R                  R                  [         5      R                  [         R                  U:H  5      R                  5       nU(       a  ["        R$                  " 5       Ul        U R                  R)                  5         SU0$ ! [*         a2  nU R                  R-                  5         S[/        U5      S.s S nA$ S nAf[0         a2  nU R                  R-                  5         S[/        U5      S.s S nA$ S nAff = f)NrV   r   rW   r)   )r   r   rH   rM   r	   rN   rO   r)   rc   r   r   r   r   r   r   r   r
   r   rk   r>   rn   r   rp   r[   rZ   r   s           r%   delete_fileAgentClass.delete_file  sk   	<h'0AIn-//8;^=N=NR[=[\ 
 ")6MNNtww<s112x(94F~~GGNN3GGMM*-44Z]]h5NOUUWE#+??#4 GGNN)$$ 	<GG%#c(;; 	<GG%#c(;;	<s7   B F DF 
G>'F?9G>?G>'G93G>9G>c                n    [        U5        U R                  R                  [        5      R	                  [        R
                  U:H  5      R                  5       nU(       d  SSS.$ SnSnU R                  U5       Hf  n[        U5      UR
                  -  nUR                  5       (       d  M2  [        U R                  XR
                  XeR                  5      nUS-  nXG-  nMh     [        U R                  U5      n[        R                  " 5       Ul        U R                  R!                  5         UU[#        U5      S.$ ! [$         a2  n	U R                  R'                  5         S[)        U	5      S.s S n	A	$ S n	A	f[*         a2  n	U R                  R'                  5         S[)        U	5      S.s S n	A	$ S n	A	ff = f)NrV   rb   rW   r   r   )indexedFileschunksopenaiFiles)r   rH   rM   r
   rN   r)   rc   rS   r   r   r   r-   r   r   rk   r>   rn   r   r   rp   r[   rZ   )
rI   rO   r?   indexedchunks_totalr2   r   countopenai_file_idsr]   s
             r%   reindex_filesAgentClass.reindex_files  sX   	<h'GGMM*-44Z]]h5NOUUWE")6LMMGLx0 *SVV3||~~((FFDJZJZ[1% 1 6dggxHO'0EGGNN '&"?3 
  	<GG%#c(;; 	<GG%#c(;;	<s7   A#D> &CD> >
F4'E5/F45F4'F/)F4/F4rG   N)rH   r   )rO   r[   returnlist[AgentFileModel])r   %list[dict[str, Any]] | dict[str, str])rO   r[   r   dict[str, Any] | dict[str, str])rO   
str | Noner*   r[   r=   r[   r   r   )rO   r[   r*   r   r=   r   r   r   )rO   r[   r   zdict[str, str])rO   r[   r   r   )rO   r[   r   r[   r   r   )rO   r[   r   zlist[tuple[str | None, bytes]]r   r   )rO   r[   r   r[   r   r   )__name__
__module____qualname____firstlineno__rJ   rS   r^   rd   rt   rx   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__ r'   r%   rC   rC   H   s[    
<
<<:<2<*
<<$<,W<r<2&<P<><<<@<r'   rC   )r$   zdatetime | Noner   r   )r2   r	   r   dict[str, Any])r2   r   r   r   )r?   r
   r<   r   r   r   )*
__future__r   r}   rh   r   r   pathlibr   typingr   sqlalchemy.ormr   app.backend.db.modelsr	   r
   r   )app.backend.services.openai_agent_servicer   r   r   r   r   r   r   &app.backend.utils.agent_document_indexr   r   app.backend.utils.agent_filesr   r   r   r   r   r   r   r   r   r&   r3   r7   rA   rC   r   r'   r%   <module>r      sd    "   '   " T T   X
 
 
3t< t<r'   