B
    yJgd                 @   s|  d dl Z d dlZd dlZd dlmZ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 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 e Ze jd
e jd ededddZ e!dedddZ"e#dedddZ$e%dedddZ&ee'dddZ(ee)dddZ*e!dedddZ+e,d krxej-ee	e
d! dS )"    N)FastAPIRequest)JSONResponse)HOSTPORT)ClientIP)MessageRequest)MessageResponse)add_ip)datetimez	myapp.log)filenamelevelhttp)requestc          
      s   y| j drt| j drt| }t| }| jjdkr| jdkrtj	||dI d H dksvtj
||dI d H dkrtdddS || I d H }|S td	 tdddS W n4 tk
r } zt| tdddS d }~X Y nX d S )
NzVi-bz/chatPOST)user_id	user_typeFZdaily_token_limiti  )contentstatus_codez$Header doesn't contain user id field)headersgetvalidation_serviceZvalidate_user_auth_tokenget_user_typeget_user_idurlpathmethodZcheck_used_tokensZcheck_user_authr   loggingerror	Exception)r   Z	call_nextr   r   responsee r"   &/var/www/html/converse/gpt_api/main.pyuser_validation   s    0

r$   z/chatc          
      s   yP|   I d H }tt| |d |d |d |d d}tj|dI d H }t|dS  tk
r } zt| t	| t
dd	d
S d }~X Y nX d S )Nr   typelanguage_codeoption)r   r   r%   r&   r'   )message_request)r   server_errori  )r   r   )jsonr   r   gpt_servicesend_messager	   r   r   r   printr   )r   datar(   Zgpt_contentr!   r"   r"   r#   new_message:   s    $

r/   c          
      sT   yt jt| dI d H  W n4 tk
rN } zt| t| W d d }~X Y nX d S )N)r   )message_repositoryZdelete_historyr   r   r   r   r-   )r   r!   r"   r"   r#   delete_messagesI   s
    
r1   z/tokensc          
      sZ   yt t| I d H }|S  tk
rT } zt| t| tdddS d }~X Y nX d S )Nr)   i  )r   r   )user_repositoryget_used_tokensr   r   r   r   r-   r   )r   Zused_tokensr!   r"   r"   r#   r3   R   s    
r3   )r   returnc             C   s    t | jddd  dS )NzVi-b   zutf-8)base64	b64decoder   r   decode)r   r"   r"   r#   r   ]   s    r   c             C   s   t | jdd d S )NzVi-br5   )intr   r   )r   r"   r"   r#   r   b   s    r   z/register_ipc                s<   | j j}t }|d}t| tt||dI d H  d S )Nz%Y-%m-%d %H:%M:%S)ipdate)clienthostr   nowstrftimer-   r
   r   )r   Z	client_ipZdate_nowZdate_stringr"   r"   r#   register_ipe   s
    
r@   __main__)r=   port).r   uvicornr6   Zfastapir   r   Zfastapi.responsesr   configr   r   Zmodels.client_ipr   Zmodels.message_requestr   Zmodels.message_responser	   Zrepositories.ip_repositoryr
   Zrepositories.user_repositoryr2   Zrepositories.message_repositoryr0   Zservices.gpt_servicer+   Zservices.validation_servicer   r   appbasicConfigERROR
middlewarer$   Zpostr/   deleter1   r   r3   strr   r9   r   r@   __name__runr"   r"   r"   r#   <module>   s<   

