o
    i'                     @   sn  U d dl 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mZmZmZ ddlmZmZ ddlmZ ddlmZmZ ddlmZ G d	d
 d
eZG dd deZejdejf Z 				d7de!dej"e! dej"e! dej"e! dej"e! dej#e!ej$e  f fddZ%e&de!e!ej'd dZ(e&de!ej'd e!dZ)G dd deZ*eee
edZ+ej#e!ejf e,d< ee	d Z-ej#e!ejf e,d!< d"ej.d#e!dej/e0 fd$d%Z1d"ej.defd&d'Z2d(d) Z3d*ejfd+d,Z4				d7de!dej"e! dej"e! dej"e! dej"e! de fd-d.Z5d/e!dej"e! d0e!d1e6de!f
d2d3Z7d4e!fd5d6Z8dS )8    N)URLSyncByteStream
ByteStream   )	GenerateStreamedResponse
GenerationNonStreamedChatResponseEmbedResponseStreamedChatResponseRerankResponseApiMetaApiMetaTokensApiMetaBilledUnits)ClientClientEnvironment)construct_type)
lazy_boto3lazy_botocore)ClientV2c                   @   p   e Zd Zdddddddeje deje deje deje deje dejejd	 ejd
 f fddZ	dS )	AwsClientNaws_access_keyaws_secret_keyaws_session_token
aws_regiontimeoutr   r   r   r   r   servicebedrock	sagemakerc                C   s6   t j| dtjd|dtj t|||||d|dd d S Nzhttps://api.cohere.comzn/ar   r   r   r   r   )event_hooksr   )base_urlenvironmentclient_namer   api_keyhttpx_client)r   __init__r   
PRODUCTIONhttpxget_event_hooksselfr   r   r   r   r   r    r.   W/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/cohere/aws_client.pyr(      $   

zAwsClient.__init__
__name__
__module____qualname__typingOptionalstrfloatUnionLiteralr(   r.   r.   r.   r/   r      &    r   c                   @   r   )AwsClientV2Nr   r   r   r   r   r   r   r   r   c                C   s6   t j| dtjd|dtjt|||||d|dd d S r    )r   r(   r   r)   r*   r   r+   r,   r.   r.   r/   r(   1   r0   zAwsClientV2.__init__r1   r.   r.   r.   r/   r<   0   r;   r<   .r   r   r   r   r   returnc                 C   s   t | ||||dgt gdS )Nr!   )requestresponse)map_request_to_bedrockmap_response_from_bedrockr!   r.   r.   r/   r+   R   s   	
r+   TextGenerationztext-generation)textis_finished
event_type	StreamEndz
stream-end)rD   rE   finish_reasonc                   @   sD   e Zd ZU eje ed< deje fddZdeje fddZdS )Streamerlinesc                 C   s
   || _ d S NrI   )r-   rI   r.   r.   r/   r(   v   s   
zStreamer.__init__r=   c                 C   s   | j S rJ   rK   )r-   r.   r.   r/   __iter__y   s   zStreamer.__iter__N)	r2   r3   r4   r5   Iteratorbytes__annotations__r(   rL   r.   r.   r.   r/   rH   s   s   
 rH   )chatembedgeneratererankresponse_mapping)rP   rR   stream_response_mappingr?   endpointc           
      c   s    d}|   D ]C}t||}|rJt| }d|v rJt|d d}t|}d|v rJt	| }t
|t||d}	t|	 d dV  qd S )Nz{[^\}]*}rN   utf-8rE   type_object_
)
iter_linesresearchjsonloadsgroupbase64	b64decodedecoderU   r5   castr   dumpsdictencode)
r?   rV   regex_textmatchobjbase64_payloadstreamed_objresponse_typeparsedr.   r.   r/   stream_generator   s"   

rq   c                 C   s@   t | jdd}t | jdd}tt||dt||ddS )Nz X-Amzn-Bedrock-Input-Token-Countz!X-Amzn-Bedrock-Output-Token-Count)input_tokensoutput_tokens)tokensbilled_units)intheadersgetr   r   r   )r?   rs   rt   r.   r.   r/   map_token_counts   s   

rz   c                  C   s   dt jdd fdd} | S )Nr?   r=   c                 S   s   | j d dk}| jjd }|rttj| j| jd|}n*t| }t	
|  }t|  |d< t|t||d}tt	| dg}t|| _t| drR| `d	| _d	| _d S )
Nzcontent-typez"application/vnd.amazon.eventstreamrV   )streamstatus_codemetarX   rW   _contentF)rx   r>   
extensionsrq   r*   Responser{   r|   rT   r_   r`   readrz   rg   r5   re   r   iterrf   rh   rH   hasattrr~   is_stream_consumed	is_closed)r?   r{   rV   outputro   response_objcast_objr.   r.   r/   _hook   s0   


z(map_response_from_bedrock.<locals>._hook)r*   r   )r   r.   r.   r/   rA      s   
 rA   kwargsc                  K   s$   dd |   D }t jdi |S )Nc                 S   s   i | ]\}}|d ur||qS rJ   r.   ).0kvr.   r.   r/   
<dictcomp>   s    z%get_boto3_session.<locals>.<dictcomp>r.   )itemsr   Session)r   non_none_argsr.   r.   r/   get_boto3_session   s   r   c                    sP   t  |||d}|j | }t j| dtjdd f fdd}|S )N)region_nameaws_access_key_idaws_secret_access_keyr   r>   r=   c           	         s&  | j  }|d= | jjdd }| jjdd }t|  }|d }t |d|v o0|d d}t	|| _| jj
| j d< |d	krJt|d
|d< d|v rQ|d= d|v rX|d= t|d}t|| _|| _tt||d< t jj| j|||  d}| t| j | _ || jd< d S )N
connection/rr   modelr{   )platformr   r   r{   hostrS   )versionapi_versionrW   zcontent-length)methodurlrx   datarV   )rx   copyr   pathsplitr_   r`   r   get_urlr   r   get_api_versionrf   rh   r   r{   r~   r7   lenr   
awsrequest
AWSRequestr   add_authr*   Headerspreparer   )	r>   rx   r   rV   bodyr   r   new_bodyaws_requestr   r   signerr.   r/   _event_hook   sB   



z+map_request_to_bedrock.<locals>._event_hook)r   r   get_credentialsr   auth	SigV4Authr*   Request)r   r   r   r   r   sessioncredentialsr   r.   r   r/   r@      s   ,r@   r   r   r{   c                 C   s^   | dkr|sdnd}d|  d| d| d| S | dkr-|s d	nd
}d| d| d| S dS )Nr   invokezinvoke-with-response-streamzhttps://z	-runtime.z.amazonaws.com/model/r   r   invocationszinvocations-response-streamzhttps://runtime.sagemaker.z.amazonaws.com/endpoints/ r.   )r   r   r   r{   rV   r.   r.   r/   r     s   r   r   c                 C   s   ddd}| | dS )Nr      )v1v2)ry   )r   int_versionr.   r.   r/   r     s   r   )NNNN)9rb   r_   r]   r5   r*   r   r   r   r   r   r   r   r	   r
   r   r   r   r   clientr   r   corer   !manually_maintained.lazy_aws_depsr   r   	client_v2r   r   r<   CallableAny	EventHookr7   r6   DictListr+   	TypedDictr:   rB   rF   rH   rT   rO   rU   r   rM   rN   rq   rz   rA   r   r@   boolr   r   r.   r.   r.   r/   <module>   s   
 ,
	#


@
