
    j0                         d dl mZmZ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 d dl d dl d dlmZ d d	lmZ er	d d
lmZ eZneZ G d de      Zy)    )TYPE_CHECKINGAnyDictListLiteralOptionalTupleUnionN)ResponseReasoningItem)verbose_logger)BaseAzureLLM)OpenAIResponsesAPIConfig)*)GenericLiteLLMParams)LlmProviders)Loggingc                       e Zd Zedefd       Zdededee	   defdZ
dedefdZdeeef   deeef   fd	Zd
eeef   deeef   f fdZded
eeef   dede	dedef fdZdee   dedefdZdededefdZdedede	dedeeef   f
dZdedede	dedeeef   f
dZ	 	 	 	 	 ddedede	dedee   dee   deee      deded   deeef   fdZdedede	dedeeef   f
dZdej<                  dede fdZ! xZ"S ) AzureOpenAIResponsesAPIConfigreturnc                 "    t         j                  S )N)r   AZURE)selfs    /Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/llms/azure/responses/transformation.pycustom_llm_providerz1AzureOpenAIResponsesAPIConfig.custom_llm_provider   s    !!!    headersmodellitellm_paramsc                 0    t        j                  ||      S )N)r   r   )r    _base_validate_azure_environment)r   r   r   r   s       r   validate_environmentz2AzureOpenAIResponsesAPIConfig.validate_environment   s     <<N
 	
r   c                 ^    d|v r|j                  dd      }d|v r|j                  dd      }|S )Nz
responses/ o_seriesz	o_series/)replace)r   r   s     r   get_stripped_model_namez5AzureOpenAIResponsesAPIConfig.get_stripped_model_name"   s7    5 MM,3EMM+r2Er   itemc                    |j                  d      dk(  r	 t        |      }d|vrKt        |j                  dd            dkD  r|j                  dd      dd dz   n|j                  dd      |d<   t        di |}|j	                  d	
      }|j                  dd       |S |S # t        $ rT}t        j                  d|        |j                         D ci c]  \  }}||dvr|| nc c}}w }}}|cY d}~S d}~ww xY w)z
        Handle reasoning items to filter out the status field.
        Issue: https://github.com/BerriAI/litellm/issues/13484
        
        Azure OpenAI API does not accept 'status' field in reasoning input items.
        type	reasoningsummaryreasoning_contentr#   d   Nz...T)exclude_nonestatuszJFailed to create ResponseReasoningItem, falling back to manual filtering: >   r/   contentencrypted_content )
getdictlenr   
model_dumppop	Exceptionr   debugitems)	r   r'   	item_datareasoning_itemdict_reasoning_itemekvfiltered_items	            r   _handle_reasoning_itemz4AzureOpenAIResponsesAPIConfig._handle_reasoning_item*   s2    88F{*% J	I- y}}-@"EFL "&92>tDuL&]]+>C i( "7!C!C '5&?&?T&?&R##''$7**   %$$`ab`cd !%

! ,1} JJ qD ,! ! %$%s*   B
B# #	D ,+C;C+*C;5D ;D inputc                 j   ddl m} t        	|   |      }t	        |t
              rg }|D ]r  }t	        |t              rO|j                  d      dk(  r;|j                         D ci c]  \  }}|dk7  s|| }}}|j                  |       b|j                  |       t  |t        |      S |S c c}}w )z
        Override parent method to also filter out 'status' field from message items.
        Azure OpenAI API does not accept 'status' field in input messages.
        r   )castr)   messager/   )typingrE   super_validate_input_param
isinstancelistr4   r3   r:   appendResponseInputParam)
r   rC   rE   validated_inputfiltered_inputr'   r?   r@   rA   	__class__s
            r   rI   z3AzureOpenAIResponsesAPIConfig._validate_input_paramR   s     	   '7> ot,(*N'dD)dhhv.>).K6:jjl$Tldaa8mQTlM$T"))-8"))$/ ( *N;; %Us   %B/3B/$response_api_optional_request_paramsc                 N    | j                  |      }t        | 	  |||||      S )z<No transform applied since inputs are in OpenAI spec already)r   rC   rQ   r   r   )r&   rH   transform_responses_api_request)r   r   rC   rQ   r   r   stripped_model_namerP   s          r   rS   z=AzureOpenAIResponsesAPIConfig.transform_responses_api_requestl   s<     #::5Aw6%1U) 7 
 	
r   api_basec                 @    ddl m} t        j                  ||d|      S )ag  
        Constructs a complete URL for the API request.

        Args:
        - api_base: Base URL, e.g.,
            "https://litellm8397336933.openai.azure.com"
            OR
            "https://litellm8397336933.openai.azure.com/openai/responses?api-version=2024-05-01-preview"
        - model: Model name.
        - optional_params: Additional query parameters, including "api_version".
        - stream: If streaming is required (optional).

        Returns:
        - A complete URL string, e.g.,
        "https://litellm8397336933.openai.azure.com/openai/responses?api-version=2024-05-01-preview"
        r   )#AZURE_DEFAULT_RESPONSES_API_VERSIONz/openai/responses)rU   r   routedefault_api_version)litellm.constantsrW   r   _get_base_azure_url)r   rU   r   rW   s       r   get_complete_urlz.AzureOpenAIResponsesAPIConfig.get_complete_url   s'    * 	J//)% C	
 	
r   response_idc                     ddl m}m}  ||      }|j                  j	                  d      }| d| } ||j
                  |j                  ||j                  |j                  |j                  f      }|S )zX
        Constructs a URL for the API request with the response_id in the path.
        r   urlparse
urlunparse/)
urllib.parser`   ra   pathrstripschemenetlocparamsqueryfragment)	r   rU   r]   r`   ra   
parsed_urlrd   new_pathconstructed_urls	            r   &_construct_url_for_response_id_in_pathzDAzureOpenAIResponsesAPIConfig._construct_url_for_response_id_in_path   s     	6 h'
 %%c*V1[M* %!!!!!!  ##	
 r   c                 d    | j                  ||      }i }t        j                  d|        ||fS )a_  
        Transform the delete response API request into a URL and data

        Azure OpenAI API expects the following request:
        - DELETE /openai/responses/{response_id}?api-version=xxx

        This function handles URLs with query parameters by inserting the response_id
        at the correct location (before any query parameters).
        rU   r]   zdelete response url=rn   r   r9   )r   r]   rU   r   r   
delete_urldatas          r   %transform_delete_response_api_requestzCAzureOpenAIResponsesAPIConfig.transform_delete_response_api_request   sG      @@; A 

 3J<@A4r   c                 d    | j                  ||      }i }t        j                  d|        ||fS )z
        Transform the get response API request into a URL and data

        OpenAI API expects the following request
        - GET /v1/responses/{response_id}
        rp   zget response url=rq   )r   r]   rU   r   r   get_urlrs   s          r   "transform_get_response_api_requestz@AzureOpenAIResponsesAPIConfig.transform_get_response_api_request   sE     ==; > 
 0	:;}r   afterbeforeincludelimitorder)ascdescc
                     | j                  ||      dz   }
i }|||d<   |||d<   |rdj                  |      |d<   |||d<   |	|	|d<   t        j                  d	|
        |
|fS )
Nrp   z/input_itemsrx   ry   ,rz   r{   r|   zlist input items url=)rn   joinr   r9   )r   r]   rU   r   r   rx   ry   rz   r{   r|   urlrh   s               r   "transform_list_input_items_requestz@AzureOpenAIResponsesAPIConfig.transform_list_input_items_request   s     77!{ 8   	 "$#F7O%F8 # 1F9#F7O#F7O4SE:;F{r   c                 $   ddl m}m}  ||      }|j                  j	                  d      }| d| d}	 ||j
                  |j                  |	|j                  |j                  |j                  f      }
i }t        j                  d|
        |
|fS )ad  
        Transform the cancel response API request into a URL and data

        Azure OpenAI API expects the following request:
        - POST /openai/responses/{response_id}/cancel?api-version=xxx

        This function handles URLs with query parameters by inserting the response_id
        at the correct location (before any query parameters).
        r   r_   rb   z/cancelzcancel response url=)rc   r`   ra   rd   re   rf   rg   rh   ri   rj   r   r9   )r   r]   rU   r   r   r`   ra   rk   rd   rl   
cancel_urlrs   s               r   %transform_cancel_response_api_requestzCAzureOpenAIResponsesAPIConfig.transform_cancel_response_api_request  s      	6 h'
 %%c*V1[M1  !!!!!!  ##	

 3J<@A4r   raw_responselogging_objc                     	 |j                         }t        di |S # t        $ r% ddlm}  ||j                  |j
                        w xY w)zX
        Transform the cancel response API response into a ResponsesAPIResponse
        r   )AzureOpenAIError)rF   status_coder2   )jsonr8   *litellm.llms.azure.chat.gpt_transformationr   textr   ResponsesAPIResponse)r   r   r   raw_response_jsonr   s        r   &transform_cancel_response_api_responsezDAzureOpenAIResponsesAPIConfig.transform_cancel_response_api_response9  sY    	 , 1 1 3 $8&788  	S"$))|7O7O 	s	    .A)NNN   r~   )#__name__
__module____qualname__propertyr   r   r4   strr   r   r!   r&   r   r   rB   r
   rM   rI   rS   r\   rn   r	   rt   rw   r   intr   r   r   httpxResponseLiteLLMLoggingObjr   r   __classcell__)rP   s   @r   r   r      s   "\ " "

$'
9ABV9W
	
S S &4S> &d38n &P3 223	s&&	'4

 S,,-
 /3	

 -
 
 

&
3-
 
 
	
B*-	:     -	 
   
sDy	 6  -	
  
sDy	4  $ $'+(.  -	
  }  $s)$  }% 
sDy	F( (  (  -	( 
 (  
sDy	( T9nn9 '9 
	9r   r   )rG   r   r   r   r   r   r   r	   r
   r   openai.types.responsesr   litellm._loggingr   litellm.llms.azure.common_utilsr   ,litellm.llms.openai.responses.transformationr   litellm.types.llms.openailitellm.types.responses.mainlitellm.types.routerr   litellm.types.utilsr   *litellm.litellm_core_utils.litellm_loggingr   _LiteLLMLoggingObjr   r   r2   r   r   <module>r      sJ    R R R  8 + 8 Q ' * 5 ,X*s9$< s9r   