Ë
    uPêj%”  ã                   óp  — U d dl mZmZ d dlmZmZmZmZ d dlm	Z	 d dl
mZ d dlm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mZmZmZ erd dl mZmZ d dlm Z! d d	l"m#Z# d d
l$m%Z% neZ!dZ&ee'd<   deee(e)f      ddde(de*e!   de*e   f
d„Z+	 	 	 dde(de(dz  de(de(dz  de(dz  de,de*e   fd„Z- G d„ de«      Z.y)é    )ÚMappingÚSequence)ÚTYPE_CHECKINGÚAnyÚFinalÚcast)Úverbose_logger)Úuuid)Ú!BaseResponsesAPIStreamingIterator)ÚBaseLiteLLMOpenAIResponseObjectÚ
ErrorEventÚErrorEventErrorÚMCPCallArgumentsDeltaEventÚMCPCallArgumentsDoneEventÚMCPCallCompletedEventÚMCPCallFailedEventÚMCPCallInProgressEventÚMCPListToolsCompletedEventÚMCPListToolsFailedEventÚMCPListToolsInProgressEventÚResponsesAPIResponseÚResponsesAPIStreamEventsÚResponsesAPIStreamingResponse)ÚAsyncIteratorÚIterator)ÚTool)ÚUserAPIKeyAuth)ÚMCPToolResulté   ÚMAX_MCP_TOOL_CALL_ROUNDSÚmcp_tools_with_litellm_proxyÚuser_api_key_authúUserAPIKeyAuth | NoneÚbase_item_idÚpre_processed_mcp_toolsÚreturnc              ƒ   ó  K  — g }	 | D �cg c]\  }t        |t        «      rJd|v rFt        |j                  d«      x}t        «      r%|j	                  d«      r|j                  d«      d   ‘Œ^ }}t        t        j                  dd|¬«      }|j                  |«       |}	|	D �cg c]d  }t        |d«      r&t        t        |dd	«      «      r|j                  «       n/t        |d
«      r|j                  ndt        |dt        |«      «      i‘Œf }
}t        t        j                   dd|¬«      }|j                  |«       ddlm} d}| r6| d   }t        |t        «      r!|j                  dd«      }|�t        |«      nd}|	D �cg c]f  }t        |dd«      t        |dd«      ddidœt        j'                  t        |d«      st        |d«      rdndt        |dt        |dd	«      «      «      ¥‘Œh }} |t        j(                  dt+        di |d||dœ¤Ž¬«      }|j                  |«       t-        j.                  dt1        |«      «       |S c c}w c c}w c c}w # t2        $ r¡}t-        j4                  d|«       dd	l}|j9                  «        t;        t        j<                  dd|¬«      }|j                  |«       ddlm}  |t        j(                  dt+        di |ddg dœ¤Ž¬«      }|j                  |«       Y d	}~|S d	}~ww xY w­w)zECreate MCP discovery events using pre-processed tools from the parentÚ
server_urlzlitellm_proxy/mcp/ú/éÿÿÿÿé   r   ©ÚtypeÚsequence_numberÚoutput_indexÚitem_idÚ
model_dumpNÚ__dict__Únameé   ©ÚOutputItemDoneEventÚ Úserver_labelÚunknownÚdescriptionÚ	read_onlyF)r3   r:   ÚannotationsÚinputSchemaÚinput_schema)r>   © Úmcp_list_tools)Úidr-   r8   Útools©r-   r/   ÚitemzCreated %s MCP discovery eventsz(Error creating MCP list tools events: %s)Ú
isinstanceÚdictÚgetÚstrÚ
startswithÚsplitr   r   ÚMCP_LIST_TOOLS_IN_PROGRESSÚappendÚhasattrÚcallableÚgetattrr1   r2   r   ÚMCP_LIST_TOOLS_COMPLETEDÚlitellm.types.llms.openair6   ÚfromkeysÚOUTPUT_ITEM_DONEr   r	   ÚdebugÚlenÚ	ExceptionÚerrorÚ	tracebackÚ	print_excr   ÚMCP_LIST_TOOLS_FAILED)r!   r"   r$   r%   ÚeventsÚtoolr(   Ú_mcp_serversÚin_progress_eventÚfiltered_mcp_toolsÚ_mcp_tools_dictÚcompleted_eventr6   r8   Ú
first_toolÚserver_label_valueÚformatted_toolsÚoutput_item_done_eventÚerX   Úfailed_events                        úq/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/responses/mcp/mcp_streaming_iterator.pyÚcreate_mcp_list_tools_eventsri   %   sB  è ø€ ð :<€Fðr.ð 5ö
àÜ˜$¤Ô%Ø Ñ$Ü¨¯©°,Ó)?Ð?˜:ÄÔEØ×%Ñ%Ð&:Ô;ð ×Ñ˜SÓ! "Ó%ð
ˆð 
ô $?Ü)×DÑDØØØ ô	$
Ðð 	�‰Ð'Ô(ð %<Ðð +ö"
ð ô	 �t˜\Ô*¬x¼ÀÀlÐTXÓ8YÔ/Zð �O‰OÔô �t˜ZÔ(ð —’àœ' $¨´°D³	Ó:Ð;ñ	<ð"
ˆð "
ô "<Ü)×BÑBØØØ ô	"
ˆð 	�‰�oÔ&õ 	Bð ˆÙ'Ø <¸QÑ ?ˆJÜ˜*¤dÔ+Ø,6¯N©N¸>È2Ó,NÐ"Ø:LÐ:XœsÐ#5Ô6Ð^`�ð +ö"
ð ô    f¨iÓ8Ü& t¨]¸BÓ?Ø +¨UÐ3ñô —-‘-Ü)0°°}Ô)EÌÐQUÐWeÔIfÑ%ÐlnÜ˜D -´¸¸~ÈtÓ1TÓUóò	ð"
ˆð "
ñ "5Ü)×:Ñ:ØÜ0ñ à&Ø,Ø$0Ø,ñ	ñô"
Ðð 	�‰Ð,Ô-ä×ÑÐ>ÄÀFÃÔLðD €Mùòe
ùò,"
ùò<"
øô< ò .Ü×ÑÐGÈÔKÛà×ÑÔô 6Ü)×?Ñ?ØØØ ô	
ˆð 	�‰�lÔ#õ 	Bá!4Ü)×:Ñ:ØÜ0ñ à&Ø,Ø$&Øñ	ñô"
Ðð 	�‰Ð,×-Ð-à€MûðA.üs]   ‚L †I ŠA!IÁ+6I Â!A)I	Ä
A4I Å>A+IÇ)AI ÉL ÉI É	K=ÉBK8Ë2L Ë8K=Ë=L NÚ	tool_nameÚtool_call_idÚ	argumentsÚresultÚsequence_startc                 ó  — g }|xs$ dt        j                  «       j                  dd › �}t        t        j
                  |d|¬«      }|j                  |«       t        t        j                  d|||dz   ¬«      }	|j                  |	«       t        t        j                  d|||dz   ¬	«      }
|j                  |
«       |�—t        t        j                  |d
z   |d¬«      }|j                  |«       ddlm}  |t        j                  dt!        di |ddt        j                  «       j                  dd › �|d| |ddœ¤Ž¬«      }|j                  |«       |S t#        t        j$                  |d
z   |d¬«      }|j                  |«       |S )z7Create MCP call events following OpenAI's specificationÚmcp_Né   r   r,   r+   )r-   r/   r0   Údeltar.   r4   )r-   r/   r0   rl   r.   é   ©r-   r.   r0   r/   r5   Úmcp_callÚmcpr_Úlitellm©rA   r-   Úapproval_request_idrl   rW   r3   Úoutputr8   rC   r?   )r
   Úuuid4Úhexr   r   ÚMCP_CALL_IN_PROGRESSrL   r   ÚMCP_CALL_ARGUMENTS_DELTAr   ÚMCP_CALL_ARGUMENTS_DONEr   ÚMCP_CALL_COMPLETEDrQ   r6   rS   r   r   ÚMCP_CALL_FAILED)rj   rk   rl   rm   r$   rn   r[   r0   r^   Úarguments_delta_eventÚarguments_done_eventra   r6   re   rg   s                  rh   Úcreate_mcp_call_eventsr„   ¦   s­  € ð :<€FØ!ÒB t¬D¯J©J«L×,<Ñ,<¸R¸aÐ,@Ð+AÐ%B€Gô  6Ü%×:Ñ:Ø&ØØô	 Ðð ‡M�MÐ#Ô$ô $>Ü%×>Ñ>ØØØØ&¨Ñ*ô$Ðð ‡M�MÐ'Ô(ô #<Ü%×=Ñ=ØØØØ&¨Ñ*ô#Ðð ‡M�MÐ&Ô'ð ÐÜ!6Ü)×<Ñ<Ø*¨QÑ.ØØô	"
ˆð 	�‰�oÔ&õ 	Bá(;Ü)×:Ñ:ØÜ0ñ à!Ø&Ø-2´4·:±:³<×3CÑ3CÀBÀQÐ3GÐ2HÐ+IØ!*Ø!Ø%Ø$Ø$-ñ	ñô)
Ðð  	�‰Ð,Ô-ð €Mô 1Ü)×9Ñ9Ø*¨QÑ.ØØô	
ˆð 	�‰�lÔ#à€Mó    c                   ó  — e Zd ZU dZeed<   ded<   	 	 	 ddddee   d	eeef   d
e	e
eef      dz  dddeeef   dz  fd„Zd d„Zdefd„Zdefd„Zd„ Zdefd„Zdefd„Zdedz  fd„Zdedefd„Zdefd„Zd d„Zd d„Zd d„Zd„ Zdefd„Zy)!ÚMCPEnhancedStreamingIteratora*  
    A complete MCP streaming iterator that handles the entire flow:
    1. Immediately emits MCP discovery events
    2. Makes the first LLM call and streams its response
    3. Handles tool execution and follow-up calls for auto-execute tools
    4. Emits tool execution events in the stream
    ÚmodelzSequence[MCPToolResult]Útool_resultsNÚbase_iteratorz?BaseResponsesAPIStreamingIterator | ResponsesAPIResponse | NoneÚ
mcp_eventsÚtool_server_mapr!   r"   r#   Úoriginal_request_paramsc                 ó–  — |xs g | _         || _        |xs i | _        | j                  «       | _        d| _        d| _        || _        g | _        d| _	        || _
        || _        || _        d | _        d| _        d | _        | j                  j!                  dd«      | _        i | _        | j                  j!                  dd «      | _        | j                  j!                  d«      | _        | j                  j!                  d	«      | _        | j-                  «        d| _        d| _        d | _        d | _        d | _        d| _        d| _        y )
NÚinitial_responseFTr   rˆ   r9   Úcustom_llm_providerÚlitellm_call_idÚlitellm_trace_id)r!   r"   r�   Ú_should_auto_execute_toolsÚshould_auto_executeÚphaseÚfinishedÚmcp_discovery_eventsÚtool_execution_eventsÚmcp_discovery_generatedr‹   rŒ   rŠ   Úcollected_responseÚtool_call_roundÚ_tool_results_for_responserG   rˆ   Úlitellm_metadatar�   r‘   r’   Ú _extract_mcp_headers_from_paramsÚis_asyncÚinitial_events_emittedÚ_cached_response_idÚ_initial_creation_errorÚ_stream_errorÚ_error_event_emittedÚ_last_sequence_number)ÚselfrŠ   r‹   rŒ   r!   r"   r�   s          rh   Ú__init__z%MCPEnhancedStreamingIterator.__init__  se  € ð -IÒ,NÈBˆÔ)Ø!2ˆÔØ'>Ò'DÀ"ˆÔ$Ø#'×#BÑ#BÓ#DˆÔ ð (ˆŒ
ØˆŒð ð 	Ô!ð KMˆÔ"Ø'+ˆÔ$Ø$ˆŒØ.ˆÔð ð 	Ôð
 @DˆÔð  !ˆÔð HLˆÔ'ð ×1Ñ1×5Ñ5°g¸yÓIˆŒ
Ø "ˆÔØ#'×#?Ñ#?×#CÑ#CÐDYÐ[_Ó#`ˆÔ Ø#×;Ñ;×?Ñ?Ð@QÓRˆÔØ $× <Ñ <× @Ñ @ÐASÓ TˆÔà×-Ñ-Ô/ð ˆŒð ',ˆÔ#ð 04ˆÔ à9=ˆÔ$Ø/3ˆÔØ$)ˆÔ!Ø%&ˆÕ"r…   r&   c                 ó®  — ddl m} ddlm} d}| j                  j                  d«      }|r!t        |t        «      r|j                  d«      }d| _        d| _	        d| _
        || _        |rJ ||«      }|j                  |«      | _        |j                  |«      | _	        |j                  |«      | _
        | j                  j                  d«      }|�r|D ]ý  }t        |t        «      sŒ|j                  d«      d	k(  sŒ)|j                  d
i «      }|sŒ>t        |t        «      sŒO ||«      }	|j                  |	«      }
|
rf| j                  €i | _	        |
j                  «       D ]@  \  }}|| j                  vri | j                  |<   | j                  |   j!                  |«       ŒB | j                  €i | _        | j                  j!                  |«       Œÿ yy)zFExtract MCP headers from original request params to pass to tool callsr   )ÚHeaders)ÚMCPRequestHandlerNÚsecret_fieldsÚraw_headersrB   r-   ÚmcpÚheaders)Ústarlette.datastructuresr©   ÚAlitellm.proxy._experimental.mcp_server.auth.user_api_key_auth_mcprª   r�   rG   rE   rF   Úmcp_auth_headerÚmcp_server_auth_headersÚoauth2_headersr¬   Ú!_get_mcp_auth_header_from_headersÚ)_get_mcp_server_auth_headers_from_headersÚ _get_oauth2_headers_from_headersÚitemsÚupdate)r¦   r©   rª   Úraw_headers_from_requestr«   Úheaders_objrB   r\   Útool_headersÚheaders_obj_from_toolÚtool_mcp_server_auth_headersÚserver_aliasÚheaders_dicts                rh   rž   z=MCPEnhancedStreamingIterator._extract_mcp_headers_from_paramsM  sØ  € õ 	5õ	
ð
 ;?Ð Ø#×;Ñ;×?Ñ?ÀÓPˆÙœZ¨´tÔ<Ø'4×'8Ñ'8¸Ó'GÐ$ð ,0ˆÔØIMˆÔ$Ø59ˆÔØ2JˆÔá#Ù!(Ð)AÓ!BˆKØ#4×#VÑ#VÐWbÓ#cˆDÔ Ø+<×+fÑ+fÐgrÓ+sˆDÔ(Ø"3×"TÑ"TÐU`Ó"aˆDÔð 15×0LÑ0L×0PÑ0PÐQXÓ0YˆÚØò >�Ü˜d¤DÕ)¨d¯h©h°vÓ.>À%Ó.GØ#'§8¡8¨I°rÓ#:�LÚ#¬
°<ÄÕ(Fá07¸Ó0EÐ-Ø7H×7rÑ7rØ1ó8Ð4ñ 8Ø#×;Ñ;ÐCØ?A Ô <ð
 ">×!CÑ!CÓ!Eò`ñ !Ø ,Ø ,à#/°t×7SÑ7SÑ#SØQS D×$@Ñ$@ÀÑ$NØ $× <Ñ <¸\Ñ J× QÑ QÐR^Õ _ð`ð  ×+Ñ+Ð3Ø/1˜DÔ,Ø×(Ñ(×/Ñ/°Õ=ñ3>ð r…   c                 óD   — ddl m} |j                  | j                  «      S )z&Check if tools should be auto-executedr   ©ÚLiteLLM_Proxy_MCP_Handler)Ú/litellm.responses.mcp.litellm_proxy_mcp_handlerrÂ   r“   r!   )r¦   rÂ   s     rh   r“   z7MCPEnhancedStreamingIterator._should_auto_execute_tools†  s    € õ	
ð )×CÑCÀD×DeÑDeÓfÐfr…   c                 óÔ   — | j                   }t        |dd «      }t        t        j                  | j
                  dz   t        d|�t        |«      nd|�t        |«      ndd ¬«      ¬«      S )NÚstatus_coder+   Úmcp_gateway_errorÚinternal_errorzMCP gateway stream failed)r-   ÚcodeÚmessageÚparam)r-   r.   rW   )r£   rO   r   r   ÚERRORr¥   r   rH   )r¦   ÚerrrÅ   s      rh   Ú_make_stream_error_eventz5MCPEnhancedStreamingIterator._make_stream_error_eventŽ  sk   € Ø×'Ñ'ˆÜ%,¨S°-ÀÓ%FˆÜÜ)×/Ñ/Ø ×6Ñ6¸Ñ:Ü!Ø(Ø)4Ð)@”S˜Ô%ÐFVØ$' Oœ˜CœÐ9TØô	ô	
ð 		
r…   c                 ó   — | S ©Nr?   ©r¦   s    rh   Ú	__aiter__z&MCPEnhancedStreamingIterator.__aiter__œ  ó   € Øˆr…   c              ƒ   ó¨   K  — | j                  «       ƒ d {  –—† }t        |dd «      }t        |t        «      r|| j                  kD  r|| _        |S 7 Œ9­w)Nr.   )Ú_anext_implrO   rE   Úintr¥   )r¦   Úchunkr.   s      rh   Ú	__anext__z&MCPEnhancedStreamingIterator.__anext__Ÿ  sO   è ø€ Ø!×-Ñ-Ó/×/ˆÜ!(¨Ð0AÀ4Ó!HˆÜ�o¤sÔ+°À$×B\ÑB\Ò0\Ø)8ˆDÔ&Øˆð	 0ús   ‚A–A—:Ac              ƒ   óà  K  — | j                   dk(  r| j                  «       ƒ d{  –—† }|�|S | j                   dk(  r.| j                  r| j                  j                  d«      S d| _         | j                   dk(  r	 | j	                  «       ƒ d{  –—† S | j                   dk(  r¦| j                  r| j                  j                  d«      S | j                  «       ƒ d{  –—†  | j                  �d| _         | j                  «       ƒ d{  –—† S d| _         | j                  �#| j                  sd| _        | j                  «       S t
        ‚| j                   dk(  r5| j                  �#| j                  sd| _        | j                  «       S t
        ‚t
        ‚7 �Œm7 �Œ# t
        $ rE | j                  r-| j                  r!d| _         | j                  «       ƒ d{  –—†7   nd| _         ‚ Y �ŒRw xY w7 �Œ7 Œä­w)	aˆ  
        Phase-based streaming:
        1. initial_response - Stream the first LLM response (includes response.created, response.in_progress, response.output_item.added)
        2. mcp_discovery - Emit MCP discovery events (after response.output_item.added)
        3. continue_initial_response - Stream the current round's response (initial or follow-up).
           On completion, if auto-execute is on and the response contains tool calls, loops back
           through tool_execution/follow-up instead of ending, up to MAX_MCP_TOOL_CALL_ROUNDS.
        4. tool_execution - Emit tool execution events
        5. finished - End iteration
        r�   NÚmcp_discoveryr   Úcontinue_initial_responseÚtool_executionr–   T)r•   Ú_handle_initial_response_phaser—   ÚpopÚ_process_base_iterator_chunkÚStopAsyncIterationr”   rš   Ú_generate_tool_execution_eventsr˜   Ú_create_follow_up_iteratorrŠ   r×   r£   r¤   rÍ   )r¦   rm   s     rh   rÔ   z(MCPEnhancedStreamingIterator._anext_impl¦  sÓ  è ø€ ð �:‰:Ð+Ò+Ø"&×"EÑ"EÓ"G×GˆFØÐ!Ø�ð �:‰:˜Ò(à×(Ò(Ø×0Ñ0×4Ñ4°QÓ7Ð7Ø4ˆDŒJð �:‰:Ð4Ò4ð	Ø!×>Ñ>Ó@×@Ð@ð �:‰:Ð)Ò)à×)Ò)Ø×1Ñ1×5Ñ5°aÓ8Ð8ð ×1Ñ1Ó3×3Ð3Ø×!Ñ!Ð-Ø8�”
Ø!Ÿ^™^Ó-×-Ð-Ø#ˆDŒJØ×!Ñ!Ð-°d×6OÒ6OØ,0�Ô)Ø×4Ñ4Ó6Ð6Ü$Ð$ð �:‰:˜Ò#Ø×!Ñ!Ð-°d×6OÒ6OØ,0�Ô)Ø×4Ñ4Ó6Ð6Ü$Ð$ô !Ð ðm Hùð AúÜ%ò à×+Ò+°×0GÒ0GØ!1�D”JØ×>Ñ>Ó@×@Ò@à!+�D”JØò Að	úð( 4ùð .úsr   ‚#G.¥F¦AG.Á;F ÂFÂF ÂA
G.ÃG)Ã*G.ÄG,ÄBG.ÆF Æ;G&ÇGÇG&Ç"G.Ç%G&Ç&G.Ç,G.c              ƒ   óè  K  — | j                   €| j                  «       ƒ d{  –—†  | j                   €!| j                  rd| _        yd| _        t        ‚| j                   �r¶t        | j                   d«      �r;	 t        d| j                   «      j                  «       ƒ d{  –—† }| j                  €Xt        |d«      rLt        |dd«      }|r=t        |d«      r1|j                  | _        t        j                  d| j                  «       | j                  s<t        |d	«      r0t        |d	d«      }|t        j                  k(  rd
| _        d| _        |S | j                   rT| j#                  |«      rCt        |dd«      }t%        |t&        «      r|| _        d| _        | j+                  «       ƒ d{  –—†  |S | j                   rKt%        | j                   t&        «      r1| j                   | _        d| _        | j+                  «       ƒ d{  –—†  yd| _        t        ‚y7 �Œö7 �Œ{7 Œq# t        $ rD | j                   r-| j(                  r!d| _        | j+                  «       ƒ d{  –—†7   nd| _        ‚ Y yw xY w7 Œk­w)zÞ
        Handle Phase 1: Initial Response Stream.

        Returns a chunk to emit, or None to fall through to the next phase.
        Raises StopAsyncIteration when the stream is exhausted with no auto-execution.
        NrÙ   r–   r×   ú,AsyncIterator[ResponsesAPIStreamingResponse]ÚresponserA   zCached response ID: %sr-   TrÛ   )rŠ   Ú!_create_initial_response_iteratorr—   r•   rß   rM   r   r×   r¡   rO   rA   r	   rT   r    r   ÚOUTPUT_ITEM_ADDEDr”   Ú_is_response_completedrE   r   rš   rà   )r¦   rÖ   Úresponse_objÚ
chunk_types       rh   rÜ   z;MCPEnhancedStreamingIterator._handle_initial_response_phaseì  sO  è ø€ ð ×ÑÐ%Ø×8Ñ8Ó:×:Ð:à×ÑÐ%à×(Ò(Ø,�”
ð ð (�”
Ü(Ð(ð ×ÓÜ�t×)Ñ)¨;Õ7ð#ÜHLØFÈ×HZÑHZóIç‘i“k÷C"�Eð
 ×/Ñ/Ð7¼GÀEÈ:Ô<VÜDKÈEÐS]Ð_cÓDd˜Ù'¬G°LÀ$Ô,GØ7C·±˜DÔ4Ü*×0Ñ0Ð1IÈ4×KcÑKcÔdð  ×6Ò6¼7À5È&Ô;QÜ,3°E¸6À4Ó,H˜
Ø%Ô)A×)SÑ)SÒSØ:>˜DÔ7Ø)8˜DœJØ#(˜Lð ×/Ò/°D×4OÑ4OÐPUÔ4VÜ'.¨u°jÀ$Ó'G˜Ü% lÔ4HÔIØ6B˜DÔ3Ø%5˜œ
Ø"×BÑBÓD×DÐDà �Lð ×+Ò+´
¸4×;MÑ;MÔOcÔ0dØ.2×.@Ñ.@�DÔ+Ø!1�D”JØ×>Ñ>Ó@×@Ð@ð ð ",�D”JÜ,Ð,Øðu ;ùðC"ùð2 Eùô *ò Ø×/Ò/°D×4KÒ4KØ%5˜œ
Ø"×BÑBÓD×DÒDà%/˜œ
Øð Eð ð!úð Aús   ‚ I2¢H£AI2Á9'H  Â HÂ!B/H  ÅI2ÅAH  Æ,HÆ-H  Æ2AI2ÈI0ÈI2ÈH  ÈH  È ;I-ÉIÉI-É*I2É,I-É-I2rÖ   c                 óF   — ddl m} t        |dd«      }||j                  k(  S )z7Check if this chunk indicates the response is completedr   )r   r-   N)rQ   r   rO   ÚRESPONSE_COMPLETED)r¦   rÖ   r   ré   s       rh   rç   z3MCPEnhancedStreamingIterator._is_response_completed2  s%   € åFä$+¨E°6¸4Ó$@ˆ
ØÐ5×HÑHÑHÐHr…   c              ƒ   ó  K  — | j                   rt        | j                   d«      st        ‚t        d| j                   «      j	                  «       ƒ d{  –—† }| j
                  €3t        |d«      r't        |dd«      }|�t        |dd«      nd}|r|| _        | j
                  r|t        |d«      rpt        |dd«      }|rat        |d«      rU|j                  | j
                  k7  r<t        j                  d|j                  | j
                  «       | j
                  |_        | j                  rT| j                  |«      rCt        |dd«      }t        |t        «      r|| _        d| _        | j!                  «       ƒ d{  –—†  |S 7 �Œ.7 Œ	­w)zb
        Process a chunk from the base iterator with response ID consistency enforcement.
        r×   rã   Nrä   rA   z"Updating response ID from %s to %srÛ   )rŠ   rM   rß   r   r×   r¡   rO   rA   r	   rT   r”   rç   rE   r   rš   r•   rà   )r¦   rÖ   Únew_responseÚnew_response_idrè   s        rh   rÞ   z9MCPEnhancedStreamingIterator._process_base_iterator_chunk9  s_  è ø€ ð ×!Ò!¬°×1CÑ1CÀ[Ô)QÜ$Ð$ä<@Ø:¸D×<NÑ<Nó=
ç
‰)‹+÷7ˆð ×#Ñ#Ð+´¸¸zÔ0JÜ?FÀuÈjÐZ^Ó?_ˆLØJVÐJb¤W¨\¸4ÀÔ%FÐhlˆOÙØ+:�Ô(ð ×#Ò#¬°°zÔ(BÜ8?ÀÀzÐSWÓ8XˆLÙ¤¨°dÔ ;Ø—?‘? d×&>Ñ&>Ò>Ü"×(Ñ(Ø<¸l¿o¹oÈt×OgÑOgôð '+×&>Ñ&>�L”Oð ×#Ò#¨×(CÑ(CÀEÔ(Jä" 5¨*°dÓ;ˆLÜ˜,Ô(<Ô=Ø*6�Ô'à)ˆDŒJØ×6Ñ6Ó8×8Ð8àˆð=7ùð8 9ús%   ‚AFÁF ÁD&FÅ9FÅ:FÆFc              ƒ   ól  K  — 	 ddl m} | j                  j                  «       }d|d<   i }|j	                  «       D ]
  \  }}|||<   Œ |j                  d«      rt        |j                  dg «      «      nd}t        j                  d|«        |di |¤Žƒ d{  –—† }t        |d«      st        |d	«      r{|| _
        t        |d
| j                  «      | _        t        |di «      | _        t        |d| j                  «      | _        t        j                  dt        | j                  «      «       yt        j                   dt        |«      «       d| _
        d| _        y7 ŒÅ# t$        $ rI}t        j&                  d|«       ddl}	|	j+                  «        d| _
        || _        || _        Y d}~yd}~ww xY w­w)zACreate the initial response iterator by making the first LLM callr   ©Ú
aresponsesTÚstreamrB   zMaking LLM call with %s toolsNrÑ   Ú__iter__rˆ   r�   r�   zCreated base iterator: %szGot non-streaming response: %sr–   z,Error creating initial response iterator: %sr?   )Úlitellm.responses.mainrñ   r�   Úcopyr·   rG   rU   r	   rT   rM   rŠ   rO   rˆ   r�   r�   r-   Úwarningr•   rV   rW   rX   rY   r¢   r£   )
r¦   rñ   ÚparamsÚparams_for_llmÚkeyÚvalueÚtools_counträ   rf   rX   s
             rh   rå   z>MCPEnhancedStreamingIterator._create_initial_response_iterator`  s–  è ø€ ð&	#å9ð 04×/KÑ/K×/PÑ/PÓ/RˆFØ#ˆF�8Ñð %'ˆNØ$Ÿl™l›nò ,‘
��UØ&+�˜sÒ#ð,ð JX×I[ÑI[Ð\cÔId¤ ^×%7Ñ%7¸ÀÓ%DÔ!EÐjkˆKÜ× Ñ Ð!@À+ÔNÙ$.Ñ$@°Ñ$@×@ˆHô �x Ô-´¸À:Ô1NØ%-�Ô"ä$ X¨w¸¿
¹
ÓC�”
Ü(/°Ð:LÈbÓ(Q�Ô%Ü+2°8Ð=RÐTX×TlÑTlÓ+m�Ô(Ü×$Ñ$Ð%@Ä$Àt×GYÑGYÓBZÕ[ô ×&Ñ&Ð'GÌÈhËÔXØ%)�Ô"Ø'�•
ð Aùô  ò 	#Ü× Ñ Ð!OÐQRÔSÛà×ÑÔ!Ø!%ˆDÔØ+,ˆDÔ(Ø!"ˆD×Ñûð	#üsN   ‚F4„BE ÂEÂBE Ä.F4Ä/-E ÅF4ÅE Å	F1Å(?F,Æ'F4Æ,F1Æ1F4c              ƒ   óP  K  — | j                   syddlm} 	 | j                   �|j                  | j                   «      }ng }|sy| xj                  dz  c_        |D ]ˆ  }|j                  |«      \  }}}|sŒ|sŒt        |||xs dddt        j                  «       j                  dd › �t        | j                  «      dz   ¬«      }| j                  j                  |dd	 «       ŒŠ |j                  | j                  || j                  | j                   | j"                  | j$                  | j&                  | j(                  | j*                  |j-                  | j.                  «      ¬
«
      ƒ d{  –—† }|D �]:  }	|	j1                  dd«      }|	j1                  dd«      }
d}d}|D ]*  }|j                  |«      \  }}}||k(  sŒ|xs d}|xs d} n dt        j                  «       j                  dd › �}t3        t4        j6                  t        | j                  «      dz   |d¬«      }| j                  j9                  |«       ddlm}  |t4        j>                  dtA        di |ddt        j                  «       j                  dd › �|d||
ddœ¤Ž¬«      }| j                  j9                  |«       �Œ= || _!        | j                   | _"        y7 �Œ^# tF        $ rL}tI        jJ                  d|«       ddl&}|jO                  «        g | _!        | j                   | _"        Y d}~yd}~ww xY w­w)z0Generate tool execution events and execute toolsNr   rÁ   r+   z{}rp   rq   )rj   rk   rl   rm   r$   rn   r*   )
rŒ   Ú
tool_callsr"   r±   r²   r³   r¬   r‘   r’   Úrequest_tagsrk   r9   rm   r7   rt   r5   ru   rv   rw   rx   rC   zError in tool execution: %sr?   )(rš   rÃ   rÂ   Ú!_extract_tool_calls_from_responser›   Ú_extract_tool_call_detailsr„   r
   r{   r|   rU   r˜   ÚextendÚ_execute_tool_callsrŒ   r"   r±   r²   r³   r¬   r‘   r’   Ú_get_parent_request_tagsr�   rG   r   r   r€   rL   rQ   r6   rS   r   r‰   rœ   rV   r	   rW   rX   rY   )r¦   rÂ   rý   Ú	tool_callrj   Útool_argumentsrk   Úcall_eventsr‰   Útool_resultÚresult_textr3   ÚargsÚcall_idr0   ra   r6   re   rf   rX   s                       rh   rà   z<MCPEnhancedStreamingIterator._generate_tool_execution_eventsŒ  sN  è ø€ à×&Ò&Øõ	
ðh	Fà×&Ñ&Ð2Ø6×XÑXÐY]×YpÑYpÓq‘
à�
ÙØØ× Ò  AÑ%Õ à'ò H�	ð
 .×HÑHÈÓSñ	ØØ"Ø â¢ä"8Ø"+Ø%1Ø"0Ò"8°DØ#Ø'+¬D¯J©J«L×,<Ñ,<¸R¸aÐ,@Ð+AÐ%BÜ'*¨4×+EÑ+EÓ'FÈÑ'Jô#�Kð ×.Ñ.×5Ñ5°kÀ#À2Ð6FÕGð#Hð( )B×(UÑ(UØ $× 4Ñ 4Ø%Ø"&×"8Ñ"8Ø $× 4Ñ 4Ø(,×(DÑ(DØ#×2Ñ2Ø ×,Ñ,Ø $× 4Ñ 4Ø!%×!6Ñ!6Ø6×OÑOÐPT×PlÑPlÓmð )Vó )÷ #ˆLð  ,ó 0J�Ø*Ÿ™¨~¸yÓI�Ø)Ÿo™o¨h¸Ó;�ð &�	Ø!%�Ø!+ò 	�Ið
 2×LÑLÈYÓWñ	ØØØà ,Ó.Ø$(Ò$5¨I˜	Ø)-ª°˜Ùð	ð !¤§¡£×!1Ñ!1°"°1Ð!5Ð 6Ð7�ô #8Ü1×DÑDÜ$'¨×(BÑ(BÓ$CÀaÑ$GØ#Ø!"ô	#�ð ×*Ñ*×1Ñ1°/ÔBõ Já)<Ü1×BÑBØ!"Ü8ñ à")Ø$.Ø5:¼4¿:¹:»<×;KÑ;KÈBÈQÐ;OÐ:PÐ3QØ)7Ø%)Ø$-Ø&1Ø,5ñ	ñô*Ð&ð  ×*Ñ*×1Ñ1Ð2HÖIða0Jðf !-ˆDÔØ.2×.EÑ.EˆDÕ+ðE#úôH ò 	FÜ× Ñ Ð!>ÀÔBÛà×ÑÔ!Ø "ˆDÔØ.2×.EÑ.EˆD×+Ñ+ûð	Füsb   ‚L&—,K ÁL&Á1K Á6K Á9C4K Å-KÅ.AK Ç D
K Ë
L&ËK Ë	L#ËALÌL&ÌL#Ì#L&c              ƒ   ó  K  — | j                   �| j                   | j                  urd| _        yddlm} ddlm} 	 | j                   �p|j                  | j                   | j                  | j                  j                  d«      ¬«      }| j                  j                  «       }|j                  |ddœ«       ny|j                  d	d«       | j                  t        k\  r,|j                  d
d«       t!        j"                  dt        «        |di |¤Žƒ d{  –—† }t%        |d«      r|| _        d| _         d| _        yy7 Œ'# t(        $ rB}t!        j*                  d|«       ddl}|j/                  «        d| _        || _        Y d}~yd}~ww xY w­w)z8Create the follow-up response iterator with tool resultsNr   rð   rÁ   Úinput)rä   r‰   Úoriginal_inputT)r  rò   Útool_choicerB   zPMCP auto-execute hit MAX_MCP_TOOL_CALL_ROUNDS=%s; forcing a text-only follow-up.rÑ   z%Error creating follow-up iterator: %sr?   )rš   rœ   rŠ   rô   rñ   rÃ   rÂ   Ú_create_follow_up_inputr‰   r�   rG   rõ   r¸   rÝ   r›   r    r	   rö   rM   r¡   rV   rW   rX   rY   r£   )r¦   rñ   rÂ   Úfollow_up_inputÚfollow_up_paramsÚfollow_up_responserf   rX   s           rh   rá   z7MCPEnhancedStreamingIterator._create_follow_up_iteratorþ  s‰  è ø€ à×"Ñ"Ð*¨d×.EÑ.EÈT×MlÑMlÑ.lð
 "&ˆDÔØå5õ	
ð0	#à×&Ñ&Ð2Ø)B×)ZÑ)ZØ!×4Ñ4Ø!%×!2Ñ!2Ø#'×#?Ñ#?×#CÑ#CÀGÓ#Lð *[ó *�ð +/×*FÑ*F×*KÑ*KÓ*MÐ Ø ×'Ñ'à!0Ø"&ñõð à× Ñ  °Ô5à×#Ñ#Ô'?Ò?ð !×$Ñ$ W¨dÔ3Ü×&Ñ&ØfÜ,ôñ
 /9Ñ.LÐ;KÑ.L×(LÐô
 Ð)¨;Ô7Ø%7�Ô"Ø*.�Ô'Ø+/�Õ(ð 8ð )Mùô ò 	#Ü× Ñ Ð!HÈ!ÔLÛà×ÑÔ!Ø!%ˆDÔØ!"ˆD×Ñûð	#üsN   ‚9F¼A<D? Â8FÂ9AD? ÄD=Ä%D? Ä;FÄ=D? Ä?	F
Å8FÆ FÆF
Æ
Fc                 ó   — | S rÏ   r?   rÐ   s    rh   ró   z%MCPEnhancedStreamingIterator.__iter__?  rÒ   r…   c                 ó8  — | j                   r| j                   j                  d«      S | j                  sH	 | j                  r5t	        | j                  d«      rt        t        d| j                  «      «      S t        ‚t        d«      ‚# t        $ r	 d| _        ‚ w xY w)Nr   Ú__next__z'Iterator[ResponsesAPIStreamingResponse]Tz+Cannot use sync iteration on async iterator)
r‹   rÝ   rŸ   rŠ   rM   Únextr   ÚStopIterationr–   ÚRuntimeErrorrÐ   s    rh   r  z%MCPEnhancedStreamingIterator.__next__B  s“   € à�?Š?Ø—?‘?×&Ñ& qÓ)Ð)ð �}Š}ð	Ø×%Ò%¬'°$×2DÑ2DÀjÔ*QÜÜÐFÈ×HZÑHZÓ[óð ô (Ð'ô
 ÐLÓMÐMøô	 !ò Ø $�”Øðús   µA B Á6B ÂB)NNN)r&   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rH   Ú__annotations__Úlistr   rF   r   r   Úobjectr   r§   rž   Úboolr“   rÍ   rÑ   r×   rÔ   rÜ   rç   rÞ   rå   rà   rá   ró   r  r?   r…   rh   r‡   r‡   ù   s;  … ñð ƒJØ+Ó+ð OSØ59Ø9=ñF'àXðF'ð Ð6Ñ7ðF'ð ˜c 3˜h™ð	F'ð
 '/¨w°s¸F°{Ñ/CÑ&DÀtÑ&KðF'ð 3ðF'ð "& c¨3 h¡°$Ñ!6óF'óP7>ðrg¨Dó gð
Ð*Gó 
òðÐ!>ó ðD!Ð#@ó D!ðLDà	&¨Ñ	-óDðLIÐ,Ið IÈdó Ið%Ð4Qó %óN(#óXpFód?#òBðNÐ7ô Nr…   r‡   )NNr+   )/Úcollections.abcr   r   Útypingr   r   r   r   Úlitellm._loggingr	   Úlitellm._uuidr
   Ú$litellm.responses.streaming_iteratorr   rQ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú	mcp.typesr   ÚMCPToolÚlitellm.proxy._typesr   rÃ   r   r    r  rH   r  r  ri   rÕ   r„   r‡   r?   r…   rh   ú<module>r)     s  ðß -Ð -ß 2Ó 2å +Ý Ý R÷÷ ÷ ÷ ñ" ß7å)å3ÞMà€Gà"#Ð ˜%Ó #ð~Ø"*¨7°3¸°;Ñ+?Ñ"@ð~à.ð~ð ð~ð " '™]ð	~ð
 
Ð
'Ñ(ó~ðJ Ø#ØñPØðPà˜‘*ðPð ðPð �$‰Jð	Pð
 ˜‘*ðPð ðPð 
Ð
'Ñ(óPôf[	NÐ#Dõ [	Nr…   