
    Z)iJ.                         S SK Jr  S SKJrJrJrJr  S SKJr  S SK	J
r
  S SKJr  S SKrS SKrS SKJr  S SKJr  1 S	krS
 r " S S5      rg)    )db)AgenteAgenteTreinoChatMessage)current_user)func)datetimeN)secure_filename)current_app>   mdcsvpdftxtjsonxlsxc                 n    SU ;   =(       a*    U R                  SS5      S   R                  5       [        ;   $ )N.   )rsplitlowerALLOWED_EXTENSIONS_SERVICE)filenames    [C:\Users\fernando.barreto\Documents\GitLab\ollama\chat-ollama\src\services\agent_service.py_allowed_file_servicer      s0    (?_xsA6q9??AE___    c                       \ rS rSr\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r\S 5       r
\S	 5       rS
rg)AgentService   c                 V	   [        S5        [        SU  35        [        S[        U5       S[        U[        5      (       a  [	        U5      OS 35        [        U[        5      (       aL  [        U5       H=  u  p#[        SU S[        USS5       S	[        US
S5       S[        USS5       35        M?      [        U R                  S5      U R                  S5      U R                  S5      U R                  S5      U R                  S5      U R                  S5      U R                  S5      U R                  S5      U R                  S5      S9	n [        [        S5      (       a  U R                  S5      Ul
        [        [        S5      (       a  U R                  S5      Ul        [        R                  R!                  U5        [        R                  R#                  5         [        SUR$                   35        [&        R(                  R                  SS5      n[*        R,                  R/                  U[        UR$                  5      5      n[        SU 35        [*        R0                  " USS 9  [        S!5        [        S"[        U[        5      (       a  [	        U5      OS S#35        [        U[        5      (       Ga  U GH  n[        S$[        USS5       35        U(       a  UR2                  (       a  [5        UR2                  5      (       a  [7        UR2                  5      n	[*        R,                  R/                  Xy5      n
[        S%U	 S&U
 35        UR9                  U
5        [        SU	 S'35        [;        UR$                  U	S(9n[        R                  R!                  U5        [        S)U	 S*35        M  [        S+[        USS5       35        GM     O[        S,5        [        S-5        [        R                  R=                  5         [        S.5        [        S/5        US4$ ! [         a"  n[        S[        U5       35         SnAGNSnAff = f! [         aH  n[        R                  R?                  5         S0[        U5       3n[        S1U 35        SU4s SnA$ SnAff = f)2u   
Cria um novo agente com seus dados e salva os arquivos de treino.
agent_data: Dicionário com os dados do agente (nome, descricao, model_identifier, etc.)
files_list: Lista de objetos de arquivo de request.files.getlist('arquivos')
u8   [DEBUG SERVICE] Início create_agent_with_training_filesz%[DEBUG SERVICE] agent_data recebido: z,[DEBUG SERVICE] files_list recebido (tipo): z, (quantidade): N/A[DEBUG SERVICE] Arquivo z: Nome=r   z, Tipo=content_typez
, Tamanho=content_lengthuser_idnome	descricaomodel_identifiersystem_promptexamples_jsonwelcome_messagetemperature
max_tokens)	r%   r&   r'   r(   r)   example_promptr+   r,   r-   top_pfrequency_penaltyu@   [DEBUG SERVICE] Aviso: Campos novos não disponíveis no banco: Nz6[DEBUG SERVICE] Novo agente criado e flushado com ID: UPLOAD_FOLDERuploads/agentesz5[DEBUG SERVICE] Verificando/Criando pasta de upload: T)exist_okz2[DEBUG SERVICE] Pasta de upload verificada/criada.u7   [DEBUG SERVICE] Iniciando iteração sobre files_list (z arquivos).z%[DEBUG SERVICE] Processando arquivo: z"[DEBUG SERVICE] Salvando arquivo: z em z salvo com sucesso.)	agente_idarquivoz"[DEBUG SERVICE] AgenteTreino para u    adicionado à sessão.u5   [DEBUG SERVICE] Arquivo inválido ou não permitido: uP   [DEBUG SERVICE] files_list não é uma lista ou está vazia de forma inesperada.z2[DEBUG SERVICE] Tentando commit no banco de dados.z-[DEBUG SERVICE] Commit realizado com sucesso.z?[DEBUG SERVICE] Fim create_agent_with_training_files (Sucesso).z&Erro no AgentService ao criar agente: [DEBUG SERVICE] ) printtype
isinstancelistlen	enumerategetattrr   gethasattrr/   r0   	Exceptionstrr   sessionaddflushidr   configospathjoinmakedirsr   r   r   saver   commitrollback)
agent_data
files_listifnovo_agenteeupload_folder_baseagent_specific_upload_folderr5   r   caminho_completonovo_treinoerror_messages                r    create_agent_with_training_files-AgentService.create_agent_with_training_files   se    	HJ5j\BC<T*=M<NN^r|  ~H  JN  sO  sO_bcm_n  UZ  _[  \  	]j$''!*-0771jRW;X:YY`ahijlz  }B  bC  aD  DN  OV  WX  Zj  lq  Or  Ns  t  u .@	' "y1^^F+$..5!+0B!C(nn_=)~~o> */@ A&NN=9%>>,7
Kc67++(2w(?K%6#6774>NNCV4WK1 JJNN;'JJJ;>>JZ[\!,!3!3!7!7IZ![+-77<<8JCP[P^P^L_+`(IJfIghiKK4tDFHK_ijtvz_{_{CPZO  BG  LH  HS  T  U*d++)GA''S]_dBeAfgh7#3#38MgN^N^8_8_#273C3C#D+-77<<8T+_( B8*DQaPbcd%56 8
BUVW&2&1nn$,' 

{3 B8*Lcde!VW^_fhrtyWzV{|}!  *$ hjFHJJACSU$$S  cXY\]^Y_X`abbcT  	'JJ!DSVHMM$]O45&&		'sK   6BQ AP' %JQ '
Q1QQ QQ 
R( =R#R(#R(c                      [        [        S5      (       ac  [        R                  S:X  aO  [        R                  R                  [        5      R                  [        R                  5      R                  5       n O|[        R                  R                  [        5      R                  [        R                  [        R                  :H  5      R                  [        R                  5      R                  5       n / nU  GH  n[        R                  R                  [        R                  " [        R                  5      5      R                  [        R                   UR                  :H  [        R                  [        R                  :H  5      R#                  5       =(       d    Sn[        R                  R                  [        R                  " [$        R                  5      5      R'                  [        [        R                  [$        R(                  :H  5      R                  [        R                   UR                  :H  [        R                  [        R                  :H  5      R#                  5       =(       d    SnSnUR                  (       aM  SR'                  UR                  R+                  5       S S  Vs/ s H  ofS   PM	     sn5      R-                  5       OSn[        US5      (       a  UR.                  (       a  UR.                  OS	nUR0                  (       a  UR0                  OS
n	[        US5      (       aB  UR2                  (       a1  [        UR2                  S5      (       a  UR2                  R4                  OSn
UR                  UR                  =(       d    SUUU	U
UR6                  UUUS.S.nUR9                  U5        GM     US 4$ s  snf ! [:         a.  n[=        S[?        U5       35        / [?        U5      4s S nA$ S nAff = f)Nrole
superadminr   r!       AGr(   u   Não Definidou   Sem descrição.userusername-zAgente Sem Nome)conversationsmessagestokens)rE   nameinitialsmodeldescriptioncreator_usernamepublic_tokenstatsz1Erro em AgentService.get_user_agents_with_stats: ) r?   r   r\   r   rB   queryr   order_byr&   allfilterr%   rE   r	   countr   agent_idscalarr   rI   chat_idsplitupperr(   r'   ra   rb   rl   appendr@   r7   rA   )user_agentsagents_list_with_statsagentconversation_countmessage_counttokens_usedwordrh   model_displaydescription_textrk   
agent_dictrS   s                r   get_user_agents_with_stats'AgentService.get_user_agents_with_statsa   s   .	|V,,1B1Bl1R jj..v6??LPPR jj..v6==fnnP\P_P_>_`iijpjujuvzz|%'"$%'ZZ%5%5djj6I%JVDMMUXX5t|||7VWVX&#!" # !#

 0 0GJJ1G HT$7?? :;VDMMUXX5t|||7VWVX!# "# 
 $\a\f\f277

8H8H8J2A8N#O8NG8N#OPVVXlp:A%I[:\:\afawaw 6 6  ~M6;oo5??K] :A%:P:PUZU_U_dklqlvlv  yC  eD  eD5::#6#6  JM   ((!JJ;*; (*#3(8$)$6$6);$1"-
 '--j9E %H *4//1 $P2  	Ec!fXNOs1v:	s1   J0O 2O
 D
O O 
P#P=PPc           	          [         R                  R                  [        5      R	                  U [
        R                  S9R                  5       nU(       a>  [         R                  R                  U5        [         R                  R                  5         gg! [         aO  n[         R                  R                  5         [        SU  S[        U5       35        S[        U5      4s S nA$ S nAff = f)NrE   r%   TN)F(   Agente não encontrado ou acesso negado.zErro ao excluir agente : F)r   rB   rn   r   	filter_byr   rE   firstdeleterL   r@   rM   r7   rA   )rs   agenterS   s      r   delete_agentAgentService.delete_agent   s    
	!ZZ%%f-778\__7]cceF

!!&)

!!#!D 	!JJ!+H:RAx@A#a&= 	!s   BB 
C.AC)#C.)C.c                  t    [         R                  R                  [        R                  S9R                  5       $ )N)r%   )r   rn   r   r   rE   rp    r   r   get_user_agentsAgentService.get_user_agents   s'    ||%%loo%>BBDDr   c                 v    [         R                  R                  U [        R                  S9R                  5       $ )Nr   )r   rn   r   r   rE   r   )rs   s    r   	get_agentAgentService.get_agent   s)    ||%%<??%KQQSSr   c                 z    [         R                  R                  U [        R                  S9R                  5       nU(       a  UR                   Hi  n[        R                  R                  SUR                  5      n[        R                  R                  U5      (       d  MS  [        R                  " U5        Mk     [        R                  R                  U5        [        R                  R!                  5         gg! ["         a5  n[        R                  R%                  5         S['        U5      4s S nA$ S nAff = f)Nr   uploadsr   )Fu   Agente não encontradoF)r   rn   r   r   rE   r   treinosrG   rH   rI   r5   existsremover   rB   r   rL   r@   rM   rA   )rs   r   treino	file_pathrS   s        r   r   r      s    	!\\++x+QWWYF$nnF "Y GIww~~i00		), -
 

!!&)

!!#!2 	!JJ!#a&= 	!s%   BC; "AC; ;
D:*D5/D:5D:c                 ,    [         R                  R                  [        5      R	                  U [
        R                  S9R                  5       nU(       d  gUS 4$ ! [         a.  n[        S[        U5       35        S [        U5      4s S nA$ S nAff = f)Nr   )Nr   z&Erro em AgentService.get_agent_by_id: )r   rB   rn   r   r   r   rE   r   r@   r7   rA   )rs   r{   rS   s      r   get_agent_by_idAgentService.get_agent_by_id   sz    	 JJ$$V,66(LOO6\bbdEG$; 	 :3q6(CDQ<	 s$   AA A 
B%#BBBc           
      J   [        SU  35        / n [        R                  R                  [        5      R                  U S9R                  5       n[        S[        U5       S35        U(       d  [        S5        / S4$ [        R                  R                  SS5      nU H  nUR                  n[        R                  R                  U[        U 5      5      n[        R                  R                  Xe5      n[        S	U 35        [        R                  R!                  U5      (       aT   [#        US
SS9 nUR%                  5       n	SSS5        [        SU S[        W	5       S35        UR'                  XY45        M  [        SU 35        M     [        S[        U5       35        US4$ ! , (       d  f       Nj= f! [(         a&  n
[        SU S[        U
5       35         Sn
A
GMF  Sn
A
ff = f! [(         a*  nS[        U5       3n[        SU 35        SU4s SnA$ SnAff = f)uy   
Recupera e lê o conteúdo dos arquivos de treino para um dado agente.
Retorna uma lista de tuplas (filename, content).
zE[DEBUG SERVICE] Iniciando get_training_files_content para agente_id: )r4   z[DEBUG SERVICE] Encontrados z registros de treino.zE[DEBUG SERVICE] Nenhum arquivo de treino encontrado para este agente.Nr1   r2   z&[DEBUG SERVICE] Tentando ler arquivo: rzutf-8)encodingr"   z lido com sucesso. Tamanho: z bytesz$[DEBUG SERVICE] Erro ao ler arquivo r   u4   [DEBUG SERVICE] Arquivo não encontrado no caminho: zS[DEBUG SERVICE] Fim get_training_files_content (Sucesso). Total de arquivos lidos: u@   Erro no AgentService ao obter conteúdo dos arquivos de treino: r6   )r7   r   rB   rn   r   r   rp   r;   r   rF   r>   r5   rG   rH   rI   rA   r   openreadrx   r@   )rs   training_files_contentr   rT   r   r   rU   r   rQ   contentfile_read_errorrS   rX   s                r   get_training_files_content'AgentService.get_training_files_content   s    	UV^U_`a!#"	'jj&&|4>>>RVVXG0W>STU]^4x!,!3!3!7!7IZ![!!>>/1ww||<NPST\P]/^,GGLL)EP	>ykJK77>>),,!)S7Cq&'ffhG D 8
B^_bcj_k^llrst.55x6IJ
 PQZP[\]! "$ ghk  mC  iD  hE  F  G)4// DC %  DXJbQTUdQePfgh  	'^_bcd_e^fgM$]O45&&	'sg   A+G. >B+G. *F;5F*5F;;.G. *
F8	4F;;
G+G&G. &G++G. .
H"8HH"H"r   N)__name__
__module____qualname____firstlineno__staticmethodrY   r   r   r   r   r   r   __static_attributes__r   r   r   r   r      s    M' M'^ / /b ! ! E E T T ! !"     )' )'r   r   )srcr   
src.modelsr   r   r   r   flask_loginr   
sqlalchemyr	   r
   rG   r   werkzeug.utilsr   flaskr   r   r   r   r   r   r   <module>r      s;     : : $   	  * H ``' `'r   