Ë
    uPêjt  ã                   óX  — U d Z ddlZddlZddlZddlZddlmZmZmZ ddl	m
Z
mZmZmZ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 dd
lmZmZ e
rddl m!Z" ddl#m$Z$m%Z% e"Z&neZ&eZ%eZ$ G d„ ded¬«      Z'ee'z  Z(ee)d<    G d„ ded¬«      Z* G d„ ded¬«      Z+ G d„ ded¬«      Z, G d„ ded¬«      Z- G d„ de«      Z. G d„ ded¬«      Z/ G d„ ded¬«      Z0 G d „ d!ed¬«      Z1 G d"„ d#ed¬«      Z2 G d$„ d%e«      Z3 G d&„ d'e«      Z4 G d(„ d)«      Z5 e5«       Z6ee)d*<   y)+a…  
Handler for Azure Foundry Agent Service API.

This handler executes the multi-step agent flow:
1. Create thread (or use existing)
2. Add messages to thread
3. Create and poll a run
4. Retrieve the assistant's response messages

Model format: azure_ai/agents/<agent_id>
API Base format: https://<AIFoundryResourceName>.services.ai.azure.com/api/projects/<ProjectName>

Authentication: Uses Azure AD Bearer tokens (not API keys)
  Get token via: az account get-access-token --resource 'https://ai.azure.com'

Supports both polling-based and native streaming (SSE) modes.

See: https://learn.microsoft.com/en-us/azure/ai-foundry/agents/quickstart
é    N)ÚAsyncIteratorÚ	AwaitableÚMapping)ÚTYPE_CHECKINGÚAnyÚFinalÚProtocolÚ	TypeAliasÚ	TypedDict)ÚReadOnly)Úverbose_logger©Úencode_url_path_segment)ÚAzureAIAgentsConfigÚAzureAIAgentsError)ÚChatCompletionAnnotationÚ#ChatCompletionAnnotationURLCitation)ÚModelResponseÚModelResponseStream)ÚLogging)ÚAsyncHTTPHandlerÚHTTPHandlerc                   ó^   — e Zd ZU ee   ed<   ee   ed<   ee   ed<   ee   ed<   ee   ed<   y)Ú_AzureRawAnnotationÚtypeÚtextÚstart_indexÚ	end_indexÚurl_citationN)Ú__name__Ú
__module__Ú__qualname__r   ÚstrÚ__annotations__Úintr   © ó    úi/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/azure_ai/agents/handler.pyr   r   6   s6   … Ø
�3‰-ÓØ
�3‰-ÓØ˜#‘ÓØ˜‰}ÓØÐ>Ñ?Ô?r'   r   F)ÚtotalÚ_TransformedAnnotationc                   ó4   — e Zd ZU ee   ed<   eee      ed<   y)Ú
_AzureTextÚvalueÚannotationsN)r    r!   r"   r   r#   r$   Úlistr   r&   r'   r(   r,   r,   A   s   … Ø�C‰=ÓØ˜$Ð2Ñ3Ñ4Ô4r'   r,   c                   ó.   — e Zd ZU ee   ed<   ee   ed<   y)Ú_AzureContentItemr   r   N)r    r!   r"   r   r#   r$   r,   r&   r'   r(   r1   r1   F   s   … Ø
�3‰-ÓØ
�:Ñ
Ôr'   r1   c                   ó4   — e Zd ZU ee   ed<   eee      ed<   y)Ú_AzureMessageÚroleÚcontentN)r    r!   r"   r   r#   r$   r/   r1   r&   r'   r(   r3   r3   K   s   … Ø
�3‰-ÓØ�dÐ,Ñ-Ñ.Ô.r'   r3   c                   ó$   — e Zd ZU eee      ed<   y)Ú_AzureMessagesDataÚdataN)r    r!   r"   r   r/   r3   r$   r&   r'   r(   r7   r7   P   s   … Ø
�4˜Ñ&Ñ
'Ô'r'   r7   c                   ó   — e Zd ZU ee   ed<   y)Ú_CreatedObjectÚidN©r    r!   r"   r   r#   r$   r&   r'   r(   r:   r:   T   s   … Ø�‰Ôr'   r:   c                   ó   — e Zd ZU ee   ed<   y)Ú	_RunErrorÚmessageNr<   r&   r'   r(   r>   r>   X   s   … Ø�c‰]Ôr'   r>   c                   ó.   — e Zd ZU ee   ed<   ee   ed<   y)Ú
_RunStatusÚstatusÚ
last_errorN)r    r!   r"   r   r#   r$   r>   r&   r'   r(   rA   rA   \   s   … Ø�S‰MÓØ˜Ñ#Ô#r'   rA   c                   ó$   — e Zd ZU eee      ed<   y)Ú	_SSEDeltar5   N)r    r!   r"   r   r/   r1   r$   r&   r'   r(   rE   rE   a   s   … Ø�dÐ,Ñ-Ñ.Ô.r'   rE   c                   óD   — e Zd ZU ee   ed<   eee      ed<   ee   ed<   y)Ú_SSEEventDatar;   r5   ÚdeltaN)	r    r!   r"   r   r#   r$   r/   r1   rE   r&   r'   r(   rG   rG   e   s(   … Ø�‰ÓØ�dÐ,Ñ-Ñ.Ó.Ø�IÑÔr'   rG   c            	       óJ   — e Zd Zddededeeef   dz  dej                  fd„Zy)Ú_SyncAgentRequestNÚmethodÚurlÚ	json_dataÚreturnc                  ó   — y ©Nr&   ©ÚselfrK   rL   rM   s       r(   Ú__call__z_SyncAgentRequest.__call__l   s   � r'   rP   )	r    r!   r"   r#   r   ÚobjectÚhttpxÚResponserS   r&   r'   r(   rJ   rJ   k   s/   „ Ùs˜sÐs¨Ðs¸ÀÀfÀÑ9MÐPTÑ9TÐsÐ`e×`nÑ`nÔsr'   rJ   c            
       óR   — e Zd Z	 ddededeeef   dz  deej                     fd„Z	y)Ú_AsyncAgentRequestNrK   rL   rM   rN   c                  ó   — y rP   r&   rQ   s       r(   rS   z_AsyncAgentRequest.__call__p   s   € à$'r'   rP   )
r    r!   r"   r#   r   rT   r   rU   rV   rS   r&   r'   r(   rX   rX   o   sA   „ àNRñ(Øð(Ø #ð(Ø07¸¸V¸Ñ0DÀtÑ0Kð(à	�5—>‘>Ñ	"ô(r'   rX   c                   ó†  — e Zd ZdZd„ Zdededefd„Zdedededefd„Zdedededefd	„Zdeded
ededef
d„Z	dedededefd„Z
dededefd„Zdedeeee   dz  f   fd„Zdee   dz  dee   dz  fd„Z	 d-dededededeeeef      dee   dz  defd„Zdedededededz  deeeef   eeedz  ef   fd„Zdej2                  dee   defd „Z	 	 d.dedeeeef      dededed!eded"ed#ed$edz  dedz  defd%„Zd&e deded'ededz  deeeef      dedeeeee   dz  f   fd(„Z!	 	 d.dedeeeef      dededed!eded"ed#ed$e"dz  dedz  defd)„Z#d&e$deded'ededz  deeeef      dedeeeee   dz  f   fd*„Z%	 d-dedeeeef      deded!eded"ed#ededz  de&e'   fd+„Z(dej2                  dede&e'   fd,„Z)y)/ÚAzureAIAgentsHandlerzv
    Handler for Azure AI Agent Service.

    Executes the complete agent flow which requires multiple API calls.
    c                 ó"   — t        «       | _        y rP   )r   Úconfig)rR   s    r(   Ú__init__zAzureAIAgentsHandler.__init__|   s   € Ü)Ó+ˆ�r'   Úapi_baseÚapi_versionrN   c                 ó   — |› d|› �S )Nz/threads?api-version=r&   ©rR   r_   r`   s      r(   Ú_build_thread_urlz&AzureAIAgentsHandler._build_thread_url…   s   € Ø�Ð0°°Ð>Ð>r'   Ú	thread_idc                 ó0   — t        |d¬«      }|› d|› d|› �S ©Nrd   ©Ú
field_nameú	/threads/z/messages?api-version=r   ©rR   r_   rd   r`   Úencoded_thread_ids        r(   Ú_build_messages_urlz(AzureAIAgentsHandler._build_messages_urlˆ   ó*   € Ü#:¸9ÐQ\Ô#]ÐØ�˜9Ð%6Ð$7Ð7MÈkÈ]Ð[Ð[r'   c                 ó0   — t        |d¬«      }|› d|› d|› �S )Nrd   rg   ri   z/runs?api-version=r   rj   s        r(   Ú_build_runs_urlz$AzureAIAgentsHandler._build_runs_urlŒ   s*   € Ü#:¸9ÐQ\Ô#]ÐØ�˜9Ð%6Ð$7Ð7IÈ+ÈÐWÐWr'   Úrun_idc                 óP   — t        |d¬«      }t        |d¬«      }|› d|› d|› d|› �S )Nrd   rg   rp   ri   z/runs/z?api-version=r   )rR   r_   rd   rp   r`   rk   Úencoded_run_ids          r(   Ú_build_run_status_urlz*AzureAIAgentsHandler._build_run_status_url�   s>   € Ü#:¸9ÐQ\Ô#]ÐÜ 7¸È8Ô TˆØ�˜9Ð%6Ð$7°v¸nÐ=MÈ]Ð[fÐZgÐhÐhr'   c                 ó0   — t        |d¬«      }|› d|› d|› �S rf   r   rj   s        r(   Ú_build_list_messages_urlz-AzureAIAgentsHandler._build_list_messages_url•   rm   r'   c                 ó   — |› d|› �S )z@URL for the create-thread-and-run endpoint (supports streaming).z/threads/runs?api-version=r&   rb   s      r(   Ú _build_create_thread_and_run_urlz5AzureAIAgentsHandler._build_create_thread_and_run_url™   s   € à�Ð5°k°]ÐCÐCr'   Úmessages_dataNc                 óN  — |j                  dg «      D ]�  }|j                  d«      dk(  sŒ|j                  dg «      D ]d  }|j                  d«      dk(  sŒ|j                  di «      }|j                  dd«      }|j                  d	«      }| j                  |«      }||fc c S  Œ’ y
)zØExtract assistant content and annotations from the messages response.

        Returns (content, annotations) where annotations is a list of
        OpenAI-compatible ChatCompletionAnnotation dicts, or None.
        r8   r4   Ú	assistantr5   r   r   r-   Ú r.   )r{   N)ÚgetÚ_transform_annotations)rR   rx   ÚmsgÚcontent_itemÚtext_objr5   Úraw_annotationsr.   s           r(   Ú_extract_content_from_messagesz3AzureAIAgentsHandler._extract_content_from_messages    s­   € ð !×$Ñ$ V¨RÓ0ò 	4ˆCØ�w‰w�v‹ +Ó-Ø$'§G¡G¨I°rÓ$:ò 4�LØ#×'Ñ'¨Ó/°6Ó9Ø#/×#3Ñ#3°F¸BÓ#?˜Ø"*§,¡,¨w¸Ó";˜Ø*2¯,©,°}Ó*E˜Ø&*×&AÑ&AÀ/Ó&R˜Ø&¨Ð3Ô3ñ4ð	4ð r'   r�   c                 ó  — |syg }|D ]r  }|j                  d«      }|dk(  rIi |j                  di «      ¥}d|v rd|vr|d   |d<   d|v rd|vr|d   |d<   |j                  d|dœ«       Œb|j                  |«       Œt |r|S dS )a¬  Transform Azure AI Foundry annotations to OpenAI-compatible format.

        Azure AI returns annotations like:
            {"type": "url_citation", "text": "[1]", "start_index": 10,
             "end_index": 13, "url_citation": {"url": "...", "title": "..."}}

        OpenAI expects:
            {"type": "url_citation", "url_citation": {"url": "...", "title": "...",
             "start_index": 10, "end_index": 13}}
        Nr   r   r   r   )r   r   )r|   Úappend)rR   r�   ÚresultÚannÚann_typer   s         r(   r}   z+AzureAIAgentsHandler._transform_annotations³   sµ   € ñ Øà68ˆØ"ò 	#ˆCØ—w‘w˜v“ˆHØ˜>Ò)ØDcÀsÇwÁwÈ~Ð_aÓGbÐDc�ð ! CÑ'¨MÀÑ,MØ25°mÑ2D�L Ñ/Ø #Ñ%¨+¸\Ñ*IØ03°KÑ0@�L Ñ-Ø—‘ ~À|ÑTÕUð —‘˜cÕ"ð	#ñ  ˆvÐ) TÐ)r'   Úmodelr5   Úmodel_responseÚmessagesr.   c           
      óŽ  — ddl m}m}m}	 |ddœ}
|r||
d<    |dd |di |
¤Ž¬«      g|_        ||_        t        |d«      r|j                  €i |_        ||j                  d
<   	 ddlm	}  |d|¬«      } |d|d¬«      }t        |d |	||||z   ¬«      «       |S # t        $ r!}t        j                  d|«       Y d	}~|S d	}~ww xY w)z*Build the ModelResponse from agent output.r   )ÚChoicesÚMessageÚUsagerz   ©r5   r4   r.   Ústop)Úfinish_reasonÚindexr?   Ú_hidden_paramsNrd   )Útoken_counterzgpt-3.5-turbo)rˆ   rŠ   T)rˆ   r   Úcount_response_tokensÚusage)Úprompt_tokensÚcompletion_tokensÚtotal_tokensz#Failed to calculate token usage: %sr&   )Úlitellm.types.utilsrŒ   r�   rŽ   Úchoicesrˆ   Úhasattrr“   Úlitellm.utilsr”   ÚsetattrÚ	Exceptionr   Úwarning)rR   rˆ   r5   r‰   rd   rŠ   r.   rŒ   r�   rŽ   Úmessage_kwargsr”   r—   r˜   Úes                  r(   Ú_build_model_responsez*AzureAIAgentsHandler._build_model_responseÖ   s
  € ÷ 	@Ñ?ð Øñ1
ˆñ Ø,7ˆN˜=Ñ)ñ Ø$ØÙÑ1 .Ñ1ôð"
ˆÔð  %ˆÔô �~Ð'7Ô8¸N×<YÑ<YÐ<aØ,.ˆNÔ)Ø5>ˆ×%Ñ% kÑ2ð	MÝ3á#0°ÐQYÔ#ZˆMÙ'4¸?ÐQXÐptÔ'uÐÜØØÙØ"/Ø&7Ø!.Ð1BÑ!Bôôð Ðøô ò 	MÜ×"Ñ"Ð#HÈ!×LÐLàÐûð	Mús   Á$4B Â	CÂ#B?Â?CÚapi_keyÚoptional_paramsÚheadersc                 ó,  — |€i }d|d<   |rd|› �|d<   |j                  d| j                  j                  «      }| j                  j                  ||«      }|j                  d«      }|j	                  d«      }t        j                  d||«       |||||fS )	aE  Prepare common parameters for completion.

        Azure Foundry Agents API uses Bearer token authentication:
        - Authorization: Bearer <token> (Azure AD token from 'az account get-access-token --resource https://ai.azure.com')

        See: https://learn.microsoft.com/en-us/azure/ai-foundry/agents/quickstart
        zapplication/jsonzContent-TypezBearer ÚAuthorizationr`   rd   ú/z7Azure AI Agents completion - api_base: %s, agent_id: %s)r|   r]   ÚDEFAULT_API_VERSIONÚ_get_agent_idÚrstripr   Údebug)	rR   rˆ   r_   r¤   r¥   r¦   r`   Úagent_idrd   s	            r(   Ú_prepare_completion_paramsz/AzureAIAgentsHandler._prepare_completion_params  s¤   € ð ˆ?ØˆGØ"4ˆ�Ññ Ø)0°°	Ð':ˆG�OÑ$à,×0Ñ0°ÀÇÁ×@_Ñ@_Ó`ˆØŸ+™+×3Ñ3°E¸?ÓKˆØ*×.Ñ.¨{Ó;ˆ	Ø—?‘? 3Ó'ˆä×ÑÐVÐX`ÐbjÔkà˜ X¨y¸(ÐBÐBr'   ÚresponseÚexpected_codesÚ	error_msgc                 ól   — |j                   |vr&t        |j                   |› d|j                  › �¬«      ‚y)z6Check response status and raise error if not expected.ú: ©Ústatus_coder?   N)r¶   r   r   )rR   r°   r±   r²   s       r(   Ú_check_responsez$AzureAIAgentsHandler._check_response,  s=   € à×Ñ ~Ñ5Ü$Ø$×0Ñ0Ø$˜+ R¨¯© Ð7ôð ð 6r'   Úlogging_objÚlitellm_paramsÚtimeoutÚclientc           	      óZ  ‡
‡— ddl m} ‰
€ |d|j                  dd«      i¬«      Š
| j                  ||||‰«      \  Š}}}}ddt        dt        dt
        t        t        f   dz  d	t        j                  fˆ
ˆfd
„}| j                  |||||||¬«      \  }}}| j                  ||||||«      S )z9Execute synchronous completion using Azure Agent Service.r   )Ú_get_httpx_clientNÚ
ssl_verify)ÚparamsrK   rL   rM   rN   c                 ó”   •— | dk(  r‰j                  |‰¬«      S ‰j                  |‰|rt        j                  |«      ¬«      S d ¬«      S ©NÚGET)rL   r¦   )rL   r¦   r8   ©r|   ÚpostÚjsonÚdumps©rK   rL   rM   r»   r¦   s      €€r(   Úmake_requestz5AzureAIAgentsHandler.completion.<locals>.make_requestS  s\   ø€ Ø˜ŠØ—z‘z c°7�zÓ;Ð;Ø—;‘;ØØÙ.7”T—Z‘Z 	Ó*ð ó ð ð >Bð ó ð r'   ©rÈ   r_   r`   r®   rd   rŠ   r¥   rP   )Ú&litellm.llms.custom_httpx.http_handlerr½   r|   r¯   r#   r   rT   rU   rV   Ú_execute_agent_flow_syncr£   )rR   rˆ   rŠ   r_   r¤   r‰   r¸   r¥   r¹   rº   r»   r¦   r½   r`   r®   rd   rÈ   r5   r.   s             ``       r(   Ú
completionzAzureAIAgentsHandler.completion7  sã   ù€ õ 	Màˆ>Ù&¨|¸^×=OÑ=OÐP\Ð^bÓ=cÐ.dÔeˆFð ×+Ñ+¨E°8¸WÀoÐW^Ó_ñ	
ØØØØØñ	¤ð 	¬3ð 	¼7Ä3ÌÀ;Ñ;OÐRVÑ;Vð 	Ôbg×bpÑbpö 	ð +/×*GÑ*GØ%ØØ#ØØØØ+ð +Hó +
Ñ'ˆ	�7˜Kð ×)Ñ)¨%°¸.È)ÐU]Ð_jÓkÐkr'   rÈ   r®   c           
      óv  — |s€t        j                  d| j                  ||«      «        |d| j                  ||«      i «      }| j                  |ddgd«       |j	                  «       }	|	d   }t        j                  d|«       |€J ‚|D ][  }
|
j                  d«      d	v sŒ| j                  |||«      } |d|d
|
j                  dd«      dœ«      }| j                  |ddgd«       Œ] d|i}d|v r|d   |d<    |d| j                  |||«      |«      }| j                  |ddgd«       |j	                  «       }|d   }t        j                  d|«       | j                  ||||«      }t        | j                  j                  «      D ]Ï  } |d|«      }| j                  |dgd«       |j	                  «       }|j                  d«      }t        j                  d|«       |dk(  r n�|dv rE|j	                  «       }|j                  di «      j                  dd«      }t        dd|› d|› �¬«      ‚t        j                  | j                  j                  «       ŒÑ t        d d!¬«      ‚ |d| j!                  |||«      «      }| j                  |dgd"«       |j	                  «       }| j#                  |«      \  }}|||fS )#zPExecute the agent flow synchronously. Returns (thread_id, content, annotations).úCreating thread at: %sÚPOSTéÈ   éÉ   úFailed to create threadr;   úCreated thread: %sr4   ©ÚuserÚsystemrÕ   r5   r{   ©r4   r5   úFailed to add messageÚassistant_idÚinstructionsúFailed to create runúCreated run: %srÂ   úFailed to get run statusrB   úRun status: %sÚ	completed©ÚfailedÚ	cancelledÚexpiredrC   r?   úUnknown erroréô  úRun r´   rµ   é˜  ú$Run timed out waiting for completionúFailed to get messages)r   r­   rc   r·   rÅ   r|   rl   ro   rs   Úranger]   ÚMAX_POLL_ATTEMPTSr   ÚtimeÚsleepÚPOLL_INTERVAL_SECONDSru   r‚   ©rR   rÈ   r_   r`   r®   rd   rŠ   r¥   r°   Úthread_datar~   rL   Úrun_payloadÚrun_datarp   Ú
status_urlÚ_Ústatus_datarB   Ú
error_datar²   rx   r5   r.   s                           r(   rË   z-AzureAIAgentsHandler._execute_agent_flow_synci  sá  € ñ Ü× Ñ Ð!9¸4×;QÑ;QÐRZÐ\gÓ;hÔiÙ# F¨D×,BÑ,BÀ8È[Ó,YÐ[]Ó^ˆHØ× Ñ  ¨C°¨:Ð7PÔQØ19·±³ˆKØ# DÑ)ˆIÜ× Ñ Ð!5°yÔAð Ð$Ð$Ð$ð ò 	TˆCØ�w‰w�v‹Ð"4Ò4Ø×.Ñ.¨x¸ÀKÓP�Ù'¨°¸fÐQT×QXÑQXÐYbÐdfÓQgÑ5hÓi�Ø×$Ñ$ X°°S¨zÐ;RÕSð		Tð -¨hÐ7ˆØ˜_Ñ,Ø*9¸.Ñ*IˆK˜Ñ'á ¨×(<Ñ(<¸XÀyÐR]Ó(^Ð`kÓlˆØ×Ñ˜X¨¨S zÐ3IÔJØ*2¯-©-«/ˆØ  ™ˆÜ×ÑÐ.°Ô7ð !×6Ñ6°xÀÈFÐT_Ó`ˆ
Ü�t—{‘{×4Ñ4Ó5ò 	fˆAÙ# E¨:Ó6ˆHØ× Ñ  ¨C¨5Ð2LÔMà&.§m¡m£oˆKØ —_‘_ XÓ.ˆFÜ× Ñ Ð!1°6Ô:à˜Ò$ÙØÐ=Ñ=Ø)1¯©«�
Ø&ŸN™N¨<¸Ó<×@Ñ@ÀÈOÓ\�	Ü(°SÀDÈÈÐPRÐS\ÐR]ÐB^Ô_Ð_ä�J‰J�t—{‘{×8Ñ8Õ9ð	fô" %°Ð>dÔeÐeñ    t×'DÑ'DÀXÈyÐZeÓ'fÓgˆØ×Ñ˜X¨ uÐ.FÔGà3;·=±=³?ˆØ#×BÑBÀ=ÓQÑˆ�Ø˜' ;Ð.Ð.r'   c           	   ƒ   ó¨  ‡
‡K  — ddl }ddlm} ‰
€0 ||j                  j                  d|j                  dd«      i¬«      Š
| j                  ||||‰«      \  Š}}}}ddt        dt        dt        t        t        f   dz  d	t        j                  fˆ
ˆfd
„}| j                  |||||||¬«      ƒ d{  –—† \  }}}| j                  ||||||«      S 7 Œ­w)z:Execute asynchronous completion using Azure Agent Service.r   N©Úget_async_httpx_clientr¾   ©Úllm_providerr¿   rK   rL   rM   rN   c              “   óº   •K  — | dk(  r‰j                  |‰¬«      ƒ d {  –—† S ‰j                  |‰|rt        j                  |«      nd ¬«      ƒ d {  –—† S 7 Œ77 Œ­wrÁ   rÃ   rÇ   s      €€r(   rÈ   z6AzureAIAgentsHandler.acompletion.<locals>.make_requestÓ  sa   øè ø€ Ø˜ŠØ#ŸZ™Z¨C¸˜ZÓA×AÐAØŸ™ØØÙ.7”T—Z‘Z 	Ô*¸Tð %ó ÷ ð ð Bøðús!   ƒAŸA 2AÁAÁAÁArÉ   rP   )ÚlitellmrÊ   rù   ÚLlmProvidersÚAZURE_AIr|   r¯   r#   r   rT   rU   rV   Ú_execute_agent_flow_asyncr£   )rR   rˆ   rŠ   r_   r¤   r‰   r¸   r¥   r¹   rº   r»   r¦   rý   rù   r`   r®   rd   rÈ   r5   r.   s             ``        r(   Úacompletionz AzureAIAgentsHandler.acompletion³  s  ùè ø€ ó 	ÝQàˆ>Ù+Ø$×1Ñ1×:Ñ:Ø$ n×&8Ñ&8¸ÀtÓ&LÐMôˆFð ×+Ñ+¨E°8¸WÀoÐW^Ó_ñ	
ØØØØØñ	¤sð 	´ð 	ÄÌÌfÈÑAUÐX\ÑA\ð 	Ôhm×hvÑhvö 	ð 15×0NÑ0NØ%ØØ#ØØØØ+ð 1Oó 1
÷ +
Ñ'ˆ	�7˜Kð ×)Ñ)¨%°¸.È)ÐU]Ð_jÓkÐkð+
ús   „B-CÂ1CÂ2Cc           
   ƒ   óþ  K  — |sˆt        j                  d| j                  ||«      «        |d| j                  ||«      i «      ƒ d{  –—† }| j                  |ddgd«       |j	                  «       }	|	d   }t        j                  d|«       |€J ‚|D ]c  }
|
j                  d	«      d
v sŒ| j                  |||«      } |d|d|
j                  dd«      dœ«      ƒ d{  –—† }| j                  |ddgd«       Œe d|i}d|v r|d   |d<    |d| j                  |||«      |«      ƒ d{  –—† }| j                  |ddgd«       |j	                  «       }|d   }t        j                  d|«       | j                  ||||«      }t        | j                  j                  «      D ]ß  } |d|«      ƒ d{  –—† }| j                  |dgd«       |j	                  «       }|j                  d«      }t        j                  d|«       |dk(  r n‰|dv rE|j	                  «       }|j                  di «      j                  dd«      }t        dd|› d|› �¬ «      ‚t        j                  | j                  j                  «      ƒ d{  –—†  Œá t        d!d"¬ «      ‚ |d| j!                  |||«      «      ƒ d{  –—† }| j                  |dgd#«       |j	                  «       }| j#                  |«      \  }}|||fS 7 �Œ¥7 �Œ7 �ŒÌ7 �ŒH7 Œ~7 ŒO­w)$zQExecute the agent flow asynchronously. Returns (thread_id, content, annotations).rÎ   rÏ   NrÐ   rÑ   rÒ   r;   rÓ   r4   rÔ   rÕ   r5   r{   r×   rØ   rÙ   rÚ   rÛ   rÜ   rÂ   rÝ   rB   rÞ   rß   rà   rC   r?   rä   rå   ræ   r´   rµ   rç   rè   ré   )r   r­   rc   r·   rÅ   r|   rl   ro   rs   rê   r]   rë   r   Úasynciorí   rî   ru   r‚   rï   s                           r(   r   z.AzureAIAgentsHandler._execute_agent_flow_asyncé  s%  è ø€ ñ Ü× Ñ Ð!9¸4×;QÑ;QÐRZÐ\gÓ;hÔiÙ)¨&°$×2HÑ2HÈÐS^Ó2_ÐacÓd×dˆHØ× Ñ  ¨C°¨:Ð7PÔQØ19·±³ˆKØ# DÑ)ˆIÜ× Ñ Ð!5°yÔAð Ð$Ð$Ð$ð ò 	TˆCØ�w‰w�v‹Ð"4Ò4Ø×.Ñ.¨x¸ÀKÓP�Ù!-¨f°cÀFÐWZ×W^ÑW^Ð_hÐjlÓWmÑ;nÓ!o×o�Ø×$Ñ$ X°°S¨zÐ;RÕSð		Tð -¨hÐ7ˆØ˜_Ñ,Ø*9¸.Ñ*IˆK˜Ñ'á% f¨d×.BÑ.BÀ8ÈYÐXcÓ.dÐfqÓr×rˆØ×Ñ˜X¨¨S zÐ3IÔJØ*2¯-©-«/ˆØ  ™ˆÜ×ÑÐ.°Ô7ð !×6Ñ6°xÀÈFÐT_Ó`ˆ
Ü�t—{‘{×4Ñ4Ó5ò 	fˆAÙ)¨%°Ó<×<ˆHØ× Ñ  ¨C¨5Ð2LÔMà&.§m¡m£oˆKØ —_‘_ XÓ.ˆFÜ× Ñ Ð!1°6Ô:à˜Ò$ÙØÐ=Ñ=Ø)1¯©«�
Ø&ŸN™N¨<¸Ó<×@Ñ@ÀÈOÓ\�	Ü(°SÀDÈÈÐPRÐS\ÐR]ÐB^Ô_Ð_ä—-‘- §¡× AÑ AÓB×BÑBð	fô" %°Ð>dÔeÐeñ & e¨T×-JÑ-JÈ8ÐU^Ð`kÓ-lÓm×mˆØ×Ñ˜X¨ uÐ.FÔGà3;·=±=³?ˆØ#×BÑBÀ=ÓQÑˆ�Ø˜' ;Ð.Ð.ðm eùð pùð sùð =ùð Cøð
 núsw   ‚AK=ÁK-Á	A K=Â*3K=ÃK0ÃA	K=Ä'K3Ä(BK=Æ.K6Æ/CK=É:K9É;0K=Ê+K;Ê,AK=Ë0K=Ë3K=Ë6K=Ë9K=Ë;K=c
                ó  K  — ddl }
ddlm} | j                  |||||	«      \  }	}}}}g }|D ]:  }|j	                  d«      dv sŒ|j                  d|j	                  dd«      d	œ«       Œ< |d
dœ}|sd|i|d<   d|v r|d   |d<   | j                  ||«      }t        j                  d|«        ||
j                  j                  d|j	                  dd«      i¬«      }|j                  ||	t        j                  |«      d
¬«      ƒ d{  –—† }|j                  dvr@|j                  «       ƒ d{  –—† }t!        |j                  d|j#                  «       › �¬«      ‚| j%                  ||«      2 3 d{  –—† }|­–— Œ7 Œs7 ŒO7 Œ6 y­w)zMExecute async streaming completion using Azure Agent Service with native SSE.r   Nrø   r4   rÔ   rÕ   r5   r{   r×   T)rÙ   ÚstreamrŠ   ÚthreadrÚ   z#Azure AI Agents streaming - URL: %sr¾   rú   )rL   r¦   r8   r  )rÐ   rÑ   zStreaming request failed: rµ   )rý   rÊ   rù   r¯   r|   r„   rw   r   r­   rþ   rÿ   rÄ   rÅ   rÆ   r¶   Úareadr   ÚdecodeÚ_process_sse_stream)rR   rˆ   rŠ   r_   r¤   r¸   r¥   r¹   rº   r¦   rý   rù   r`   r®   rd   Úthread_messagesr~   ÚpayloadrL   r»   r°   Ú
error_textÚchunks                          r(   Úacompletion_streamz'AzureAIAgentsHandler.acompletion_stream3  sÀ  è ø€ ó 	ÝQð ×+Ñ+¨E°8¸WÀoÐW^Ó_ñ	
ØØØØØð ;=ˆØò 	\ˆCØ�w‰w�v‹Ð"4Ò4Ø×&Ñ&°À3Ç7Á7È9ÐVXÓCYÑ'ZÕ[ð	\ð
 %Øñ-
ˆñ Ø!+¨_Ð =ˆG�HÑà˜_Ñ,Ø&5°nÑ&EˆG�NÑ#à×:Ñ:¸8À[ÓQˆÜ×ÑÐBÀCÔHñ /Ø ×-Ñ-×6Ñ6Ø  .×"4Ñ"4°\À4Ó"HÐIô
ˆð
 !'§¡ØØÜ—‘˜GÓ$Øð	 !,ó !
÷ 
ˆð ×Ñ zÑ1Ø&.§n¡nÓ&6× 6ˆJÜ$Ø$×0Ñ0Ø4°Z×5FÑ5FÓ5HÐ4IÐJôð ð
  ×3Ñ3°H¸eÓD÷ 	ð 	�%ØŒKð
øð !7øð	øÑDùsO   ‚A FÁCFÄE:Ä%FÄ,E<Ä->FÅ+F Å/E>Å0F Å3FÅ<FÅ>F Æ Fc                óî  K  — ddl m}m}m} dt	        j
                  «       j                  dd › �}t        t        j                  «       «      }d}d}	d}
|j                  «       2 3 d{  –—† }|j                  «       }|j                  d«      r|dd j                  «       }
Œ>|j                  d«      sŒP|d	d j                  «       }|d
k(  r:ddi}|	r|	|d<    ||||d |dd |di |¤Ž¬«      g¬«      }|r	d|i|_        |­–—  y	 t        j                  |«      }|
dk(  rd|v r|d   }t!        j"                  d|«       |
dk(  rv|j%                  dg «      D ]a  }|j%                  d«      dk(  sŒ|j%                  di «      j%                  d«      }| j'                  |«      }|sŒM|	€g }	|	j)                  |«       Œc |
dk(  s�Œ^|j%                  di «      j%                  dg «      }|D ]k  }|j%                  d«      dk(  sŒ|j%                  di «      j%                  dd«      }|sŒ= ||||d |dd ||d¬«      ¬«      g¬«      }|r	d|i|_        |­–— Œm �Œò7 �Œî# t        j                  $ r Y �Œw xY w6 y­w)z@Process SSE stream and yield OpenAI-compatible streaming chunks.r   )ÚDeltar   ÚStreamingChoicesz	chatcmpl-Né   zevent:é   zdata:é   z[DONE]r5   r.   zchat.completion.chunkr�   )r‘   r’   rH   )r;   Úcreatedrˆ   rT   r›   rd   zthread.createdr;   zStream created thread: %szthread.message.completedr   r   zthread.message.deltarH   r-   r{   rz   r�   r&   )rš   r  r   r  ÚuuidÚuuid4Úhexr%   rì   Úaiter_linesÚstripÚ
startswithr“   rÅ   ÚloadsÚJSONDecodeErrorr   r­   r|   r}   Úextend)rR   r°   rˆ   r  r   r  Úresponse_idr  rd   Úcollected_annotationsÚcurrent_eventÚlineÚdata_strÚfinal_delta_kwargsÚfinal_chunkr8   r   r�   ÚtransformedÚdelta_contentÚ
text_valuer  s                         r(   r	  z(AzureAIAgentsHandler._process_sse_streamw  sÆ  è ø€ ÷ 	UÑTà(¬¯©«×)9Ñ)9¸"¸1Ð)=Ð(>Ð?ˆÜœTŸY™Y›[Ó)ˆØˆ	ØEIÐàˆà"×.Ñ.Ó0÷ L	,ð L	,�$Ø—:‘:“<ˆDà�‰˜xÔ(Ø $ Q R §¡Ó 0�Øà�‰˜wÕ'Ø  ˜8Ÿ>™>Ó+�à˜xÒ'à:CÀTÐ9JÐ&Ù,Ø<QÐ*¨=Ñ9Ù"5Ø&Ø 'Ø#Ø6á,Ø.4Ø&'Ù&+Ñ&AÐ.@Ñ&Aôð!ô#�Kñ !Ø6AÀ9Ð5M˜Ô2Ø%Ó%ÙðÜ*.¯*©*°XÓ*>�Dð
 !Ð$4Ò4¸À¹Ø $ T¡
�IÜ"×(Ñ(Ð)DÀiÔPð !Ð$>Ò>Ø(,¯©°¸BÓ(?ò J˜Ø'×+Ñ+¨FÓ3°vÓ=Ø.:×.>Ñ.>¸vÀrÓ.J×.NÑ.NÈ}Ó.]˜OØ*.×*EÑ*EÀoÓ*V˜KÚ*Ø#8Ð#@Ø<>Ð$9Ø 5× <Ñ <¸[Õ IðJð !Ð$:Ô:Ø$(§H¡H¨W°bÓ$9×$=Ñ$=¸iÈÓ$L�MØ(5ò ,˜Ø'×+Ñ+¨FÓ3°vÓ=Ø)5×)9Ñ)9¸&À"Ó)E×)IÑ)IÈ'ÐSUÓ)V˜JÚ)Ù(;Ø'2Ø,3Ø*/Ø+Bá(8Ø:>Ø23Ù27À
ÐQ\Ô2]ô)*ð-&ô)" ñ $-Ø<GÈÐ;S EÔ$8Ø&+¤ò',ðsL	,úôF ×+Ñ+ò ÚðúñG 1ùso   ‚A"I5Á$I3Á(IÁ)I3Á,AI5Â4AI5ÄIÄAI5Å/4I5Æ$I5Ç;I5Ç>$I5È#3I5ÉI3ÉI0É,I5É/I0É0I5rP   )NN)*r    r!   r"   Ú__doc__r^   r#   rc   rl   ro   rs   ru   rw   r7   Útupler/   r*   r‚   r   r}   r   ÚdictrT   r£   r¯   rU   rV   r%   r·   ÚLiteLLMLoggingObjÚfloatr   rÌ   rJ   rË   r   r  rX   r   r   r   r  r	  r&   r'   r(   r[   r[   u   sQ  „ ñò,ð?¨#ð ?¸Cð ?ÀCó ?ð\¨Cð \¸Cð \Ècð \ÐVYó \ðX¨ð X¸ð XÈ#ð XÐRUó Xði¨cð i¸cð iÈ3ð iÐ]`ð iÐehó ið
\°ð \Àð \ÐSVð \Ð[^ó \ðD¸ð DÈ3ð DÐSVó DðØ/ðà	ˆs�DÐ/Ñ0°4Ñ7Ð7Ñ	8óð&!*àÐ1Ñ2°TÑ9ð!*ð 
Ð$Ñ	%¨Ñ	,ó!*ðT <@ñ3àð3ð ð3ð &ð	3ð
 ð3ð �t˜C ˜KÑ(Ñ)ð3ð Ð0Ñ1°DÑ8ð3ð 
ó3ðjCàðCð ðCð ð	Cð
 ðCð ˜‘ðCð 
ˆt�C˜�H‰~˜s C¨¨t©°SÐ8Ñ	9óCðB¨¯©ð ÈÈSÉ	ð Ð^aó ð, &*Ø#ñ0làð0lð �t˜C ˜KÑ(Ñ)ð0lð ð	0lð
 ð0lð &ð0lð 'ð0lð ð0lð ð0lð ð0lð ˜dÑ"ð0lð ˜‘ð0lð 
ó0lðdE/à'ðE/ð ðE/ð ð	E/ð
 ðE/ð ˜‘:ðE/ð �t˜C ˜KÑ(Ñ)ðE/ð ðE/ð 
ˆs�C˜Ð4Ñ5¸Ñ<Ð<Ñ	=óE/ðj +/Ø#ñ4làð4lð �t˜C ˜KÑ(Ñ)ð4lð ð	4lð
 ð4lð &ð4lð 'ð4lð ð4lð ð4lð ð4lð ! 4Ñ'ð4lð ˜‘ð4lð 
ó4lðlE/à(ðE/ð ðE/ð ð	E/ð
 ðE/ð ˜‘:ðE/ð �t˜C ˜KÑ(Ñ)ðE/ð ðE/ð 
ˆs�C˜Ð4Ñ5¸Ñ<Ð<Ñ	=óE/ðh  $ñBàðBð �t˜C ˜KÑ(Ñ)ðBð ð	Bð
 ðBð 'ðBð ðBð ðBð ðBð ˜‘ðBð 
Ð*Ñ	+óBðH[,à—.‘.ð[,ð ð[,ð 
Ð*Ñ	+ô	[,r'   r[   Úazure_ai_agents_handler)7r)  r  rÅ   rì   r  Úcollections.abcr   r   r   Útypingr   r   r   r	   r
   r   rU   Útyping_extensionsr   Úlitellm._loggingr   Ú$litellm.litellm_core_utils.url_utilsr   Ú+litellm.llms.azure_ai.agents.transformationr   r   Úlitellm.types.llms.openair   r   rš   r   r   Ú*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjrÊ   r   r   r,  r   r*   r$   r,   r1   r3   r7   r:   r>   rA   rE   rG   rJ   rX   r[   r.  r&   r'   r(   ú<module>r8     s6  ðòó( Û Û Û ß =Ñ =ß L× Lã Ý &å +Ý H÷÷÷ CáÝXßTà*ÑàÐØ€KØÐô@˜)¨5õ @ð %=Ð?RÑ$RÐ ˜	Ó Rô5� %õ 5ô
˜	¨õ ô
/�I Uõ /ô
(˜¨%õ (ô�Yô ô�	 õ ô$� %õ $ô
/�	 õ /ô�I Uõ ôt˜ô tô(˜ô (÷]	,ñ ]	,ñB "6Ó!7Ð ˜Ô 7r'   