§
    ÜŽ’j ã                  óú  — U d dl mZ d dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZmZ d dlmZmZ d dl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#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddgZ: ej;        d¦  «        Z<de=d<   dZ>dZ?de=d<   	 d•d#„Z@ G d$„ d¦  «        ZA ed%d¬&¦  «        ZBd'e=d(<    ed)d*¬&¦  «        ZCd+e=d,<    G d-„ de*¦  «        ZD G d.„ d/e¦  «        ZE G d0„ d1e¦  «        ZF G d2„ d3e¦  «        ZG G d4„ d5e¦  «        ZH G d6„ d7¦  «        ZId–d<„ZJd—d>„ZK G d?„ d@¦  «        ZLd˜dD„ZMd™dH„ZN G dI„ dJ¦  «        ZOdšdQ„ZPd›dT„ZQdœdV„ZRd�dZ„ZSdžd^„ZTdžd_„ZUdŸdc„ZVd dg„ZWd¡di„ZXd¢dk„ZYd£dn„ZZd¤dq„Z[d¥dt„Z\d¦dw„Z]d§dy„Z^d¨d|„Z_d©d}„Z`d©d~„Zadªd‚„Zbd«d…„Zcd¬d‡„Zdd­d‹„Zed®d�„Zfd¯d�„Zg G d‘„ d’ejh        ¦  «        Zi G d“„ d”ejj        ¦  «        ZkdS )°é    )ÚannotationsN)ÚAnyÚDictÚListÚCallableÚIterableÚIteratorÚOptionalÚ	GeneratorÚAsyncIteratorÚAsyncGeneratorÚcast)ÚTokenÚ
ContextVar)ÚLiteralÚoverrideé   )Úis_dict)Ú	BaseModel)Ú
APIRequest)ÚAPIResponseÚAsyncAPIResponse)ÚStreamÚAsyncStreamÚServerSentEvent)ÚAnthropicError)ÚCallNextÚ
MiddlewareÚAsyncCallNext)Úmerge_headers)ÚMessageé   )Úhelper_header)ÚBetaMessage)ÚAnthropicBetaParam)ÚBetaFallbackParam)ÚBetaFallbackCreditTokenParamÚBetaFallbackStateÚBetaRefusalFallbackMiddlewarezanthropic.lib.middlewarezlogging.LoggerÚlogz/v1/messages)zfallback-credit-2026-07-01útuple[AnthropicBetaParam, ...]ÚDEFAULT_BETASÚtokenÚstrÚreturnr'   c                ó   — | ddœS )uÇ   The retry's `fallback_credit_token`, in the object form.

    `best_effort` keeps the retry serving even when redemption fails â€” a bare
    string would 400 the hop on any token-layer failure.
    Úbest_effort)r-   Úmode© )r-   s    úQC:\Projects\DSCons\.venv\Lib\site-packages\anthropic\lib\middleware\_fallbacks.pyÚ_credit_token_paramr5   5   s   € ð  MÐ2Ð2Ð2ó    c                  ó8   — e Zd ZU dZded<   	 dd„Zdd„Zdd
„ZdS )r(   u{  Tracks which fallback a sequence of requests is pinned to.

    Create one and enter it (`with state:` â€” the same context manager works for
    both clients) around every request that should share the pin â€” the turns of
    one conversation, or any wider scope the stickiness should apply to;
    `BetaRefusalFallbackMiddleware` mutates it in place when a model refuses.
    z
int | NoneÚindexr/   ÚNonec                ó   — d | _         d S ©N)r8   ©Úselfs    r4   Ú__init__zBetaFallbackState.__init__N   s   € ØˆŒ
ˆ
ˆ
r6   c                ó¦   — t                                | ¦  «        }t                               g t                               ¦   «         ¢|‘R ¦  «         | S r;   )Ú_fallback_stateÚsetÚ_fallback_state_tokensÚget)r=   r-   s     r4   Ú	__enter__zBetaFallbackState.__enter__Q   sI   € Ý×#Ò# DÑ)Ô)ˆÝ×"Ò"Ð#IÕ%;×%?Ò%?Ñ%AÔ%AÐ#IÀ5Ð#IÐ#IÑJÔJÐJØˆr6   Úexc_infoÚobjectc                ó¼   — t                                ¦   «         }t                                |d d…         ¦  «         t                               |d         ¦  «         d S )Néÿÿÿÿ)rB   rC   rA   r@   Úreset)r=   rE   Útokenss      r4   Ú__exit__zBetaFallbackState.__exit__V   sM   € Ý'×+Ò+Ñ-Ô-ˆÝ×"Ò" 6¨#¨2¨#¤;Ñ/Ô/Ð/Ý×Ò˜f RœjÑ)Ô)Ð)Ð)Ð)r6   N©r/   r9   )r/   r(   )rE   rF   r/   r9   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r>   rD   rK   r3   r6   r4   r(   r(   >   so   € € € € € € ðð ð ÐÐÑððð ð ð ðð ð ð ð
*ð *ð *ð *ð *ð *r6   Úanthropic_beta_fallback_state)Údefaultz$ContextVar[BetaFallbackState | None]r@   Ú$anthropic_beta_fallback_state_tokensr3   z7ContextVar[tuple[Token[BetaFallbackState | None], ...]]rB   c                  óˆ   — e Zd ZdZddœd)d
„Zed*d„¦   «         Zed+d„¦   «         Zd,d„Zd-d„Z	d.d„Z
d/d#„Zd0d$„Zd1d&„Zd2d(„ZdS )3r)   uƒ  Middleware that retries refused beta `/v1/messages` requests down a
    fallback chain, reproducing the server-side `fallbacks` wire shape
    client-side.

    Only `client.beta.messages` requests are handled â€” refusals minted by the
    first-party `client.messages` surface carry no `fallback_credit_token`, so
    those requests pass through untouched.

    Each `fallbacks` entry is a patch against the ORIGINAL request params: a
    field set to a value overrides it, a field explicitly `None` unsets it, an
    absent field keeps the original value; `output_config` patches its
    subfields the same way one level deep. Hops never compound â€” every hop
    patches the original params, never the previous hop's patched request.

    Non-streaming: when a response comes back with `stop_reason: "refusal"`, the
    request is retried with each entry of `fallbacks` applied as a patch to the
    original params â€” passing along the refusal's `fallback_credit_token` (in
    the object form, with `mode: "best_effort"`) when it minted one â€” until a
    model accepts or the chain is exhausted. A `fallback` seam
    block per model boundary is prepended to the served message's content â€”
    the same block shape the streaming splice emits. The served hop's `usage`
    is left verbatim (streaming rewrites it to per-hop `usage.iterations`).

    Streaming: when the stream ends in `stop_reason: "refusal"`, a second
    request is issued to the fallback model. It carries the refusal's
    `fallback_credit_token`, plus the refused model's partial output as a
    trailing assistant prefill when the refusal grants one
    (`fallback_has_prefill_claim`). The fallback's events are then spliced onto
    the still-open stream, so the client sees one continuous message in the
    server-side `fallbacks` wire shape: a `fallback` content block at each
    model boundary, monotonic block indices, and per-hop `usage.iterations` on
    the final `message_delta`. A refusal before any output streamed retries
    even without a credit token, and the serving hop's `message_start` opens
    the wire carrying the primary's message id.

    The fallback-credit beta the credit tokens require is sent by default on
    every request the middleware handles; the `betas` option controls this.

    In both modes a fallback that itself refuses with a fresh credit token
    continues down the chain. A streaming fallback whose appended prefill the
    server rejects (HTTP 400 body mismatch) is retried once without it; a
    fallback whose request fails outright is skipped â€” its token was never
    redeemed, so it carries to the next entry. When every remaining entry fails
    over HTTP, the suppressed refusal is replayed to the client with
    `recommended_model` stamped from the final failure (the failed model for
    capacity errors, `null` otherwise). A refusal surfaced to the client rather
    than retried is reported through the `anthropic.lib.middleware` logger.

    To keep later requests on the model that accepted, run them inside a shared
    `BetaFallbackState` context; requests sharing that state start directly at
    the pinned fallback. Reuse one state across whatever scope the pin should
    apply to â€” typically a conversation. The state is the only pin: `fallback`
    seam blocks replayed in the request history are stripped from the outgoing
    request (an assistant turn left empty by the strip is dropped whole), never
    read back as a pin.

    ```py
    client = Anthropic(middleware=[BetaRefusalFallbackMiddleware([{"model": "claude-opus-4-8"}])])

    state = BetaFallbackState()
    with state:
        message = client.beta.messages.create(**params)
    ```
    N)ÚbetasÚ	fallbacksúIterable[BetaFallbackParam]rV   ú#Iterable[AnthropicBetaParam] | Noner/   r9   c               óv   — t          |¦  «        | _        |€t          nt          |¦  «        | _        d| _        dS )ué  
        Args:
            fallbacks: The fallback chain, tried in order. An empty chain disables
                the middleware.

            betas: Betas added to the `anthropic-beta` header of every `/v1/messages`
                request this middleware handles â€” the original request included, since
                refusals only carry a `fallback_credit_token` when the beta is enabled.
                Defaults to `("fallback-credit-2026-07-01",)`; pass `()` to send none.
        NF)ÚtupleÚ
_fallbacksr,   Ú_betasÚ_warned_missing_state)r=   rW   rV   s      r4   r>   z&BetaRefusalFallbackMiddleware.__init__ª   s6   € õ    	Ñ*Ô*ˆŒØ', }•m�m½%À¹,¼,ˆŒØ%*ˆÔ"Ð"Ð"r6   Úrequestr   Ú	call_nextr   úAPIResponse[Any]c           	     ó  — |                       |¦  «        }|€ ||¦  «        S t                               ¦   «         }|                      |¦  «        }|                      |¦  «        }t          || j        ¦  «        }t          |¦  «        }|dk    r|nt          || j	        |         ¦  «        }| 
                    |¬¦  «        } ||¦  «        }	|	j        j        s|	S |j        r]|dz   }
|
t          | j	        ¦  «        k    r|	S |                      ||t!          |                     d¦  «        pd¦  «        |	||
|¬¦  «        S |}|	}t!          |                     d¦  «        pd¦  «        }g }|t          | j	        ¦  «        dz
  k     �r*|j        j        �r|                     ¦   «         }t%          |t&          t(          f¦  «        r|j        dk    rná|dz  } ||¦  «         t-          |¦  «        }t/          |¦  «        } || 
                    t1          || j	        |         |¦  «        ¬¦  «        ¦  «        }|j        j        rFt!          | j	        |         d         ¦  «        }|                     t5          |||¦  «        ¦  «         |}|t          | j	        ¦  «        dz
  k     r|j        j        �°|rW|j        j        rK|                     ¦   «         }t%          |t&          t(          f¦  «        r|j        dk    rt7          ||¦  «        S |S ©NrH   ©Úbodyé   ÚmodelÚ ©r_   re   Úinitial_modelÚresponser`   Ú	first_hopÚpinÚrefusal)Ú_applicable_bodyr@   rC   Ú_start_indexÚ	_make_pinÚ_with_middleware_headersr]   Ú_strip_seam_blocksÚ
_apply_hopr\   ÚcopyÚhttp_responseÚ
is_successÚstreamÚlenÚ_splice_fallback_streamr.   ÚparseÚ
isinstancer!   r$   Ústop_reasonÚ_credit_tokenÚ_refusal_categoryÚ_merged_bodyÚappendÚ_seam_blockÚ_prepend_seam_blocks©r=   r_   r`   re   ÚstateÚstart_indexrm   Úinitial_bodyÚinitial_requestrk   rl   r8   ÚresÚ
from_modelÚseamsÚmessager-   ÚcategoryÚto_modelÚserveds                       r4   Úhandlez$BetaRefusalFallbackMiddleware.handle¾   s  € à×$Ò$ WÑ-Ô-ˆØˆ<Ø�9˜WÑ%Ô%Ð%å×#Ò#Ñ%Ô%ˆØ×'Ò'¨Ñ.Ô.ˆØ�nŠn˜UÑ#Ô#ˆõ +¨7°D´KÑ@Ô@ˆõ
 " $Ñ'Ô'ˆØ*¨bÒ0Ð0�t�tµjÀÀtÄÐWbÔGcÑ6dÔ6dˆØ!Ÿ,š,¨L˜,Ñ9Ô9ˆà�9˜_Ñ-Ô-ˆØÔ%Ô0ð 	ØˆOàŒ>ð 	Ø# a™ˆIð �C ¤Ñ0Ô0Ò0Ð0Ø�Ø×/Ò/Ø'ØÝ! ,×"2Ò"2°7Ñ";Ô";Ð"A¸rÑBÔBØ!Ø#Ø#Øð 0ñ ô ð ð ˆØˆÝ˜×)Ò)¨'Ñ2Ô2Ð8°bÑ9Ô9ˆ
Ø&(ˆØ•c˜$œ/Ñ*Ô*¨QÑ.Ò.Ñ.°3Ô3DÔ3OÑ.Ø—i’i‘k”kˆGÝ˜g­µÐ'=Ñ>Ô>ð À'ÔBUÐYbÒBbÐBbØà�Q‰JˆEØˆC�‰JŒJˆJÝ! 'Ñ*Ô*ˆEÝ(¨Ñ1Ô1ˆHØ�)˜GŸLšL­l¸4ÀÄÐQVÔAWÐY^Ñ._Ô._˜LÑ`Ô`ÑaÔaˆCØÔ Ô+ð &Ý˜tœ¨uÔ5°gÔ>Ñ?Ô?�Ø—’�[¨°X¸xÑHÔHÑIÔIÐIØ%�
ð •c˜$œ/Ñ*Ô*¨QÑ.Ò.Ð.°3Ô3DÔ3OÑ.ð ð 	8�SÔ&Ô1ð 	8Ø—Y’Y‘[”[ˆFÝ˜&¥7­KÐ"8Ñ9Ô9ð 8¸fÔ>PÐT]Ò>]Ð>]õ ,¨C°Ñ7Ô7Ð7Øˆ
r6   r   úAsyncAPIResponse[Any]c           	   ƒ  óV  K  — |                       |¦  «        }|€ ||¦  «        ƒ d {V —†S t                               ¦   «         }|                      |¦  «        }|                      |¦  «        }t          || j        ¦  «        }t          |¦  «        }|dk    r|nt          || j	        |         ¦  «        }| 
                    |¬¦  «        } ||¦  «        ƒ d {V —†}	|	j        j        s|	S |j        r]|dz   }
|
t          | j	        ¦  «        k    r|	S |                      ||t!          |                     d¦  «        pd¦  «        |	||
|¬¦  «        S |}|	}t!          |                     d¦  «        pd¦  «        }g }|t          | j	        ¦  «        dz
  k     �r6|j        j        �r)|                     ¦   «         ƒ d {V —†}t%          |t&          t(          f¦  «        r|j        dk    rnç|dz  } ||¦  «         t-          |¦  «        }t/          |¦  «        } || 
                    t1          || j	        |         |¦  «        ¬¦  «        ¦  «        ƒ d {V —†}|j        j        rFt!          | j	        |         d         ¦  «        }|                     t5          |||¦  «        ¦  «         |}|t          | j	        ¦  «        dz
  k     r|j        j        �°)|r]|j        j        rQ|                     ¦   «         ƒ d {V —†}t%          |t&          t(          f¦  «        r|j        dk    rt7          ||¦  «        S |S rc   )ro   r@   rC   rp   rq   rr   r]   rs   rt   r\   ru   rv   rw   rx   ry   Ú_splice_fallback_stream_asyncr.   r{   r|   r!   r$   r}   r~   r   r€   r�   r‚   Ú_prepend_seam_blocks_asyncr„   s                       r4   Úhandle_asyncz*BetaRefusalFallbackMiddleware.handle_async  ss  è è € à×$Ò$ WÑ-Ô-ˆØˆ<Ø"˜ 7Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+å×#Ò#Ñ%Ô%ˆØ×'Ò'¨Ñ.Ô.ˆØ�nŠn˜UÑ#Ô#ˆõ +¨7°D´KÑ@Ô@ˆõ
 " $Ñ'Ô'ˆØ*¨bÒ0Ð0�t�tµjÀÀtÄÐWbÔGcÑ6dÔ6dˆØ!Ÿ,š,¨L˜,Ñ9Ô9ˆà"˜ ?Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3ˆØÔ%Ô0ð 	ØˆOàŒ>ð 	Ø# a™ˆIð �C ¤Ñ0Ô0Ò0Ð0Ø�Ø×5Ò5Ø'ØÝ! ,×"2Ò"2°7Ñ";Ô";Ð"A¸rÑBÔBØ!Ø#Ø#Øð 6ñ ô ð ð ˆØˆÝ˜×)Ò)¨'Ñ2Ô2Ð8°bÑ9Ô9ˆ
Ø&(ˆØ•c˜$œ/Ñ*Ô*¨QÑ.Ò.Ñ.°3Ô3DÔ3OÑ.ØŸIšI™KœKÐ'Ð'Ð'Ð'Ð'Ð'ˆGÝ˜g­µÐ'=Ñ>Ô>ð À'ÔBUÐYbÒBbÐBbØà�Q‰JˆEØˆC�‰JŒJˆJÝ! 'Ñ*Ô*ˆEÝ(¨Ñ1Ô1ˆHØ!˜	 '§,¢,µLÀÀtÄÐW\ÔG]Ð_dÑ4eÔ4e ,Ñ"fÔ"fÑgÔgÐgÐgÐgÐgÐgÐgˆCØÔ Ô+ð &Ý˜tœ¨uÔ5°gÔ>Ñ?Ô?�Ø—’�[¨°X¸xÑHÔHÑIÔIÐIØ%�
ð •c˜$œ/Ñ*Ô*¨QÑ.Ò.Ð.°3Ô3DÔ3OÑ.ð ð 	>�SÔ&Ô1ð 	>ØŸ9š9™;œ;Ð&Ð&Ð&Ð&Ð&Ð&ˆFÝ˜&¥7­KÐ"8Ñ9Ô9ð >¸fÔ>PÐT]Ò>]Ð>]õ 2°#°uÑ=Ô=Ð=Øˆ
r6   údict[str, Any] | Nonec                óT  — t          |j        ¦  «        }t          j        |j        ¦  «        }| j        rM|j                             ¦   «         dk    s0|j        t          k    s |j
                             d¦  «        dk    s|€dS |                     d¦  «        �t          d¦  «        ‚|S )zMThe request's JSON body when this middleware applies to it, `None` otherwise.ÚpostÚbetaÚtrueNrW   az  Sending the `fallbacks:` request param is not supported when using the `BetaRefusalFallbackMiddleware`. You should either remove the middleware and send `fallbacks:` with the `server-side-fallback-2026-07-01` beta header to let the API handle refusal fallbacks, or omit the `fallbacks:` param if you'd like `BetaRefusalFallbackMiddleware` to handle fallbacks on the client side.)Ú_as_dictÚjsonÚhttpxÚURLÚurlr\   ÚmethodÚlowerÚpathÚ_MESSAGES_PATHÚparamsrC   r   )r=   r_   re   rŸ   s       r4   ro   z.BetaRefusalFallbackMiddleware._applicable_bodyH  s©   € å˜œÑ%Ô%ˆÝŒi˜œÑ$Ô$ˆð ”ð	ð Œ~×#Ò#Ñ%Ô%¨Ò/Ð/ØŒx�>Ò)Ð)ØŒz�~Š~˜fÑ%Ô%¨Ò/Ð/Øˆ|à�4Ø�8Š8�KÑ Ô Ð,Ý ð0ñô ð ð ˆr6   r…   úBetaFallbackState | NoneÚintc                ó¼   — |�|j         €dS |j         }d|cxk    rt          | j        ¦  «        k     s*n t          d|› dt          | j        ¦  «        › d�¦  «        ‚|S )zÍThe chain entry this request starts at (-1 = the original params).

        Only an explicit `BetaFallbackState` pin moves the start; without one
        the request starts at the original params.
        NrH   zBetaFallbackState.index z! is out of bounds for a chain of z? fallback(s); was the state shared with a different middleware?)r8   ry   r\   r   )r=   r…   r†   s      r4   rp   z*BetaRefusalFallbackMiddleware._start_indexb  s’   € ð ˆ=˜EœKÐ/Ø�2Ø”kˆØ�[Ð7Ð7Ò7Ð7¥3 t¤Ñ#7Ô#7Ò7Ð7Ð7Ð7Ý ði¨;ð ið iÝ�t”Ñ'Ô'ðið ið iñô ð ð Ðr6   úCallable[[int], None]c                ó   ‡ ‡— dˆ ˆfd„}|S )zUPin requests sharing the state to the entry being tried (or warn that there is none).r8   r¦   r/   r9   c                ór   •— ‰�	| ‰_         d S ‰j        s#d‰_        t                               d¦  «         d S d S )NTzôanthropic-sdk: BetaRefusalFallbackMiddleware fell back without an active BetaFallbackState; follow-up requests will retry models that already refused. Run them inside a shared `with BetaFallbackState():` block to pin them to the accepted model.)r8   r^   r*   Úwarning)r8   r=   r…   s    €€r4   rm   z4BetaRefusalFallbackMiddleware._make_pin.<locals>.pinu  sV   ø€ ØÐ Ø#�”��ØÔ/ð Ø-1�Ô*Ý—’ð&ñô ð ð ð ðð r6   )r8   r¦   r/   r9   r3   )r=   r…   rm   s   `` r4   rq   z'BetaRefusalFallbackMiddleware._make_pinr  s.   øø€ ð
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð ˆ
r6   re   údict[str, Any]rj   r.   rk   rl   rm   c          	     óØ   — |                       |||||||¬¦  «        }t          t          |j        t	          |¦  «        ¦  «        |j        |j        d|j        |j        |j	        ¬¦  «        S )u9  Wrap the refusable stream in a response whose body passes events through
        until a retryable refusal, then splices the fallback chain's events on.

        `body` is the original request params â€” every hop patches it, never the
        previous hop's patched body; `initial_model` is the model the initial
        request actually queried (the pinned entry's when a state pin applied).

        Closing the returned response (or the `Stream` parsed from it) tears down
        whichever stream is being read and abandons any in-flight fallback request.
        ri   T©ÚrawÚcast_toÚclientrx   Ú
stream_clsÚoptionsÚretries_taken)
Ú_spliced_framesr   Ú_spliced_http_responserv   Ú_FrameByteStreamÚ_cast_toÚ_clientÚ_stream_clsÚ_optionsr´   ©	r=   r_   re   rj   rk   r`   rl   rm   Úframess	            r4   rz   z5BetaRefusalFallbackMiddleware._splice_fallback_streamƒ  s‡   € ð* ×%Ò%ØØØ'ØØØØð &ñ 
ô 
ˆõ Ý& xÔ'=Õ?OÐPVÑ?WÔ?WÑXÔXØÔ%ØÔ#ØØÔ+ØÔ%Ø"Ô0ð
ñ 
ô 
ð 	
r6   c          	     óØ   — |                       |||||||¬¦  «        }t          t          |j        t	          |¦  «        ¦  «        |j        |j        d|j        |j        |j	        ¬¦  «        S )Nri   Tr®   )
Ú_spliced_frames_asyncr   r¶   rv   Ú_AsyncFrameByteStreamr¸   r¹   rº   r»   r´   r¼   s	            r4   r“   z;BetaRefusalFallbackMiddleware._splice_fallback_stream_async«  s‡   € ð ×+Ò+ØØØ'ØØØØð ,ñ 
ô 
ˆõ  Ý& xÔ'=Õ?TÐU[Ñ?\Ô?\Ñ]Ô]ØÔ%ØÔ#ØØÔ+ØÔ%Ø"Ô0ð
ñ 
ô 
ð 	
r6   úGenerator[bytes, None, None]c          
   #  ó”  K  — | j         }|j        }		 |j        }
t          ddd dd g ¬¦  «        }t          |
|¦  «        E d {V —†}|j        €	 |	�|	                     ¦   «          d S d S |
                     ¦   «          d }	t                               |||¦  «        }t          |t          |¦  «        ¦  «        D �]Ü}||         }t          |d         ¦  «        }|dz   t          |¦  «        k     } ||¦  «         |                     ¦   «         }d }d }t          d¦  «        D �]K}|                     |                     ||¦  «        ¬¦  «        }	  ||¦  «        }nE# t          $ r8}t                               d	||¦  «         t#          |d ¬
¦  «        }Y d }~ nÖd }~ww xY w|j        j        r	|j        }	 n¹t'          |j        ¦  «        }|j                             ¦   «          |dk    r@|j        dk    r5|r3t                               dt-          |¦  «        ¦  «         |j        }d }�Œt                               d||j        t-          |¦  «        ¦  «         t#          ||j        ¬
¦  «        } |�;|r�Œ»|                     |¦  «        D ]}|V — Œ |	�|	                     ¦   «          d S d S |€J ‚|j        }|                     |¦  «         t          |j        |t7          |j        |¬¦  «        |j        |j        |                     ¦   «         ¬¦  «        }t          ||¦  «        E d {V —†}|j         r| !                    ¦   «          |j        € |	�|	                     ¦   «          d S d S |                     ¦   «          d }	| "                    |||¦  «         �ŒÞ	 |	�|	                     ¦   «          d S d S # |	�|	                     ¦   «          w w xY w©Nr   TF)Ú
index_baseÚhas_nextÚspliceÚ	wire_openÚ
primary_idÚseam_framesrg   rf   r"   rd   zOanthropic-sdk: BetaRefusalFallbackMiddleware: fallback request to %s failed: %s)rg   Ústatusi�  z�anthropic-sdk: BetaRefusalFallbackMiddleware: fallback request with the partial output appended was rejected (HTTP 400: %s); retrying without itzXanthropic-sdk: BetaRefusalFallbackMiddleware: fallback request to %s failed: HTTP %s: %s)Ú
iterationsrg   )#r\   rv   Ú
_HopReaderÚ
_drive_hopÚrefusedÚcloseÚ_ChainStateÚbeginÚrangery   r.   Úcontinuationru   Úhop_bodyÚ	Exceptionr*   ÚerrorÚ_HopFailurerw   Ú
_read_jsonÚstatus_coder«   Ú_json_dumpsÚbaseÚterminal_failure_framesÚ
queue_seamÚ
next_indexÚ_SpliceInforË   rÇ   rÈ   Úpending_seam_framesÚopenedÚmark_openedÚabsorb_refusal)r=   r_   re   rj   rk   r`   rl   rm   rW   ÚcurrentÚstream_aÚreaderÚoutcomeÚchainÚhopÚentryrg   rÅ   rÓ   Úres_bÚfailureÚattemptÚhop_requestÚerrÚerr_bodyÚframeÚhop_responses                              r4   rµ   z-BetaRefusalFallbackMiddleware._spliced_frameså  s‰  è è € ð ”Oˆ	à)1Ô)?ˆðk	 àÔ-ˆHÝØàØØØØðñ ô ˆFõ ",¨H°fÑ!=Ô!=Ð=Ð=Ð=Ð=Ð=Ð=ˆGØŒÐ&Øðx Ð"Ø—’‘”���ð #Ð"ðw �NŠNÑÔÐØˆGõ  ×%Ò% d¨M¸7ÑCÔCˆEå˜Y­¨I©¬Ñ7Ô7ð SCñ SC�Ø! #œ�Ý˜E 'œNÑ+Ô+�Ø ™7¥S¨¡^¤^Ò3�Ø��C‘”�ð  %×1Ò1Ñ3Ô3�Ø15�Ø.2�Ý$ Q™xœxð !ñ !�GØ")§,¢,°E·N²NÀ5È,Ñ4WÔ4W ,Ñ"XÔ"X�Kð	Ø ) 	¨+Ñ 6Ô 6˜˜øÝ$ð ð ð ÝŸ	š	ØmØ!Øñô ð õ
 #.°EÀ$Ð"GÑ"GÔ"G˜Ø˜˜˜˜˜øøøøðøøøð Ô*Ô5ð Ø"'Ô"5˜Ø˜Ý)¨%Ô*=Ñ>Ô>�HØÔ'×-Ò-Ñ/Ô/Ð/Ø !’|�|¨Ô(9¸SÒ(@Ð(@À\Ð(@ÝŸšðgå'¨Ñ1Ô1ñô ð ð
 (-¤z˜Ø $˜Ù Ý—I’IØrØØÔ)Ý# HÑ-Ô-ñ	ô ð õ *°¸eÔ>OÐPÑPÔP�GØàÐ&àð !Ù ð "'×!>Ò!>¸wÑ!GÔ!Gð $ð $˜Ø#˜˜˜˜Øð6 Ð"Ø—’‘”���ð #Ð"ð1 Ð(Ð(Ð(Ø$Ô2�Ø× Ò  Ñ'Ô'Ð'Ý#Ø$Ô/Ø%Ý&°%Ô2BÈ%ÐPÑPÔPØ#œoØ$Ô/Ø %× 9Ò 9Ñ ;Ô ;ðñ ô �õ &0°¸fÑ%EÔ%EÐEÐEÐEÐEÐEÐE�Ø”>ð (Ø×%Ò%Ñ'Ô'Ð'Ø”?Ð*Øð Ð"Ø—’‘”���ð #Ð"ð ×"Ò"Ñ$Ô$Ð$Ø�ð
 ×$Ò$ W¨e°\ÑBÔBÐBÑBðgSCðj Ð"Ø—’‘”���ð #Ð"øˆwÐ"Ø—’‘”��ð #øøøsJ   ’9N. Á&C$N. ÅEÅN. Å
FÅ!-FÆN. ÆFÆC4N. Ê'B#N. Í$/N. Î.OúAsyncGenerator[bytes, None]c          
    ó~  K  — | j         }|j        }		 |j        }
t          ddd dd g ¬¦  «        }t          |
|¦  «        2 3 d {V —†}|W V — Œ6 |                     ¦   «         }|j        €!	 |	�|	                     ¦   «         ƒ d {V —† d S d S |
                     ¦   «         ƒ d {V —† d }	t                               |||¦  «        }t          |t          |¦  «        ¦  «        D �]}||         }t          |d         ¦  «        }|dz   t          |¦  «        k     } ||¦  «         |                     ¦   «         }d }d }t          d¦  «        D �]]}|                     |                     ||¦  «        ¬¦  «        }	  ||¦  «        ƒ d {V —†}nE# t          $ r8}t                                d	||¦  «         t%          |d ¬
¦  «        }Y d }~ nâd }~ww xY w|j        j        r	|j        }	 nÅt)          |j        ¦  «        ƒ d {V —†}|j                             ¦   «         ƒ d {V —† |dk    r@|j        dk    r5|r3t                                dt/          |¦  «        ¦  «         |j        }d }�Œt                                d||j        t/          |¦  «        ¦  «         t%          ||j        ¬
¦  «        } |�B|r�ŒÍ|                     |¦  «        D ]}|W V — Œ |	�|	                     ¦   «         ƒ d {V —† d S d S |€J ‚|j        }|                     |¦  «         t          |j        |t9          |j        |¬¦  «        |j        |j        |                      ¦   «         ¬¦  «        }t          ||¦  «        2 3 d {V —†}|W V — Œ6 |                     ¦   «         }|j!        r| "                    ¦   «          |j        €! |	�|	                     ¦   «         ƒ d {V —† d S d S |                     ¦   «         ƒ d {V —† d }	| #                    |||¦  «         �Œ	 |	�|	                     ¦   «         ƒ d {V —† d S d S # |	�|	                     ¦   «         ƒ d {V —† w w xY wrÃ   )$r\   rv   rÌ   Ú_drive_hop_asyncÚfinishrÎ   ÚacloserÐ   rÑ   rÒ   ry   r.   rÓ   ru   rÔ   rÕ   r*   rÖ   r×   rw   Ú_read_json_asyncrÙ   r«   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rË   rÇ   rÈ   rà   rá   râ   rã   )r=   r_   re   rj   rk   r`   rl   rm   rW   rä   rå   ræ   rñ   rç   rè   ré   rê   rg   rÅ   rÓ   rë   rì   rí   rî   rï   rð   rò   s                              r4   r¿   z3BetaRefusalFallbackMiddleware._spliced_frames_asynca  s±  è è € ð ”Oˆ	à)1Ô)?ˆðb	'àÔ-ˆHÝØàØØØØðñ ô ˆFõ  0°¸&ÑAÔAð ð ð ð ð ð ð �eØ�����ð  Bà—m’m‘o”oˆGØŒÐ&Øðb Ð"Ø—n’nÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð #Ð"ða —/’/Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ØˆGå×%Ò% d¨M¸7ÑCÔCˆEå˜Y­¨I©¬Ñ7Ô7ð ICñ IC�Ø! #œ�Ý˜E 'œNÑ+Ô+�Ø ™7¥S¨¡^¤^Ò3�Ø��C‘”�à$×1Ò1Ñ3Ô3�Ø6:�Ø.2�Ý$ Q™xœxð !ñ !�GØ")§,¢,°E·N²NÀ5È,Ñ4WÔ4W ,Ñ"XÔ"X�Kð	Ø&/ i°Ñ&<Ô&<Ð <Ð <Ð <Ð <Ð <Ð <˜˜øÝ$ð ð ð ÝŸ	š	ØmØ!Øñô ð õ
 #.°EÀ$Ð"GÑ"GÔ"G˜Ø˜˜˜˜˜øøøøðøøøð Ô*Ô5ð Ø"'Ô"5˜Ø˜Ý%5°eÔ6IÑ%JÔ%JÐJÐJÐJÐJÐJÐJ�HØÔ-×4Ò4Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø !’|�|¨Ô(9¸SÒ(@Ð(@À\Ð(@ÝŸšðgå'¨Ñ1Ô1ñô ð ð
 (-¤z˜Ø $˜Ù Ý—I’IØrØØÔ)Ý# HÑ-Ô-ñ	ô ð õ *°¸eÔ>OÐPÑPÔP�GØàÐ&àð !Ù Ø!&×!>Ò!>¸wÑ!GÔ!Gð $ð $˜Ø#˜˜˜˜˜Øð2 Ð"Ø—n’nÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð #Ð"ð/ Ð(Ð(Ð(Ø$Ô2�Ø× Ò  Ñ'Ô'Ð'Ý#Ø$Ô/Ø%Ý&°%Ô2BÈ%ÐPÑPÔPØ#œoØ$Ô/Ø %× 9Ò 9Ñ ;Ô ;ðñ ô �õ $4°LÀ&Ñ#IÔ#Ið  ð  ð  ð  ð  ð  ð  ˜%Ø�K�K�K�K�Kð $Jà Ÿ-š-™/œ/�Ø”>ð (Ø×%Ò%Ñ'Ô'Ð'Ø”?Ð*Øð Ð"Ø—n’nÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð #Ð"ð #×)Ò)Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø�à×$Ò$ W¨e°\ÑBÔBÐBÑBðSICðV Ð"Ø—n’nÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð #Ð"øˆwÐ"Ø—n’nÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð #øøøsa   ’,P ¾AÁ#P ÂC*P Å3FÆP Æ
GÆ-GÆ<P ÇGÇDP Ë(A:P Í"M/Í(?P Ï5P ÐP<)rW   rX   rV   rY   r/   r9   )r_   r   r`   r   r/   ra   )r_   r   r`   r   r/   r‘   )r_   r   r/   r–   )r…   r¥   r/   r¦   )r…   r¥   r/   r¨   )r_   r   re   r¬   rj   r.   rk   ra   r`   r   rl   r¦   rm   r¨   r/   ra   )r_   r   re   r¬   rj   r.   rk   r‘   r`   r   rl   r¦   rm   r¨   r/   r‘   )r_   r   re   r¬   rj   r.   rk   ra   r`   r   rl   r¦   rm   r¨   r/   rÁ   )r_   r   re   r¬   rj   r.   rk   r‘   r`   r   rl   r¦   rm   r¨   r/   ró   )rM   rN   rO   rP   r>   r   r�   r•   ro   rp   rq   rz   r“   rµ   r¿   r3   r6   r4   r)   r)   h   s%  € € € € € ð?ð ?ðJ 6:ð	+ð +ð +ð +ð +ð +ð( ðBð Bð Bñ „XðBðH ðBð Bð Bñ „XðBðHð ð ð ð4ð ð ð ð ð ð ð ð"&
ð &
ð &
ð &
ðP
ð 
ð 
ð 
ðtz ð z ð z ð z ðxq'ð q'ð q'ð q'ð q'ð q'r6   c                  óF   — e Zd ZU ded<   	 ded<   	 ded<   ded<   ded<   d	S )
Ú_RefusalúOptional[str]r-   r�   ÚboolÚhas_prefill_claimúDict[str, Any]ÚusageÚeventN)rM   rN   rO   rQ   r3   r6   r4   rú   rú   Ø  sX   € € € € € € ØÐÐÑØSàÐÐÑØSàÐÐÑØÐÐÑØÐÐÑð(ð (r6   rú   c                  ó(   — e Zd ZU dZded<   ded<   dS )rß   z6Splice context for fallback hops; `None` for stream A.úList[Dict[str, Any]]rË   r.   rg   N©rM   rN   rO   rP   rQ   r3   r6   r4   rß   rß   æ  s+   € € € € € € Ø@Ð@à$Ð$Ð$Ñ$Ø€J€J�J€J€Jr6   rß   c                  ó(   — e Zd ZU dZded<   ded<   dS )r×   z[A fallback hop whose request failed; stamps `recommended_model` when it
    ends the chain.r.   rg   zOptional[int]rÊ   Nr  r3   r6   r4   r×   r×   í  s3   € € € € € € ðð ð €J€J�JØÐÐÑØRÐRr6   r×   c                  óf   — e Zd ZU dZded<   	 ded<   	 ded<   	 ded	<   	 d
ed<   	 ded<   	 ded<   dS )Ú_HopOutcomez*The outcome of consuming one hop's stream.zOptional[_Refusal]rÎ   rû   rg   zOptional[Dict[str, Any]]Ústart_eventr  Úblocksr¦   rÞ   rü   rá   Úlast_fallback_toNr  r3   r6   r4   r  r  ö  s|   € € € € € € Ø4Ð4àÐÐÑØEàÐÐÑØ:à)Ð)Ð)Ñ)Ø0à Ð Ð Ñ Ø\à€O€O�OØ^à€L€L�LØTà#Ð#Ð#Ñ#ð3ð 3r6   r  c                  ó`   — e Zd ZU dZded<   	 dd„Zedd„¦   «         Zdd„Zdd„Z	dd„Z
dd„ZdS ) rÌ   uÆ  Consumes one hop's SSE events, producing the frames to forward to the
    client while accumulating its content blocks.

    Events are held until the hop produces output (a content block or a
    terminal event), so a refusal that arrives before any output â€” a pre-stream
    decline â€” leaves no trace on the wire and chains silently. On open, stream
    A's held `message_start` is flushed in its original wire bytes; a spliced
    hop's is suppressed when the wire is already open, or emitted with its `id`
    rewritten to the primary's when this hop's start opens the wire. Queued
    seam frames for every hop reached so far are flushed right after.

    A spliced hop has its block indices shifted by `index_base` and its
    terminal message_delta's usage rewritten to the `usage.iterations` chain
    shape.

    A refusal that can be chained â€” an entry remains, and either a
    `fallback_credit_token` was minted or nothing has streamed yet â€” ends the
    hop early: open blocks are closed, the terminal message_delta +
    message_stop are suppressed, and the refusal is set on the outcome so the
    caller can issue the next hop. Any other refusal is logged and passes
    through to the client.
    z_HopOutcome | Nonerç   rÄ   r¦   rÅ   rü   rÆ   ú_SpliceInfo | NonerÇ   rÈ   ú
str | NonerÉ   úlist[bytes]r/   r9   c               óä   — t          |¦  «        | _        || _        || _        || _        || _        || _        d | _        d | _        d | _	        d | _
        g | _        d| _        d | _        d | _        d S )NF)Ú_BlockTrackerÚ_trackerÚ	_has_nextÚ_spliceÚ
_wire_openÚ_primary_idÚ_seam_framesÚ_modelÚ_start_usageÚ_start_eventÚ_held_startÚ_heldÚ_openedÚ_last_fallback_torç   )r=   rÄ   rÅ   rÆ   rÇ   rÈ   rÉ   s          r4   r>   z_HopReader.__init__+  sx   € õ & jÑ1Ô1ˆŒØ!ˆŒØˆŒØ#ˆŒØ%ˆÔØ'ˆÔØ"&ˆŒØ37ˆÔØ37ˆÔØ37ˆÔØ,.ˆŒ
ØˆŒØ-1ˆÔØˆŒˆˆr6   c                ó   — | j         S r;   )r  r<   s    r4   rá   z_HopReader.openedD  ó
   € àŒ|Ðr6   Ússer   c           	     ó�  — t          t          |j        ¦  «        ¦  «        }|�|                     d¦  «        nd}| j        }|dk    r�|�Žt          |                     d¦  «        ¦  «        }|�Z|                     d¦  «        }t          |t          ¦  «        r|nd| _        t          |                     d¦  «        ¦  «        | _        || _	        || _
        g S |dk    rí|�ë|                      ¦   «         }t          |                     d¦  «        ¦  «        }|�p|                     d¦  «        d	k    rWt          |                     d
¦  «        ¦  «        }	|	�|	                     d¦  «        nd}
t          |
t          ¦  «        r|
| _        | j                             |¦  «         |�g |¢t          d|¦  «        ‘ng |¢t!          |¦  «        ‘S |dk    rY|�W|                      ¦   «         }| j                             |¦  «         |�g |¢t          d|¦  «        ‘ng |¢t!          |¦  «        ‘S |dk    rY|�W|                      ¦   «         }| j                             |¦  «         |�g |¢t          d|¦  «        ‘ng |¢t!          |¦  «        ‘S |dk    �r|��t          |                     d¦  «        ¦  «        pi }|                     d¦  «        dk    �rêt          |                     d¦  «        ¦  «        }|�|                     d¦  «        dk    r|nd}|�|                     d¦  «        nd}t          |t          ¦  «        r|r|nd}| j         o| j                             ¦   «          }| j        �r|€|�rt-          t          |                     d¦  «        ¦  «        | j        ¦  «        }t/          | j                             ¦   «         ¦  «        }d| _
        | j                             ¦   «          t7          t9          ||�|                     d¦  «        nd|duo|                     d¦  «        du ||¬¦  «        | j        | j	        | j                             ¦   «         | j        j        | j        | j        ¬¦  «        | _        |S |st>                                d¦  «         nt>                                d¦  «         |                      ¦   «         }|�±|                     d¦  «        dk    r:t          |                     d¦  «        ¦  «        }|�| !                    dd¦  «         t          |                     d¦  «        ¦  «        pi }g |j"        ¢tG          ||j$        ¦  «        ‘|d<   ||d<   g |¢t          d|¦  «        ‘S g |¢t!          |¦  «        ‘S | j        s| j         %                    |¦  «         g S t!          |¦  «        gS )z:Process one event, returning the frames to forward for it.NÚtypeÚmessage_startrŒ   rg   rÿ   Úcontent_block_startÚcontent_blockÚfallbackÚtoÚcontent_block_deltaÚcontent_block_stopÚmessage_deltaÚdeltar}   rn   Ústop_detailsÚfallback_credit_tokenr�   Úfallback_has_prefill_claimT)r-   r�   rý   rÿ   r   ©rÎ   rg   r  r  rÞ   rá   r	  zvanthropic-sdk: BetaRefusalFallbackMiddleware: refusal stop_details has no fallback_credit_token; surfacing the refusalzkanthropic-sdk: BetaRefusalFallbackMiddleware: refusal but no fallback entries remain; surfacing the refusalÚrecommended_modelrË   )&r›   Ú
_safe_jsonÚdatarC   r  r|   r.   r  r  r  r  Ú_openr  r  ÚstartÚ_emitÚ_passthrough_sser*  Ústopr  Úcontent_blocksr  Ú	_backfillÚlistÚclose_open_blocksr  Úclearr  rú   rÞ   rç   r*   rÖ   Ú
setdefaultrË   Ú_serving_iteration_entryrg   r�   )r=   r  r   Ú
event_typerÆ   rŒ   rg   r½   r$  r&  rŽ   r*  r+  Údetailsr-   Ú
pre_streamrÿ   s                    r4   Úfeedz_HopReader.feedH  s  € å� C¤HÑ-Ô-Ñ.Ô.ˆØ*/Ð*;�U—Y’Y˜vÑ&Ô&Ð&Àˆ
Ø”ˆà˜Ò(Ð(¨UÐ->Ý˜uŸyšy¨Ñ3Ô3Ñ4Ô4ˆGØÐ"ØŸš GÑ,Ô,�Ý'1°%½Ñ'=Ô'=ÐG˜e˜eÀ4�”Ý$,¨W¯[ª[¸Ñ-AÔ-AÑ$BÔ$B�Ô!Ø %ˆDÔØ"ˆDÔØˆIØÐ0Ò0Ð0°UÐ5FØ—Z’Z‘\”\ˆFÝ$ U§Y¢Y¨Ñ%?Ô%?Ñ@Ô@ˆMØÐ(¨]×->Ò->¸vÑ-FÔ-FÈ*Ò-TÐ-TÝ˜m×/Ò/°Ñ5Ô5Ñ6Ô6�Ø.0¨n˜2Ÿ6š6 '™?œ?˜?À$�Ý˜h­Ñ,Ô,ð 6Ø-5�DÔ*ØŒM×Ò Ñ&Ô&Ð&ð Ð%ð ?�&Ð>�%Ð 5°uÑ=Ô=Ð>Ð>à5�vÐ5Õ/°Ñ4Ô4Ð5ðð
 Ð0Ò0Ð0°UÐ5FØ—Z’Z‘\”\ˆFØŒM×Ò Ñ&Ô&Ð&ð Ð%ð ?�&Ð>�%Ð 5°uÑ=Ô=Ð>Ð>à5�vÐ5Õ/°Ñ4Ô4Ð5ðð
 Ð/Ò/Ð/°EÐ4EØ—Z’Z‘\”\ˆFØŒM×Ò˜uÑ%Ô%Ð%ð Ð%ð >�&Ð=�%Ð 4°eÑ<Ô<Ð=Ð=à5�vÐ5Õ/°Ñ4Ô4Ð5ðð
 ˜?Ò*Ñ*¨uÑ/@Ý˜UŸYšY wÑ/Ô/Ñ0Ô0Ð6°BˆEØ�yŠy˜Ñ'Ô'¨9Ò4Ñ4Ý'¨¯	ª	°.Ñ(AÔ(AÑBÔB�Ø*6Ð*BÀ|×GWÒGWÐX^ÑG_ÔG_ÐclÒGlÐGl˜,˜,Ðrv�Ø@GÐ@S˜ŸšÐ$;Ñ<Ô<Ð<ÐY]�Ý!+¨Eµ3Ñ!7Ô!7ÐK¸EÐK˜˜Àt�Ø!%¤Ð-ÐT°d´m×6RÒ6RÑ6TÔ6TÐ2T�
ð ”>ñ " uÐ'8¸JÑ'8Ý%¥h¨u¯yªy¸Ñ/AÔ/AÑ&BÔ&BÀDÔDUÑVÔV�EÝ! $¤-×"AÒ"AÑ"CÔ"CÑDÔD�Fð (,�DÔ$Ø”J×$Ò$Ñ&Ô&Ð&Ý#.Ý (Ø"'Ø@GÐ@S W§[¢[°Ñ%<Ô%<Ð%<ÐY]Ø.5¸TÐ.AÐ.wÀgÇkÂkÐRnÑFoÔFoÐswÐFwØ"'Ø"'ð!ñ !ô !ð #œkØ$(Ô$5Ø#œ}×;Ò;Ñ=Ô=Ø#'¤=Ô#;Ø#œ|Ø)-Ô)?ð$ñ $ô $�D”Lð "�MØð 	Ý—I’IðGñô ð ð õ
 —I’Ið@ñô ð ð —Z’Z‘\”\ˆFØÐ!Ø—9’9˜]Ñ+Ô+¨yÒ8Ð8õ $,¨E¯IªI°nÑ,EÔ,EÑ#FÔ#F�LØ#Ð/Ø$×/Ò/Ð0CÀTÑJÔJÐJõ ! §¢¨7Ñ!3Ô!3Ñ4Ô4Ð:¸�ð'ØÔ&ð'å,¨U°F´LÑAÔAð'��lÑ#ð "'��g‘Ø?˜Ð?¥ ¸Ñ!>Ô!>Ð?Ð?Ø3�VÐ3Õ-¨cÑ2Ô2Ð3Ð3àŒ|ð 	àŒJ×Ò˜cÑ"Ô"Ð"ØˆIõ ! Ñ%Ô%Ð&Ð&r6   c                óP  — | j         rg S d| _         g }| j        €/| j        �'|                     t	          | j        ¦  «        ¦  «         n| j        sx| j        �qt          j        | j        ¦  «        }t          | 
                    d¦  «        ¦  «        }|�| j        �
| j        |d<   |                     t          d|¦  «        ¦  «         |                     | j        ¦  «         |                     d„ | j        D ¦   «         ¦  «         d| _        | j                             ¦   «          |S )z°Open the wire for this hop: its message_start (raw for stream A;
        suppressed or id-rewritten for a spliced hop), the queued seam frames,
        then anything else held.TNrŒ   Úidr"  c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r;   )r5  )Ú.0Úhelds     r4   ú	<genexpr>z#_HopReader._open.<locals>.<genexpr>Ô  s+   è è € ÐDÐD°Õ& tÑ,Ô,ÐDÐDÐDÐDÐDÐDr6   )r  r  r  r�   r5  r  r  Ú_copyÚdeepcopyr›   rC   r  r4  Úextendr  r  r;  )r=   r½   r  rŒ   s       r4   r2  z_HopReader._openÂ  s  € ð Œ<ð 	ØˆIØˆŒØ ˆØŒ<ÐØÔÐ+Ø—’Õ.¨tÔ/?Ñ@Ô@ÑAÔAÐAøØ”ð 	? TÔ%6Ð%BÝœ.¨Ô):Ñ;Ô;ˆKÝ˜{Ÿš¨yÑ9Ô9Ñ:Ô:ˆGØÐ" tÔ'7Ð'CØ $Ô 0�˜‘Ø�MŠM�% °Ñ=Ô=Ñ>Ô>Ð>Ø�Š�dÔ'Ñ(Ô(Ð(Ø�ŠÐDÐD¸¼ÐDÑDÔDÑDÔDÐDØˆÔØŒ
×ÒÑÔÐØˆr6   c                óJ   — | j         €| j        rg S |                      ¦   «         S )zCFrames still owed when the stream ends without a chainable refusal.)rç   r  r2  r<   s    r4   Úfinish_framesz_HopReader.finish_framesÙ  s$   € àŒ<Ð# t¤|Ð#ØˆIØ�zŠz‰|Œ|Ðr6   r  c           	     ó´   — | j         �| j         S t          d| j        | j        | j                             ¦   «         | j        j        | j        | j        ¬¦  «        S )zCThe outcome once the hop's stream is fully consumed (or cut early).Nr.  )	rç   r  r  r  r  r7  rÞ   r  r  r<   s    r4   rö   z_HopReader.finishß  s[   € àŒ<Ð#Ø”<ÐÝØØ”+ØÔ)Ø”=×/Ò/Ñ1Ô1Ø”}Ô/Ø”<Ø!Ô3ð
ñ 
ô 
ð 	
r6   N)rÄ   r¦   rÅ   rü   rÆ   r  rÇ   rü   rÈ   r  rÉ   r  r/   r9   )r/   rü   )r  r   r/   r  ©r/   r  )r/   r  )rM   rN   rO   rP   rQ   r>   Úpropertyrá   rA  r2  rL  rö   r3   r6   r4   rÌ   rÌ     sº   € € € € € € ðð ð.  ÐÐÑØUðð ð ð ð2 ðð ð ñ „Xððx'ð x'ð x'ð x'ðtð ð ð ð.ð ð ð ð
ð 
ð 
ð 
ð 
ð 
r6   rÌ   rk   úhttpx.Responseræ   ú#Generator[bytes, None, _HopOutcome]c              #  óÜ   K  — t          j        | ¦  «        D ]'}|                     |¦  «        D ]}|V — Œ|j        � nŒ(|                     ¦   «         D ]}|V — Œ|                     ¦   «         S )zKFeed one hop's SSE events through `reader`, yielding the frames to forward.)r   Ú
raw_eventsrA  rç   rL  rö   ©rk   ræ   r  rñ   s       r4   rÍ   rÍ   î  sŒ   è è € åÔ  Ñ*Ô*ð ð ˆØ—[’[ Ñ%Ô%ð 	ð 	ˆEØˆKˆKˆKˆKØŒ>Ð%ØˆEð &à×%Ò%Ñ'Ô'ð ð ˆØˆˆˆˆØ�=Š=‰?Œ?Ðr6   úAsyncIterator[bytes]c               óÈ   K  — t          j        | ¦  «        2 3 d{V —†}|                     |¦  «        D ]}|W V — Œ|j        � nŒ.6 |                     ¦   «         D ]}|W V — ŒdS )u»   Feed one hop's SSE events through `reader`, yielding the frames to forward.

    The outcome is read from `reader.finish()` afterwards â€” async generators
    cannot return a value.
    N)r   rS  rA  rç   rL  rT  s       r4   rõ   rõ   ú  s®   è è € õ !Ô+¨HÑ5Ô5ð ð ð ð ð ð ð ˆcØ—[’[ Ñ%Ô%ð 	ð 	ˆEØˆKˆKˆKˆKˆKØŒ>Ð%ØˆEð &ð 6ð
 ×%Ò%Ñ'Ô'ð ð ˆØˆˆˆˆˆðð s   —Ac                  óä   — e Zd ZU dZ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ed<   ded<   ded<   	 d/d„Zed0d„¦   «         Zd1d„Zd2d!„Z	d3d"„Z
d4d$„Zd5d(„Zd6d*„Zd7d-„Zd.S )8rÐ   z9Bookkeeping shared across the hops of one spliced stream.r¦   rÞ   rü   rÇ   r  rÈ   r.   Úprimary_modelr-   ú	List[Any]rÛ   ÚpartialrŠ   rú   Úlast_refusalzDict[str, Any] | NoneÚlast_start_eventr  rË   re   r¬   r/   r9   c                ó"   — || _         g | _        d S r;   )Ú_bodyÚ_pending_seams)r=   re   s     r4   r>   z_ChainState.__init__&  s   € ØˆŒ
Ø+-ˆÔÐÐr6   rj   rç   r  c                ó>  — |j         €J ‚ | |¦  «        }||_        |j        |_        |j        |_        t          |j        pi                      d¦  «        ¦  «        }|�|                     d¦  «        nd}t          |t          ¦  «        r|nd|_
        |j         j        |_        g |_        |j         j        rt          |j        ¦  «        ng |_        |j        p|j        |_        |j         |_        |j        |_        t+          |j         |j        ¦  «        |_        |S )u×   The chain state after stream A's chainable refusal.

        `body` is the original request params (pre-pin) â€” the base every hop
        patches; `initial_model` is the model the initial request queried.
        NrŒ   rC  )rÎ   rX  rÞ   rá   rÇ   r›   r  rC   r|   r.   rÈ   r-   rÛ   rý   Ú_to_prefill_blocksr  rZ  r	  rŠ   r[  r\  Ú_declined_iteration_entriesrË   )Úclsre   rj   rç   rè   Ústart_messageÚstart_ids          r4   rÑ   z_ChainState.begin*  s  € ð ŒÐ*Ð*Ð*Ø��D‘	”	ˆØ+ˆÔØ"Ô-ˆÔØ!œ.ˆŒÝ  'Ô"5Ð";¸×!@Ò!@ÀÑ!KÔ!KÑLÔLˆØ.;Ð.G�=×$Ò$ TÑ*Ô*Ð*ÈTˆÝ'1°(½CÑ'@Ô'@ÐJ˜8˜8ÀdˆÔØ”oÔ+ˆŒØˆŒ
Ø>E¼oÔ>_ÐgÕ*¨7¬>Ñ:Ô:Ð:ÐegˆŒð #Ô3ÐJ°uÔ7JˆÔØ$œ_ˆÔØ!(Ô!4ˆÔÝ6°w´ÈÔH[Ñ\Ô\ˆÔØˆr6   rŽ   c                óü   — | j         }| xj         dz  c_         | j                             t          dd|t	          | j        || j        j        ¦  «        dœ¦  «        t          dd|dœ¦  «        g¦  «         || _        dS )a  Queue the reached hop's `fallback` seam block at the next monotonic index.

        Queued seams are flushed by the hop reader once output reaches the wire,
        so a chain of pre-stream declines lines its seams up after the serving
        hop's message_start.
        rf   r#  )r!  r8   r$  r(  ©r!  r8   N)rÞ   r_  rJ  r4  r‚   rŠ   r[  r�   )r=   rŽ   Ú
seam_indexs      r4   rÝ   z_ChainState.queue_seamE  sš   € ð ”_ˆ
ØˆŒ˜1ÑˆŒØÔ×"Ò"åØ)à 5Ø!+Ý)4°T´_ÀhÐPTÔPaÔPjÑ)kÔ)kðð ñô õ Ð*Ð5IÐT^Ð,_Ð,_Ñ`Ô`ð
ñ	
ô 	
ð 	
ð #ˆŒˆˆr6   r  c                ó*   — t          | j        ¦  «        S r;   )r9  r_  r<   s    r4   rà   z_ChainState.pending_seam_frames]  s   € Ý�DÔ'Ñ(Ô(Ð(r6   c                óF   — d| _         | j                             ¦   «          d S )NT)rÇ   r_  r;  r<   s    r4   râ   z_ChainState.mark_opened`  s$   € ØˆŒØÔ×!Ò!Ñ#Ô#Ð#Ð#Ð#r6   ú	list[Any]c                ó"   — g | j         ¢| j        ¢S r;   )rÛ   rZ  r<   s    r4   rÓ   z_ChainState.continuationd  s   € Ø*�”Ð*˜Tœ\Ð*Ð*r6   rê   r&   rÓ   c                ó  — d„ t          | j        |¦  «                             ¦   «         D ¦   «         }| j        �t	          | j        ¦  «        |d<   |r8|                     d¦  «        }g t          |t          ¦  «        r|ng ¢d|dœ‘|d<   |S )u¥  The hop's request body: the entry applied as a patch against the
        ORIGINAL request params (never a previous hop's patched body), extended
        by the continuation.

        The server-side `fallbacks` param is stripped â€” it is mutually exclusive
        with a credit-token retry. When the refusal granted no prefill claim the
        appended turn is omitted entirely and the same-body form is sent.
        c                ó&   — i | ]\  }}|d k    ¯||“ŒS )rW   r3   ©rE  ÚkeyÚvalues      r4   ú
<dictcomp>z(_ChainState.hop_body.<locals>.<dictcomp>p  s1   € ð  
ð  
ð  
Ù%˜3 ÐRUÐYdÒRdÐRdˆC�ÐRdÐRdÐRdr6   Nr,  ÚmessagesÚ	assistant)ÚroleÚcontent)rt   r^  Úitemsr-   r5   rC   r|   r9  )r=   rê   rÓ   re   rs  s        r4   rÔ   z_ChainState.hop_bodyg  s®   € ð 
ð  
Ý)3°D´JÀÑ)FÔ)F×)LÒ)LÑ)NÔ)Nð 
ñ  
ô  
ˆð Œ:Ð!Ý,?ÀÄ
Ñ,KÔ,KˆDÐ(Ñ)Øð 	Ø—x’x 
Ñ+Ô+ˆHð Ý(¨µ4Ñ8Ô8Ð@�(�(¸bð à$°Ð>Ð>ð ˆD�Ñð ˆr6   rg   c                óF  — |j         €J ‚|j         j        | _        || _        |j         j        rt	          |j        ¦  «        ng | _        | j                             t          |j         |¦  «        ¦  «         |j         | _
        |j        �|j        | _        |j        | _        dS )z7Fold a refused hop's outcome in, readying the next hop.N)rÎ   r-   rÛ   rý   ra  r  rZ  rË   rJ  rb  r[  r  r\  rÞ   )r=   rç   rg   rÓ   s       r4   rã   z_ChainState.absorb_refusal}  s”   € àŒÐ*Ð*Ð*Ø”_Ô*ˆŒ
Ø ˆŒ	Ø=D¼_Ô=^ÐfÕ)¨'¬.Ñ9Ô9Ð9ÐdfˆŒØŒ×ÒÕ:¸7¼?ÈEÑRÔRÑSÔSÐSØ#œOˆÔØÔÐ*Ø$+Ô$7ˆDÔ!Ø!Ô,ˆŒˆˆr6   rì   r×   c                óL  — g }| j         sx| j        �qt          j        | j        ¦  «        }t	          |                     d¦  «        ¦  «        }|�| j        �
| j        |d<   |                     t          d|¦  «        ¦  «         | 	                    | j
        ¦  «         t          j        | j        j        ¦  «        }t	          |                     d¦  «        ¦  «        }|�9t	          |                     d¦  «        ¦  «        }|�|j        dv r|j        nd|d<   t	          |                     d	¦  «        ¦  «        pi }t          j        | j        ¦  «        |d
<   ||d	<   |                     t          d|¦  «        ¦  «         |                     t          dddi¦  «        ¦  «         |S )uS  Degrade to the suppressed refusal when every remaining entry failed
        over HTTP: replay its message_delta verbatim â€” `recommended_model`
        stamped from the final failure (the failed model for capacity errors,
        `null` otherwise) and `usage.iterations` carrying the recorded chain â€”
        then message_stop.
        NrŒ   rC  r"  r*  r+  )i­  i  r/  rÿ   rË   r)  Úmessage_stopr!  )rÇ   r\  rH  rI  r›   rC   rÈ   r�   r4  rJ  r_  r[  r   rÊ   rg   rË   )	r=   rì   r½   r  rŒ   r   r*  r?  rÿ   s	            r4   rÜ   z#_ChainState.terminal_failure_frames‰  s€  € ð !ˆØŒ~ð 	? $Ô"7Ð"CÝœ.¨Ô)>Ñ?Ô?ˆKÝ˜{Ÿš¨yÑ9Ô9Ñ:Ô:ˆGØÐ" t¤Ð'BØ $¤�˜‘Ø�MŠM�% °Ñ=Ô=Ñ>Ô>Ð>Ø�Š�dÔ)Ñ*Ô*Ð*å”˜tÔ0Ô6Ñ7Ô7ˆÝ˜Ÿš 7Ñ+Ô+Ñ,Ô,ˆØÐÝ˜uŸyšy¨Ñ8Ô8Ñ9Ô9ˆGØÐ"Ø@GÄÐR\Ð@\Ð@\¨w¬}¨}Ðbf�Ð+Ñ,Ý˜Ÿš 7Ñ+Ô+Ñ,Ô,Ð2°ˆÝ#œn¨T¬_Ñ=Ô=ˆˆlÑØˆˆg‰Ø�Š•e˜O¨UÑ3Ô3Ñ4Ô4Ð4Ø�Š•e˜N¨V°^Ð,DÑEÔEÑFÔFÐFØˆr6   N)re   r¬   r/   r9   )re   r¬   rj   r.   rç   r  r/   rÐ   )rŽ   r.   r/   r9   rN  rL   )r/   rk  )rê   r&   rÓ   rk  r/   r¬   )rç   r  rg   r.   rÓ   rk  r/   r9   )rì   r×   r/   r  )rM   rN   rO   rP   rQ   r>   ÚclassmethodrÑ   rÝ   rà   râ   rÓ   rÔ   rã   rÜ   r3   r6   r4   rÐ   rÐ   	  sn  € € € € € € ØCÐCà€O€O�OØ;à€O€O�OØ=àÐÐÑð2ð ÐÐÑð4ð ÐÐÑØ€O€O�OØÐÐÑØ€O€O�OØÐÐÑØ+Ð+Ð+Ñ+Ø$Ð$Ð$Ñ$ðIð.ð .ð .ð .ð ðð ð ñ „[ðð4#ð #ð #ð #ð0)ð )ð )ð )ð$ð $ð $ð $ð+ð +ð +ð +ðð ð ð ð,
-ð 
-ð 
-ð 
-ðð ð ð ð ð r6   rÐ   rn   Úmodel_labelúlist[dict[str, Any]]c                ó~  — | j                              d¦  «        }t          |t          ¦  «        rx|rvd„ t	          d|¦  «        D ¦   «         }d„ |D ¦   «         }|rNt          |¦  «        dk    r9t          |d                              d¦  «        t          ¦  «        s||d         d<   |S t          d|| j         ¦  «        gS )	uS  The `usage.iterations` entries a declined hop contributes to the chain.

    The hop's refusal self-reports its iterations: adopt them, retyped to
    `message` (every one of them declined â€” a server-stitched envelope labels
    its last hop `fallback_message`). A single-entry self-report describes the
    hop itself and gains its model â€” `model_label`, the caller-spelled primary
    or the chain entry's id â€” when the wire didn't name one; a multi-entry
    self-report (a server-tool loop) is kept verbatim. Without a self-report,
    one entry is built from the refusal's usage.
    rË   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r;   )r›   ©rE  rê   s     r4   rG  z._declined_iteration_entries.<locals>.<genexpr>´  s(   è è € ÐQÐQ¨E� ™œÐQÐQÐQÐQÐQÐQr6   rY  c                ó"   — g | ]}|®i |¥ddi¥‘ŒS )Nr!  rŒ   r3   r€  s     r4   ú
<listcomp>z/_declined_iteration_entries.<locals>.<listcomp>µ  s.   € Ð(uÐ(uÐ(uÈ%ÐchÐctÐ)E¨EÐ)E°6¸9Ð)EÐ)EÐctÐctÐctr6   rf   r   rg   rŒ   )rÿ   rC   r|   r9  r   ry   r.   Ú_to_iteration_usage)rn   r|  ÚreportedÚdict_entriesÚentriess        r4   rb  rb  §  sÅ   € ð Œ}× Ò  Ñ.Ô.€HÝ�(�DÑ!Ô!ð  hð ØQÐQµT¸+ÀxÑ5PÔ5PÐQÑQÔQˆØ(uÐ(uÐS_Ð(uÑ(uÔ(uˆØð 	Ý�7‰|Œ|˜qÒ Ð ­°G¸A´J·N²NÀ7Ñ4KÔ4KÍSÑ)QÔ)QÐ Ø&1�˜”
˜7Ñ#ØˆNÝ 	¨;¸¼ÑFÔFÐGÐGr6   Údelta_usager¬   rg   c                ó  — |                       d¦  «        }t          |t          ¦  «        rE|rCt          t	          d|¦  «        d         ¦  «        }|�i |¥d|                      d¦  «        p|dœ¥S t          d|| ¦  «        S )z‡The serving hop's `fallback_message` completer entry: its own
    self-reported iteration relabeled, or one built from its delta usage.rË   rY  rH   NÚfallback_messagerg   )r!  rg   )rC   r|   r9  r›   r   rƒ  )r‡  rg   r„  Úlasts       r4   r=  r=  ½  s�   € ð �Š˜|Ñ,Ô,€HÝ�(�DÑ!Ô!ð ] hð ]Ý�˜[¨(Ñ3Ô3°BÔ7Ñ8Ô8ˆØÐØ\�dÐ\Ð$6ÀÇÂÈ'ÑARÔARÐA[ÐV[Ð\Ð\Ð\Ð\ÝÐ1°5¸+ÑFÔFÐFr6   c                  óR   — e Zd ZU dZded<   	 ddd„Zdd
„Zdd„Zdd„Zdd„Z	dd„Z
dS )r  a/  Block bookkeeping for one stream of the splice: accumulates each content
    block from its deltas (for the continuation prefill), shifts wire indices
    by `index_base` so they stay monotonic across hops, and tracks which blocks
    are still open so a refusal that cuts mid-block can close them.
    r¦   rÞ   r   rÄ   r/   r9   c                ó>   — || _         || _        g | _        g | _        d S r;   )Ú_index_baserÞ   Ú_blocksr2  )r=   rÄ   s     r4   r>   z_BlockTracker.__init__Ò  s#   € Ø%ˆÔØ$ˆŒà9;ˆŒà "ˆŒ
ˆ
ˆ
r6   r}  c                ó$   — d„ | j         D ¦   «         S )z/The accumulated content blocks, in start order.c                ó   — g | ]\  }}|‘ŒS r3   r3   )rE  Ú_Úblocks      r4   r‚  z0_BlockTracker.content_blocks.<locals>.<listcomp>Ü  s   € Ð3Ð3Ð3™(˜!˜U�Ð3Ð3Ð3r6   )rŽ  r<   s    r4   r7  z_BlockTracker.content_blocksÚ  s   € à3Ð3 d¤lÐ3Ñ3Ô3Ð3r6   r   r¬   c                óˆ  — |                      d¦  «        }t          |t          ¦  «        sdS t          |                      d¦  «        ¦  «        }| j                             ||�t          |¦  «        ni f¦  «         || j        z   }||d<   | j                             |¦  «         t          | j
        |dz   ¦  «        | _
        dS )z7Track a content_block_start, shifting `event["index"]`.r8   Nr$  rf   )rC   r|   r¦   r›   rŽ  r�   Údictr�  r2  ÚmaxrÞ   )r=   r   r8   r$  Úshifteds        r4   r3  z_BlockTracker.startÞ  s¸   € à—	’	˜'Ñ"Ô"ˆÝ˜%¥Ñ%Ô%ð 	ØˆFÝ  §¢¨?Ñ!;Ô!;Ñ<Ô<ˆØŒ×Ò˜U¸=Ð;T¥D¨Ñ$7Ô$7Ð$7ÐZ\Ð]Ñ^Ô^Ð^Ø˜$Ô*Ñ*ˆØ ˆˆg‰ØŒ
×Ò˜'Ñ"Ô"Ð"Ý˜dœo¨w¸©{Ñ;Ô;ˆŒˆˆr6   c                óì   — |                      d¦  «        }t          |t          ¦  «        sdS t          |                      d¦  «        ¦  «        }|�t	          | j        ||¦  «         || j        z   |d<   dS )zQApply a content_block_delta to its accumulating block, shifting `event["index"]`.r8   Nr*  )rC   r|   r¦   r›   Ú_apply_deltarŽ  r�  )r=   r   r8   r*  s       r4   r*  z_BlockTracker.deltaê  sr   € à—	’	˜'Ñ"Ô"ˆÝ˜%¥Ñ%Ô%ð 	ØˆFÝ˜Ÿš 7Ñ+Ô+Ñ,Ô,ˆØÐÝ˜œ u¨eÑ4Ô4Ð4Ø Ô!1Ñ1ˆˆg‰ˆˆr6   c                óü   — |                      d¦  «        }t          |t          ¦  «        sdS || j        z   }||d<   || j        v r| j                             |¦  «         t          | j        |dz   ¦  «        | _        dS )z6Track a content_block_stop, shifting `event["index"]`.r8   Nrf   )rC   r|   r¦   r�  r2  Úremover•  rÞ   )r=   r   r8   r–  s       r4   r6  z_BlockTracker.stopô  s~   € à—	’	˜'Ñ"Ô"ˆÝ˜%¥Ñ%Ô%ð 	ØˆFØ˜$Ô*Ñ*ˆØ ˆˆg‰Ø�d”jÐ Ð ØŒJ×Ò˜gÑ&Ô&Ð&Ý˜dœo¨w¸©{Ñ;Ô;ˆŒˆˆr6   úIterator[bytes]c              #  óz   K  — | j         D ]}t          dd|dœ¦  «        V — Œ| j                              ¦   «          dS )z4content_block_stop events for any blocks still open.r(  rg  N)r2  r4  r;  )r=   r8   s     r4   r:  z_BlockTracker.close_open_blocksÿ  sW   è è € à”Zð 	^ð 	^ˆEÝÐ,Ð7KÐV[Ð.\Ð.\Ñ]Ô]Ð]Ð]Ð]Ð]ØŒ
×ÒÑÔÐÐÐr6   N)r   )rÄ   r¦   r/   r9   )r/   r}  )r   r¬   r/   r9   ©r/   r›  )rM   rN   rO   rP   rQ   r>   r7  r3  r*  r6  r:  r3   r6   r4   r  r  È  s«   € € € € € € ðð ð €O€O�OØ8ð#ð #ð #ð #ð #ð4ð 4ð 4ð 4ð
<ð 
<ð 
<ð 
<ð2ð 2ð 2ð 2ð	<ð 	<ð 	<ð 	<ðð ð ð ð ð r6   r  r  ú list[tuple[int, dict[str, Any]]]r8   r¦   r*  r9   c                óˆ  ‡— t          ˆfd„| D ¦   «         d¦  «        }|€dS |                     d¦  «        }|dk    rNt          |                     d¦  «        pd¦  «        t          |                     d¦  «        pd¦  «        z   |d<   dS |dk    rNt          |                     d¦  «        pd¦  «        t          |                     d	¦  «        pd¦  «        z   |d<   dS |d
k    ri|                     d¦  «        }t          |t          ¦  «        sg }||d<   t          d|¦  «                             |                     d¦  «        ¦  «         dS |dk    rNt          |                     d¦  «        pd¦  «        t          |                     d¦  «        pd¦  «        z   |d<   dS |dk    r|                     d¦  «        |d<   dS dS )zAApply a content_block_delta to the accumulating block at `index`.c              3  ó.   •K  — | ]\  }}|‰k    ¯|V — Œd S r;   r3   )rE  Úblock_indexr’  r8   s      €r4   rG  z_apply_delta.<locals>.<genexpr>  s2   øè è € ÐQÐQÑ.˜K¨¸KÈ5Ò<PÐ<P�%Ð<PÐ<PÐ<PÐ<PÐQÐQr6   Nr!  Ú
text_deltaÚtextrh   Úinput_json_deltaÚ_partial_jsonÚpartial_jsonÚcitations_deltaÚ	citationsrY  ÚcitationÚthinking_deltaÚthinkingÚsignature_deltaÚ	signature)ÚnextrC   r.   r|   r9  r   r�   )r  r8   r*  r’  Ú
delta_typer¨  s    `    r4   r˜  r˜  	  sÚ  ø€ åÐQÐQÐQÐQ°&ÐQÑQÔQÐSWÑXÔX€EØ€}ØˆØ—’˜6Ñ"Ô"€JØ�\Ò!Ð!Ý˜EŸIšI fÑ-Ô-Ð3°Ñ4Ô4µs¸5¿9º9ÀVÑ;LÔ;LÐ;RÐPRÑ7SÔ7SÑSˆˆf‰ˆˆØ	Ð)Ò	)Ð	)Ý!$ U§Y¢Y¨Ñ%?Ô%?Ð%EÀ2Ñ!FÔ!FÍÈUÏYÊYÐWeÑMfÔMfÐMlÐjlÑImÔImÑ!mˆˆoÑÐÐØ	Ð(Ò	(Ð	(Ø—I’I˜kÑ*Ô*ˆ	Ý˜)¥TÑ*Ô*ð 	+ØˆIØ!*ˆE�+ÑÝˆ[˜)Ñ$Ô$×+Ò+¨E¯IªI°jÑ,AÔ,AÑBÔBÐBÐBÐBØ	Ð'Ò	'Ð	'Ý §	¢	¨*Ñ 5Ô 5Ð ;¸Ñ<Ô<½sÀ5Ç9Â9ÈZÑCXÔCXÐC^Ð\^Ñ?_Ô?_Ñ_ˆˆjÑÐÐØ	Ð(Ò	(Ð	(Ø"ŸYšY {Ñ3Ô3ˆˆkÑÐÐð 
)Ð	(r6   Úresponse_blocksrk  c                ó(  — g }| D ]º}|                      d¦  «        dk    rŒ|                      d¦  «        }t          |t          ¦  «        s|                     |¦  «         Œ\d„ |                     ¦   «         D ¦   «         }t          |¦  «        }|�|n|                      d¦  «        |d<   |                     |¦  «         Œ»|rP|d                               d¦  «        dv r3|                     ¦   «          |r|d                               d¦  «        dv °3|S )	uç  Convert a hop's accumulated response blocks to the appended assistant turn.

    A `fallback_has_prefill_claim` refusal guarantees the partial output is
    resendable, so the blocks go out near-verbatim. Three rewrites apply:
    `fallback` seam blocks (wire markers, not content) are dropped, tool inputs
    are reassembled from their accumulated `input_json_delta` JSON
    (content_block_start carries `input: {}`), and trailing thinking blocks are
    stripped â€” the server rejects an assistant turn whose final block is
    `thinking`, so a refusal that cut the stream mid-thought would otherwise
    400 the continuation. A partial that was nothing but thinking strips to
    empty, and the hop falls back to the same-body form.
    r!  r%  r¥  c                ó&   — i | ]\  }}|d k    ¯||“ŒS )r¥  r3   ro  s      r4   rr  z&_to_prefill_blocks.<locals>.<dictcomp>4  s(   € ÐVÐVÐV¡
  U¸sÀoÒ?UÐ?U��eÐ?UÐ?UÐ?Ur6   NÚinputrH   )r«  Úredacted_thinking)rC   r|   r.   r�   rw  r0  Úpop)r°  Úoutr’  r¦  Úparseds        r4   ra  ra    s  € ð €CØ ð 
ð 
ˆØ�9Š9�VÑÔ 
Ò*Ð*ØØ—y’y Ñ1Ô1ˆÝ˜,­Ñ,Ô,ð 	Ø�JŠJ�uÑÔÐØØVÐV¨e¯kªk©m¬mÐVÑVÔVˆÝ˜LÑ)Ô)ˆØ#)Ð#5˜˜¸5¿9º9ÀWÑ;MÔ;Mˆˆg‰Ø�
Š
�5ÑÔÐÐØ
ð �#�b”'—+’+˜fÑ%Ô%Ð)JÐJÐJØ�Š‰	Œ	ˆ	ð ð �#�b”'—+’+˜fÑ%Ô%Ð)JÐJÐJà€Jr6   re   c                ó`  — |                       d¦  «        }t          |t          ¦  «        s| S d}g }t          d|¦  «        D ]â}t	          |¦  «        }|�|                      d¦  «        nd}|�t          |t          ¦  «        s|                     |¦  «         ŒWt          d|¦  «        }d„ |D ¦   «         }t          |¦  «        t          |¦  «        k    r|                     |¦  «         Œ©d}|s|                      d¦  «        d	k    rŒÇ|                     i |¥d|i¥¦  «         Œã|s| S i | ¥d|i¥S )
u  A copy of `body` with `{type: "fallback"}` seam blocks filtered out of the
    replayed message history; `body` itself when there are none.

    An assistant turn left with no content by the strip â€” a seam-only turn â€” is
    dropped whole; the server rejects empty-content turns.rs  FrY  Nrv  c                ób   — g | ],}t          |¦  «        r|                     d ¦  «        dk    °*|‘Œ-S )r!  r%  )r   rC   )rE  r’  s     r4   r‚  z&_strip_seam_blocks.<locals>.<listcomp>R  s;   € ÐlÐlÐl˜%½À¹¼ÐlÈ5Ï9Ê9ÐU[ÑK\ÔK\Ð`jÒKjÐKj�ÐKjÐKjÐKjr6   Tru  rt  )rC   r|   r9  r   r›   r�   ry   )	re   rs  ÚstrippedÚstripped_messagesrŒ   Úmessage_dictrv  Úcontent_listÚkepts	            r4   rs   rs   @  sl  € ð �xŠx˜
Ñ#Ô#€HÝ�h¥Ñ%Ô%ð ØˆØ€HØ#%ÐÝ˜ XÑ.Ô.ð Dð DˆÝ Ñ(Ô(ˆØ1=Ð1I�,×"Ò" 9Ñ-Ô-Ð-ÈtˆØÐ¥z°'½4Ñ'@Ô'@ÐØ×$Ò$ WÑ-Ô-Ð-ØÝ˜K¨Ñ1Ô1ˆØlÐl <ÐlÑlÔlˆÝˆt‰9Œ9�˜LÑ)Ô)Ò)Ð)Ø×$Ò$ WÑ-Ô-Ð-ØØˆØð 	˜×(Ò(¨Ñ0Ô0°KÒ?Ð?ØØ× Ò Ð!B LÐ!B°)¸TÐ!BÐ!BÑCÔCÐCÐCØð ØˆØ2ˆdÐ2�JÐ 1Ð2Ð2Ð2r6   r_   r   rV   c                ó"  ‡— t          j        d„ | j                             ¦   «         D ¦   «         ¦  «                             dd¦  «        }d„ |                     d¦  «        D ¦   «         Št                               ˆfd„|D ¦   «         ¦  «        }d„ | j                             ¦   «         D ¦   «         }|s|r)d                     t          d	|g|¢¦  «        ¦  «        |d<   |  
                    t          |t          d
¦  «        ¦  «        ¬¦  «        S )zåA copy of `request` with `betas` appended to its `anthropic-beta` header
    (skipping values already present) and the middleware's helper-telemetry tag
    appended to `x-stainless-helper`. Single `request.copy()` for both.
    c                óD   — i | ]\  }}t          |t          ¦  «        ¯||“ŒS r3   )r|   r.   ©rE  ÚkÚvs      r4   rr  z,_with_middleware_headers.<locals>.<dictcomp>f  s/   € Ð\Ð\Ð\¡d a¨ÍÐTUÕWZÑI[ÔI[Ð\˜Q Ð\Ð\Ð\r6   úanthropic-betarh   c                ó6   — h | ]}|                      ¦   «         ’ŒS r3   )Ústrip)rE  rq  s     r4   ú	<setcomp>z+_with_middleware_headers.<locals>.<setcomp>g  s    € Ð>Ð>Ð> %�—’‘”Ð>Ð>Ð>r6   ú,c              3  óX   •K  — | ]$}t          |¦  «        ‰v¯t          |¦  «        V — Œ%d S r;   )r.   )rE  r™   Úexistings     €r4   rG  z+_with_middleware_headers.<locals>.<genexpr>h  s9   øè è € ÐWÐW¨D½SÀ¹Y¼YÈhÐ=VÐ=V�c $™iœiÐ=VÐ=VÐ=VÐ=VÐWÐWr6   c                óJ   — i | ] \  }}|                      ¦   «         d k    ¯||“Œ!S )rÄ  )r¡   rÁ  s      r4   rr  z,_with_middleware_headers.<locals>.<dictcomp>i  s1   € ÐYÐYÐY™˜˜1¸1¿7º7¹9¼9ÐHXÒ;XÐ;Xˆq�!Ð;XÐ;XÐ;Xr6   z, Nzfallback-refusal-middleware)Úheaders)r�   ÚHeadersrÌ  rw  rC   Úsplitr”  ÚfromkeysÚjoinÚfilterru   r    r#   )r_   rV   rä   Ú	additionsrÌ  rÊ  s        @r4   rr   rr   _  s
  ø€ õ ŒmÐ\Ð\¨g¬o×.CÒ.CÑ.EÔ.EÐ\Ñ\Ô\Ñ]Ô]×aÒaÐbrÐtvÑwÔw€GØ>Ð>¨7¯=ª=¸Ñ+=Ô+=Ð>Ñ>Ô>€HÝ—’ÐWÐWÐWÐW°EÐWÑWÔWÑWÔW€IØYÐY ¤× 5Ò 5Ñ 7Ô 7ÐYÑYÔY€GØð S�)ð SØ$(§I¢I­f°T¸GÐ;PÀiÐ;PÑ.QÔ.QÑ$RÔ$RˆÐ Ñ!Ø�<Š<¥¨gµ}ÐEbÑ7cÔ7cÑ dÔ dˆ<ÑeÔeÐer6   rŒ   úMessage | BetaMessager  c                óV   — t          | t          ¦  «        r| j        �| j        j        S dS )zEThe refusal's minted credit token; only the beta surface carries one.N)r|   r$   r+  r,  ©rŒ   s    r4   r~   r~   o  s-   € å�'�;Ñ'Ô'ð :¨GÔ,@Ð,LØÔ#Ô9Ð9Øˆ4r6   c                óV   — t          | t          ¦  «        r| j        �| j        j        S dS )zOThe policy category that caused the refusal; only the beta surface carries one.N)r|   r$   r+  r�   rÕ  s    r4   r   r   v  s-   € å�'�;Ñ'Ô'ð -¨GÔ,@Ð,LØÔ#Ô,Ð,Øˆ4r6   rŠ   rŽ   r�   c                ó   — dd| id|id|dœdœS )zBThe synthetic `fallback` content block marking one model boundary.r%  rg   rn   )r!  r�   )r!  Úfromr&  Útriggerr3   )rŠ   rŽ   r�   s      r4   r‚   r‚   }  s1   € ð Ø˜*Ð%Ø˜Ð!Ø%°8Ð<Ð<ð	ð ð r6   Úoriginalr‹   úhttpx.Response | Nonec           
     óÐ  — t          t          | j                             d¦  «        ¦  «        ¦  «        }|�(t	          |                     d¦  «        t          ¦  «        sdS t          i |¥dg |¢t          d|d         ¦  «        ¢i¥¦  «         	                    d¦  «        }| j
                             ¦   «         }dD ]	}||v r||= Œ
t          j        | j        ||| j        ¬¦  «        S )zÙA copy of the served hop's response with `seams` prepended to its
    `content`, or `None` when the body isn't the expected message shape.

    The caller has already parsed the response, so its body is buffered.
    úutf-8Nrv  rY  ©zcontent-encodingzcontent-length)rÙ   rÌ  rv  r_   )r›   r0  rv  Údecoder|   rC   r9  rÚ   r   ÚencoderÌ  ru   r�   ÚResponserÙ   r_   )rÚ  r‹   rŒ   re   rÌ  Úheaders         r4   Ú_seamed_http_responserã  ‡  sö   € õ •z (Ô"2×"9Ò"9¸'Ñ"BÔ"BÑCÔCÑDÔD€GØ€�j¨¯ª°YÑ)?Ô)?ÅÑFÔF€ØˆtÝÐ_˜'Ð_ 9Ð.^°Ð.^½¸[È'ÐR[ÔJ\Ñ8]Ô8]Ð.^Ð_Ð_Ñ`Ô`×gÒgÐhoÑpÔp€DØÔ×#Ò#Ñ%Ô%€GØ8ð  ð  ˆØ�WÐÐØ˜�øÝŒ>ØÔ(ØØØÔ ð	ñ ô ð r6   ra   c           	     ó’   — t          | j        |¦  «        }|€| S t          || j        | j        d| j        | j        | j        ¬¦  «        S ©NFr®   )rã  rv   r   r¸   r¹   rº   r»   r´   ©rk   r‹   r¯   s      r4   rƒ   rƒ   �  sY   € Ý
 Ô 6¸Ñ
>Ô
>€CØ
€{ØˆÝØØÔ!ØÔØØÔ'ØÔ!ØÔ,ðñ ô ð r6   r‘   c           	     ó’   — t          | j        |¦  «        }|€| S t          || j        | j        d| j        | j        | j        ¬¦  «        S rå  )rã  rv   r   r¸   r¹   rº   r»   r´   ræ  s      r4   r”   r”   ¬  sY   € Ý
 Ô 6¸Ñ
>Ô
>€CØ
€{ØˆÝØØÔ!ØÔØØÔ'ØÔ!ØÔ,ðñ ô ð r6   rê   r&   c                ó*  — t          | t          d|¦  «        ¦  «        }t          |                     d¦  «        ¦  «        }|�Pt          t          |                      d¦  «        ¦  «        pi |¦  «        }|r||d<   n|                     dd¦  «         |S )uï  `entry` applied as a patch against `body`: a field set to a value
    overrides it, a field explicitly `None` unsets it (absent from the retried
    request â€” not sent as `null`), an absent field keeps the original value.

    `output_config` patches one level deep: its subfields follow the same
    set / `None`-unsets / absent-keeps rule against the original request's
    `output_config`; the whole object is dropped when nothing is left.

    Always a fresh dict; `body` is never mutated.rþ   Úoutput_configN)Ú_patchr   r›   rC   rµ  )re   rê   Úpatchedré  Úmergeds        r4   rt   rt   »  s“   € õ �T�4Ð 0°%Ñ8Ô8Ñ9Ô9€GÝ˜UŸYšY Ñ7Ô7Ñ8Ô8€MØÐ Ý� §¢¨/Ñ!:Ô!:Ñ;Ô;ÐA¸rÀ=ÑQÔQˆØð 	/Ø'-ˆG�OÑ$Ð$à�KŠK˜¨Ñ.Ô.Ð.Ø€Nr6   rÛ   Ú	overridesc                ó”   — t          | ¦  «        }|                     ¦   «         D ]#\  }}|€|                     |d¦  «         Œ|||<   Œ$|S )z¯`overrides` applied flat against `base`: a key set to a value overrides
    it, a key explicitly `None` unsets it, an absent key keeps the base value.
    Always a fresh dict.N)r”  rw  rµ  )rÛ   rí  rë  rp  rq  s        r4   rê  rê  Ð  sX   € õ �4‰jŒj€GØ—o’oÑ'Ô'ð !ð !‰
ˆˆUØˆ=Ø�KŠK˜˜TÑ"Ô"Ð"Ð"à ˆG�C‰LˆLØ€Nr6   r%  Úcredit_tokenc                óN   — t          | |¦  «        }|rt          |¦  «        |d<   |S )z˜The non-streaming retry body: the fallback entry applied as a patch
    against the original params, plus the refusal's credit token when it minted one.r,  )rt   r5   )re   r%  rï  rì  s       r4   r€   r€   Ý  s4   € õ ˜˜hÑ'Ô'€FØð LÝ*=¸lÑ*KÔ*KˆÐ&Ñ'Ø€Mr6   r£  r   c                óN   — 	 t          j        | ¦  «        S # t          $ r Y d S w xY wr;   )rœ   ÚloadsrÕ   )r£  s    r4   r0  r0  æ  s9   € ðÝŒz˜$ÑÔÐøÝð ð ð Øˆtˆtðøøøs   ‚ –
$£$rq  c                ó.   — t          j        | d¬¦  «        S )N)rÈ  ú:)Ú
separators)rœ   Údumps©rq  s    r4   rÚ   rÚ   í  s   € ÝŒ:�e¨
Ð3Ñ3Ô3Ð3r6   rF   r–   c                óD   — t          | ¦  «        rt          d| ¦  «        nd S )Nrþ   )r   r   r÷  s    r4   r›   r›   ñ  s#   € Ý,3°E©N¬NÐD�4Ð  %Ñ(Ô(Ð(ÀÐDr6   c                ór   — 	 t          j        |                      ¦   «         ¦  «        S # t          $ r Y d S w xY wr;   )rœ   rò  ÚreadrÕ   ©rk   s    r4   rØ   rØ   õ  sA   € ðÝŒz˜(Ÿ-š-™/œ/Ñ*Ô*Ð*øÝð ð ð Øˆtˆtðøøøs   ‚%( ¨
6µ6c              ƒ  ó‚   K  — 	 t          j        |                      ¦   «         ƒ d {V —†¦  «        S # t          $ r Y d S w xY wr;   )rœ   rò  ÚareadrÕ   rû  s    r4   rø   rø   ü  sY   è è € ðÝŒz §¢Ñ 0Ô 0Ð0Ð0Ð0Ð0Ð0Ð0Ñ1Ô1Ð1øÝð ð ð Øˆtˆtðøøøs   „+0 °
>½>r   ÚpayloadÚbytesc                ód   — t          | t          |¦  «        ¬¦  «                             d¦  «        S )N©r   r1  rÝ  )Ú_serialize_sserÚ   rà  )r   rþ  s     r4   r4  r4    s+   € Ý ­K¸Ñ,@Ô,@ÐAÑAÔA×HÒHÈÑQÔQÐQr6   r  r   c                óÌ   — | j         r0d                     | j         ¦  «        dz                        d¦  «        S t          | j        | j        ¬¦  «                             d¦  «        S )zËForward a decoded event in its original wire bytes, preserving SSE fields
    beyond `event:`/`data:` (`id:`, `retry:`, comment lines). Falls back to
    re-serializing for events with no raw lines.
    ú
z

rÝ  r  )r¯   rÐ  rà  r  r   r1  )r  s    r4   r5  r5    sZ   € ð
 „wð =Ø—	’	˜#œ'Ñ"Ô" VÑ+×3Ò3°GÑ<Ô<Ð<Ý ¤	°´Ð9Ñ9Ô9×@Ò@ÀÑIÔIÐIr6   r1  c                óh   — d}| �	|d| › d�z  }|                      d¦  «        D ]}|d|› d�z  }Œ|dz   S )zÞSerialize an event back to its SSE wire form (`event: ...\ndata: ...\n\n`).

    Multi-line `data` is emitted as one `data:` line per line, matching the
    spec. The inverse of the decoder behind `Stream.raw_events`.
    rh   Nzevent: r  zdata: )rÎ  )r   r1  r¶  Úlines       r4   r  r    sb   € ð €CØÐØÐ"˜Ð"Ð"Ð"Ñ"ˆØ—
’
˜4Ñ Ô ð !ð !ˆØÐ ˜Ð Ð Ð Ñ ˆˆØ�‰:Ðr6   r!  ú&Literal['message', 'fallback_message']rÿ   c           	     óì   — |pi }| ||                      d¦  «        pd|                      d¦  «        pd|                      d¦  «        pd|                      d¦  «        pd|                      d¦  «        dœS )NÚinput_tokensr   Úoutput_tokensÚcache_read_input_tokensÚcache_creation_input_tokensÚcache_creation)r!  rg   r	  r
  r  r  r  )rC   )r!  rg   rÿ   Úus       r4   rƒ  rƒ    s„   € ð 	ˆ�€AàØØŸš˜nÑ-Ô-Ð2°ØŸš˜Ñ/Ô/Ð4°1Ø#$§5¢5Ð)BÑ#CÔ#CÐ#HÀqØ'(§u¢uÐ-JÑ'KÔ'KÐ'PÈqØŸ%š%Ð 0Ñ1Ô1ðð ð r6   Úprimaryc                ó–   — |pi }i |¥| pi ¥}|                      ¦   «         D ]'\  }}|€ |                     |¦  «        �||         ||<   Œ(|S )z0Fill `None` fields on `primary` from `fallback`.)rw  rC   )r  r%  r¶  rp  rq  s        r4   r8  r8  .  sb   € àˆ~˜2€HØ9˜XÐ9¨'¨-°RÐ9€CØ—i’i‘k”kð %ð %‰
ˆˆUØˆ=˜XŸ\š\¨#Ñ.Ô.Ð:Ø ”}ˆC�‰HøØ€Jr6   rx   ú,httpx.SyncByteStream | httpx.AsyncByteStreamc                ó�   — | j                              ¦   «         }dD ]	}||v r||= Œ
t          j        | j        ||| j        ¬¦  «        S )zÔA synthetic response standing in for `original`, with `stream` as its body.

    The spliced frames are emitted post-decode, so the original's
    content-encoding/length headers no longer describe the body.
    rÞ  )rÙ   rÌ  rx   r_   )rÌ  ru   r�   rá  rÙ   r_   )rÚ  rx   rÌ  râ  s       r4   r¶   r¶   8  se   € ð Ô×#Ò#Ñ%Ô%€GØ8ð  ð  ˆØ�WÐÐØ˜�øÝŒ>ØÔ(ØØØÔ ð	ñ ô ð r6   c                  óF   — e Zd Zd
d„Zedd„¦   «         Zedd„¦   «         Zd	S )r·   r½   rÁ   r/   r9   c                ó   — || _         d S r;   ©Ú_frames©r=   r½   s     r4   r>   z_FrameByteStream.__init__M  ó   € ØˆŒˆˆr6   r›  c                ó   — | j         S r;   r  r<   s    r4   Ú__iter__z_FrameByteStream.__iter__P  r  r6   c                ó8   — | j                              ¦   «          d S r;   )r  rÏ   r<   s    r4   rÏ   z_FrameByteStream.closeT  s   € àŒ×ÒÑÔÐÐÐr6   N)r½   rÁ   r/   r9   r�  rL   )rM   rN   rO   r>   r   r  rÏ   r3   r6   r4   r·   r·   L  sh   € € € € € ðð ð ð ð ðð ð ñ „Xðð ðð ð ñ „Xðð ð r6   r·   c                  óF   — e Zd Zd
d„Zedd„¦   «         Zedd„¦   «         Zd	S )rÀ   r½   ró   r/   r9   c                ó   — || _         d S r;   r  r  s     r4   r>   z_AsyncFrameByteStream.__init__Z  r  r6   rU  c                ó   — | j         S r;   r  r<   s    r4   Ú	__aiter__z_AsyncFrameByteStream.__aiter__]  r  r6   c              ƒ  óH   K  — | j                              ¦   «         ƒ d {V —† d S r;   )r  r÷   r<   s    r4   r÷   z_AsyncFrameByteStream.aclosea  s2   è è € àŒl×!Ò!Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#r6   N)r½   ró   r/   r9   )r/   rU  rL   )rM   rN   rO   r>   r   r  r÷   r3   r6   r4   rÀ   rÀ   Y  sh   € € € € € ðð ð ð ð ðð ð ñ „Xðð ð$ð $ð $ñ „Xð$ð $ð $r6   rÀ   )r-   r.   r/   r'   )rk   rP  ræ   rÌ   r/   rQ  )rk   rP  ræ   rÌ   r/   rU  )rn   rú   r|  r.   r/   r}  )r‡  r¬   rg   r.   r/   r¬   )r  rž  r8   r¦   r*  r¬   r/   r9   )r°  r}  r/   rk  )re   r¬   r/   r¬   )r_   r   rV   r+   r/   r   )rŒ   rÓ  r/   r  )rŠ   r.   rŽ   r.   r�   r  r/   r¬   )rÚ  rP  r‹   r}  r/   rÛ  )rk   ra   r‹   r}  r/   ra   )rk   r‘   r‹   r}  r/   r‘   )re   r¬   rê   r&   r/   r¬   )rÛ   r¬   rí  r¬   r/   r¬   )re   r¬   r%  r&   rï  r  r/   r¬   )r£  r.   r/   r   )rq  r   r/   r.   )rq  rF   r/   r–   )rk   rP  r/   r   )r   r.   rþ  r¬   r/   rÿ  )r  r   r/   rÿ  )r   r  r1  r.   r/   r.   )r!  r  rg   r.   rÿ   r–   r/   r¬   )r  r–   r%  r–   r/   r¬   )rÚ  rP  rx   r  r/   rP  )lÚ
__future__r   ru   rH  rœ   ÚloggingÚtypingr   r   r   r   r   r	   r
   r   r   r   r   Úcontextvarsr   r   Útyping_extensionsr   r   r�   Ú_utilsr   Ú_modelsr   Ú_requestr   Ú	_responser   r   Ú
_streamingr   r   r   Ú_exceptionsr   Ú_middlewarer   r   r   Ú_base_clientr    Útypes.messager!   Ú_stainless_helpersr#   Útypes.beta.beta_messager$   Útypes.anthropic_beta_paramr%   Útypes.beta.beta_fallback_paramr&   Ú+types.beta.beta_fallback_credit_token_paramr'   Ú__all__Ú	getLoggerr*   rQ   r£   r,   r5   r(   r@   rB   r)   rú   rß   r×   r  rÌ   rÍ   rõ   rÐ   rb  r=  r  r˜  ra  rs   rr   r~   r   r‚   rã  rƒ   r”   rt   rê  r€   r0  rÚ   r›   rØ   rø   r4  r5  r  rƒ  r8  r¶   ÚSyncByteStreamr·   ÚAsyncByteStreamrÀ   r3   r6   r4   ú<module>r8     s  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð *Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à €€€à Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø "Ð "Ð "Ð "Ð "Ð "Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø )Ð )Ð )Ð )Ð )Ð )Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø )Ð )Ð )Ð )Ð )Ð )Ø $Ð $Ð $Ð $Ð $Ð $Ø .Ð .Ð .Ð .Ð .Ð .Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø <Ð <Ð <Ð <Ð <Ð <Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø WÐ WÐ WÐ WÐ WÐ Wð Ø#ð€ð (�gÔ'Ð(BÑCÔC€Ð CÐ CÐ CÑ Cà€à0O€Ð OÐ OÐ OÑ OØ >ð3ð 3ð 3ð 3ð*ð *ð *ð *ð *ñ *ô *ð *ð< 9C¸
ÐCbÐlpÐ8qÑ8qÔ8q€Ð qÐ qÐ qÑ qð S]ÐR\Ø*°BðSñ Sô SÐ ð ð ð ñ ð
j	'ð j	'ð j	'ð j	'ð j	' Jñ j	'ô j	'ð j	'ð`(ð (ð (ð (ð (ˆyñ (ô (ð (ðð ð ð ð �)ñ ô ð ðSð Sð Sð Sð S�)ñ Sô Sð Sð3ð 3ð 3ð 3ð 3�)ñ 3ô 3ð 3ð4[
ð [
ð [
ð [
ð [
ñ [
ô [
ð [
ð|	ð 	ð 	ð 	ðð ð ð ð[ð [ð [ð [ð [ñ [ô [ð [ð|Hð Hð Hð Hð,Gð Gð Gð Gð;ð ;ð ;ð ;ð ;ñ ;ô ;ð ;ðB4ð 4ð 4ð 4ð,ð ð ð ðB3ð 3ð 3ð 3ð>fð fð fð fð ð ð ð ðð ð ð ðð ð ð ðð ð ð ð,ð ð ð ðð ð ð ðð ð ð ð*
ð 
ð 
ð 
ðð ð ð ðð ð ð ð4ð 4ð 4ð 4ðEð Eð Eð Eðð ð ð ðð ð ð ðRð Rð Rð RðJð Jð Jð Jðð ð ð ðð ð ð ðð ð ð ðð ð ð ð(
ð 
ð 
ð 
ð 
�uÔ+ñ 
ô 
ð 
ð
$ð 
$ð 
$ð 
$ð 
$˜EÔ1ñ 
$ô 
$ð 
$ð 
$ð 
$r6   