a
    bg.                  
   @   s   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	 dddddddd	dd
	Z
dddd	d	d	dddd
	Zeeeedf edddZG dd deZdS )    N)AnyDictListUnion)BaseCallbackHandler)	LLMResultg-C6J?gMb?g~jth?gMb0?gQ?)	zanthropic.claude-instant-v1zanthropic.claude-v2zanthropic.claude-v2:1z'anthropic.claude-3-sonnet-20240229-v1:0z)anthropic.claude-3-5-sonnet-20240620-v1:0z)anthropic.claude-3-5-sonnet-20241022-v2:0z&anthropic.claude-3-haiku-20240307-v1:0z%anthropic.claude-3-opus-20240229-v1:0z(anthropic.claude-3-5-haiku-20241022-v1:0ga2U0*c?g~jt?g{GzT?g333333?gMbp?)prompt_tokenscompletion_tokensmodel_idreturnc                 C   sp   |r&| dd d | dd  }nd }|tvrPtd| ddt  | d t|  |d t|   S )N.zUnknown model: z@. Please provide a valid Anthropic model name.Known models are: z, i  )splitMODEL_COST_PER_1K_INPUT_TOKENS
ValueErrorjoinkeysMODEL_COST_PER_1K_OUTPUT_TOKENS)r   r	   r
   Zbase_model_id r   /var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/callbacks/bedrock_anthropic_callback.py _get_anthropic_claude_token_cost    s    "
r   c                       s   e Zd ZU dZdZeed< dZeed< dZeed< dZ	eed< dZ
eed< d	d
 fddZed
ddZeed
ddZeeef ee ed	dddZeed	dddZeed	dddZd d
ddZed dddZ  ZS ))BedrockAnthropicTokenUsageCallbackHandlerz4Callback Handler that tracks bedrock anthropic info.r   total_tokensr   r	   successful_requestsg        
total_costN)r   c                    s   t    t | _d S )N)super__init__	threadingLock_lockself	__class__r   r   r   A   s    
z2BedrockAnthropicTokenUsageCallbackHandler.__init__c              
   C   s,   d| j  d| j d| j d| j d| j 
S )NzTokens Used: z
	Prompt Tokens: z
	Completion Tokens: z
Successful Requests: z
Total Cost (USD): $)r   r   r	   r   r   r!   r   r   r   __repr__E   s    
z2BedrockAnthropicTokenUsageCallbackHandler.__repr__c                 C   s   dS )z;Whether to call verbose callbacks even if verbose is False.Tr   r!   r   r   r   always_verboseN   s    z8BedrockAnthropicTokenUsageCallbackHandler.always_verbose)
serializedpromptskwargsr   c                 K   s   dS )zPrint out the prompts.Nr   )r"   r'   r(   r)   r   r   r   on_llm_startS   s    z6BedrockAnthropicTokenUsageCallbackHandler.on_llm_start)tokenr)   r   c                 K   s   dS )zPrint out the token.Nr   )r"   r+   r)   r   r   r   on_llm_new_tokenY   s    z:BedrockAnthropicTokenUsageCallbackHandler.on_llm_new_token)responser)   r   c           	      K   s
  |j du rdS d|j vrP| j |  jd7  _W d   n1 sB0    Y  dS |j d }|dd}|dd}|dd}|j dd}t|||d	}| jV |  j|7  _|  j|7  _|  j|7  _|  j|7  _|  jd7  _W d   n1 s0    Y  dS )
zCollect token usage.Nusage   r	   r   r   r   r
   )r   r	   r
   )	Z
llm_outputr    r   getr   r   r   r   r	   )	r"   r-   r)   Ztoken_usager	   r   r   r
   r   r   r   r   
on_llm_end]   s,    

,
z4BedrockAnthropicTokenUsageCallbackHandler.on_llm_endc                 C   s   | S )z&Return a copy of the callback handler.r   r!   r   r   r   __copy__{   s    z2BedrockAnthropicTokenUsageCallbackHandler.__copy__)memor   c                 C   s   | S )z+Return a deep copy of the callback handler.r   )r"   r3   r   r   r   __deepcopy__   s    z6BedrockAnthropicTokenUsageCallbackHandler.__deepcopy__)__name__
__module____qualname____doc__r   int__annotations__r   r	   r   r   floatr   strr%   propertyboolr&   r   r   r   r*   r,   r   r1   r2   r4   __classcell__r   r   r#   r   r   8   s"   
	r   )r   typingr   r   r   r   Zlangchain_core.callbacksr   Zlangchain_core.outputsr   r   r   r9   r<   r;   r   r   r   r   r   r   <module>   s6   