
    Ii                     :   d dl mZmZmZmZmZmZmZmZ d dl	m
Z
mZmZ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 d dlZd dlZej6                  j9                  ej6                  j;                  ej6                  j=                  e                   ddl m!Z! dd	l"m#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- d
dl.m/Z/ d dl0m1Z1  ede2      Z3e3ji                  d      e
d               Z5e3ji                  d      e
d               Z6e3ji                  d      e
d               Z7e3ji                  d      e
d               Z8e3ji                  d      e
d               Z9e3ji                  d      e
d               Z:e3ji                  d      e
d                Z;d! Z<y)"    )	Blueprintrender_templaterequestjsonifyflashredirecturl_forsend_from_directory)login_requiredcurrent_user
login_userlogout_user)generate_password_hashcheck_password_hash)db)AgenteTreinoUserChatMessageAgenteN   )AgentService)ChatService   )auth)chat_bp)stats_bp)playground_bp)agent_bp)
profile_bp)send_discord_audit_logmainz/historyc                      t        d      S )Nzhistory.htmlr        2/srv/www/ollama/chat-ollama/src/routes/__init__.pyhistoryr(      s     >**r&   z	/settingsc                      t        d      S )Nzsettings.htmlr$   r%   r&   r'   settingsr*      s     ?++r&   z/agentsc                      t        d      S )Nzagents.htmlr$   r%   r&   r'   agentsr,            =))r&   z
/new-agentc                  $    t        dt              S )Nznew-agent.htmluserr   r   r%   r&   r'   	new_agentr2   %   s     +,??r&   z/profilec                     t         } t        | d| j                        t        | dd      t        | dd       t        | dd      t        | dd      t        | d	d
      t        | dd      t        | dd      t        | dd      t        | dt        | d      r| j                  j                  d      nd      d
}t        d|      S )Nnameemail 
avatar_urldefault_modelzllama3:latestdefault_temperaturegffffff?default_max_tokensi  save_historyTtotal_conversationsr   total_tokens	join_date
created_atz%d/%m/%Y)
r4   r5   r7   r8   r9   r:   r;   r<   r=   r>   zprofile.htmlr/   )r   getattrusernamehasattrr?   strftimer   )r0   	user_datas     r'   profilerE   *   s     Dfdmm4w+dL$7 H&t-BCH%d,@$Gnd;&t-BAFna8T;X_`dfrXs0H0H0Ty{|I >	::r&   z/helpc                  $    t        dt              S )Nz	help.htmlr/   r1   r%   r&   r'   helprG   <   s     ;\::r&   z/statusc                      t        d      S )Nzstatus.htmlr$   r%   r&   r'   statusrI   A   r-   r&   c                     ddl m}  |       }|j                          d|_        |j                  d        }|j
                  d        } j                  t        d        j                  t                j                  t        d        j                  t                j                  t                j                  t                j                  t               dd	lm} dd
lm dd l} j'                  |      fd       } j'                  d      fd       } j'                  t(               fd       }	 j+                  d      fd       }
y )Nr   )LoginManager
auth.loginc                 R    t         j                  j                  t        |             S )N)r   querygetint)user_ids    r'   	load_userzinit_app.<locals>.load_userL   s    zz~~c'l++r&   c                      t         j                  st         j                  d   rt        ddi      dfS t	        t        d            S )Napplication/jsonerroru   Não autenticadoi  rL   )r   is_jsonaccept_mimetypesr   r   r	   r%   r&   r'   unauthorized_callbackz'init_app.<locals>.unauthorized_callbackP   s=    ??g667IJG%7893>>-..r&   z/auth)
url_prefixz/agente)AppExceptionr$   c                     t         j                  st         j                  d   r#t        d| j                  i      | j
                  fS t        | j                  d        d| j                        | j
                  fS )NrT   rU   danger
error.htmlrU   )r   rV   rW   r   messagestatus_coder   )er   s    r'   handle_app_exceptionz&init_app.<locals>.handle_app_exceptionb   s]    ??g667IJGQYY/0!--??aii"|199=q}}LLr&     c                     d}t         j                  st         j                  d   rt        d|i      dfS  d|      dfS )Nu   Recurso não encontradorT   rU   rc   r]   r^   )r   rV   rW   r   )ra   msgr   s     r'   	not_foundzinit_app.<locals>.not_foundi   sC    '??g667IJGS>*C//|37<<r&   c                    dd l }ddlm} ddlm} j
                  j                  dt        |        d|j                                 	 t        dt        t        dd       ddt        |        d|j                         d d	  t        j                  
       dt        |       v s#dt        t        |             v sdt        |       v r |dd       t!        t#        d            S d}t        j$                  st        j&                  d   rt)        d|i      d	fS t!        t#        d            S # t        $ r(}j
                  j                  d|        Y d }~d }~ww xY w)Nr   )OperationalError)r   u   Erro não tratado: 
u   Erro críticoidBackendi  )actionrQ   object_typedetails
ip_addresszFalha ao enviar log Discord: zCan't connect to MySQL serverrh   z	timed outuY   Erro crítico: Não foi possível conectar ao banco de dados. Tente novamente mais tarde.r\   rL   zErro interno do servidorrT   rU   zmain.history)	tracebacksqlalchemy.excrh   flaskr   loggerrU   str
format_excr!   r@   r   r   remote_addr	Exceptiontyper   r	   rV   rW   r   )ra   rp   rh   r   discord_errre   apps         r'   handle_generic_exceptionz*init_app.<locals>.handle_generic_exceptionp   sD   3

.s1vhb9M9M9O8PQR		L"&dD9%-c!fXR	8L8L8NtPS8T7UV".. +c!f48JcRVWXRYl8Z^impqrms^smowxGL122(??g667IJGS>*C///00  	LJJ<[MJKK	Ls   AD- -	E6EE/c                  \    t         j                  rt        t        d            S   d      S )Nzplayground.playgroundz	home.html)r   is_authenticatedr   r	   r$   s   r'   
root_indexzinit_app.<locals>.root_index   s(    ((G$;<=={++r&   )flask_loginrK   init_app
login_viewuser_loaderunauthorized_handlerregister_blueprintr   r   r   main_bpr   r   r    src.exceptionsrZ   rr   r   rp   errorhandlerrw   route)rz   rK   login_managerrR   rX   rZ   rp   rb   rf   r{   r   r   s   `          @r'   r   r   F   sE   ( NM3+M, , ''/ (/
 4G47#8	:7#8$=):&+%l#M $M 	c= = 	i 1 !1. 	YYs^, ,r&   )=rr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   werkzeug.securityr   r   src.extensionsr   
src.modelsr   r   r   r   r   sysospathappenddirnameabspath__file__services.agent_servicer   services.chat_servicer   requestsr   chat_routesr   stats_routesr   playground_routesr   agenter   profile_routesr    src.discord.discord_webhookr!   __name__r   r   r(   r*   r,   r2   rE   rG   rI   r   r%   r&   r'   <module>r      s   m m m M M I  @ @ 
 	  9: ; 1 /     " ,  & >
FH
%z+  + 	{,  , 	y*  * 	|@  @ 	z;  ;  	w;  ; 	y*  *F,r&   