§
    �’jÛ  ã                  óH   — d dl mZ d dlZd dlZddlmZ  G d„ d¦  «        ZdS )é    )ÚannotationsNé   )ÚWebSocketQueueFullErrorc                  óL   — e Zd ZdZddd„Zdd
„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dS )Ú	SendQueuezèBounded byte-size queue for outgoing WebSocket messages.

    Messages are stored as pre-serialized strings. The queue enforces a
    maximum byte budget so that unbounded buffering cannot occur during
    reconnection windows.
    é   Ú	max_bytesÚintÚreturnÚNonec                ó`   — g | _         d| _        || _        t          j        ¦   «         | _        d S ©Nr   )Ú_queueÚ_bytesÚ
_max_bytesÚ	threadingÚLockÚ_lock)Úselfr	   s     ú@C:\Projects\DSCons\.venv\Lib\site-packages\openai\_send_queue.pyÚ__init__zSendQueue.__init__   s*   € Ø-/ˆŒØˆŒØ#ˆŒÝ”^Ñ%Ô%ˆŒ
ˆ
ˆ
ó    ÚdataÚstrc                ó&  — t          |                     d¦  «        ¦  «        }| j        5  | j        |z   | j        k    rt          d¦  «        ‚| j                             ||f¦  «         | xj        |z  c_        ddd¦  «         dS # 1 swxY w Y   dS )zŽAppend *data* to the queue.

        Raises :class:`WebSocketQueueFullError` if the message would
        exceed the byte-size limit.
        zutf-8z%send queue is full, message discardedN)ÚlenÚencoder   r   r   r   r   Úappend)r   r   Úbyte_lengths      r   ÚenqueuezSendQueue.enqueue   s×   € õ ˜$Ÿ+š+ gÑ.Ô.Ñ/Ô/ˆØŒZð 	'ð 	'ØŒ{˜[Ñ(¨4¬?Ò:Ð:Ý-Ð.UÑVÔVÐVØŒK×Ò  kÐ2Ñ3Ô3Ð3ØˆKŒK˜;Ñ&ˆKŒKð		'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	'ð 	's   ªABÂB
ÂB
Úsendútyping.Callable[[str], object]c                óÈ  — | j         5  t          | j        ¦  «        }| j                             ¦   «          d| _        ddd¦  «         n# 1 swxY w Y   t          |¦  «        D ]~\  }\  }}	  ||¦  «         Œ# t          $ r] | j         5  ||d…         }|| j        z   | _        t          d„ | j        D ¦   «         ¦  «        | _        ddd¦  «         n# 1 swxY w Y   ‚ w xY wdS )z«Send every queued message via *send*.

        If *send* raises, the failing message and all subsequent messages
        are re-queued and the error is re-raised.
        r   Nc              3  ó    K  — | ]	\  }}|V — Œ
d S ©N© ©Ú.0Ú_Úbls      r   ú	<genexpr>z'SendQueue.flush_sync.<locals>.<genexpr>6   ó&   è è € Ð%BÐ%B©U¨Q° bÐ%BÐ%BÐ%BÐ%BÐ%BÐ%Br   ©r   Úlistr   Úclearr   Ú	enumerateÚ	ExceptionÚsum©r   r!   ÚpendingÚir   Ú_byte_lengthÚ	remainings          r   Ú
flush_synczSendQueue.flush_sync$   s•  € ð ŒZð 	ð 	Ý˜4œ;Ñ'Ô'ˆGØŒK×ÒÑÔÐØˆDŒKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ
 (1°Ñ'9Ô'9ð 	ð 	Ñ#ˆAÑ#��lðØ��T‘
”
�
�
øÝð ð ð Ø”Zð Cð CØ '¨¨¨¤�IØ"+¨d¬kÑ"9�D”KÝ"%Ð%BÐ%B°d´kÐ%BÑ%BÔ%BÑ"BÔ"B�D”KðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð ðøøøð	ð 	sA   ˆ5A	Á	AÁAÁ,A8Á8CÂ	=CÃCÃCÃCÃCÃCú0typing.Callable[[str], typing.Awaitable[object]]c              ƒ  óØ  K  — | j         5  t          | j        ¦  «        }| j                             ¦   «          d| _        ddd¦  «         n# 1 swxY w Y   t          |¦  «        D ]„\  }\  }}	  ||¦  «        ƒ d{V —† Œ# t          $ r] | j         5  ||d…         }|| j        z   | _        t          d„ | j        D ¦   «         ¦  «        | _        ddd¦  «         n# 1 swxY w Y   ‚ w xY wdS )z$Async variant of :meth:`flush_sync`.r   Nc              3  ó    K  — | ]	\  }}|V — Œ
d S r%   r&   r'   s      r   r+   z(SendQueue.flush_async.<locals>.<genexpr>G   r,   r   r-   r3   s          r   Úflush_asynczSendQueue.flush_async9   s«  è è € àŒZð 	ð 	Ý˜4œ;Ñ'Ô'ˆGØŒK×ÒÑÔÐØˆDŒKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ
 (1°Ñ'9Ô'9ð 	ð 	Ñ#ˆAÑ#��lðØ�d˜4‘j”jÐ Ð Ð Ð Ð Ð Ð Ð øÝð ð ð Ø”Zð Cð CØ '¨¨¨¤�IØ"+¨d¬kÑ"9�D”KÝ"%Ð%BÐ%B°d´kÐ%BÑ%BÔ%BÑ"BÔ"B�D”KðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð ðøøøð	ð 	sA   Š5AÁAÁAÁ.B Â C'Â=CÃC'ÃCÃC'Ã!CÃ"C'ú	list[str]c                óª   — | j         5  d„ | j        D ¦   «         }| j                             ¦   «          d| _        |cddd¦  «         S # 1 swxY w Y   dS )z&Remove and return all queued messages.c                ó   — g | ]\  }}|‘ŒS r&   r&   )r(   r   r)   s      r   ú
<listcomp>z#SendQueue.drain.<locals>.<listcomp>M   s   € Ð5Ð5Ð5™g˜d A�TÐ5Ð5Ð5r   r   N)r   r   r/   r   )r   Úitemss     r   ÚdrainzSendQueue.drainJ   s¡   € àŒZð 	ð 	Ø5Ð5¨¬Ð5Ñ5Ô5ˆEØŒK×ÒÑÔÐØˆDŒKØð		ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ˆ3AÁAÁAc                ól   — | j         5  t          | j        ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S r%   ©r   r   r   ©r   s    r   Ú__len__zSendQueue.__len__R   s{   € ØŒZð 	$ð 	$Ý�t”{Ñ#Ô#ð	$ð 	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð 	$ð 	$s   ˆ)©-°-Úboolc                ót   — | j         5  t          | j        ¦  «        dk    cd d d ¦  «         S # 1 swxY w Y   d S r   rD   rE   s    r   Ú__bool__zSendQueue.__bool__V   s€   € ØŒZð 	(ð 	(Ý�t”{Ñ#Ô# aÒ'ð	(ð 	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð 	(ð 	(s   ˆ-­1´1N)r   )r	   r
   r   r   )r   r   r   r   )r!   r"   r   r   )r!   r9   r   r   )r   r=   )r   r
   )r   rG   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r8   r<   rB   rF   rI   r&   r   r   r   r   	   s¯   € € € € € ðð ð&ð &ð &ð &ð &ð'ð 'ð 'ð 'ðð ð ð ð*ð ð ð ð"ð ð ð ð$ð $ð $ð $ð(ð (ð (ð (ð (ð (r   r   )Ú
__future__r   Útypingr   Ú_exceptionsr   r   r&   r   r   ú<module>rQ      sz   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð à 0Ð 0Ð 0Ð 0Ð 0Ð 0ðO(ð O(ð O(ð O(ð O(ñ O(ô O(ð O(ð O(ð O(r   