
    љi/              	       x   S SK r S SKrS SKJr  S SKJrJr  S SKJrJ	r	J
r
JrJrJr  S SKJr  S SKJrJr  SSKJr  SS	KJrJr  SS
KJr  SSKJr  \ R8                  " \5      r\R>                  " S\R@                  5      r! " S S\5      r" " S S\5      r# " S S\5      r$ " S S5      r%SSS.S\
S\S\S\&4S jjr'g)    N)asdict)ListOptional)	APIRouterDependsFastAPIHTTPExceptionQuerystatus)Response)	BaseModelField   )PerformanceRecorder)create_metrics_queryMetricsQuery)VoiceRecorder   )create_api_key_dependencyz^[0-9a-f\-]+$c                       \ rS rSr% \\S'   Sr\\   \S'   Sr\\   \S'   Sr	\\   \S'   Sr
\\   \S'   Sr\\   \S'   Sr\\   \S	'   Sr\\   \S
'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Srg)ConversationLogResponse   
created_atNtransaction_iduser_id
context_idtts_first_chunk_timerequest_textrequest_filesresponse_textresponse_voice_text
error_info
tool_calls )__name__
__module____qualname____firstlineno__str__annotations__r   r   r   r   r   floatr   r   r    r!   r"   r#   __static_attributes__r$       M/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/admin/logs.pyr   r      s    O$(NHSM(!GXc]! $J$,0(5/0"&L(3-&#'M8C='#'M8C=')-#- $J$ $J$r-   r   c                   H    \ rS rSr% Sr\\   \S'   \\	   \S'   Sr
\\S'   Srg)ConversationGroupResponse    Nr   logsF	has_errorr$   )r%   r&   r'   r(   r   r   r)   r*   r   r   r3   boolr,   r$   r-   r.   r0   r0       s&     $J$
&
''Itr-   r0   c                   :    \ rS rSr% \\S'   \\S'   \\   \S'   Sr	g)LogsResponse&   limitvoice_recorder_enabledgroupsr$   N)
r%   r&   r'   r(   intr*   r4   r   r0   r,   r$   r-   r.   r6   r6   &   s    J  *++r-   r6   c                   8    \ rS rSrS	S\S\4S jjrS\4S jrSr	g)
LogsAPI,   Nrecordervoice_recorderc                 0    [        U5      U l        X l        g N)r   queryr@   )selfr?   r@   s      r.   __init__LogsAPI.__init__-   s    )(3
,r-   returnc                    ^  [        5       nUR                  S[        S/SSSS0SS0S.S	9[        S
SSSS94S[        S[        4U 4S jjj5       nUR                  SS/SSSS0SS0SS0SS0S.S9S[
        S[
        S[        4U 4S jj5       nU$ )Nz/logsLogszGet conversation logszXReturns conversation logs grouped by context_id, sorted by created_at within each group.descriptionz&Successfully returns conversation logszInternal server error)     )response_modeltagssummaryrJ   	responsesrK   zMax number of records to fetchr   i'  )rJ   geler8   rG   c                   >#     TR                   R                  U 5      I S h  vN n[        U TR                  S LU VVs/ s HO  n[	        UR
                  UR                   Vs/ s H  n[        S0 [        U5      D6PM     snUR                  S9PMQ     snnS9$  Nxs  snf s  snnf ! [         a5  n[        R                  SU 35        [        [        R                  SS9eS nAff = f7f)N)r   r2   r3   )r8   r9   r:   z"Error querying conversation logs: z6Internal server error while querying conversation logsstatus_codedetailr$   )rC   
query_logsr6   r@   r0   r   r2   r   r   r3   	Exceptionloggererrorr	   r   HTTP_500_INTERNAL_SERVER_ERROR)r8   r:   glexrD   s        r.   get_logs$LogsAPI.get_router.<locals>.get_logs4   s     #zz44U;;#+/+>+>d+J "( "(A 2'(||PQPVPV!WPV1"9"FF1I"FPV!W&'kk
 "(  < "X  A"FG# & E ES s\   C+B) BB)  $B#$BB#B) C+B) B##B) )
C(30C##C((C+z)/logs/voice/{transaction_id}/{voice_type}zGet recorded voice filezReturns a voice recording for the given transaction. Use 'request' for request voice, 'response' to get count of response voices, or 'response_N' for individual response voice.z
Voice filezInvalid parametersVoice file not found)rK       rL   )rN   rO   rJ   rP   r   
voice_typec                 ,  >#    TR                   c
  [        SSS9e[        R                  U 5      (       d
  [        SSS9e US:X  a:  TR                   R	                  U 5      I S h  vN nUc
  [        SSS9e[        USS	9$ US
:X  a0  TR                   R                  U 5      I S h  vN nS[        U5      0$ UR                  S5      (       al  U[        S5      S  nUR                  5       (       d
  [        SSS9eTR                   R                  U  SU 35      I S h  vN nUc
  [        SSS9e[        USS	9$ [        SSS9e N N N)! [         a    e [         a5  n[        R                  SU 35        [        [        R                  SS9eS nAff = f7f)Nrc   zVoice recording is not enabledrT   rb   zInvalid transaction_idrequestra   z	audio/wav)content
media_typeresponsecount	response_zInvalid voice_type
_response_z>Invalid voice_type. Use 'request', 'response', or 'response_N'zError retrieving voice: z,Internal server error while retrieving voice)r@   r	   _TRANSACTION_ID_PATTERNmatchget_request_voicer   get_response_voiceslen
startswithisdigit	get_voicerX   rY   rZ   r   r[   )r   rd   datavoicesidx_strr^   rD   s         r.   rt   %LogsAPI.get_router.<locals>.get_voiceW   s      ""*#<\]]*00@@#<TUU*!%!4!4!F!F~!VVD|+DZ[[#D[II:-#'#6#6#J#J>#ZZF#S[11**;77([)9):;G"??,,+DXYY!%!4!4!>!>.AQQ[\c[d?e!ffD|+DZ[[#D[II (C  AA  B  B' W [ g !  7t<=# & E EI sx   <F $E $E%E ?F $E $E%E 5F6A&E EE 7F8E E E F0FFF)r   getr6   r
   r;   r)   r   )rD   routerr_   rt   s   `   r.   
get_routerLogsAPI.get_router1   s    	'+r#%MN#%<= 
 


 s0PUV[`a			


	0 
7- K#\2#%9:#%;<#%<=	 
 

(	(	(	 (	

(	T r-   )rC   r@   rB   )
r%   r&   r'   r(   r   r   rE   r   r{   r,   r$   r-   r.   r=   r=   ,   s$    -!4 -m -\I \r-   r=   )r@   api_keyappr?   r@   r}   c                    U(       a  [        [        U5      5      /O/ nU R                  [        XS9R	                  5       US9  g )N)r?   r@   )dependencies)r   r   include_routerr=   r{   )r~   r?   r@   r}   depss        r.   setup_logs_apir      sC     =DG-g678DALLN  r-   )(loggingredataclassesr   typingr   r   fastapir   r   r   r	   r
   r   fastapi.responsesr   pydanticr   r   sts.performance_recorder.baser   sts.performance_recorder.queryr   r   sts.voice_recorderr   authr   	getLoggerr%   rY   compile
IGNORECASErm   r   r0   r6   r=   r)   r   r$   r-   r.   <module>r      s     	  ! M M & % ? O . +			8	$**%5r}}E %i %	 ,9 ,a aP %)	 " "	
 r-   