Ë
    uPêj  ã            
       ó"  — U d Z ddlZddlmZ ddlmZmZmZmZ ddl	m
Z
 dZeed<   eez  Zeed<   d	ed
eeef   dz  fd„Zdeeef   deded
efd„Zdeeef   deeeeef   f   d
dfd„Zdeeef   deeeeef   f   deeeeef   f   d
dfd„Zy)aO  
Shared helpers for recovering Responses API output items from raw SSE chunks.

The same recovery logic is needed in multiple places (e.g. the ChatGPT
Responses transformation and the LiteLLM Responses-to-Chat-Completions
bridge). Keep the implementation in a single module so a fix in one
caller automatically applies to all of them.
é    N)ÚMapping)ÚFinalÚSupportsIntÚ	TypeAliasÚcast)ÚSTREAM_SSE_DONE_STRINGi   Ú_MAX_CONTENT_INDEXÚ_ConvertibleToIntÚchunkÚreturnc                 ó.  — ddl m} |j                  | j                  «       «      xs dj                  «       }|r|t        k(  s|j                  d«      ry	 t        j                  |«      }t        |t        «      sy|S # t        j                  $ r Y yw xY w)a8  Parse a single raw SSE line into a JSON object dict.

    Returns ``None`` for empty lines, ``event:`` lines, ``[DONE]`` markers,
    invalid JSON, or non-dict payloads. Centralizes the parsing step that
    feeds into the recovery helpers in this module so behavior stays
    consistent across all callers.
    r   )ÚCustomStreamWrapperÚ zevent:N)Ú,litellm.litellm_core_utils.streaming_handlerr   Ú_strip_sse_data_from_chunkÚstripr   Ú
startswithÚjsonÚloadsÚJSONDecodeErrorÚ
isinstanceÚdict)r   r   Ústripped_chunkÚparsed_chunks       új/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/responses/sse_output_recovery.pyÚparse_sse_json_chunkr      s‹   € õ Qà0×KÑKÈEÏKÉKËMÓZÒ`Ð^`×gÑgÓi€NÙ˜^Ô/EÒEÈ×IbÑIbÐckÔIlØðÜ&*§j¡j°Ó&@ˆô �l¤DÔ)ØØÐøô	 ×Ñò Ùðús   ÁA> Á>BÂBr   ÚkeyÚfallbackc                 óŽ   — | j                  |«      }|€|S 	 t        t        t        |«      «      S # t        t
        f$ r |cY S w xY w)N)ÚgetÚintr   r
   Ú	TypeErrorÚ
ValueError)r   r   r   Ú	raw_indexs       r   Ú_chunk_indexr%   ,   sN   € Ø#×'Ñ'¨Ó,€IØÐØˆðÜ”4Ô)¨9Ó5Ó6Ð6øÜ”zÐ"ò ØŠðús   —0 °AÁAÚoutput_itemsc                 ó~   — | j                  d«      }t        |t        «      syt        | dt	        |«      «      }|||<   y)zŒRecord an OUTPUT_ITEM_DONE chunk into ``output_items`` keyed by
    ``output_index`` (falling back to the next free slot when missing).
    ÚitemNÚoutput_index)r    r   r   r%   Úlen)r   r&   r(   r)   s       r   Úrecord_output_item_chunkr+   6   s>   € ð ×"Ñ" 6Ó*€DÜ�dœDÔ!ØÜ& |°^ÄSÈÓEVÓW€LØ!%€L�Òó    Útext_only_itemsc                 ó‚  — | j                  d«      }t        |t        «      syt        | dt	        |«      «      }||v ry|j                  |«      }|€#d| j                  d«      xs d|› �ddg d	œ}|||<   |j                  d
g «      }t        |t        «      syt        | dt	        |«      «      }|dk  s	|t        kD  ryt	        |«      |k  r$|j                  ddg dœ«       t	        |«      |k  rŒ$||   }t        |t        «      si }|||<   d|d<   ||d<   | j                  d«      �	| d   |d<   y|j                  dg «       y)zÑRecord an OUTPUT_TEXT_DONE chunk as a synthetic message item in
    ``text_only_items``. Real OUTPUT_ITEM_DONE events already captured in
    ``output_items`` take precedence at the same ``output_index``.
    ÚtextNr)   ÚmessageÚitem_idÚmsg_Ú	assistantÚ	completed)ÚtypeÚidÚroleÚstatusÚcontentr9   Úcontent_indexr   Úoutput_textr   )r5   r/   Úannotationsr5   r<   )
r    r   Ústrr%   r*   Ú
setdefaultÚlistr	   Úappendr   )	r   r&   r-   r/   r)   r(   r9   r:   Úcontent_items	            r   Úrecord_output_text_chunkrB   D   sl  € ð ×"Ñ" 6Ó*€DÜ�dœCÔ Øä& |°^ÄSÈÓEYÓZ€Là�|Ñ#Øà×Ñ˜|Ó,€DØ€|àØ×"Ñ" 9Ó-ÒF°4¸°~Ð1FØØ!Øñ
ˆð )-ˆ˜Ñ%à—_‘_ Y°Ó3€GÜ�gœtÔ$Øä'¨°oÄsÈ7Ã|ÓT€Mà�qÒ˜MÔ,>Ò>Øä
ˆg‹,˜-Ò
'Ø�‰à%ØØ!ñô	
ô ˆg‹,˜-Ó
'ð ˜=Ñ)€LÜ�l¤DÔ)ØˆØ!-ˆ�Ñà(€L�ÑØ€L�ÑØ×Ñ˜Ó&Ð2Ø&2°=Ñ&Aˆ�]Ò#à×Ñ ¨rÕ2r,   )Ú__doc__r   Úcollections.abcr   Útypingr   r   r   r   Úlitellm.constantsr   r	   Ú__annotations__r=   r
   r   Úobjectr   r!   r%   r+   rB   © r,   r   ú<module>rJ      s  ðòó Ý #ß 6Ó 6å 4à Ð �EÓ  à*¨SÑ0Ð �9Ó 0ð ð ¨¨S°&¨[Ñ(9¸DÑ(@ó ð.˜w s¨F {Ñ3ð ¸#ð Èð ÐQTó ð&Ø˜#˜v˜+Ñ&ð&à�s˜D  f Ñ-Ð-Ñ.ð&ð 
ó&ð93Ø˜#˜v˜+Ñ&ð93à˜#˜t C¨ KÑ0Ð0Ñ1ð93ð ˜#˜t C¨ KÑ0Ð0Ñ1ð93ð 
ô	93r,   