Ë
    @²XjÚ  ã                  ó@   — d dl mZ d dlZd dlZddlmZ  G d„ d«      Zy)é    )ÚannotationsNé   )ÚWebSocketQueueFullErrorc                  óJ   — 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
y	)Ú	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.
    c                ó`   — g | _         d| _        || _        t        j                  «       | _        y ©Nr   )Ú_queueÚ_bytesÚ
_max_bytesÚ	threadingÚLockÚ_lock)ÚselfÚ	max_bytess     úX/var/www/html/content_generation/venv/lib/python3.12/site-packages/openai/_send_queue.pyÚ__init__zSendQueue.__init__   s%   € Ø-/ˆŒØˆŒØ#ˆŒÜ—^‘^Ó%ˆ�
ó    c                ó,  — t        |j                  d«      «      }| j                  5  | j                  |z   | j                  kD  rt        d«      ‚| j                  j                  ||f«       | xj                  |z  c_        ddd«       y# 1 sw Y   yxY w)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   ÚdataÚbyte_lengths      r   ÚenqueuezSendQueue.enqueue   sn   € ô ˜$Ÿ+™+ gÓ.Ó/ˆØ�Z‹ZØ�{‰{˜[Ñ(¨4¯?©?Ò:Ü-Ð.UÓVÐVØ�K‰K×Ñ  kÐ2Ô3Ø�KŠK˜;Ñ&�K÷	 �Z‰Zús   §AB
Â
Bc                óÂ  — | j                   5  t        | j                  «      }| j                  j                  «        d| _        ddd«       t        «      D ]  \  }\  }}	  ||«       Œ y# 1 sw Y   Œ)xY w# t        $ r] | j                   5  ||d }|| j                  z   | _        t        d„ | j                  D «       «      | _        ddd«       ‚ # 1 sw Y   ‚ xY ww xY w)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  — | ]	  \  }}|–— Œ y ­w©N© ©Ú.0Ú_Úbls      r   Ú	<genexpr>z'SendQueue.flush_sync.<locals>.<genexpr>8   ó   è ø€ Ð%B±k©U¨Q°¤b±kùó   ‚©r   Úlistr
   Úclearr   Ú	enumerateÚ	ExceptionÚsum©r   ÚsendÚpendingÚir   Ú_byte_lengthÚ	remainings          r   Ú
flush_synczSendQueue.flush_sync&   sÁ   € ð �Z‹ZÜ˜4Ÿ;™;Ó'ˆGØ�K‰K×ÑÔØˆDŒK÷ ô
 (1°Ö'9Ñ#ˆAÑ#��lðÙ�T•
ñ (:÷ ˆZûô ò Ø—Z“ZØ '¨¨ �IØ"+¨d¯k©kÑ"9�D”KÜ"%Ñ%B°d·k²kÓ%BÓ"B�D”K÷  ð ÷	  ð úðús/   �7A,Á!A8Á,A5Á8CÂ;CÃ	CÃCÃCc              ƒ  óÞ  K  — | j                   5  t        | j                  «      }| j                  j                  «        d| _        ddd«       t        «      D ]  \  }\  }}	  ||«      ƒ d{  –—†  Œ y# 1 sw Y   Œ1xY w7 Œ# t        $ r] | j                   5  ||d }|| j                  z   | _        t        d„ | j                  D «       «      | _        ddd«       ‚ # 1 sw Y   ‚ xY ww xY w­w)z$Async variant of :meth:`flush_sync`.r   Nc              3  ó&   K  — | ]	  \  }}|–— Œ y ­wr   r   r    s      r   r$   z(SendQueue.flush_async.<locals>.<genexpr>I   r%   r&   r'   r-   s          r   Úflush_asynczSendQueue.flush_async;   sÌ   è ø€ à�Z‹ZÜ˜4Ÿ;™;Ó'ˆGØ�K‰K×ÑÔØˆDŒK÷ ô
 (1°Ö'9Ñ#ˆAÑ#��lðÙ˜4“j× Ñ ñ (:÷ ˆZúð !ùÜò Ø—Z“ZØ '¨¨ �IØ"+¨d¯k©kÑ"9�D”KÜ"%Ñ%B°d·k²kÓ%BÓ"B�D”K÷  ð ÷	  ð úðüs^   ‚C-�7A6ÁC-Á#BÁ.BÁ/BÁ3C-Á6A?Á;C-ÂBÂC*Â;CÃ	C*ÃC&Ã"C*Ã*C-c                óÔ   — | j                   5  | j                  D ��cg c]  \  }}|‘Œ	 }}}| j                  j                  «        d| _        |cddd«       S c c}}w # 1 sw Y   yxY w)z&Remove and return all queued messages.r   N)r   r
   r)   r   )r   r   r"   Úitemss       r   ÚdrainzSendQueue.drainL   sQ   € à�Z‹ZØ)-¯ªÔ5©™g˜d A’T¨ˆEÑ5Ø�K‰K×ÑÔØˆDŒKØ÷	 ‰ZùÛ5÷ ˆZús   �A�A©%AÁAÁA'c                óp   — | j                   5  t        | j                  «      cd d d «       S # 1 sw Y   y xY wr   ©r   r   r
   ©r   s    r   Ú__len__zSendQueue.__len__T   s   € Ø�Z‹ZÜ�t—{‘{Ó#÷ �ZŠZús   �,¬5c                óv   — | j                   5  t        | j                  «      dkD  cd d d «       S # 1 sw Y   y xY wr	   r;   r<   s    r   Ú__bool__zSendQueue.__bool__X   s$   € Ø�Z‹ZÜ�t—{‘{Ó# aÑ'÷ �ZŠZús   �/¯8N)i   )r   ÚintÚreturnÚNone)r   ÚstrrA   rB   )r.   ztyping.Callable[[str], object]rA   rB   )r.   z0typing.Callable[[str], typing.Awaitable[object]]rA   rB   )rA   z	list[str])rA   r@   )rA   Úbool)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r3   r6   r9   r=   r?   r   r   r   r   r      s*   „ ñô&ó'óó*ó"ó$ô(r   r   )Ú
__future__r   Útypingr   Ú_exceptionsr   r   r   r   r   Ú<module>rL      s   ðõ #ã Û å 0÷O(ò O(r   