
    IiG                        d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZmZmZmZmZmZmZ  eded      ZdZh dZ d Z!ejE                  dddg      ed               Z#ejE                  d      ed               Z$ejE                  dddg      ed               Z%ejE                  ddg      ed               Z&ejE                  d      ed               Z'ejE                  ddg      ed                Z(ejE                  d!dg      ed"               Z)ejE                  d#      ed$               Z*ejE                  d%dg      ed&               Z+ejE                  d'd(g      ed)               Z,ejE                  d*dg      ed+               Z-ejE                  d,      ed-               Z.ejE                  d.ddg      ed/               Z/ejE                  d0dg      d1        Z0y)2    N)db)datetime)User)secure_filename)AgenteAgenteTreino)AgentUserShare)AgentService)login_requiredcurrent_usersend_discord_audit_log)	Blueprintrequestjsonifyflashredirecturl_forrender_templateagentz../templates)template_folderzuploads/agentes>   csvpdftxtxlsxc                 `    d| v xr) | j                  dd      d   j                         t        v S )N.   )rsplitlowerALLOWED_EXTENSIONS)filenames    0/srv/www/ollama/chat-ollama/src/routes/agente.pyallowed_filer$      s0    (?WxsA6q9??AEWWW    z/novoGETPOST)methodsc                     t        d       t        j                  dk(  rt        d       t        j                  j	                  d      } t        j                  j	                  d      }t        j
                  j                  d      }t        j                  j	                  d      }t        j                  j	                  dd	      }t        j                  j	                  d
d      }t        j                  j	                  dd      }t        j                  j	                  dd      }t        j                  j	                  d      }t        j                  j	                  d      }	t        j                  j	                  dd      }
| sHt        j                  sdt        j                  v rt        ddi      dfS t        dd       t        d      S 	 t        |      dz  }t        |      }t        |      dz  }t        |      dz  }t        j                  | ||||||||	|
d}t        d       t!        j"                  ||      \  }}t        d       |rZt        d|        t        j                  sdt        j                  v rt        |dd       d!fS t        d"| d       t        d      S t%        d#t        j&                  d$|j                  d%|j(                   t        j*                  &       t        j                  sdt        j                  v rr|j,                  }|st/        j0                         }t        d'd(|j                  |j(                  |j2                  |r|j5                         nd d)t7        d*      d+      d,fS t        d-d.       t9        t7        d*            S t        d      S # t:        $ r}t<        j>                  jA                          d/tC        |       }t        d0|        t        j                  sdt        j                  v rt        |dd       d!fcY d }~S t        |d       t        d      cY d }~S d }~ww xY w)1Nz"[DEBUG ROUTE] Rota /novo acessada.r'   u$   [DEBUG ROUTE] Método POST recebido.nome	descricaoarquivosmodel_identifiertemperature70
max_tokens2048top_p90frequency_penalty0system_promptexamples_jsonwelcome_message    Olá! Como posso te ajudar hoje?application/jsonerroru   Nome do agente é obrigatório  dangerzagent/novo_agente.html      Y@)user_idr*   r-   r+   r.   r0   r2   r4   r6   r7   r8   zD[DEBUG ROUTE] Chamando AgentService.create_agent_with_training_fileszE[DEBUG ROUTE] AgentService.create_agent_with_training_files retornou.z[ERRO SERVICE] F)r;   success  zErro ao criar agente: u   Criação de agenter   zAgente criado: actionr?   object_type	object_iddetails
ip_addressTzAgente criado com sucesso!)idr*   r+   
created_atagent.list_agents_page_dinamica)r@   messager   redirect_url   zAgente cadastrado com sucesso!r@   u*   Erro inesperado ao processar formulário: z[ERRO GERAL] )"printr   methodformgetfilesgetlistis_jsonaccept_mimetypesr   r   r   floatintr   rH   r
    create_agent_with_training_filesr   emailr*   remote_addrrI   r   utcnowr+   	isoformatr   r   	Exceptionr   sessionrollbackstr)r*   r+   r,   r-   temperature_strmax_tokens_str	top_p_strfrequency_penalty_strr6   examples_json_strr8   r.   r0   r2   r4   
agent_datanovo_agente_objr;   rI   eerror_messages                        r#   novo_agenterj      s    

./~~45||'LL$$[1	==((4"<<++,>?!,,**=$? )),?LL$$Wd3	 ' 0 01Dc J((9#LL,,_=!,,**+<>`a"48P8P"P)IJKSPP2H="#;<<C	=058K^,J)$u,E %&; <u D (??$4&*(%6!.!2#2J XY%1%R%RS]_g%h"OUYZw/0??&8G<T<T&T"Uu#EFKK.ug6A&'?@@",$**$),,)/*>*>)?@".. "48P8P"P,77
!!)!2J#;-00 / 4 4%4%>%>@Jj&:&:&<PT	 %,,M$N
  
 
 
 2I>G$EFGG 344  		=JJ!HQQMM-12"48P8P"P5IJCOO-*"#;<<		=s?   CN/ N/ ,CN/ N/ /	Q
8A+Q#Q
)Q?Q
Q
z/listac                      t         j                  j                  t              j	                  t
        j                        j                         } t        d| | r
| d         S d       S )Nr?   zagent/lista_agentes.htmlr   )agentescurrent_agent)	r   r^   queryr   	filter_byr   rH   allr   )rm   s    r#   lista_agentesrr   w   sV     jjv&000IMMOG5wdkV]^_V`vvquvvr%   z/editar/<int:agente_id>c                 .   t        t        d      rUt        j                  dk(  rBt        j                  j                  t              j                  |       j                         }nPt        j                  j                  t              j                  | t        j                        j                         }t        j                  dk(  rt        j                  j                  d|j                        |_        t        j                  j                  d|j                        |_        t        j                  j                  d|j                         |_        	 t#        t        j                  j                  d	|j$                  d
z              dz  |_        	 t)        t        j                  j                  d|j*                              |_        	 t#        t        j                  j                  d|j,                  d
z              dz  |_        	 t#        t        j                  j                  d|j.                  d
z              dz  |_        t        j                  j                  d|j0                        |_        t        j                  j                  d|j2                  xs d      |_        t        j                  j                  d      }t5        d|        |r||_        n\t        j                  j                  d      }|r||_        n3dj9                  t        j                  j;                  d            |_        t        j<                  j;                  d      }t>        j@                  j9                  tB        tE        |j                              }t?        jF                  |d       |D ]  }|s|jH                  stK        |jH                        s)tM        |jH                        }t>        j@                  j9                  ||      }|jO                  |       t        j                  j                  tP              j                  |j                  |      jS                         }	|	rtQ        |j                  |      }
t        j                  jU                  |
        	 t5        d|j6                          t        j                  jW                          tY        dt        j                  d|j                  d|j                   t        jZ                         t        j\                  sdt        j^                  v rta        dd tc        d!      d"      S te        d d#       ti        tc        d!            S g }|j6                  r 	 tk        jl                  |j6                        }to        d)|||*      S # t&        $ r Y /w xY w# t&        $ r Y w xY w# t&        $ r Y w xY w# t&        $ r Y w xY w# t&        $ r}t        j                  jg                          t        j\                  sdt        j^                  v rta        d$tE        |      d%      d&fcY d }~S te        d'tE        |       d(       Y d }~d }~ww xY w# t&        $ r g }Y w xY w)+Nrole
superadmin)rH   )rH   r?   r'   r*   r+   r-   r.   d   r>   r0   r2   r4   r6   r8   r9   r7   z)[DEBUG] Valor recebido de examples_json: example_promptz||r,   T)exist_ok)	agente_idarquivoz1[DEBUG] Valor de example_prompt antes do commit: u   Edição de agenter   zAgente editado: rB   r:   zAgente atualizado com sucesso!rJ   )r@   rK   rL   r@   Fr@   r;   rA   zErro ao atualizar agente: r=   zagent/editar_agente.html)agentern   examples_list)8hasattrr   rt   r   r^   ro   r   rp   first_or_404rH   r   rO   rP   rQ   r*   r+   r-   rV   r.   r]   rW   r0   r2   r4   r6   r8   rN   rw   joinrS   rR   ospathUPLOAD_FOLDERr`   makedirsr"   r$   r   saver   firstaddcommitr   rZ   rT   rU   r   r   r   r_   r   jsonloadsr   )ry   r|   r7   example_prompt_fallbackr,   agent_upload_folderrz   r"   caminhoexiste_treinotreinorh   r}   s                r#   editar_agenter   }   s    |V$):):l)J!!&)33y3ANNP!!&)33y,//3Zggi~~ll&&vv{{;"<<++K9I9IJ"),,"2"23EvG^G^"_	!&w||'7'7vGYGY\_G_'`!adi!iF	 #GLL$4$4\6CTCT$U VF	 !1!1'6<<#;M!NORWWFL	',W\\-=-=>QSYSkSknqSq-r'sv{'{F$  '||//AUAUV!(!1!12CVE[E[  FB  `B  "C((99-IJ$1F!&-ll&6&67G&H#&(?%(,		',,2F2FGW2X(Y%==((4 ggll=#fii.I
'$7 	+G7++W=M=M0N*7+;+;<'',,':HEW% "

 0 0 > H HSYS\S\fn H o u u w$)FIIxPFJJNN6*	+	CEfF[F[E\]^JJ"+$$ ))*6;;-8".. "48P8P"P#?$+,M$N   
 2I>  ABCCM	 JJv'<'<=M 5fTZjwxxS  		  		  		  		`  	CJJ!"48P8P"P53q6BCSHH.s1vh7BB		C  	M	s   >V9 8W	 >W >W) (B3W9 W9 Z 9	WW		WW	W&%W&)	W65W69	ZAY>Z Y>>ZZZz/delete/<int:agente_id>c                    t        j                  |       \  }}t        j                  sdt        j                  v rQ|r;t        dt        j                  d| dt        j                         t        ddd      S t        d	|xs d
d      dfS |r:t        dt        j                  d| dt        j                         t        dd       nt        |xs d
d       t        t        d            S )Nr:   u   Exclusão de agenter   u   Agente excluído com sucessorB   Tu   Agente excluído com sucesso.)r@   rK   FzErro ao excluir agente.r{   r<   u   Agente excluído com sucesso!r@   r=   rJ   )r
   delete_agentr   rT   rU   r   r   rH   rZ   r   r   r   r   )ry   r@   r;   s      r#   delete_agenter      s     "..y9NGU,0H0HH",$$#6".. t8WXYYuu7Y@YZ[]```( OO 2**	
 	-y9e00(;G=>??r%   z/agentsc                      t        d      S )Nzagents.html)r    r%   r#   list_agents_page_dinamicar      s     =))r%   z/api/agentsc                      t        j                         \  } }|rt        d|        t        d|d      dfS t        |       S )u   
    Endpoint da API para buscar a lista de agentes do usuário logado com estatísticas,
    usado pelo JavaScript em agents.html.
    zAPI Error em /api/agents: z!Falha ao buscar lista de agentes.)r;   rF   rA   )r
   get_user_agents_with_statsrN   r   )agents_datar;   s     r#   api_get_user_agents_dinamicosr      sM     &@@BK*5'23!DQVWXZ]]];r%   z!/api/agent/<int:agent_id>/welcomec           	         	 t        d|  dt        j                          t        j                  j                  t        |       }|st        d|  d       t        ddi      dfS t        d|j                          t        d	t        |j                                t        |j                  |j                  |j                  d
      S # t        $ r3}t        d|  dt        |              t        ddi      dfcY d}~S d}~ww xY w)u:   Retorna a mensagem de boas-vindas de um agente específicoz([DEBUG] API welcome chamada para agente u    por usuário z[DEBUG] Agente u    não encontrador;   u   Agente não encontrado  z[DEBUG] Agente encontrado: z[DEBUG] Welcome message: )agent_id
agent_namer8   z9[ERROR] Erro ao buscar mensagem de boas-vindas do agente z: zErro interno do servidorrA   N)rN   r   rH   r   r^   rQ   r   r   r*   reprr8   r]   r`   )r   r|   rh   s      r#   get_agent_welcome_messager     s   C8
.Q]Q`Q`Pabc1OH:-=>?G%=>?DD+FKK=9:)$v/E/E*F)GHI		 ++%55
  	  CI(SUVYZ[V\U]^_!;<=sBBCs%   A"C %A%C 	D(D<DDz/agent/<int:agent_id>/chatc                 4   t         j                  j                  t        |       }|r=t	        |d      rQ|j
                  t        j                  k7  r4t        t        dd      dk7  r t        dd       t        t        d            S t        t        d| 	            S )
Nr?   rt    ru   u(   Agente não encontrado ou acesso negado.r=   rJ   zchat.chat_redirect)r   )r   r^   rQ   r   r~   r?   r   rH   getattrr   r   r   )r   r|   s     r#   start_agent_chat_router   %  s     ZZ^^FH-Fgfi0V^^|5V[bcoqwy{[|  AM  \M8(C ABCCG08DEEr%   z#/agente/<int:agent_id>/compartilharc                 z   t        j                         }|j                  d      }|j                  dd      }t        j                  j                  |      j                         }|st        ddi      dfS t        j                  j                  |       }|r|j                  t        j                  k7  rt        ddi      d	fS t        j                  j                  | |j                  
      j                         }|rt        ddi      dfS t        | |j                  |      }t        j                  j                  |       t        j                  j!                          t#        dt        j                  d| d|j$                   d|j&                   d| dt         j(                         t        ddi      dfS )NrY   
permissionviewrY   r;   u   Usuário não encontrador   Acesso negado  r   r?   rK   u   Já compartilhado   )r   r?   r   zCompartilhamento de agenter   Agente z compartilhado com z (perm: )rB   z Agente compartilhado com sucessorM   )r   get_jsonrQ   r   ro   rp   r   r   r   r?   r   rH   r	   r   r^   r   r   r   r*   rY   rZ   )r   data
user_emailr   userr|   existingshares           r#   compartilhar_agenter   .  sr    D'"J,/J::j1779D!;<=sBB\\h'FV^^|612C77##--x-QWWYH	#678#==Hdgg*UEJJNN5JJ+&++&9$**Xj\YZ[&& IABCSHHr%   z1/agente/<int:agent_id>/compartilhar/<int:user_id>DELETEc           
      B   t         j                  j                  |       }|r|j                  t        j
                  k7  rt        ddi      dfS t        j                  j                  | |      j                         }|st        ddi      dfS t        j                  j                  |       t        j                  j                          t        dt        j
                  d| d	|j                   d
|j                   t         j"                         t        ddi      dfS )Nr;   r   r   r   u    Compartilhamento não encontrador   zDescompartilhamento de agenter   r   z descompartilhado de rB   rK   zCompartilhamento removidor   )r   ro   rQ   r?   r   rH   r   r	   rp   r   r   r^   deleter   r   r*   r   rZ   )r   r?   r|   r   s       r#   descompartilhar_agenter   J  s     \\h'FV^^|612C77  **Hg*NTTVE!CDEsJJJJeJJ.&++&;EMM?K&& I:;<cAAr%   z/agentes/compartilhadosc                  <   t         j                  j                  t        j                        j                         } g }| D ]M  }t        j                  j                  |j                        }|s/|j                  |j                                O t        d|i      S )Nrl   rm   )r	   ro   rp   r   rH   rq   r   rQ   r   appendto_dictr   )sharesrm   r   r|   s       r#   listar_agentes_compartilhadosr   _  s~     !!++LOO+DHHJFG -!!%..1NN6>>+,- Iw'((r%   z/api/users/searchc                  n   t         j                  j                  dd      j                         j	                         } | rt        |       dk  rt        g       S t        j                  j                  t        j                  j                  d|  d      t        j                  j                  d|  d      z        j                  d      j                         }|D cg c]C  }|j                  t         j                  k7  r$|j                  |j                  |j                  dE }}t        |      S c c}w )Nqr      %
   )rH   rY   username)r   argsrQ   stripr    lenr   r   ro   filterrY   iliker   limitrq   rH   r   )r   usersuresultss       r#   search_usersr   j  s     	b!'')//1AA
r{JJtzz//!A3a9dmm>Q>QTUVWUXXYRZ>[\]ccdfgkkmE !$$,//1 ttagg1::>G  7	s   AD2z/admin/create_userc                     t        t        d      rt        j                  dk7  rt        dd      dfS t        j
                  dk(  rt        j                  j                  d      } t        j                  j                  d	      }t        j                  j                  d
      }| r|r|st        dd      S t        j                  j                  |       j                         s.t        j                  j                  |      j                         rt        dd      S t        | |      }|j                  |       t        j                  j                  |       t        j                  j!                          t#        dt        j$                  d|j$                  d|  d| dt        j&                         t        dd      S t        d      S )Nrt   ru   z
error.htmlr   )r;   r   r'   r   rY   passwordzadmin/create_user.htmlu"   Todos os campos são obrigatórios)r   r   u   Usuário ou e-mail já existe)r   rY   u   Criação de usuário adminu   Usuáriou   Usuário admin criado: z (r   rB   u   Usuário criado com sucesso!)r@   )r~   r   rt   r   r   rO   rP   rQ   r   ro   rp   r   set_passwordr   r^   r   r   r   rH   rZ   )r   rY   r   r   s       r#   admin_create_userr   w  sd    <(L,=,=,M|?CSHH~~<<##J/  )<<##J/uH"#;Cghh::288:djj>R>RY^>R>_>e>e>g"#;CbccXU3(#


t


0 OO"gg-hZr%B**	
 7A_``344r%   z!/api/agents/<public_token>/copiedc                 V   ddl m} ddlm} dd l}|j
                  j                  |       j                         }|sddidfS  |dd d	|j                  d
|  dt        j                   d|j                  j                         j                          dt        j                         ddiS )Nr   )r   r   )public_tokenr;   u   Token não encontrador   zToken de agente copiador   zToken copiado: z | IP: u    | Horário:  rB   r@   T)
src.modelsr   src.discord.discord_webhookr   r   ro   rp   r   rH   r   rZ   r[   r\   )r   r   r   r   r|   s        r#   notify_public_token_copiedr     s    !B\\###>DDFF01366())!,ww7J7J6K=YaYjYjYqYqYsY}Y}Y  YA  AB  C&& tr%   )1r   r   src.extensionsr   r   src.models.userr   werkzeug.utilsr   r   r   r   src.models.agenter	   src.services.agent_servicer
   flask_loginr   r   r   r   flaskr   r   r   r   r   r   r   __name__agent_bpr   r!   r$   routerj   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r#   <module>r      s   	      * + , 3 4 > X X XWhG!2 X 
%1\5  2\5| 
w  w 
)E6?CUy  DUyn 
)F8<@  =@@ 
	*  * 
w/   0  
3eWEC  FC. 
,-F  .F 
5xHI  II4 
ChZXB  YB& 
)E7;)  <) 
#$	  %	 
$ufo>5  ?54 
3fXF Gr%   