
    zh=                       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Zd dl	Z	d dl
Z
d dlZd dlmZ d dlmZmZ d dlmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lm Z m!Z!m"Z"m#Z# d d
l$m%Z%m&Z&m'Z' erd dl(m)Z)  ejT                  d      Z+ ejX                   e       dz        Z-ej\                   G d d             Z/	 d	 	 	 	 	 	 	 ddZ0	 d	 	 	 	 	 	 	 ddZ1	 	 	 	 	 	 	 	 	 	 ddZ2ddZ3	 	 	 	 ddZ4d dZ5	 d!	 	 	 	 	 d"dZ6	 	 	 	 	 	 d#dZ7y)$    )annotationsN)	cpu_count)EmptyQueue)TYPE_CHECKINGListOptionalTupleUnioncast)schemas)utils)CompressedRuns)_AUTO_SCALE_DOWN_NEMPTY_TRIGGER_AUTO_SCALE_UP_NTHREADS_LIMIT_AUTO_SCALE_UP_QSIZE_TRIGGER	_BOUNDARY)SerializedFeedbackOperationSerializedRunOperation#combine_serialized_queue_operations)Clientzlangsmith.client   )max_workersc                  N    e Zd ZU dZded<   ded<   dZ	 	 	 	 	 	 ddZddZdd	Zy
)TracingQueueItemzAn item in the tracing queue.

    Attributes:
        priority (str): The priority of the item.
        action (str): The action associated with the item.
        item (Any): The item itself.
    strpriority:Union[SerializedRunOperation, SerializedFeedbackOperation]itemr   r   c                     || _         || _        y Nr    )selfr   r   s      `/var/www/html/engine/venv/lib/python3.12/site-packages/langsmith/_internal/_background_thread.py__init__zTracingQueueItem.__init__<   s    
 !	    c                    | j                   | j                  j                  f|j                   |j                  j                  fk  S r"   )r   r   	__class__r#   others     r$   __lt__zTracingQueueItem.__lt__D   s;    tyy223NNJJ  7
 
 	
r&   c                    t        |t              xrE | j                  | j                  j                  f|j                  |j                  j                  fk(  S r"   )
isinstancer   r   r   r(   r)   s     r$   __eq__zTracingQueueItem.__eq__J   sM    %!12 4MMII8
 nnejj22384 	4r&   N)r   r   r   r   returnNone)r*   r   r/   bool)r*   objectr/   r1   )	__name__
__module____qualname____doc____annotations__	__slots__r%   r+   r.    r&   r$   r   r   -   sE     M
DD$I I 
	
4r&   r   c                   g }	 | j                  |d      x}r|j                  |       | j                  |d      x}r:|j                  |       |rt        |      |k\  r	 |S | j                  |d      x}r:|S # t        $ r Y |S w xY w)Ng      ?)blocktimeout皙?)getappendlenr   )tracing_queuelimitr;   
next_batchr   s        r$   _tracing_thread_drain_queuerD   Q   s     *,J !$$5$$??4?d##''eT'BBdBd#ZE1  $''eT'BBdB   s   AA; #A; ;	BBc                *   | j                   y| j                   j                  5  | j                   j                  j                          | j                   j                  j                         }| j                   j                  }||dk  rt        d|       ||dk  rt        d|       |||k  r%|| j                   j                  |k  r
	 d d d        y| j                   j                  j                  dt         dj                                | j                   j                  j                          | j                   j                  }||f}| j                   j                          d d d        j                  d       |fS # 1 sw Y   xY w)N)NNr   z!size_limit must be positive; got z*size_limit_bytes must be nonnegative; got z--z--
)compressed_runslockcompressor_writerflushbuffertelluncompressed_size
ValueError	run_countwriter   encodecloseresetseek)client
size_limitsize_limit_bytescurrent_sizepre_compressed_sizefilled_buffercompressed_runs_infos          r$   '_tracing_thread_drain_compressed_bufferr[   f   s    %				$	$ '00668--4499;$44FF!jAo@MNN',<q,@<=M<NO  $7G(G&"8"8"B"BZ"O!' '& 	0066I;f7M7T7T7VW00668..55 3\B$$&5'8 q/00;' 's   B,F	BF		Fc                   	 t        |D cg c]  }|j                   c}      }|r| j                  |       nmt        d |D              r5t        j                  d       |D cg c]  }t        |t              r| }}| j                  t        t        t           |             |D ]  }|j                           y c c}w c c}w # t        $ r t        j                  dd       Y Dw xY w# |D ]  }|j                           w xY w)Nc              3  <   K   | ]  }t        |t                y wr"   )r-   r   ).0ops     r$   	<genexpr>z/_tracing_thread_handle_batch.<locals>.<genexpr>   s     M2:b"=>Ms   z;Feedback operations are not supported in non-multipart modezError in tracing queueTexc_info)r   r   _multipart_ingest_opsanyloggerwarnr-   r   _batch_ingest_run_opsr   r   r   	Exceptionerror	task_done)rT   rA   batchuse_multipartr   opsr_   _s           r$   _tracing_thread_handle_batchro      s    &12O4992OP((-MMMQ "%Jr;V,WB  ((d3I.JC)PQ  	&A##%	&' 3P
  -= 		  	&A##%	&sF   	C B>AC $C:C>(C >
C  C+(C. *C++C. .Dc                     t        j                  d      } | 	 t        |       S y # t        $ r t        j                  d|  d       Y y w xY w)NBATCH_INGEST_SIZE_LIMITz+Invalid value for BATCH_INGEST_SIZE_LIMIT: z, continuing with default)ls_utilsget_env_varintrM   re   warning)size_limit_strs    r$   get_size_limit_from_envrw      sg    ))!N !	~&&   	NN=n=M N* * 	s   
% "A
	A
c                    t        j                  dd dt        t        t              }| s|S 	 | j
                  s|S t               }||| j
                  d<   | j
                  S # t        $ r |cY S w xY w)NFd   )use_multipart_endpointrV   rU   scale_up_nthreads_limitscale_up_qsize_triggerscale_down_nempty_triggerrU   )
ls_schemasBatchIngestConfigr   r   r   batch_ingest_configrw   BaseException)infodefault_configenv_size_limits      r$   _ensure_ingest_configr      s      11$ =;"AN ''!!02%5CD$$\2''' s   A" &A" "A0/A0c                p    |        y j                   }|J t        j                        }|d   }|d   }|d   }|j                  dd      }t	        j
                  d      }t	        j                  |      s|rj                  j                  xs i j                  dd      st        j                  d       ntt               _        t               _        t        j                         _        t        j"                  t$        t'        j(                        f	      j+                          g d
dfd} |       rD ]$  }	|	j-                         rj/                  |	       & t1              |k  rd|j3                         |kD  rQt        j"                  t4        t'        j(                        |f	      }
j7                  |
       |
j+                          t9        ||      x}rt;        |||        |       rt9        ||d      x}r t;        |||       t9        ||d      x}ry y )NrU   r{   r|   rz   FDISABLE_RUN_COMPRESSIONzstd_compression_enabledz~Run compression is not enabled. Please update to the latest version of LangSmith. Falling back to regular multipart ingestion.)targetargsr   c                      rt         d      r j                  ryt        j                         j	                         syt        t
        d      r$t        j                         t              z   kD  S y)N_manual_cleanupFgetrefcountT)hasattrr   	threadingmain_threadis_alivesysr   r@   )rT   num_known_refssub_threadss   r$   keep_thread_activez7tracing_control_thread_func.<locals>.keep_thread_active   sc    F-.63I3I$$&//13& ??6*^c+>N-NNN r&   rB   rB   r;   r/   r1   )rA   r   r   r>   rr   rs   	is_truishinstance_flagsre   ru   set_futuresr   rF   r   Event_data_available_eventThread-tracing_control_thread_func_compress_parallelweakrefrefstartr   remover@   qsize_tracing_sub_thread_funcr?   rD   ro   )
client_refrA   r   rU   r{   r|   rl   disable_compressionr   thread
new_threadrC   rT   r   r   s               @@@r$   tracing_control_thread_funcr      s)   \F~((M$$$/<),7J#67P#Q"56N"O'++,DeLM"../HI12}**0b55&
 NNU
 "eFO%3%5F"+4??+<F(Dkk&)+ eg*,KN( 
! 	+F??$""6*	+ 66##%(>>"))/kk&)=9J z*4]*UU:U(z= 
( 4Zu *  	%V]JV 4Zu * r&   c                    |        y j                   j                  j                  t        j	                  d       y t        j                        }|d   }|j                  dd      }ddfd}t        j                         }	 j                  j                  d	      } |       sn|r~j                  j                          t        ||      \  }}	|=	 t        j                  j                  ||	      }
j                  j!                  |
       t        j                         }nwt        j                         |z
  |k\  r]t        d
d
      \  }}	|6	 t%        j                  t        j                  j                  ||	      g       t        j                         }	 t        d
d
      \  }}	|7	 t%        j                  t        j                  j                  ||	      g       y y # t"        $ r j                  ||	       Y w xY w# t"        $ r j                  ||	       Y w xY w# t"        $ r j                  ||	       Y y w xY w# t&        $ r t        j	                  dd       Y y w xY w)Nz/Required compression attributes not initializedrU   rV     @r   c                    rt        d      rj                  ryt        j                         j	                         syt        t
        d      r=t        j                  } t        d | D              }t        j                        |z   kD  S y)Nr   Fr   c              3  H   K   | ]  }||j                         sd  y w)N   )r   )r^   r   s     r$   r`   z\tracing_control_thread_func_compress_parallel.<locals>.keep_thread_active.<locals>.<genexpr>C  s#      v/AfooFWs   """T)
r   r   r   r   r   r   HTTP_REQUEST_THREAD_POOL_threadssumr   )thread_poolactive_countrT   r   s     r$   r   zItracing_control_thread_func_compress_parallel.<locals>.keep_thread_active4  s    F-.63I3I$$&//13&
 3;;K  + L ??6*^l-JJJ r&   Tr=   )r<   r   )rU   rV   zError in final cleanupra   r   )rF   r   r   re   ri   r   r   r>   time	monotonicwaitclearr[   r   submit_send_compressed_multipart_reqaddRuntimeErrorcfrh   )r   flush_intervalr   rU   rV   r   last_flush_time	triggereddata_streamrZ   futurefinal_data_streamrT   r   s               @@r$   r   r      s    \F~ 	&''/??"FG/<),7J*../A:NN2 nn&O
0055d5C	!# ((..00W
$41-K- &5<<==#,F
 OO''/ #nn.O  ?2~E;1q 21
 * 8 ? ?$*$I$I$/$8!" #'.."2g l>31q 	0/
 (077"AA-0 )O $ 99#,2 ( =='02   55%(  >-=>sT   $<G: #5H /I 5H< :HHH98H9<II II  J ?J c                T    |        }|y 	 |j                   sy 	 |j                  }|J t        |j                         }|j                  dd      }d}t        j                         j                         rX||d   k  rPt        ||      x}rd}t        ||||       n|dz  }t        j                         j                         r	||d   k  rPt        ||d	      x}r t        ||||       t        ||d	      x}ry y # t        $ r }t        j                  d|       Y d }~y d }~ww xY w)
Nz#Error in tracing control thread: %srU   ry   r   r}   r   r   Fr   )r   r   re   debugrA   r   r>   r   r   r   rD   ro   )	r   rl   rT   erA   r   rU   seen_successive_empty_queuesrC   s	            r$   r   r     s]    \F~{{ 
 ((M$$$/<$((s;J#$ 
 	((*(:;< 5]*UU:U+,((z= )A-( 	((*(:;< 4Zu *  	%V]JV 4Zu * 5  :A>s   C> >	D'D""D')ry   T)rA   r   rB   rt   r;   r1   r/   List[TracingQueueItem])ry   r   )rT   r   rU   rt   rV   z
int | Noner/   z6Tuple[Optional[io.BytesIO], Optional[Tuple[int, int]]])
rT   r   rA   r   rk   r   rl   r1   r/   r0   )r/   zOptional[int])r   zls_schemas.LangSmithInfor/   zls_schemas.BatchIngestConfig)r   weakref.ref[Client]r/   r0   )g      ?)r   r   r   floatr/   r0   )r   r   rl   r1   r/   r0   )8
__future__r   concurrent.futuresfuturesr   	functoolsiologgingr   r   r   r   multiprocessingr   queuer   r   typingr   r   r	   r
   r   r   	langsmithr   r~   r   rr   $langsmith._internal._compressed_runsr   langsmith._internal._constantsr   r   r   r   langsmith._internal._operationsr   r   r   langsmith.clientr   	getLoggerre   ThreadPoolExecutorr   total_orderingr   rD   r[   ro   rw   r   r   r   r   r9   r&   r$   <module>r      s   "   	  
    %   , ' ?   '			-	.0200Y[1_M   4  4  4H ;?!$37, KU"1"1 #"1=G"1;"1J&&& "& 	&
 
&<
"!0MWb >A}>#}>5:}>	}>@'W#'W'W 
'Wr&   