o
    Zh+                     @  s  d dl m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	 d dl
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 d d
lmZ eeZG dd dZG dd dZ d0ddZ!d1ddZ"d2ddZ#d3d d!Z$d4d#d$Z%d5d)d*Z&d6d.d/Z'dS )7    )annotationsN)Iterable)BufferedReader)LiteralOptionalUnioncast)schemas)_orjson)CompressedTraces)MultipartPartMultipartPartsAndContext)
dumps_jsonc                   @  sp   e Zd ZU ded< ded< ded< ded< ded	< ded
< ded< ded< dZ				ddddZdddZdS )SerializedRunOperationLiteral['post', 'patch']	operation	uuid.UUIDidtrace_idbytes_noneOptional[bytes]inputsoutputsevents Optional[ls_schemas.Attachments]attachmentsr   r   r   r   r   r   r   r   NreturnNonec	           	      C  s4   || _ || _|| _|| _|| _|| _|| _|| _d S Nr   )	selfr   r   r   r   r   r   r   r    r"   V/var/www/html/lang_env/lib/python3.10/site-packages/langsmith/_internal/_operations.py__init__-   s   
zSerializedRunOperation.__init__otherobjectboolc              	   C  sR   t |to(| j| j| j| j| j| j| j| j	f|j|j|j|j|j|j|j|j	fkS r    )

isinstancer   r   r   r   r   r   r   r   r   r!   r%   r"   r"   r#   __eq__A   s(   

zSerializedRunOperation.__eq__)NNNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r&   r   r'   __name__
__module____qualname____annotations__	__slots__r$   r*   r"   r"   r"   r#   r      s    
 r   c                   @  s>   e Zd ZU ded< ded< ded< dZdd	d
ZdddZdS )SerializedFeedbackOperationr   r   r   r   feedbackr   r   r3   r   r   c                 C  s   || _ || _|| _d S r    r4   )r!   r   r   r3   r"   r"   r#   r$   ^   s   
z$SerializedFeedbackOperation.__init__r%   r&   r'   c                 C  s*   t |to| j| j| jf|j|j|jfkS r    )r(   r2   r   r   r3   r)   r"   r"   r#   r*   c   s   
z"SerializedFeedbackOperation.__eq__N)r   r   r   r   r3   r   r   r   r+   r,   r"   r"   r"   r#   r2   W   s   
 
r2   r3   &Union[ls_schemas.FeedbackCreate, dict]r   c                 C  s   t | drtt| dr|  }ntt| }d|vr!t |d< nt|d tr1t	|d |d< d|vr<t |d< nt|d trLt	|d |d< t
|d |d t|dS )Ndictr   r   r4   )hasattrcallablegetattrr6   r   uuiduuid4r(   strUUIDr2   _dumps_json)r3   Zfeedback_creater"   r"   r#   serialize_feedback_dictk   s    

r?   r   r   payloadr6   c              
   C  s   | dd }| dd }| dd }| dd }t| |d |d t||d ur+t|nd |d ur4t|nd |d ur=t|nd |d urF|dS d dS )Nr   r   r   r   r   r   r   )popr   r>   )r   r@   r   r   r   r   r"   r"   r#   serialize_run_dict   s    
rB   ops@list[Union[SerializedRunOperation, SerializedFeedbackOperation]]c                 C  s"  dd | D }g }| D ]{}t |tr|jdkrq||j}|d u r(|| q|jd urQ|j|jkrQt|j}dd t|j	 D }|
| t||_|jd urZ|j|_|jd urc|j|_|jd url|j|_|jd ur|jd u ryi |_|j
|j q|| qtt| |S )Nc                 S  s(   i | ]}t |tr|jd kr|j|qS )post)r(   r   r   r   ).0opr"   r"   r#   
<dictcomp>   s    
z7combine_serialized_queue_operations.<locals>.<dictcomp>rE   c                 S  s   i | ]\}}|d ur||qS r    r"   rF   kvr"   r"   r#   rH      s    )r(   r   r   getr   appendr   r
   loadsitemsupdatedumpsr   r   r   r   list	itertoolschainvalues)rC   Zcreate_ops_by_idZpassthrough_opsrG   Z	create_opZcreate_op_dictZop_dictr"   r"   r#   #combine_serialized_queue_operations   sB   








rV   rG   r   c              	   C  s@   t d| j d | jddtt| jiffgd| j d| j S )Nz	feedback.application/jsonContent-Lengthtrace=,id=)r   r   r3   r<   lenr   )rG   r"   r"   r#   <serialized_feedback_operation_to_multipart_parts_and_context   s   
r\   :tuple[MultipartPartsAndContext, dict[str, BufferedReader]]c                 C  s  g }i }| | j d| j d | jddtt| jiff d| jfd| jfd| jffD ]&\}}|d u r5q,|}| | j d| j d| d |ddtt|iff q,| j	r| j	
 D ]d\}\}}d|v rstd| d| j d	 q[t|tr| d
| j d| d ||dtt|iff q[tj|}	t|d}
|
|t|tt  < | d
| j d| d |
| d|	 i ff q[t|d| j d| j |fS )N.rW   rX   r   r   r   z Skipping logging of attachment 'z
' for run zx: Invalid attachment name.  Attachment names must not contain periods ('.'). Please rename the attachment and try again.zattachment.rbz	; length=rY   rZ   )rM   r   r   r   r<   r[   r   r   r   r   rO   loggerwarningr(   r   ospathgetsizeopenr:   r;   r   r   )rG   Z	acc_partsZopened_files_dictkeyvalueZvalbncontent_typeZdata_or_path	file_sizefiler"   r"   r#   7serialized_run_operation_to_multipart_parts_and_context   sz   

rl   parts_and_contextboundaryr<   4Iterable[tuple[bytes, Union[bytes, BufferedReader]]]c                 c  s    | j D ]>\}\}}}}d| dd| dg}|r#|d| d |d| dgdd | D d d	| |fV  qd S )
Nz--
z&Content-Disposition: form-data; name=""z; filename="z
Content-Type: c                 S  s    g | ]\}}| d | dqS )z: rp   r"   rI   r"   r"   r#   
<listcomp>8  s     z6encode_multipart_parts_and_context.<locals>.<listcomp> )partsrM   extendrO   joinencode)rm   rn   Z	part_namefilenamedatari   headersheader_partsr"   r"   r#   "encode_multipart_parts_and_context(  s"   


r|   compressed_tracesr   r   c                 C  s   t | |D ]F\}}|j| t|ttfr&| jt|7  _|j| nt|tr0|	 }nt
| }| jt|7  _|j| |jd q|j| j d S )Ns   
)r|   Zcompressor_writerwriter(   r   	bytearrayuncompressed_sizer[   r   readr<   rw   _contextrM   context)rm   r}   rn   rz   ry   Zencoded_datar"   r"   r#   $compress_multipart_parts_and_context@  s   

r   )r3   r5   r   r2   )r   r   r@   r6   r   r   )rC   rD   r   rD   )rG   r2   r   r   )rG   r   r   r]   )rm   r   rn   r<   r   ro   )rm   r   r}   r   rn   r<   r   r   )(
__future__r   rS   loggingrb   r:   collections.abcr   ior   typingr   r   r   r   Z	langsmithr	   Z
ls_schemasZlangsmith._internalr
   Z&langsmith._internal._compressed_tracesr   Zlangsmith._internal._multipartr   r   Zlangsmith._internal._serder   r>   	getLoggerr-   r`   r   r2   r?   rB   rV   r\   rl   r|   r   r"   r"   r"   r#   <module>   s.    
C



0

P