Ë
    uPêj}D  ã                   óR  — U d dl mZ d dl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 erd dlmZ d	d	d	d
dddddddœ
Zeed<    eh d£«      Zeed<   dededz  fd„Zdededz  fd„Zdedededz  dedz  fd„Zdeeef   de	dz  fd„Zdededz  fd „Z G d!„ d"«      Zy)#é    )ÚMapping)Údatetime)ÚTYPE_CHECKINGÚAnyÚFinalÚcast)ÚBatchRequestCounts)ÚMetadata)Úget_aws_dns_suffix©ÚLiteLLMBatch)ÚLoggingÚ
validatingÚin_progressÚ
cancellingÚ	cancelledÚ	completedÚfailedÚexpired)
Ú	SubmittedÚ
ValidatingÚ	ScheduledÚ
InProgressÚStoppingÚStoppedÚ	CompletedÚPartiallyCompletedÚFailedÚExpiredÚ_BEDROCK_MIJ_STATUS_TO_OPENAI>   r   r   r   r   r   Ú_CANCEL_IDEMPOTENT_STATUSESÚarnÚreturnNc                 ó„   — 	 | j                  d«      }t        |«      dk\  r|d   dk(  r	|d   xs dS y# t        $ r Y yw xY w)z=ARN shape: ``arn:aws:bedrock:<region>:<account>:<type>/<id>``ú:é   é   Úbedrocké   N)ÚsplitÚlenÚ	Exception)r"   Úpartss     úi/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/bedrock/batches/handler.pyÚ _extract_region_from_bedrock_arnr/   !   sU   € ðØ—y‘y “~ˆÜˆu‹:˜Š?˜u Q™x¨9Ò4Ø˜‘8Ò#˜tÐ#ð øô ò ØØðús   ‚/3 ³	?¾?c                 ó>   — d| vry| j                  dd«      d   xs dS )zR``arn:aws:bedrock:<region>:<acct>:model-invocation-job/<job-id>`` -> ``<job-id>``.z:model-invocation-job/Nú/é   éÿÿÿÿ)Úrsplit)r"   s    r.   Ú_extract_job_id_from_arnr5   ,   s(   € à sÑ*ØØ�:‰:�c˜1Ó˜bÑ!Ò) TÐ)ó    Úoutput_prefixÚ	input_uriÚjob_idc                 ó€   — | r|r|sy| j                  d«      s| dz   } |j                  dd«      d   }|sy| › |› d|› d�S )a¡  
    Compute the deterministic per-job result file URI Bedrock writes to.

    Bedrock lays results out as::

        <output_prefix>/<job-id>/<basename(input_uri)>.out

    We compute it client-side so OpenAI-style ``client.files.content(output_file_id)``
    works without an extra S3 ``ListObjectsV2`` round-trip. Returns ``None`` if we
    don't have enough info; callers should fall back to the bare prefix.
    Nr1   r2   r3   z.out)Úendswithr4   )r7   r8   r9   Úinput_basenames       r.   Ú_predict_output_file_urir=   3   s[   € ñ ¡	±ØØ×!Ñ! #Ô&Ø%¨Ñ+ˆØ%×,Ñ,¨S°!Ó4°RÑ8€NÙØØˆ_˜V˜H A nÐ%5°TÐ:Ð:r6   Úresponsec                 óô   — | j                  d«      }| j                  d«      }t        |t        «      rt        |t        «      sy | j                  d«      }t        ||t        |t        «      r|¬«      S d¬«      S )NÚtotalRecordCountÚsuccessRecordCountÚerrorRecordCountr   ©Útotalr   r   )ÚgetÚ
isinstanceÚintr	   )r>   Útotal_recordsÚsuccess_recordsÚerror_recordss       r.   Ú_record_counts_from_responserK   I   su   € Ø#Ÿ<™<Ð(:Ó;€MØ%Ÿ\™\Ð*>Ó?€OÜ�m¤SÔ)´¸OÌSÔ1QØØ#Ÿ<™<Ð(:Ó;€MÜØØ!Ü *¨=¼#Ô >ˆ}ôð ð EFôð r6   Úvaluec                 óž   — | €y t        | t        t        f«      rt        | «      S t        | t        «      rt        | j	                  «       «      S y ©N)rF   rG   Úfloatr   Ú	timestamp)rL   s    r.   Ú	_to_epochrQ   V   sA   € Ø€}ØÜ�%œ#œu˜Ô&Ü�5‹zÐÜ�%œÔ"Ü�5—?‘?Ó$Ó%Ð%Ør6   c                   óø   — e Zd ZdZe	 	 	 	 	 	 	 	 	 	 	 ddededz  dddedz  dedz  d	edz  d
edz  dedz  dedz  dedz  dedz  dedz  deddfd„«       Zeddededdfd„«       Ze	 	 ddededz  ddfd„«       Z	y)ÚBedrockBatchesHandlerz�
    Handler for Bedrock Batches.

    Specific providers/models needed some special handling.

    E.g. Twelve Labs Embedding Async Invoke
    NÚbatch_idÚaws_region_nameÚlogging_objzLiteLLMLoggingObj | NoneÚaws_access_key_idÚaws_secret_access_keyÚaws_session_tokenÚaws_session_nameÚaws_profile_nameÚaws_role_nameÚaws_web_identity_tokenÚaws_sts_endpointÚaws_external_idÚkwargsr#   r   c                 óR  ‡ ‡‡‡‡‡‡‡‡	‡
‡‡— 	 dd l }ddlm} |xs t	        ‰ «      xs dŠddlm}  |«       j                  ‰‰‰‰‰‰‰‰	‰
‰¬«
      }|j                  d‰|j                  |j                  |j                  ¬«      }dˆˆˆˆˆˆˆˆ
ˆ	ˆ ˆˆfd	„}	 |j                  ‰ ¬
«        |«       S # t        $ r}t        d«      |‚d }~ww xY w# |$ rT}|j                  j                  di «      j                  d«      dvr‚  |«       }|j                  t         vr‚ |cY d }~S d }~ww xY w)Nr   )ÚClientErrorz@Missing boto3/botocore to call bedrock. Run 'pip install boto3'.ú	us-east-1©ÚBedrockBatchesConfig©
rW   rX   rY   rU   rZ   r[   r\   r]   r^   r_   r(   ©Úregion_namerW   rX   rY   c                  óF   •— t         j                  ‰	‰‰
‰ ‰‰‰‰‰‰‰‰¬«      S )N)rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   )rS   Ú#_handle_model_invocation_job_status)rW   r_   r[   r\   rX   rZ   rY   r^   r]   rT   rV   Úregions   €€€€€€€€€€€€r.   Ú
job_statusz6BedrockBatchesHandler.cancel_batch.<locals>.job_status˜   s@   ø€ Ü(×LÑLØ!Ø &Ø'Ø"3Ø&;Ø"3Ø!1Ø!1Ø+Ø'=Ø!1Ø /ð Mó ð r6   ©ÚjobIdentifierÚErrorÚCode)ÚValidationExceptionÚConflictException)r#   r   )Úboto3Úbotocore.exceptionsrb   ÚImportErrorr/   Ú+litellm.llms.bedrock.batches.transformationre   Úget_credentialsÚclientÚ
access_keyÚ
secret_keyÚtokenÚstop_model_invocation_jobr>   rE   Ústatusr!   )rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   rs   rb   Úexcre   Úcredsrx   rl   ÚeÚcurrent_batchrk   s   ` ``````````          @r.   Úcancel_batchz"BedrockBatchesHandler.cancel_batchi   s?  ÿû€ ð 	kÛÝ7ð (ÒdÔ+KÈHÓ+UÒdÐYdˆåTá+Ó-×=Ñ=Ø/Ø"7Ø/Ø"Ø-Ø-Ø'Ø#9Ø-Ø+ð >ó 
ˆð Ÿ™ØØØ#×.Ñ.Ø"'×"2Ñ"2Ø#Ÿk™kð %ó 
ˆ÷	÷ 	ð 	ð 	!Ø×,Ñ,¸8Ð,ÔDñ ‹|Ðøôm ò 	kÜÐ`ÓaÐgjÐjûð	kûð\ ò 	!Ø�z‰z�~‰~˜g rÓ*×.Ñ.¨vÓ6Ð>jÑjØÙ#-£<ˆMØ×#Ñ#Ô+FÑFØØ Õ ûð	!ús6   Ž
B0 ÂC Â0	C
Â9CÃC
ÃD&ÃA	D!ÄD&Ä!D&c                 óì   ‡ ‡‡‡‡‡	‡
— ddl Š
ddlmŠ ˆˆˆ ˆˆfd„Š	ddl}ˆ	ˆ
fd„}|j                  j                  «       5 }|j                  |«      }|j                  «       cddd«       S # 1 sw Y   yxY w)av  
        Handle async invoke status check for AWS Bedrock.

        This is for Twelve Labs Embedding Async Invoke.

        Args:
            batch_id: The async invoke ARN
            aws_region_name: AWS region name
            **kwargs: Additional parameters

        Returns:
            dict: Status information including status, output_file_id (S3 URL), etc.
        r   N)ÚBedrockEmbeddingc               “   ó„  •K  —  ‰«       }  | j                   d‰‰‰	dœ‰¤Žƒ d {  –—† }ddlm} |d   d   d   |j                  d«      xs d|d	   d
œ} ||d   d|d   |d   |d   |j                  d«      |d   dk(  r|j                  d«      nd t	        d|d   dk(  rdnd|d   dk(  rdnd¬«      |ddd¬«      }|S 7 Œ™­w)N)Úinvocation_arnrU   rV   r   r   ÚoutputDataConfigÚs3OutputDataConfigÚs3UriÚfailureMessageÚ ÚmodelArn)Úoutput_file_idÚfailure_messageÚ	model_arnÚinvocationArnÚbatchr}   Ú
submitTimeÚlastModifiedTimeÚendTimer   r2   r   rC   Ú24hz/v1/embeddings)ÚidÚobjectr}   Ú
created_atÚin_progress_atÚcompleted_atÚ	failed_atÚrequest_countsÚmetadataÚcompletion_windowÚendpointÚinput_file_id© )Ú_get_async_invoke_statusÚlitellm.types.utilsr   rE   r	   )
Úembedding_handlerÚstatus_responser   Úopenai_batch_metadataÚresultr„   rU   rT   r`   rV   s
        €€€€€r.   Ú_async_get_statuszLBedrockBatchesHandler._handle_async_invoke_status.<locals>._async_get_statusÇ   s)  øè ø€ á'7Ó'9Ðð ,VÐ+<×+UÑ+Uð ,Ø'Ø /Ø'ñ,ð ñ	,÷ &ˆOõ 9ð #2Ð2DÑ"EÐFZÑ"[Ð\cÑ"dØ#2×#6Ñ#6Ð7GÓ#HÒ#NÈBØ,¨ZÑ8ñAÐ!ñ )Ø" ?Ñ3ØØ& xÑ0Ø*¨<Ñ8Ø.Ð/AÑBØ,×0Ñ0°Ó;Ø=LÈXÑ=VÐZbÒ=b˜?×.Ñ.¨yÔ9ÐhlÜ1ØØ#2°8Ñ#<ÀÒ#K™aÐQRØ /°Ñ 9¸XÒ E™1È1ô ð
 /Ø"'Ø)Ø ô!ˆFð& ˆMðG&ús   ƒ!C ¤B>¥BC c                  ó¾   •— ‰j                  «       } ‰j                  | «       	 | j                   ‰«       «      | j                  «        S # | j                  «        w xY wrN   )Únew_event_loopÚset_event_loopÚrun_until_completeÚclose)Únew_loopr¨   Úasyncios    €€r.   Úrun_in_threadzHBedrockBatchesHandler._handle_async_invoke_status.<locals>.run_in_threadõ   sK   ø€ Ø%×4Ñ4Ó6ˆHØ×"Ñ" 8Ô,ð!Ø×2Ñ2Ñ3DÓ3FÓGà—‘Õ ø�—‘Õ ús   ¤A
 Á
A)r¯   Ú$litellm.llms.bedrock.embed.embeddingr„   Úconcurrent.futuresÚfuturesÚThreadPoolExecutorÚsubmitr§   )rT   rU   rV   r`   Ú
concurrentr°   ÚexecutorÚfuturer„   r¨   r¯   s   ````    @@@r.   Ú_handle_async_invoke_statusz1BedrockBatchesHandler._handle_async_invoke_status´   sb   þ€ ó 	åI÷(	ð (	óX 	"õ	!ð ×Ñ×2Ñ2Ó4ð 	#¸Ø$ŸO™O¨MÓ:ˆFØ—=‘=“?÷	#÷ 	#ò 	#ús   ¿!A*Á*A3c                 óN  — 	 ddl }|xs t        | «      xs d}ddlm}  |«       j                  |j                  d«      |j                  d«      |j                  d«      ||j                  d	«      |j                  d
«      |j                  d«      |j                  d«      |j                  d«      |j                  d«      ¬«
      }|j                  d||j                  |j                  |j                  ¬«      }	|�:t        | «      xs | }
|j                  | dd| id|› dt        |«      › d|
› �dœ¬«       |	j                  | ¬«      }|�|j                  | d|dd| ii¬«       t!        |j                  dd«      «      }t#        t$        t&        j                  |d«      «      }|j                  di «      j                  di «      j                  d d«      }|j                  d!i «      j                  d"i «      j                  d d«      }|j                  d#| «      }t        |«      }t)        |||«      }t+        |j                  d$«      «      }|j                  d%d«      ||j                  d&d«      |j                  d'«      xs d|||xs dd(œ}t-        |d)|t+        |j                  d*«      «      xs dt+        |j                  d+«      «      |d,k(  r|nd|d-k(  r|nd|d.k(  r|nd|d/k(  r|ndt/        |«      |d0d1||d,k(  r|¬2«      S d¬2«      S # t        $ r}t        d«      |‚d}~ww xY w)3u£  
        Handle ``GetModelInvocationJob`` status check for AWS Bedrock bulk batch
        inference jobs (the ARN type returned by ``CreateModelInvocationJob``).

        ``CreateModelInvocationJob`` lives on the Bedrock **control plane**
        (``bedrock.<region>.amazonaws.com``), distinct from the data-plane
        ``bedrock-runtime`` endpoint that serves Twelve Labs async-invoke ARNs.
        The two ARN families therefore can't share a handler â€” see
        ``litellm/batches/main.py`` for the dispatch.

        Args:
            batch_id: A ``arn:aws:bedrock:<region>:<acct>:model-invocation-job/<id>``
                ARN (or just the trailing job id; both are accepted by
                ``GetModelInvocationJob``).
            aws_region_name: Region for the boto3 ``bedrock`` client. If omitted,
                we fall back to parsing the region out of ``batch_id`` itself.
            logging_obj: Optional litellm logging object.
            **kwargs: Optional AWS credential overrides
                (``aws_access_key_id``, ``aws_secret_access_key``,
                ``aws_session_token``, ``aws_profile_name``,
                ``aws_role_name``, ``aws_session_name``,
                ``aws_web_identity_token``, ``aws_sts_endpoint``,
                ``aws_external_id``). Unknown keys are ignored.

        Returns:
            ``LiteLLMBatch`` shaped like an OpenAI Batch resource.
            ``request_counts`` maps ``GetModelInvocationJob``'s
            ``totalRecordCount`` / ``successRecordCount`` / ``errorRecordCount``
            when the provider reports them, and is ``None`` when it does not
            (older botocore, or a status that omits counts).
        r   Nz7Missing boto3 to call bedrock. Run 'pip install boto3'.rc   rd   rW   rX   rY   rZ   r[   r\   r]   r^   r_   rf   r(   rg   r‹   rn   zhttps://bedrock.ú.z/model-invocation-job/)Úcomplete_input_dictÚapi_base)ÚinputÚapi_keyÚadditional_argsrm   r¼   )r¾   r¿   Úoriginal_responserÀ   r}   r   ÚinputDataConfigÚs3InputDataConfigr‰   r‡   rˆ   ÚjobArnr”   ÚmodelIdÚjobNameÚmessage)r�   Újob_arnÚjob_namerŽ   Úinput_s3_uriÚoutput_s3_uriÚoutput_file_urir‘   r’   r“   r   r   r   r   r•   z/v1/chat/completions)r–   r—   r}   r˜   r™   rš   r›   Úcancelled_atÚ
expired_atrœ   r�   rž   rŸ   r    r�   )rs   ru   r/   rv   re   rw   rE   rx   ry   rz   r{   r5   Úpre_callr   Úget_model_invocation_jobÚ	post_callÚstrr   r   r    r=   rQ   r   rK   )rT   rU   rV   r`   rs   r~   rk   re   r   rx   Úurl_path_idr>   Úbedrock_statusÚopenai_statusr8   r7   rÈ   r9   rÌ   rš   r¦   s                        r.   rj   z9BedrockBatchesHandler._handle_model_invocation_job_status  sm  € ðL	bÛð
 (ÒdÔ+KÈHÓ+UÒdÐYdˆõ 	Uá+Ó-×=Ñ=Ø$Ÿj™jÐ)<Ó=Ø"(§*¡*Ð-DÓ"EØ$Ÿj™jÐ)<Ó=Ø"Ø#ŸZ™ZÐ(:Ó;Ø#ŸZ™ZÐ(:Ó;Ø Ÿ*™* _Ó5Ø#)§:¡:Ð.FÓ#GØ#ŸZ™ZÐ(:Ó;Ø"ŸJ™JÐ'8Ó9ð >ó 
ˆð Ÿ™ØØØ#×.Ñ.Ø"'×"2Ñ"2Ø#Ÿk™kð %ó 
ˆð Ð"ô
 ":¸(Ó!CÒ!OÀxˆKØ× Ñ ØØà,;¸XÐ+Fà*¨6¨(°!Ô4FÀvÓ4NÐ3OÐOeÐfqÐerÐsñ!ð !ô 	ð !×9Ñ9ÈÐ9ÓQˆàÐ"Ø×!Ñ!ØØØ"*Ø!6¸È(Ð8SÐ Tð	 "ô ô !$ H§L¡L°¸2Ó$>Ó ?ˆÜ#ÜÜ)×-Ñ-¨n¸mÓLó 
ˆð
 $Ÿ<™<Ð(9¸2Ó>×BÑBÐCVÐXZÓ[×_Ñ_Ð`gÐikÓlˆ	Ø'Ÿ|™|Ð,>ÀÓC×GÑGÐH\Ð^`Óa×eÑeÐfmÐoqÓrˆð "Ÿ™ h°Ó9ˆÜ0°Ó9ˆÜ!9¸-ÈÐTZÓ![ˆä'¨¯©°YÓ(?Ó@ˆð "Ÿ™ i°Ó4ØØ Ÿ™ Y°Ó3Ø'Ÿ|™|¨IÓ6Ò<¸"Ø%Ø*Ø.Ò4°"ñ=
Ðô ØØØ Ü  §¡¨lÓ!;Ó<ÒAÀÜ$ X§\¡\Ð2DÓ%EÓFØ)6¸+Ò)E™È4Ø&3°xÒ&?‘lÀTØ)6¸+Ò)E™È4Ø'4¸	Ò'A‘|ÀtÜ7¸ÓAØ*Ø#Ø+Ø#Ø.;¸{Ò.J˜?ô
ð 	
ð QUô
ð 	
øôG ò 	bÜÐWÓXÐ^aÐaûð	bús   ‚L
 Ì
	L$ÌLÌL$)NNNNNNNNNNNrN   )NN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstaticmethodrÒ   r—   r‚   r¹   rj   r¡   r6   r.   rS   rS   `   sn  „ ñð ð '+Ø26Ø(,Ø,0Ø(,Ø'+Ø'+Ø$(Ø-1Ø'+Ø&*ñHØðHà˜t™ðHð 0ðHð  ™:ð	Hð
  # T™zðHð  ™:ðHð  ™*ðHð  ™*ðHð ˜T‘zðHð !$ d¡
ðHð  ™*ðHð ˜t™ðHð ðHð 
òHó ðHðT ñJ#¨cð J#ÀCð J#Ðhvò J#ó ðJ#ðX ð '+ØñZ
ØðZ
à˜t™ðZ
ð
 
òZ
ó ñZ
r6   rS   ) Úcollections.abcr   r   Útypingr   r   r   r   Úopenai.types.batchr	   r
   ÚOpenAIBatchMetadataÚ(litellm.litellm_core_utils.aws_partitionr   r£   r   Ú*litellm.litellm_core_utils.litellm_loggingr   ÚLiteLLMLoggingObjr    Ú__annotations__Ú	frozensetr!   rÒ   r/   r5   r=   r—   rK   rG   rQ   rS   r¡   r6   r.   ú<module>rä      s  ðÞ #Ý ß 2Ó 2å 1Ý >å GÝ ,áÝWð ØØØØØØØ%ØØñ(Ð ˜uó ñ &/Ò/lÓ%mÐ ˜UÓ mð¨#ð °#¸±*ó ð* #ð *¨#°©*ó *ð;¨Cð ;¸Cð ;ÈÈtÉð ;ÐX[Ð^bÑXbó ;ð,
¨7°3¸°;Ñ+?ð 
ÐDVÐY]ÑD]ó 
ð�Sð ˜S 4™Zó ÷|
ò |
r6   