o
    i                     @  s  U d dl mZ d dlZd dlZd dlmZmZmZ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mZmZmZmZ d dlZd dlZd d	lmZ d d
lmZ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,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@ d dlAmBZBmCZC d dlDmEZE d dlFmGZG d dlHmIZI erd dlJmKZK d dlLmMZM d dlNmOZO d dlPmQZQ d dlRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZh ed Zi	 ejeiB Zk	 edZlemdZndddddddZod epd!< d"Zqd#epd$< 	 G d%d& d&eGd'd(Zred'd)G d*d+ d+e=ZseG d,d- d-e?ZtG d.d/ d/een ZudS )0    )annotationsN)AsyncIteratorIterableIteratorMapping)asynccontextmanager)	dataclassfield)datetime)count)TYPE_CHECKINGAnyGenericLiteralcastoverload)ClientError)	ParamSpecassert_never)AudioUrlBinaryContentBuiltinToolCallPartBuiltinToolReturnPart
CachePointDocumentUrlFinishReasonImageUrlModelMessageModelProfileSpecModelRequestModelResponseModelResponsePartModelResponseStreamEventRetryPromptPartSystemPromptPartTextPartThinkingPartToolCallPartToolReturnPartUserPromptPartVideoUrl_utilsusage)
RunContext)ModelHTTPError	UserError)ModelModelRequestParametersStreamedResponsedownload_item)Providerinfer_provider)BedrockModelProfile)ModelSettings)ToolDefinition)
BaseClient)EventStream)BedrockRuntimeClient)StopReasonType)ContentBlockOutputTypeDefContentBlockUnionTypeDefConverseRequestTypeDefConverseResponseTypeDef"ConverseStreamMetadataEventTypeDefConverseStreamOutputTypeDefConverseStreamResponseTypeDefCountTokensRequestTypeDefDocumentBlockTypeDefGuardrailConfigurationTypeDefImageBlockTypeDefInferenceConfigurationTypeDefMessageUnionTypeDefPerformanceConfigurationTypeDefPromptVariableValuesTypeDef"ReasoningContentBlockOutputTypeDefSystemContentBlockTypeDefToolChoiceTypeDefToolConfigurationTypeDefToolSpecificationTypeDefToolTypeDefVideoBlockTypeDef)6zamazon.titan-tg1-largezamazon.titan-text-lite-v1zamazon.titan-text-express-v1zus.amazon.nova-pro-v1:0zus.amazon.nova-lite-v1:0zus.amazon.nova-micro-v1:0z)anthropic.claude-3-5-sonnet-20241022-v2:0z,us.anthropic.claude-3-5-sonnet-20241022-v2:0z(anthropic.claude-3-5-haiku-20241022-v1:0z+us.anthropic.claude-3-5-haiku-20241022-v1:0zanthropic.claude-instant-v1zanthropic.claude-v2:1zanthropic.claude-v2z'anthropic.claude-3-sonnet-20240229-v1:0z*us.anthropic.claude-3-sonnet-20240229-v1:0z&anthropic.claude-3-haiku-20240307-v1:0z)us.anthropic.claude-3-haiku-20240307-v1:0z%anthropic.claude-3-opus-20240229-v1:0z(us.anthropic.claude-3-opus-20240229-v1:0z)anthropic.claude-3-5-sonnet-20240620-v1:0z,us.anthropic.claude-3-5-sonnet-20240620-v1:0z)anthropic.claude-3-7-sonnet-20250219-v1:0z,us.anthropic.claude-3-7-sonnet-20250219-v1:0z%anthropic.claude-opus-4-20250514-v1:0z(us.anthropic.claude-opus-4-20250514-v1:0z'anthropic.claude-sonnet-4-20250514-v1:0z*us.anthropic.claude-sonnet-4-20250514-v1:0z*eu.anthropic.claude-sonnet-4-20250514-v1:0z)anthropic.claude-sonnet-4-5-20250929-v1:0z,us.anthropic.claude-sonnet-4-5-20250929-v1:0z,eu.anthropic.claude-sonnet-4-5-20250929-v1:0z(anthropic.claude-haiku-4-5-20251001-v1:0z+us.anthropic.claude-haiku-4-5-20251001-v1:0z+eu.anthropic.claude-haiku-4-5-20251001-v1:0zcohere.command-text-v14zcohere.command-r-v1:0zcohere.command-r-plus-v1:0zcohere.command-light-text-v14zmeta.llama3-8b-instruct-v1:0zmeta.llama3-70b-instruct-v1:0zmeta.llama3-1-8b-instruct-v1:0z!us.meta.llama3-1-8b-instruct-v1:0zmeta.llama3-1-70b-instruct-v1:0z"us.meta.llama3-1-70b-instruct-v1:0z meta.llama3-1-405b-instruct-v1:0z"us.meta.llama3-2-11b-instruct-v1:0z"us.meta.llama3-2-90b-instruct-v1:0z!us.meta.llama3-2-1b-instruct-v1:0z!us.meta.llama3-2-3b-instruct-v1:0z"us.meta.llama3-3-70b-instruct-v1:0z mistral.mistral-7b-instruct-v0:2z"mistral.mixtral-8x7b-instruct-v0:1zmistral.mistral-large-2402-v1:0zmistral.mistral-large-2407-v1:0PTcontent_filterstoplength	tool_call)content_filteredend_turnguardrail_intervened
max_tokensstop_sequencetool_usez"dict[StopReasonType, FinishReason]_FINISH_REASON_MAP)zus.zeu.zapac.zjp.zau.zca.ztuple[str, ...]#_AWS_BEDROCK_INFERENCE_GEO_PREFIXESc                   @  sL   e Zd ZU dZded< 	 ded< 	 ded< 	 ded	< 	 d
ed< 	 ded< dS )BedrockModelSettingsa  Settings for Bedrock models.

    See [the Bedrock Converse API docs](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html#API_runtime_Converse_RequestSyntax) for a full list.
    See [the boto3 implementation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-runtime/client/converse.html) of the Bedrock Converse API.
    rF   bedrock_guardrail_configrJ   !bedrock_performance_configurationzdict[str, str]bedrock_request_metadataz	list[str].bedrock_additional_model_response_fields_pathsz)Mapping[str, PromptVariableValuesTypeDef]bedrock_prompt_variableszMapping[str, Any](bedrock_additional_model_requests_fieldsN)__name__
__module____qualname____doc____annotations__ rm   rm   `/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/pydantic_ai/models/bedrock.pyra      s   
 ra   F)total)initc                      s>  e Zd ZU dZded< eddZded< eddZded	< d
dddd\ fddZe	d]ddZ
e	d]ddZe	d]ddZd^d!d"Zed_d&d'Zd`d,d-Zdad/d0Ze	dbdcd4d5Zddd8d9Zeded>d?ZedfdAd?ZdgdDd?ZedhdFdGZdidIdJZdjdLdMZedkdSdTZedldXdYZedmdZd[Z  ZS )nBedrockConverseModelz+A model that uses the Bedrock Converse API.r;   clientF)reprBedrockModelName_model_namezProvider[BaseClient]	_providerbedrockN)providerprofilesettings
model_namerx   4Literal['bedrock', 'gateway'] | Provider[BaseClient]ry   ModelProfileSpec | Nonerz   ModelSettings | Nonec                  sR   || _ t|trt|dkrdn|}|| _td|j| _t j||p$|j	d dS )a   Initialize a Bedrock model.

        Args:
            model_name: The name of the model to use.
            model_name: The name of the Bedrock model to use. List of model names available
                [here](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html).
            provider: The provider to use for authentication and API access. Can be either the string
                'bedrock' or an instance of `Provider[BaseClient]`. If not provided, a new provider will be
                created using the other parameters.
            profile: The model profile to use. Defaults to a profile picked by the provider based on the model name.
            settings: Model-specific settings that will be used as defaults for this model.
        gatewayzgateway/bedrockr;   )rz   ry   N)
ru   
isinstancestrr5   rv   r   rr   super__init__model_profile)selfr{   rx   ry   rz   	__class__rm   rn   r      s   
zBedrockConverseModel.__init__returnr   c                 C  s   t | jjjS N)r   rr   metaendpoint_urlr   rm   rm   rn   base_url   s   zBedrockConverseModel.base_urlc                 C     | j S )zThe model name.ru   r   rm   rm   rn   r{         zBedrockConverseModel.model_namec                 C  s   | j jS )zThe model provider.)rv   namer   rm   rm   rn   system  s   zBedrockConverseModel.systemmodel_request_parametersr1   list[ToolTypeDef]c                   s    fdd|j  D S )Nc                   s   g | ]}  |qS rm   )_map_tool_definition).0rr   rm   rn   
<listcomp>	  s    z3BedrockConverseModel._get_tools.<locals>.<listcomp>)	tool_defsvalues)r   r   rm   r   rn   
_get_tools  s   zBedrockConverseModel._get_toolsfr8   rQ   c                 C  s*   | j d| jid}| jr| j|d< d|iS )Njson)r   inputSchemadescriptiontoolSpec)r   parameters_json_schemar   )r   	tool_specrm   rm   rn   r     s   
z)BedrockConverseModel._map_tool_definitionmessageslist[ModelMessage]model_settingsr    c                   sJ   |  ||\}}tt|pi }| |d||I d H }| |I d H }|S )NF)prepare_requestr   ra   _messages_create_process_response)r   r   r   r   rz   responsemodel_responserm   rm   rn   request  s   zBedrockConverseModel.requestusage.RequestUsagec           
   
     s   |  ||\}}| ||I dH \}}| | jd||did}ztjtj| j	j
fi |I dH }W n! tyW } z|jdi dd}	t|	| j|jd|d}~ww tj|d	 d
S )zCount the number of tokens, works with limited models.

        Check the actual supported models on <https://docs.aws.amazon.com/bedrock/latest/userguide/count-tokens.html>
        Nconverse)r   r   )modelIdinputResponseMetadataHTTPStatusCode  status_coder{   bodyinputTokens)input_tokens)r   _map_messages_remove_inference_geo_prefixr{   anyio	to_threadrun_sync	functoolspartialrr   count_tokensr   r   getr.   r,   RequestUsage)
r   r   r   r   system_promptbedrock_messagesparamsr   er   rm   rm   rn   r   #  s$   

	(z!BedrockConverseModel.count_tokensrun_contextRunContext[Any] | NoneAsyncIterator[StreamedResponse]c              	   C sh   |  ||\}}tt|pi }| |d||I d H }t|| j|d | jj|di dd dV  d S )NTstreamr   	RequestId)r   ru   _event_stream_provider_name_provider_response_id)	r   r   ra   r   BedrockStreamedResponser{   rv   r   r   )r   r   r   r   r   rz   r   rm   rm   rn   request_stream?  s   z#BedrockConverseModel.request_streamr   r@   c              	     sR  g }|d  d }ru|d D ]d}| d }rM| d }r0|tdd|d| jd	 n| d
 }rM| d}|t|d ||rH| jnd d | d }	r]|t|	d q| d }
rt|t|
d |
d |
d d qtj|d d |d d d}| di  dd }|d }d|i}t	 |}t
||| j|| jj||dS )NoutputmessagecontentreasoningContentredactedContentredacted_content utf-8)idr   	signatureprovider_namereasoningTextr   text)r   r   r   )r   toolUser   r   	toolUseId)	tool_nameargstool_call_idr,   r   outputTokensr   output_tokensr   r   
stopReasonfinish_reason)partsr,   r{   provider_response_idr   r   provider_details)r   appendr&   decoder   r%   r'   r,   r   r_   r    r{   rv   r   )r   r   itemsr   itemreasoning_contentr   reasoning_textr   r   r^   uresponse_idraw_finish_reasonr   r   rm   rm   rn   r   U  sf   



z&BedrockConverseModel._process_responser   Literal[True]BedrockModelSettings | NonerC   c                      d S r   rm   r   r   r   r   r   rm   rm   rn   r        z%BedrockConverseModel._messages_createLiteral[False]c                   r   r   rm   r   rm   rm   rn   r     r   bool7ConverseResponseTypeDef | ConverseStreamResponseTypeDefc              
     s  |  ||I d H \}}| |}| j|||d}| |}	|	r$|	|d< |jr+td|ru|dd  }
r9|
|d< |dd  }rE||d< |dd  }rQ||d	< |d
d  }r]||d< |dd  }ri||d< |dd  }ru||d< z,|rtj	t
j| jjfi |I d H }W |S tj	t
j| jjfi |I d H }W |S  ty } z|jdi dd}t|| j|jd|d }~ww )N)r   r   r   inferenceConfig
toolConfigz'Bedrock does not support built-in toolsrb   guardrailConfigrc   performanceConfigrd   requestMetadatare   !additionalModelResponseFieldPathsrg   additionalModelRequestFieldsrf   promptVariablesr   r   r   r   )r   _map_inference_configr{   _map_tool_configbuiltin_toolsr/   r   r   r   r   r   r   rr   converse_streamr   r   r   r.   )r   r   r   r   r   r   r   inference_configr   tool_configguardrail_configperformance_configurationrequest_metadata&additional_model_response_fields_paths additional_model_requests_fieldsprompt_variablesr   r   r   rm   rm   rn   r     sR   

&rH   c                 C  sl   | pi } i }|  d }r||d< |  d }d ur||d< |  d }r)||d< |  d }r4||d< |S )Nr\   	maxTokenstemperaturetop_ptopPstop_sequencesstopSequences)r   )r   r  r\   r  r  r  rm   rm   rn   r    s   z*BedrockConverseModel._map_inference_configToolConfigurationTypeDef | Nonec                 C  sP   |  |}|s	d S |jsdi i}ndi i}d|i}|r&t| jjr&||d< |S )Nanyautotools
toolChoice)r   allow_text_outputr6   from_profilery   bedrock_supports_tool_choice)r   r   r  tool_choicer  rm   rm   rn   r    s   

z%BedrockConverseModel._map_tool_configAtuple[list[SystemContentBlockTypeDef], list[MessageUnionTypeDef]]c              
     s  t | j}g }g }td}|D ]}t|tr|jD ]}t|tr/|jr/|	d|ji qt|t
rA|| ||I dH  qt|trn|jdusMJ |	dd|j|jdkr^d| ind| igddigd	 qt|tr|jdu r|	dd| igd	 q|jdusJ |	dd|jd| igd
digd	 qqt|tr,g }	|jD ]s}
t|
tr|		d|
ji qt|
tr	|
j| jkr|
jrt | jjr|
jdkrd|
jdi}n	d|
j|
jdi}|		d|i q| jj\}}|		dd||
j|gi qt|
t t!B rqt|
t"sJ |		| #|
 q|	d|	d	 qt$| qg }d}|D ]9}|dura|d |d kra|d dkrat%|d }||d  ||d< q7|	| t&t't(t)f |}q7| *|| }r|+dd|i ||fS )zMaps a `pydantic_ai.Message` to the Bedrock `MessageUnionTypeDef`.

        Groups consecutive ToolReturnPart objects into a single user message as required by Bedrock Claude/Nova models.
           r   Nuser
toolResultr   success)r   r   statusroler   errorr   r   r   r   )r   r   r   
	assistantr%  r   r   ),r6   r  ry   r   r   r   r   r$   r   r   r)   extend_map_user_promptr(   r   bedrock_tool_result_formatmodel_response_strmodel_response_objectr#   r   r   r    r%   r&   r   r   r    bedrock_send_back_thinking_partsr   encodethinking_tagsjoinr   r   r'   _map_tool_callr   listr   dictr   r   _get_instructionsinsert)r   r   r   ry   r   r   document_countr   partr   r   r   	start_tagend_tagprocessed_messageslast_messagecurrent_messagelast_contentinstructionsrm   rm   rn   r     s   








-





z"BedrockConverseModel._map_messagesr8  r)   r7  Iterator[int]list[MessageUnionTypeDef]c           
        sJ  g }t | jtr|d| ji n| jD ]}t |tr&|d|i qt |tr|j}|jrMdt| }|dv s>J |d||d|jidi q|j	rd|dv sVJ |d|d|jid	i q|j
r{|d
v smJ |d|d|jid	i qtdt |ttB tB r	t|dddI d H }|d }|jdkr|jdd }|dv sJ d| |d|d id	}|d|i q|jdkrdt| }||jd|d id}|d|i q|jdkr|jdd }|d
v sJ d| |d|d id	}	|d|	i qt |trtdt |trqt| qd|dgS )Nr   z	Document )	pdftxtcsvdocdocxxlsxlsxhtmlmddocumentbytes)r   formatsource)jpegpnggifwebpimage)rM  rN  )	mkvmovmp4webmflvmpegmpgwmvthree_gpvideoz$Binary content is not supported yet.	extension)data_formattype_format	data_typez	image-url/r  zUnsupported image format: datazdocument-urlz	video-urlzUnsupported video format: zAudio is not supported yet.r   r$  )r   r   r   r   r   rM  is_documentnextrc  is_imageis_videoNotImplementedErrorr   r   r*   r3   kind
media_typesplitr   r   r   )
r8  r7  r   r   rM  r   downloaded_itemrS  rK  r]  rm   rm   rn   r*  j  sb   







z%BedrockConverseModel._map_user_prompttr'   r=   c                 C  s   dt j| d| j|  diS )Nr   rm  )r   r   r   )r+   guard_tool_call_idr   args_as_dictrn  rm   rm   rn   r2    s   z#BedrockConverseModel._map_tool_callc                 C  s&   t D ]}| |r| |  S q| S )z<Remove inference geographic prefix from model ID if present.)r`   
startswithremoveprefix)r{   prefixrm   rm   rn   r     s
   
z1BedrockConverseModel._remove_inference_geo_prefix)r{   rt   rx   r|   ry   r}   rz   r~   r   r   )r   r1   r   r   )r   r8   r   rQ   )r   r   r   r~   r   r1   r   r    )r   r   r   r~   r   r1   r   r   r   )
r   r   r   r~   r   r1   r   r   r   r   )r   r@   r   r    )
r   r   r   r   r   r   r   r1   r   rC   )
r   r   r   r   r   r   r   r1   r   r@   )
r   r   r   r   r   r   r   r1   r   r   )r   r~   r   rH   )r   r1   r   r  )r   r   r   r1   r   r  )r8  r)   r7  r@  r   rA  )rm  r'   r   r=   )r{   rt   r   rt   )rh   ri   rj   rk   rl   r	   ru   rv   r   propertyr   r{   r   r   staticmethodr   r   r   r   r   r   r   r   r  r  r   r*  r2  r   __classcell__rm   rm   r   rn   rq      sN   
 



4	
	5

u@rq   c                   @  s   e Zd ZU dZded< ded< ded< eejdZd	ed
< dZ	ded< dddZ
edddZedddZedddZd ddZdS )!r   z8Implementation of `StreamedResponse` for Bedrock models.rt   ru   z(EventStream[ConverseStreamOutputTypeDef]r   r   r   )default_factoryr
   
_timestampNz
str | Noner   r   'AsyncIterator[ModelResponseStreamEvent]c                 C s  | j dur
| j | _d}t| j2 z63 dH W }|  r* dkr*d! r(    q     rP dkrPd! rN d    } |d }d|i| _t|| _n     ru dkrud! rs d    } d	|v rr|  j| 	|7  _n     r dkrd ! r d    } |d }|d }d|v r|d }	|	d }|	d }
| j
j||
d|d}|r|V  q    rE dkrEd!! rC d    }|d }|d }d|v r|d d }r| j
j|d|d| jdV  n|d d}| j
j||d d||r| jnddV  |d }r#| j
j||d}|dur#|V  d|v rB|d }| j
j||d|d|d}|rB|V  q   	 	 q6 dS )"a  Return an async iterator of [`ModelResponseStreamEvent`][pydantic_ai.messages.ModelResponseStreamEvent]s.

        This method should be implemented by subclasses to translate the vendor-specific stream of events into
        pydantic_ai-format events.
        Nr  messageStartmessageStopr   r   r   metadatar,   contentBlockStartcontentBlockIndexstartr   r   r   )vendor_part_idr   r   r   contentBlockDeltadeltar   r   r   r   )r  r   r   r   r   r   )r  r   r   r   )r  r   r   )r{  )r|  )r}  )r~  )r  )r   r   _AsyncIteratorWrapperr   r   r_   r   r   _usage
_map_usage_parts_managerhandle_tool_call_deltahandle_thinking_deltar   r   handle_text_delta)r   tool_idchunkmessage_stopr   r}  content_block_startindexr  tool_use_startr   maybe_eventcontent_block_deltar  r   r   r   r^   rm   rm   rn   _get_event_iterator  s   
&
&&(



!z+BedrockStreamedResponse._get_event_iteratorc                 C  r   )z#Get the model name of the response.r   r   rm   rm   rn   r{     r   z"BedrockStreamedResponse.model_namec                 C  r   )zGet the provider name.)r   r   rm   rm   rn   r     r   z%BedrockStreamedResponse.provider_namec                 C  r   r   )ry  r   rm   rm   rn   	timestamp  s   z!BedrockStreamedResponse.timestampr}  rA   r   c                 C  s   t j|d d |d d dS )Nr,   r   r   r   )r,   r   )r   r}  rm   rm   rn   r    s   

z"BedrockStreamedResponse._map_usage)r   rz  rt  )r   r
   )r}  rA   r   r   )rh   ri   rj   rk   rl   r	   r+   now_utcry  r   r  ru  r{   r   r  r  rm   rm   rm   rn   r     s   
 
Ir   c                   @  s,   e Zd ZdZdddZdd Zdd
dZdS )r  z1Wrap a synchronous iterator in an async iterator.sync_iteratorIterable[T]c                 C  s   t || _d S r   )iterr  )r   r  rm   rm   rn   r   %  s   z_AsyncIteratorWrapper.__init__c                 C  s   | S r   rm   r   rm   rm   rn   	__aiter__(  s   z_AsyncIteratorWrapper.__aiter__r   rT   c              
     sJ   zt jt| jI d H W S  ty$ } zt|jtu rt	|d }~ww r   )
r   r   r   re  r  RuntimeErrortype	__cause__StopIterationStopAsyncIteration)r   r   rm   rm   rn   	__anext__+  s   z_AsyncIteratorWrapper.__anext__N)r  r  )r   rT   )rh   ri   rj   rk   r   r  r  rm   rm   rm   rn   r  "  s
    
r  )v
__future__r   r   typingcollections.abcr   r   r   r   
contextlibr   dataclassesr   r	   r
   	itertoolsr   r   r   r   r   r   r   r   anyio.to_threadbotocore.exceptionsr   typing_extensionsr   r   pydantic_air   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   pydantic_ai._run_contextr-   pydantic_ai.exceptionsr.   r/   pydantic_ai.modelsr0   r1   r2   r3   pydantic_ai.providersr4   r5   pydantic_ai.providers.bedrockr6   pydantic_ai.settingsr7   pydantic_ai.toolsr8   botocore.clientr9   botocore.eventstreamr:   mypy_boto3_bedrock_runtimer;   #mypy_boto3_bedrock_runtime.literalsr<   $mypy_boto3_bedrock_runtime.type_defsr=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   LatestBedrockModelNamesr   rt   rS   TypeVarrT   r_   rl   r`   ra   rq   r   r  rm   rm   rm   rn   <module>   sj     h`8
	.   hg