
    jKj	                     P    d Z ddlmZmZmZmZmZ  ed      Z G d dee         Zy)z9Shared async streaming utilities for PostHog AI wrappers.    )AnyAsyncGeneratorGenericOptionalTypeVarTc                       e Zd ZdZ	 ddeedf   dee   ddfdZddZ	defdZ
dd	Zd
edededefdZdZdedefdZy)AsyncStreamWrappera  Adds the async context manager protocol to a PostHog streaming generator.

    The OpenAI and Anthropic SDK streams support both ``async for`` and
    ``async with``. PostHog's wrappers returned a bare async generator, which
    only supports ``async for``, so ``async with response:`` (used by
    pydantic-ai) raised a TypeError. This wraps the tracking generator and,
    when given the original provider stream, closes it and proxies attribute
    access (e.g. ``.response``) to it.
    N	generatorstreamreturnc                      || _         || _        y N)
_generator_stream)selfr   r   s      b/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/posthog/ai/stream.py__init__zAsyncStreamWrapper.__init__   s    
 $    c                     | S r    r   s    r   	__aiter__zAsyncStreamWrapper.__aiter__   s    r   c                 R   K   | j                   j                          d {   S 7 wr   )r   	__anext__r   s    r   r   zAsyncStreamWrapper.__anext__   s     __..0000s   '%'c                    K   | S wr   r   r   s    r   
__aenter__zAsyncStreamWrapper.__aenter__!   s     s   exc_typeexc_valexc_tbc                   K   	 | j                   j                          d {    | j                  At        | j                  dd       xs t        | j                  dd       }| |        d {    y7 R7 # | j                  Dt        | j                  dd       xs t        | j                  dd       }| |        d {  7   w w w xY ww)NaclosecloseF)r   r"   r   getattr)r   r   r   r    r#   s        r   	__aexit__zAsyncStreamWrapper.__aexit__$   s     	"//((***||'h= LL'4B $'MM + " ||'h= LL'4B $'MM %	 (sK   CA8 A4A8 AC.A6/C4A8 6C8A	C
CC

C)r"   asendathrownamec                     |j                  d      rt        |      || j                  v rt        | j                  |      S | j
                  | j
                  n| j                  }t        ||      S )N_)
startswithAttributeError_GENERATOR_METHODSr$   r   r   )r   r(   targets      r   __getattr__zAsyncStreamWrapper.__getattr__7   s]    ??3 &&4***4??D11!%!9tvt$$r   r   )r   zAsyncStreamWrapper[T])__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   boolr%   r-   strr/   r   r   r   r
   r
      s     !%!!T'*  
	1 1 c 3 4 " 7% % %r   r
   N)	r3   typingr   r   r   r   r   r   r
   r   r   r   <module>r7      s'    ? B BCL6% 6%r   