
     @g0                        d dl mZ d dlmZ d dlZd dlZd dlZd dlmZ d dlZd dl	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mZ  ej        e          Zej                            d	          d
k    rdndZ G d d          Z  G d de          Z! G d de          Z" G d de          Z# G d de          Z$ G d de          Z% ee           Z& G d de&          Z' G d d          Z(dS )    )abstractmethod)datetimeN)sleep)ColumnIntegerStringNVARCHARFloatDateTimecreate_engine)sessionmakerdeclarative_basedeclared_attrSession   )DefaultQueueClientQueueItemBaseQueueClientBaseAIPROXY_USE_NVARCHAR1TFc                   r   e Zd ZeZed             Zed             Zed             Zed             Z	ed             Z
ed             Zed             Zed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zed             Zed             ZdS )_AccessLogBasec                 4    | j                                         S N)__name__lowerclss    E/var/www/piapp/venv/lib/python3.11/site-packages/aiproxy/accesslog.py__tablename__z_AccessLogBase.__tablename__   s    |!!###    c                 .    t          t          d          S )NT)primary_keyr   r   r   s    r   idz_AccessLogBase.id   s    g40000r!   c                 *    t          t                    S r   r   r   r   s    r   
request_idz_AccessLogBase.request_id       f~~r!   c                 *    t          t                    S r   )r   r   r   s    r   
created_atz_AccessLogBase.created_at!   s    hr!   c                 *    t          t                    S r   r'   r   s    r   	directionz_AccessLogBase.direction%   r)   r!   c                 *    t          t                    S r   r$   r   s    r   status_codez_AccessLogBase.status_code)       gr!   c                 `    | j         rt          t                    nt          t                    S r   use_nvarcharr   r	   r   r   s    r   contentz_AccessLogBase.content-   #    #&#3GvhGr!   c                 `    | j         rt          t                    nt          t                    S r   r2   r   s    r   function_callz_AccessLogBase.function_call1   r5   r!   c                 `    | j         rt          t                    nt          t                    S r   r2   r   s    r   
tool_callsz_AccessLogBase.tool_calls5   r5   r!   c                 `    | j         rt          t                    nt          t                    S r   r2   r   s    r   raw_bodyz_AccessLogBase.raw_body9   r5   r!   c                 `    | j         rt          t                    nt          t                    S r   r2   r   s    r   raw_headersz_AccessLogBase.raw_headers=   r5   r!   c                 *    t          t                    S r   r'   r   s    r   modelz_AccessLogBase.modelA   r)   r!   c                 *    t          t                    S r   r$   r   s    r   prompt_tokensz_AccessLogBase.prompt_tokensE   r0   r!   c                 *    t          t                    S r   r$   r   s    r   completion_tokensz _AccessLogBase.completion_tokensI   r0   r!   c                 *    t          t                    S r   r   r
   r   s    r   request_timez_AccessLogBase.request_timeM       e}}r!   c                 *    t          t                    S r   rE   r   s    r   request_time_apiz_AccessLogBase.request_time_apiQ   rG   r!   N)r   
__module____qualname___use_nvarcharr3   r   r    r%   r(   r+   r-   r/   r4   r7   r9   r;   r=   r?   rA   rC   rF   rI    r!   r   r   r      s        L$ $ ]$ 1 1 ]1   ]     ]    ]   ] H H ]H H H ]H H H ]H H H ]H H H ]H   ]   ]   ]   ]   ]  r!   r   c                   F    e Zd ZdedededdfdZededefd            ZdS )	RequestItemBaser(   request_jsonrequest_headersreturnNc                 0    || _         || _        || _        d S r   )r(   rP   rQ   )selfr(   rP   rQ   s       r   __init__zRequestItemBase.__init__X   s    $(.r!   accesslog_clsc                     d S r   rM   rT   rV   s     r   to_accesslogzRequestItemBase.to_accesslog]       r!   )	r   rJ   rK   strdictrU   r   r   rY   rM   r!   r   rO   rO   W   ss        /3 /d /T /VZ / / / /
 . ^    ^  r!   rO   c                   T    e Zd Zddedededededed	dfd
Zede	d	e	fd            Z
dS )ResponseItemBaseNr   r(   response_jsonresponse_headersdurationduration_apir/   rR   c                 Z    || _         || _        || _        || _        || _        || _        d S r   )r(   r_   r`   ra   rb   r/   )rT   r(   r_   r`   ra   rb   r/   s          r   rU   zResponseItemBase.__init__c   s6    $* 0 (&r!   rV   c                     d S r   rM   rX   s     r   rY   zResponseItemBase.to_accesslogk   rZ   r!   )Nr   r   r   r   rJ   rK   r[   r\   floatintrU   r   r   rY   rM   r!   r   r^   r^   b   s        ' '3 't 't 'fk '  @E '  X[ '  dh ' ' ' ' . ^    ^  r!   r^   c                   T    e Zd Zddedededededed	dfd
Zede	d	e	fd            Z
dS )StreamChunkItemBaseNr   r(   response_contentr`   ra   rb   r/   rR   c                 Z    || _         || _        || _        || _        || _        || _        d S r   )r(   rj   r`   ra   rb   r/   )rT   r(   rj   r`   ra   rb   r/   s          r   rU   zStreamChunkItemBase.__init__q   s6    $ 0 0 (&r!   rV   c                     d S r   rM   rX   s     r   rY   z StreamChunkItemBase.to_accesslogy   rZ   r!   )NNr   r   r   re   rM   r!   r   ri   ri   p   s        ' '3 '# 'X\ 'ot '  IN '  ad '  mq ' ' ' ' . ^    ^  r!   ri   c                   P    e Zd Zddedededededed	dfd
Zded	efdZ	d	efdZ
dS )ErrorItemBaseNr   r(   	exceptiontraceback_infor_   r`   r/   rR   c                 Z    || _         || _        || _        || _        || _        || _        d S r   )r(   ro   rp   r_   r`   r/   )rT   r(   ro   rp   r_   r`   r/   s          r   rU   zErrorItemBase.__init__   s6    $",* 0&r!   rV   c                    t          | j        t                    rA	 t          j        | j        d          }n8# t
          $ r t          | j                  }Y nw xY wt          | j                  } || j        t          j	                    d| j
         d| j         || j        rt          j        | j        d          nd d| j                  S )NF)ensure_asciierror
error_handler)r(   r+   r-   r4   r;   r=   r?   r/   )
isinstancer_   r\   jsondumps	Exceptionr[   r(   r   utcnowro   rp   r`   r/   )rT   rV   r;   s      r   rY   zErrorItemBase.to_accesslog   s    d($// 	/3:d&8uMMM 3 3 3t1223 4-..H}((~>>)<>>QUQfp
4#8uMMMMlp!(	
 	
 	
 		
s   8 AAc                 t    | j         j        | j        t          | j                  | j        | j        | j        dS )N)typer(   ro   rp   r_   r`   )	__class__r   r(   r[   ro   rp   r_   r`   )rT   s    r   to_dictzErrorItemBase.to_dict   s=    N+/T^,,"1!/ $ 5
 
 	
r!   )NNr   )r   rJ   rK   r[   rz   r\   rg   rU   r   rY   r   rM   r!   r   rn   rn   ~   s        ' '3 '9 'c 'bf '  BF '  \_ '  hl ' ' ' '
. 
^ 
 
 
 
(
 
 
 
 
 
 
r!   rn   c                       e Zd ZdS )WorkerShutdownItemNr   rJ   rK   rM   r!   r   r   r      s        Cr!   r   r   c                       e Zd ZdS )	AccessLogNr   rM   r!   r   r   r      s          r!   r   c                   `    e Zd ZddedddedefdZdedefd	Z	dedefd
Z
dedefdZd ZdS )AccessLogWorkerzsqlite:///aiproxy.dbN)connection_str	db_enginerV   queue_clientr   r   c                    |r|| _         nt          |          | _         || _        | j        j                            | j                    t          dd| j                   | _        |pt                      | _        d S )N)bindF)
autocommit	autoflushr   )	r   r   rV   metadata
create_allr   get_sessionr   r   )rT   r   r   rV   r   s        r   rU   zAccessLogWorker.__init__   s~     	;&DNN*>::DN*#..DN.CCC'5EPTP^___(@,>,@,@r!   	accesslogdbc                 X    |                     |           |                                 d S r   addcommitrT   r   r   s      r   insert_requestzAccessLogWorker.insert_request   %    
y
		r!   c                 X    |                     |           |                                 d S r   r   r   s      r   insert_responsezAccessLogWorker.insert_response   r   r!   itemc                     	 |                      |                    | j                  |           d S # t          $ r<}t                              d| dt          j                                Y d }~d S d }~ww xY w)Nz Error at processing queue item: ru   )r   rY   rV   rz   loggerrt   	traceback
format_exc)rT   r   r   exs       r   process_itemzAccessLogWorker.process_item   s    	\  !2!243E!F!FKKKKK 	\ 	\ 	\LLZBZZ)BVBXBXZZ[[[[[[[[[	\s   .2 
A81A33A8c           	         	 t          | j        j                   d }	 | j                                        }nH# t          $ r;}t
                              d| dt          j                                Y d }~wd }~ww xY w|D ]}	 t          |t                    s| d S ||                                 }|                     ||           J# t          $ r}t
                              d| dt          j                                	 t
                              d|                                            n1#  t
                              dt          |                      Y nxY wY d }~d }~ww xY w|^	 |                                 nH# t          $ r;}t
                              d| dt          j                                Y d }~nd }~ww xY w)NTz*Error at getting items from queue client: ru   zError at processing loop: zdata: zdata(to_json() failed): zError at closing db session: )r   r   dequeue_intervalgetrz   r   rt   r   r   rw   r   r   r   to_jsonr[   close)rT   r   itemsr   r   pexdbexs          r   runzAccessLogWorker.run   s*    	c$#4555B)--//   h"hhPYPdPfPfhhiii  M MM!$(:;; t|z!--//%%dB////  M M MLL!]c!]!]YEYE[E[!]!]^^^M%>dllnn%>%>????M%KD		%K%KLLLLLM ~cHHJJJJ  c c cLL!a!a!aI]I_I_!a!abbbbbbbbc? 	csc   8 
A=1A88A=C,C
E31E./D87E.8,E&$E..E39F 
G1GG)r   rJ   rK   r   r[   r   rU   r   r   r   r   r   r   r   rM   r!   r   r   r      s        0FTXjs  VZ A A A# A  DS A A A A G     W    \ \G \ \ \ \!c !c !c !c !cr!   r   ))abcr   r   rx   loggingostimer   r   
sqlalchemyr   r   r   r	   r
   r   r   sqlalchemy.ormr   r   r   r   queueclientr   r   r   	getLoggerr   r   environr   rL   r   rO   r^   ri   rn   r   AccessLogBaser   r   rM   r!   r   <module>r      s                 				           X X X X X X X X X X X X X X X X X X Q Q Q Q Q Q Q Q Q Q Q Q K K K K K K K K K K 
	8	$	$
'=>>#EE5A A A A A A A AJ    m       }       -   %
 %
 %
 %
 %
M %
 %
 %
P        ! ^444 $ # # # # # # #:c :c :c :c :c :c :c :c :c :cr!   