
    J5jh                     l   S SK JrJrJrJ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  S SKJrJrJrJr  S SKJrJr  S S	KJr  S S
KJr  \" SS/S9rS\S\S\4S jr \RC                  S5      \" \5      4S\	4S jj5       r"\RG                  S5      \" \5      4S\S\	4S jj5       r$\RC                  S5      \" \5      4S\S\	4S jj5       r%\RM                  S5      \" \5      4S\S\S\	4S jj5       r'\RQ                  S5      \" \5      4S\S\	4S jj5       r)\RG                  S5      \" \5      4S\S\S\	4S jj5       r*\RG                  S5      \" \5      4S\S\	4S jj5       r+\RG                  S 5      \" \5      4S\S\S\	4S! jj5       r,\RG                  S"5      S\S\S#\4S$ j5       r-g%)&    )	APIRouterDependsRequeststatus)JSONResponseStreamingResponse)Session)
AgentClass)cors_headers_for_origin)SessionLocalget_db)AgentChatRequestAgentCreateAgentKnowledgeSearchAgentUpdate)chat_with_agentiter_chat_with_agent_events)search_agent_knowledge)iter_with_keepalivez/agentsAgents)prefixtagsstatus_codemessagereturnc                     [        U XS S.S9$ )Nr   r   datar   content)r   )r   r   s     KC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\routes\agents.py_errorr"      s    &DI      dbc                   #    [        U 5      R                  5       n[        U[        5      (       a?  UR	                  S5      S:X  a*  [        [        R                  UR	                  SS5      5      $ [        [        R                  SSUS.S9$ 7f)	Nr   errorr   Error   zAgentes encontradosr   r   )
r
   list_all
isinstancedictgetr"   r   HTTP_500_INTERNAL_SERVER_ERRORr   HTTP_200_OK)r%   results     r!   list_agentsr1      st     ^$$&F&$FJJx$8G$Cf;;VZZ	SZ=[\\&&+@&Q s   B
Bpayloadc                 ^  #    [        U5      R                  U R                  U R                  U R                  5      n[        U[        5      (       a?  UR                  S5      S:X  a*  [        [        R                  UR                  SS5      5      $ [        [        R                  SSUS.S9$ 7f)	Nr   r'   r   r(      zAgente creador   r   )r
   storeidnamerole_instructionsr+   r,   r-   r"   r   HTTP_400_BAD_REQUESTr   HTTP_201_CREATED)r2   r%   r0   s      r!   create_agentr;   "   s     ^!!'**gllG<U<UVF&$FJJx$8G$Cf116::i3QRR++?FK s   B+B-z/{agent_id}agent_idc                   #    [        U5      R                  U 5      n[        U[        5      (       a?  UR                  S5      S:X  a*  [	        [
        R                  UR                  SS5      5      $ [        [
        R                  SSUS.S9$ 7f)	Nr   r'   r   No encontrador)   zAgente encontrador   r   )	r
   r-   r+   r,   r"   r   HTTP_404_NOT_FOUNDr   r/   r<   r%   r0   s      r!   	get_agentrA   -   su     ^)F&$FJJx$8G$Cf//I1WXX&&+>O    BBc                 H  #    [        U5      R                  XR                  UR                  5      n[	        U[
        5      (       a?  UR                  S5      S:X  a*  [        [        R                  UR                  SS5      5      $ [        [        R                  SSUS.S9$ 7f)	Nr   r'   r   r>   r)   zAgente actualizador   r   )r
   updater7   r8   r+   r,   r-   r"   r   r?   r   r/   )r<   r2   r%   r0   s       r!   update_agentrE   8   s     ^""8\\7;T;TUF&$FJJx$8G$Cf//I1WXX&&+?P s   B B"c                   #    [        U5      R                  U 5      n[        U[        5      (       a?  UR	                  S5      S:X  a*  [        [        R                  UR	                  SS5      5      $ [        [        R                  SSS S.S9$ 7f)	Nr   r'   r   r>   r)   zAgente eliminador   r   )
r
   deleter+   r,   r-   r"   r   r?   r   r/   r@   s      r!   delete_agentrH   C   su     ^""8,F&$FJJx$8G$Cf//I1WXX&&+=tL rB   z/{agent_id}/knowledge/searchc           
        #    [        U5      R                  U 5      n[        U[        5      (       a?  UR                  S5      S:X  a*  [	        [
        R                  UR                  SS5      5      $ UR                  R                  5       nU(       d  [	        [
        R                  S5      $ [        X XAR                  S9n[        [
        R                  SSXE[        U5      S	.S
.S9$ 7f)Nr   r'   r   r>   u   La consulta está vacíatop_kr)   u   Búsqueda completada)querychunkstotalr   r   )r
   r-   r+   r,   r"   r   r?   rL   stripr9   r   rK   r   r/   len)r<   r2   r%   agentrL   rM   s         r!   search_agent_knowledge_routerR   N   s      rNx(E%599X#6'#Af//9o1VWWMM!Ef113MNN#B%}}MF&&-#FL
 s   C&C(z/{agent_id}/knowledge/reindexc                   #    [        U5      R                  U 5      n[        U[        5      (       a?  UR	                  S5      S:X  a*  [        [        R                  UR	                  SS5      5      $ [        [        R                  SSUS.S9$ 7f)	Nr   r'   r   r>   r)   zArchivos reindexadosr   r   )
r
   reindex_filesr+   r,   r-   r"   r   r?   r   r/   r@   s      r!   reindex_agent_filesrU   g   su     ^))(3F&$FJJx$8G$Cf//I1WXX&&+A6R rB   z/{agent_id}/chatc                   #    [        X UR                  UR                  S9n[        U[        5      (       at  UR                  S5      S:X  a_  SUR                  SS5      R                  5       ;   a  [        R                  O[        R                  n[        XCR                  SS5      5      $ [        [        R                  SS	US
.S9$ 7f)NrJ   r   r'   zno encontrador   r$   r(   r)   zRespuesta generadar   r   )r   r   rK   r+   r,   r-   lowerr   r?   r9   r"   r   r/   )r<   r2   r%   r0   codes        r!   chat_with_agent_routerY   r   s     R7??'--PF&$FJJx$8G$C,;vzz)UW?X?^?^?`,`v((fl  gB  gBdJJy':;;&&+?P s   CCz/{agent_id}/chat/streamrequestc                    ^ ^^#    SS K mUR                  R                  S5      nSSSS.[        U5      EnU UU4S jn[	        U" 5       SUS	9$ 7f)
Nr   originzno-cachez
keep-aliveno)zCache-Control
ConnectionzX-Accel-Bufferingc            	   3   p  >#    [        5       n  [        [        U TTR                  TR                  S9SSS9nU H  nSTR                  USS9 S3v   M     U R                  5         g ! [         a,  nSTR                  S	[        U5      S
.SS9 S3v    S nANBS nAff = f! U R                  5         f = f7f)NrJ   g      (@u"   Sigo trabajando en tu solicitud…)interval_secondsr   zdata: F)ensure_asciiz

r'   )typer   )	r   r   r   r   rK   dumps	Exceptionstrclose)r%   eventseventexcr<   jsonr2   s       r!   event_stream2chat_with_agent_stream_route.<locals>.event_stream   s     ^	(+B'//QXQ^Q^_!%<F
  tzz%ezDETJJ  
 HHJ  	h4::w3s8&L[`:abbfgg	h HHJs;   B6AA( B6(
B2"BB! BB! !B33B6ztext/event-stream)
media_typeheaders)rj   rn   r-   r   r   )r<   r2   rZ   r\   stream_headersrk   rj   s   ``    @r!   chat_with_agent_stream_routerp   ~   s[     __  *F#"! "&
)	N & s   A	AN).fastapir   r   r   r   fastapi.responsesr   r   sqlalchemy.ormr	   app.backend.classes.agent_classr
   app.backend.core.cors_utilsr   app.backend.db.databaser   r   app.backend.schemas.agentsr   r   r   r   'app.backend.services.agent_chat_servicer   r   &app.backend.utils.agent_document_indexr   "app.backend.utils.stream_keepaliver   agentsintre   r"   r-   r1   postr;   rA   patchrE   rG   rH   rR   rU   rY   rp    r#   r!   <module>r      s0   7 7 = " 6 ? 8 g g ` I B	)8*	5 c l  B$+FO '   R;B6?     M18 c w   mJQRX/  {    }4;FO  '   +, &/! 	 -0 ,-;B6?    .  X_`fXg # 8H g  ! &' ?O Za  (r#   