Ë
    uPêjÈ9  ã                   ó–  — U d Z ddlZddlmZ ddlmZmZ ddlmZm	Z	 ddl
Z
ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ dZeed<    eh d£«      Z  eddh«      Z!eed<   dZ"eed<   dZ#eed<   dZ$eed<   dZ%eed<    G d„ de	«      Z& G d„ de	«      Z' G d „ d!e	«      Z( G d"„ d#e	«      Z) G d$„ d%ee«      Z*y)&a9  
Amazon Bedrock Mantle - Responses API backend.

Mantle serves Responses on two upstream paths: gpt frontier models (gpt-5.5 /
gpt-5.4) on `/openai/v1/responses`, and everything else that supports Responses
(e.g. gpt-oss) on the standard `/v1/responses`. The gate picks the path per
model and injects it via `use_openai_path`. Payloads and SSE follow the OpenAI
Responses spec, so this config inherits OpenAIResponsesAPIConfig and overrides
only the endpoint URL and authentication.

Auth: Bearer token (BEDROCK_MANTLE_API_KEY or the standard
AWS_BEARER_TOKEN_BEDROCK, or litellm_params.api_key) when present; otherwise
AWS SigV4 (service name "bedrock") using the standard credential chain (IAM
role / access key / profile / web identity), signed via the shared
BaseAWSLLM._sign_request after the request body is finalized.
é    N)ÚMapping)ÚAnyÚFinal)ÚReadOnlyÚ	TypedDict)Úverbose_logger)Ú
BaseAWSLLM)ÚMANTLE_HOST_REÚBedrockMantleAuthMixin)ÚOpenAIResponsesAPIConfig)Úget_secret_str)ÚResponseInputParamÚ!ResponsesAPIOptionalRequestParams)ÚGenericLiteLLMParams)ÚLlmProviders)ú/openai/v1/responsesú/v1/responsesz
/responsesz
/openai/v1z/v1Ú_BASE_SUFFIXES_TO_STRIP>   ÚmcpÚcustomÚfunctionÚ	namespaceÚtool_searchÚautoÚdefaultÚ'_BEDROCK_MANTLE_SUPPORTED_SERVICE_TIERSÚadditional_toolsÚ'_CODEX_ADDITIONAL_TOOLS_INPUT_ITEM_TYPEÚagent_messageÚ$_CODEX_AGENT_MESSAGE_INPUT_ITEM_TYPEÚcontext_compactionÚ)_CODEX_CONTEXT_COMPACTION_INPUT_ITEM_TYPEÚlocal_shell_callÚ'_CODEX_LOCAL_SHELL_CALL_INPUT_ITEM_TYPEc                   ó.   — e Zd ZU ee   ed<   ee   ed<   y)Ú_RewrittenOutputTextBlockÚtypeÚtextN©Ú__name__Ú
__module__Ú__qualname__r   ÚstrÚ__annotations__© ó    úy/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/bedrock_mantle/responses/transformation.pyr&   r&   >   s   … Ø
�3‰-ÓØ
�3‰-Ôr0   r&   c                   óH   — e Zd ZU ee   ed<   ee   ed<   eeedf      ed<   y)Ú_RewrittenAssistantMessageItemr'   Úrole.ÚcontentN)r*   r+   r,   r   r-   r.   Útupler&   r/   r0   r1   r3   r3   C   s,   … Ø
�3‰-ÓØ
�3‰-ÓØ�eÐ5°sÐ:Ñ;Ñ<Ô<r0   r3   c                   ó.   — e Zd ZU ee   ed<   ee   ed<   y)Ú_RewrittenCompactionItemr'   Úencrypted_contentNr)   r/   r0   r1   r8   r8   I   s   … Ø
�3‰-ÓØ ‘}Ô$r0   r8   c                   óN   — e Zd ZU ee   ed<   ee   ed<   ee   ed<   ee   ed<   y)Ú_RewrittenFunctionCallItemr'   Úcall_idÚnameÚ	argumentsNr)   r/   r0   r1   r;   r;   N   s*   … Ø
�3‰-ÓØ�c‰]ÓØ
�3‰-ÓØ˜‰}Ôr0   r;   c                   óè  ‡ — e Zd Z	 	 d&dedz  defˆ fd„Zedefd„«       Zde	dz  de
de	fd	„Zd
e
de	dedz  de
fd„Zdefd„Zdefd„Zedee   dee   fd„«       Zede
dede
fd„«       Zde	ddde
ded
e
de
fˆ fd„Zededefd„«       Zed'd„«       Ze	 	 	 	 d(d„«       Zeddde	fd„«       Zed)d„«       Zed*d„«       Zed+d „«       Zededd!fd"„«       Ze	 	 	 	 d,d#„«       Z d$e!de	dede
fˆ fd%„Z"ˆ xZ#S )-ÚBedrockMantleResponsesAPIConfigNÚ
aws_signerÚuse_openai_pathc                 óV   •— t         ‰| �  «        |xs
 t        «       | _        || _        y ©N)ÚsuperÚ__init__r	   Ú_aws_signerrB   )ÚselfrA   rB   Ú	__class__s      €r1   rF   z(BedrockMantleResponsesAPIConfig.__init__V   s'   ø€ ô
 	‰ÑÔØ%Ò5¬«ˆÔØ.ˆÕr0   Úreturnc                 ó"   — t         j                  S rD   )r   ÚBEDROCK_MANTLE©rH   s    r1   Úcustom_llm_providerz3BedrockMantleResponsesAPIConfig.custom_llm_provider_   s   € ä×*Ñ*Ð*r0   Úapi_baseÚlitellm_paramsc                 ó<  — | j                  i |¥d|i¥«      }|xs t        d«      xs d|› d�}|j                  d«      }t        D ]$  }|j	                  |«      sŒ|d t        |«        } n t        j                  |«      rd|› d�}| j                  rdnd}|› |› �S )NrO   ÚBEDROCK_MANTLE_API_BASEzhttps://bedrock-mantle.z.api.awsú/r   r   )	Ú_resolve_regionr   Úrstripr   ÚendswithÚlenr
   ÚmatchrB   )rH   rO   rP   ÚregionÚbaseÚsuffixÚpaths          r1   Úget_complete_urlz0BedrockMantleResponsesAPIConfig.get_complete_urlc   s½   € ð
 ×,Ñ,Ð-U°Ð-UÀ
ÈHÑ-UÓVˆØÒrœ>Ð*CÓDÒrÐJaÐbhÐaiÐiqÐHrˆØ�{‰{˜3ÓˆÜ-ò 	ˆFØ�}‰}˜VÕ$Ø˜Nœs 6›{˜lÐ+�Ùð	ô ×Ñ Ô%Ø,¨V¨H°HÐ=ˆDØ04×0DÒ0DÑ,È/ˆØ�˜�vˆÐr0   ÚheadersÚmodelc                 ó¢   — |xs
 t        «       }| j                  |j                  «      }|rd|› �|d<   |j                  r|j                  |d<   |S )NzBearer ÚAuthorizationzOpenAI-Project)r   Ú_resolve_bearer_tokenÚapi_keyÚaws_bedrock_project_id)rH   r^   r_   rP   Úbearers        r1   Úvalidate_environmentz4BedrockMantleResponsesAPIConfig.validate_environmentw   sY   € Ø'ÒAÔ+?Ó+AˆØ×2Ñ2°>×3IÑ3IÓJˆÙØ)0°°Ð'9ˆG�OÑ$Ø×0Ò0Ø(6×(MÑ(MˆGÐ$Ñ%Øˆr0   c                  ó   — y©NFr/   rM   s    r1   Úsupports_native_file_searchz;BedrockMantleResponsesAPIConfig.supports_native_file_search€   ó   € Ør0   c                  ó   — yrh   r/   rM   s    r1   Úsupports_native_websocketz9BedrockMantleResponsesAPIConfig.supports_native_websocketƒ   rj   r0   Útoolsc                 óZ  — g }g }| D ]i  }t        |t        «      s|j                  |«       Œ%|j                  d«      }|t        v r|j                  |«       ŒP|j                  t        |«      «       Œk |r6t        j                  dt        t        |«      «      t        t        «      «       |S )z4Keep only tool types Mantle's Responses API accepts.r'   zSBedrock Mantle Responses API: dropping unsupported tool type(s) %s (supported: %s).)
Ú
isinstanceÚdictÚappendÚgetÚ-_BEDROCK_MANTLE_SUPPORTED_RESPONSE_TOOL_TYPESr-   r   ÚwarningÚsortedÚset)rm   ÚkeptÚdropped_typesÚtoolÚ	tool_types        r1   Ú_filter_unsupported_toolsz9BedrockMantleResponsesAPIConfig._filter_unsupported_tools†   sž   € ð "$ˆØ*,ˆØò 	5ˆDÜ˜d¤DÔ)Ø—‘˜DÔ!ØØŸ™ Ó(ˆIØÔIÑIØ—‘˜DÕ!à×$Ñ$¤S¨£^Õ4ð	5ñ Ü×"Ñ"ØeÜ”s˜=Ó)Ó*ÜÔDÓEôð ˆr0   ÚparamsÚdrop_paramsc                 ó2  — | j                  d«      }|�|t        v r| S |s%t        j                  j	                  dd|›d�¬«      ‚t        j                  d|t        t        «      «       | j                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ c}}S c c}}w )NÚservice_tieri�  z-bedrock_mantle does not support service_tier=a  ; the Bedrock Mantle Responses API only accepts 'auto' or 'default'. Set `drop_params: true` (litellm_settings or this deployment's litellm_params) to have LiteLLM drop it, or remove service_tier from the client (Codex CLI sends it when a speed tier is set in ~/.codex/config.toml).)Ústatus_codeÚmessagezSBedrock Mantle Responses API: dropping unsupported service_tier %r (supported: %s).)	rr   r   ÚlitellmÚutilsÚUnsupportedParamsErrorr   rt   ru   Úitems)r|   r}   r   ÚkeyÚvalues        r1   Ú _handle_unsupported_service_tierz@BedrockMantleResponsesAPIConfig._handle_unsupported_service_tierž   s¤   € à$Ÿj™j¨Ó8ˆØÐ <Ô3ZÑ#ZØˆMÙÜ—-‘-×6Ñ6ØàCÀLÐCSð Thð hð 7ó ð ô 	×ÑØaØÜÔ:Ó;ô	
ð
 .4¯\©\«^×U™z˜s E¸sÀnÓ?T��U‘
ÓUÐUùÓUs   Á<BÂ
BÚinputústr | ResponseInputParamÚ$response_api_optional_request_paramsc                 ó¼   •— | j                  |«      \  }}| j                  |«      }|ri |¥dg |j                  d«      xs g ¢|¢i¥n|}	t        ‰
| �  |||	||¬«      S )Nrm   )r_   r‰   r‹   rP   r^   )Ú_hoist_codex_additional_toolsÚ_normalize_codex_input_itemsrr   rE   Útransform_responses_api_request)rH   r_   r‰   r‹   rP   r^   Úremaining_inputÚhoisted_toolsÚnormalized_inputÚrequest_paramsrI   s             €r1   r�   z?BedrockMantleResponsesAPIConfig.transform_responses_api_request´   sœ   ø€ ð *.×)KÑ)KÈEÓ)RÑ&ˆ˜Ø"&×"CÑ"CÀOÓ"TÐñ ðØ6ðàð Ø:×>Ñ>¸wÓGÒMÈ2ðà"ðòð 6ð 	ô ‰wÑ6ØØ"Ø1?Ø)Øð 7ó 
ð 	
r0   Úitemc                 óV   — t        | t        «      xr | j                  d«      t        k(  S )Nr'   )ro   rp   rr   r   )r”   s    r1   Ú_is_codex_additional_tools_itemz?BedrockMantleResponsesAPIConfig._is_codex_additional_tools_itemÑ   s#   € ä˜$¤Ó%Òe¨$¯(©(°6Ó*:Ô>eÑ*eÐer0   c                 óL   — | j                  d«      }t        |t        «      r|S g S )Nrm   )rr   ro   Úlist)r”   rm   s     r1   Ú_tools_of_additional_tools_itemz?BedrockMantleResponsesAPIConfig._tools_of_additional_tools_itemÕ   s$   € à—x‘x Ó(ˆÜ" 5¬$Ô/ˆuÐ7°RÐ7r0   c                 ó   — t        |t        «      s|g fS |D �cg c]  }| j                  |«      sŒ|‘Œ }}|s|g fS |D �cg c]  }| j                  |«      rŒ|‘Œ }}|D ��cg c]  }| j                  |«      D ]  }|‘Œ Œ }}}t	        j
                  dt        |«      t        |«      «       || j                  |«      fS c c}w c c}w c c}}w )a´  Codex's "responses lite" wire mode ships tool definitions inside
        `input` as {"type": "additional_tools", "role": "developer",
        "tools": [...]} items. api.openai.com accepts that item type; Mantle
        rejects the whole request with 400 "Invalid 'input': value did not
        match any expected variant" but accepts the same tools at the top
        level, so move them there and strip the items from `input`.
        z¢Bedrock Mantle Responses API: hoisting %d tool(s) out of %d 'additional_tools' input item(s) into the top-level tools param (Mantle rejects that input item type).)ro   r˜   r–   r™   r   ÚdebugrW   r{   )Úclsr‰   r”   Úadditional_tools_itemsr�   ry   r‘   s          r1   r�   z=BedrockMantleResponsesAPIConfig._hoist_codex_additional_toolsÚ   sß   € ô ˜%¤Ô&Ø˜"�9ÐØ:?Ö(m°$À3×CfÑCfÐgkÕClªÐ(mÐÐ(mÙ%Ø˜"�9ÐØ38Ö!j¨4À×@cÑ@cÐdhÕ@i¢$Ð!jˆÐ!jØ*@×w $ÈS×MpÑMpÐquÓMvÒwÀTšÐw˜ÐwˆÑwÜ×ÑðTä�ÓÜÐ&Ó'ô		
ð  × =Ñ =¸mÓ LÐLÐLùò )nùò "kùÛws   ™C °C Á CÁCÁ"C
úMapping[str, object]c                 óv   — | j                  d«      }t        |t        «      sydj                  d„ |D «       «      S )Nr5   Ú c              3   óž   K  — | ]E  }t        |t        «      r3t        |j                  d «      xs |j                  d«      xs d«      –— ŒG y­w)r(   r9   r    N)ro   rp   r-   rr   )Ú.0Úblocks     r1   ú	<genexpr>zFBedrockMantleResponsesAPIConfig._agent_message_text.<locals>.<genexpr>ú   sD   è ø€ ò 
àÜ˜%¤Ô&ô �—	‘	˜&Ó!ÒI U§Y¡YÐ/BÓ%CÒIÀr×Jñ
ùs   ‚AA)rr   ro   r˜   Újoin)r”   r5   s     r1   Ú_agent_message_textz3BedrockMantleResponsesAPIConfig._agent_message_textõ   s;   € àŸ™ )Ó,ˆÜ˜'¤4Ô(ØØ�w‰wñ 
à ô
ó 
ð 	
r0   c                 óB   — | j                  |«      }|sy ddd|dœfdœ}|S )Nr�   Ú	assistantÚoutput_text)r'   r(   )r'   r4   r5   )r¦   )rœ   r”   r(   Ú	rewrittens       r1   Ú_normalize_agent_message_itemz=BedrockMantleResponsesAPIConfig._normalize_agent_message_item   s8   € à×-Ñ-¨dÓ3ˆÙØàØØ!.¸Ñ=Ð?ñ<
ˆ	ð
 Ðr0   c                 óX   — | j                  d«      }t        |t        «      r|sy d|dœ}|S )Nr9   Ú
compaction)r'   r9   )rr   ro   r-   )r”   r9   rª   s      r1   Ú"_normalize_context_compaction_itemzBBedrockMantleResponsesAPIConfig._normalize_context_compaction_item  s4   € à#'§8¡8Ð,?Ó#@ÐÜÐ+¬SÔ1Ñ9JØØ>JÐarÑ5sˆ	ØÐr0   c                 óÈ   — | j                  d«      }t        |t        «      r|sy | j                  d«      }d|dt        |t        «      rt	        j
                  |«      nddœ}|S )Nr<   ÚactionÚfunction_callÚlocal_shellz{})r'   r<   r=   r>   )rr   ro   r-   rp   ÚjsonÚdumps)r”   r<   r°   rª   s       r1   Ú _normalize_local_shell_call_itemz@BedrockMantleResponsesAPIConfig._normalize_local_shell_call_item  s\   € àŸ™ )Ó,ˆÜ˜'¤3Ô'©wØØŸ™ Ó*ˆà#ØØ!Ü/9¸&Ä$Ô/GœŸ™ FÔ+ÈTñ	8
ˆ	ð Ðr0   ztuple[object, str | None]c                 óü   — t        |t        «      s|dfS |j                  d«      }|t        k(  r| j	                  |«      |fS |t
        k(  r| j                  |«      |fS |t        k(  r| j                  |«      |fS |dfS )zKReturns (normalized item or None to drop it, original type when rewritten).Nr'   )	ro   rp   rr   r    r«   r"   r®   r$   rµ   )rœ   r”   Ú	item_types      r1   Ú_normalize_codex_input_itemz;BedrockMantleResponsesAPIConfig._normalize_codex_input_item"  s�   € ô ˜$¤Ô%Ø˜�:ÐØŸ8™8 FÓ+ˆ	ØÔ<Ò<Ø×4Ñ4°TÓ:¸IÐEÐEØÔAÒAØ×9Ñ9¸$Ó?ÀÐJÐJØÔ?Ò?Ø×7Ñ7¸Ó=¸yÐHÐHØ�TˆzÐr0   c                 óô   ‡ — t        |t        «      s|S t        ˆ fd„|D «       «      }t        t	        d„ |D «       «      «      }|rt        j                  d|«       |D ��cg c]
  \  }}|€Œ	|‘Œ }}}|S c c}}w )a.  Rewrite Codex history item types Mantle rejects with 400 "Invalid
        'input': value did not match any expected variant" into supported
        equivalents. `agent_message` (Codex multi-agent traffic; its
        encrypted_content slot carries the plaintext payload when the model
        never issued encrypted args) becomes an assistant message,
        `context_compaction` becomes the `compaction` spelling Mantle accepts,
        and `local_shell_call` becomes the function_call its recorded
        function_call_output already pairs with.
        c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrD   )r¸   )r¢   r”   rœ   s     €r1   r¤   zOBedrockMantleResponsesAPIConfig._normalize_codex_input_items.<locals>.<genexpr>@  s   øè ø€ Ò!ZÈD #×"AÑ"AÀ$×"GÑ!Zùs   ƒc              3   ó,   K  — | ]  \  }}|€Œ	|–— Œ y ­wrD   r/   )r¢   Ú_r·   s      r1   r¤   zOBedrockMantleResponsesAPIConfig._normalize_codex_input_items.<locals>.<genexpr>A  s   è ø€ Ò1tÁÀÀ9Ð^gÑ^s´)Ñ1tùs   ‚
�zVBedrock Mantle Responses API: rewrote Codex input item type(s) %s that Mantle rejects.)ro   r˜   r6   ru   Ú	frozensetr   rt   )rœ   r‰   Ú
normalizedÚrewritten_typesr”   r¼   rw   s   `      r1   rŽ   z<BedrockMantleResponsesAPIConfig._normalize_codex_input_items0  s{   ø€ ô ˜%¤Ô&ØˆLÜ!Ó!ZÐTYÔ!ZÓZˆ
Ü!'¬	Ñ1tÐPZÔ1tÓ(tÓ!uˆÙÜ×"Ñ"ØhØôð ,6×J¡  a¸Ñ9I’tÐJˆÑJØˆùó Ks   Á 
A4Á+A4Úresponse_api_optional_paramsc                 óú   •— | j                  t        ‰| �	  |||¬«      |¬«      }|j                  d«      }|s|S t	        |t
        «      r|n|g}| j                  |«      }|r||d<   |S |j                  dd «       |S )N)rÀ   r_   r}   )r}   rm   )rˆ   rE   Úmap_openai_paramsrr   ro   r˜   r{   Úpop)	rH   rÀ   r_   r}   r|   rm   Ú
tools_listÚfilteredrI   s	           €r1   rÂ   z1BedrockMantleResponsesAPIConfig.map_openai_paramsJ  sœ   ø€ ð ×=Ñ=Ü‰GÑ%Ø-IØØ'ð &ó ð
 $ð >ó 
ˆð —z‘z 'Ó*ˆÙØˆMä%/°´tÔ%<™EÀ5À'ˆ
Ø×8Ñ8¸ÓDˆÙØ&ˆF�7‰Oð ˆð �J‰J�w Ô%àˆr0   )NT)r”   zdict[str, Any]rJ   z	list[Any])r‰   rŠ   rJ   z*tuple[str | ResponseInputParam, list[Any]])r”   rž   rJ   z%_RewrittenAssistantMessageItem | None)r”   rž   rJ   z_RewrittenCompactionItem | None)r”   rž   rJ   z!_RewrittenFunctionCallItem | None)r‰   rŠ   rJ   rŠ   )$r*   r+   r,   r	   ÚboolrF   Úpropertyr   rN   r-   rp   r]   r   rf   ri   rl   Ústaticmethodr˜   r   r{   rˆ   r�   r–   r™   Úclassmethodr�   r¦   r«   r®   rµ   Úobjectr¸   rŽ   r   rÂ   Ú__classcell__)rI   s   @r1   r@   r@   U   s{  ø„ ð )-Ø $ñ/à Ñ%ð/ð õ/ð ð+ \ò +ó ð+ðà˜‘*ðð ðð 
ó	ð(¨Dð ¸ð ÐNbÐeiÑNið Ðnró ð¨Tó ð¨4ó ð ð¨¨c©ð °t¸C±yò ó ðð. ðV°ð VÀDð VÈTò Vó ðVð*
àð
ð *ð
ð /3ð	
ð
 -ð
ð ð
ð 
õ
ð: ðf¨cð f°dò fó ðfð ò8ó ð8ð ðMà)ðMð 
6òMó ðMð4 ð
Ð"8ð 
¸Sò 
ó ð
ð ò	ó ð	ð òó ðð òó ðð ð¨vð Ð:Uò ó ðð ðà)ðð 
$òó ðð2à&Gðð ðð ð	ð
 
÷ñ r0   r@   )+Ú__doc__r³   Úcollections.abcr   Útypingr   r   Útyping_extensionsr   r   r‚   Úlitellm._loggingr   Ú!litellm.llms.bedrock.base_aws_llmr	   Ú(litellm.llms.bedrock_mantle.common_utilsr
   r   Ú,litellm.llms.openai.responses.transformationr   Úlitellm.secret_managers.mainr   Úlitellm.types.llms.openair   r   Úlitellm.types.routerr   Úlitellm.types.utilsr   r   r.   r½   rs   r   r   r    r"   r$   r&   r3   r8   r;   r@   r/   r0   r1   ú<module>rØ      sÜ   ðòó" Ý #ß ç 1ã Ý +Ý 8÷õ RÝ 7÷õ 6Ý ,ð"Ð ˜ó ñ 1:Ò:sÓ0tÐ -á1:¸FÀIÐ;NÓ1OÐ '¨Ó Oà1CÐ '¨Ó Cà.=Ð $ eÓ =Ø3GÐ )¨5Ó GØ1CÐ '¨Ó Cô 	ô ô
= Yô =ô%˜yô %ô
 ô ôOÐ&<Ð>Võ Or0   