
    j                     D   d dl Z d dlZd dlZd dlZd dlZd dlZddlmZ  ej                  e	      Z
dZdZej                  eej                  e   ej                  e   f   ZdefdZ G d d	      Z G d
 dej(                        Z G d d      Z e       ZdefdZdedej                  e   dej                  e   defdZ	 ddedej                  e   dej                  e   dej4                  eej6                  f   dej6                  dej                  e   ddfdZy)    N   )	Blueprinti,  g      ?returnc                      t         j                  j                  d      } | 	 t        |       S t
        S # t        $ r Y t
        S w xY w)NOPIK_CONFIG_TTL_SECONDS)osenvirongetint
ValueErrorDEFAULT_TTL_SECONDS)raws    |/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/opik/api_objects/agent_config/cache.py_get_ttl_secondsr      sJ    
**..2
3C
	s8O   		s   
4 	AAc                   <   e Zd ZefdeddfdZdej                  g ej                  e	   f   ddfdZ
dej                  eej                  f   ddfdZedej                  eej                  f   fd	       Zd
e	ddfdZdej$                  e   fdZdefdZddZy)SharedConfigCachettl_secondsr   Nc                     t        j                         | _        d | _        d | _        i | _        i | _        || _        d | _        d | _	        y N)
	threadingRLock_lockblueprint_idblueprint_versionvalues_registered_field_types_ttl_seconds_last_fetch_refresh_callback)selfr   s     r   __init__zSharedConfigCache.__init__   sL    __&
267;46EG$'37  	    callbackc                 l    | j                   5  | j                  || _        d d d        y # 1 sw Y   y xY wr   )r   r   )r    r#   s     r   set_refresh_callbackz&SharedConfigCache.set_refresh_callback)   s)     ZZ%%-)1& ZZs   *3prefixed_field_typesc                 |    | j                   5  | j                  j                  |       d d d        y # 1 sw Y   y xY wr   )r   r   update)r    r&   s     r   register_fieldsz!SharedConfigCache.register_fields0   s*     ZZ((//0DE ZZs   2;c                 p    | j                   5  t        | j                        cd d d        S # 1 sw Y   y xY wr   )r   dictr   r    s    r   all_field_typesz!SharedConfigCache.all_field_types6   s!    ZZ445 ZZs   ,5	blueprintc                     t        |j                        }| j                  5  |j                  | _        |j
                  | _        || _        t        j                         | _
        d d d        y # 1 sw Y   y xY wr   )r+   _valuesr   idr   namer   r   time	monotonicr   )r    r.   
new_valuess      r   r(   zSharedConfigCache.update;   sQ    )++,
ZZ )D%.^^D"$DK#~~/D	 ZZs   AA..A7c                     | j                   5  t        | j                  j                               cd d d        S # 1 sw Y   y xY wr   )r   setr   keysr,   s    r   
value_keyszSharedConfigCache.value_keysC   s(    ZZt{{'')* ZZs	   #:Ac                     | j                   5  | j                  
	 d d d        yt        j                         | j                  z
  | j                  k\  cd d d        S # 1 sw Y   y xY w)NT)r   r   r3   r4   r   r,   s    r   is_stalezSharedConfigCache.is_staleG   sK    ZZ' Z NN$t'7'77D<M<MM ZZs   A-AA$c                     | j                   5  | j                  }d d d        y 	  |       }|| j                  |       y y # 1 sw Y   )xY w# t        $ r t        j                  dd       Y y w xY w)NzBackground cache refresh failedT)exc_info)r   r   r(   	Exceptionloggerdebug)r    r#   bps      r   try_background_refreshz(SharedConfigCache.try_background_refreshM   so    ZZ--H 	KB~B  Z  	KLL:TLJ	Ks   AA A A10A1r   N)__name__
__module____qualname__r   r   r!   typingCallableOptionalr   r%   DictstrAnyr)   propertyr-   r(   Setr9   boolr;   rB    r"   r   r   r      s    *= 
C 
$ 
2FOOI,F(FG2	2F$*KKVZZ$@F	F 6S&**_!= 6 60	 0d 0+FJJsO +N$ N
Kr"   r   c                        e Zd Z	 d	dej                  g ej
                  e   f   dej                  e   ddf fdZ	d
dZ
d
dZd
dZ xZS )CacheRefreshThreadN
get_cachesinterval_secondsr   c                 v    t         |   dd       || _        t        j                         | _        || _        y )NTOpikCacheRefresh)daemonr2   )superr!   _get_cachesr   Event_stop_event	_interval)r    rS   rT   	__class__s      r   r!   zCacheRefreshThread.__init__[   s6    
 	+=>%$??,)r"   c                 $   | j                   j                         sv| j                          | j                  xs t	        t                     }| j                   j                  t        |t                     | j                   j                         suy y r   )	r[   is_set_refresh_all_staler\   floatr   waitmax_MIN_REFRESH_INTERVAL_SECONDS)r    intervals     r   runzCacheRefreshThread.rune   sg    ""))+##%~~B/?/A)BH!!#h0M"NO ""))+r"   c                     | j                         D ]?  }| j                  j                         r y |j                         s0|j	                          A y r   )rY   r[   r_   r;   rB   )r    caches     r   r`   z%CacheRefreshThread._refresh_all_stalek   s@    %%'E&&(~~,,.	 (r"   c                 8    | j                   j                          y r   )r[   r7   r,   s    r   closezCacheRefreshThread.closer   s    r"   r   rC   )rD   rE   rF   rG   rH   Listr   rI   ra   r!   rf   r`   rj   __classcell__)r]   s   @r   rR   rR   Z   sZ     48*OOB4E(F$FG* !//%0* 
	*P/r"   rR   c                   x    e Zd ZddZdedej                  e   dej                  e   defdZddZ	dd	Z
dd
Zy)SharedCacheRegistryr   Nc                     t        j                         | _        i | _        d | _        t        j
                         | _        y r   )r   r   r   _caches_threadLock_thread_lockr,   s    r   r!   zSharedCacheRegistry.__init__w   s-    __&
BD<@%NN,r"   project_nameenvmask_idc                     |||f}| j                   5  || j                  vr!t        t                     | j                  |<   | j                  |   cd d d        S # 1 sw Y   y xY w)N)r   )r   rp   r   r   )r    rt   ru   rv   keys        r   r
   zSharedCacheRegistry.get}   sP     'W5ZZ$,,&$5BRBT$US!<<$ ZZs   >AA#c                     | j                          | j                  5  | j                  j                          d d d        y # 1 sw Y   y xY wr   )stop_refresh_threadr   rp   clearr,   s    r   r{   zSharedCacheRegistry.clear   s/      "ZZLL  ZZs   AA
c                 B     j                   5   j                  $ j                  j                         r
	 d d d        y t         fd       _         j                  j	                          t        j                   j                         d d d        y # 1 sw Y   y xY w)Nc                  J    t         j                  j                               S r   )listrp   r   r,   s   r   <lambda>zCSharedCacheRegistry.ensure_refresh_thread_started.<locals>.<lambda>   s    4(;(;(=#>r"   )rS   )rs   rq   is_aliverR   startatexitregisterrz   r,   s   `r   ensure_refresh_thread_startedz1SharedCacheRegistry.ensure_refresh_thread_started   sq    ||'DLL,A,A,C  .>DL LL OOD445 s   (BABBc                 \   | j                   5  | j                  [| j                  }|j                          	 |j                  d       |j	                         rt
        j                  d       d | _        d d d        y # t        $ r t
        j                  d       Y 0w xY w# 1 sw Y   y xY w)N   )timeoutz5Cache refresh thread did not stop within the timeout.z@Unexpected error while waiting for cache refresh thread to stop.)	rs   rq   rj   joinr   r?   errorr>   	exception)r    threads     r   rz   z'SharedCacheRegistry.stop_refresh_thread   s    ||'	KKK*(S  $  ! $$Z s.   )B"7A>.B">BB"BB""B+rC   )rD   rE   rF   r!   rK   rG   rI   r   r
   r{   r   rz   rP   r"   r   rn   rn   v   sS    -
%
% __S!
% %	
%
 

%!
6$r"   rn   c                      t         S r   )	_registryrP   r"   r   get_global_registryr      s    r"   rt   ru   rv   c                 0    t         j                  | ||      S r   )r   r
   )rt   ru   rv   s      r   get_cached_configr      s    
 ==sG44r"   r&   agent_config_managerr.   c                    t         j                  |       j                  |       |j                  |       IFdt        j
                  t           ffd}j                  |       t         j                          y y y )Nr   c                  @     j                  j                        S )N)ru   rv   field_types)get_blueprintr-   )r   ru   rv   shared_caches   r   _refreshz"init_cache_entry.<locals>._refresh   s*    '55(88 6  r"   )	r   r
   r)   r(   rG   rI   r   r%   r   )rt   ru   rv   r&   r   r.   r   r   s    `` `  @r   init_cache_entryr      s     ==sG<L  !56I&'GO	&//)4 	 	 	))(3//1 -<'r"   r   )r   loggingr   r   r3   rG   r.   r   	getLoggerrD   r?   r   rd   TuplerK   rI   	_CacheKeyr   r   r   ThreadrR   rn   r   r   r   rJ   rL   r   rP   r"   r   <module>r      sc     	     			8	$  # LLfooc2FOOC4HHI	# ;K ;K|)) 81$ 1$h  !	0 55		5 __S!5 	5 -122		2 __S!2 !++c6::o6	2
 !**2 y)2 
2r"   