o
    Zh                     @   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d

Z
dddd	d	d	d	dddd

Zdededeedf def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-7-sonnet-20250219-v1: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   sr   |r| dd d | dd  }nd }	 |tvr)t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   o/var/www/html/lang_env/lib/python3.10/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! fddZd	efddZed	efddZdeeef dee ded	d
fddZdeded	d
fddZdeded	d
fddZd"ddZded	d fdd Z  ZS )#)BedrockAnthropicTokenUsageCallbackHandlerz4Callback Handler that tracks bedrock anthropic info.r   total_tokensr   r	   successful_requestsg        
total_costr   Nc                    s   t    t | _d S )N)super__init__	threadingLock_lockself	__class__r   r   r   C   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__G   s   
z2BedrockAnthropicTokenUsageCallbackHandler.__repr__c                 C      dS )z;Whether to call verbose callbacks even if verbose is False.Tr   r!   r   r   r   always_verboseP   s   z8BedrockAnthropicTokenUsageCallbackHandler.always_verbose
serializedpromptskwargsc                 K   r&   )zPrint out the prompts.Nr   )r"   r(   r)   r*   r   r   r   on_llm_startU   s   z6BedrockAnthropicTokenUsageCallbackHandler.on_llm_starttokenc                 K   r&   )zPrint out the token.Nr   )r"   r,   r*   r   r   r   on_llm_new_token[      z:BedrockAnthropicTokenUsageCallbackHandler.on_llm_new_tokenresponsec           	      K   s  |j du rdS d|j vr)| j |  jd7  _W d   dS 1 s"w   Y  dS |j d }|dd}|dd}|dd}|j dd}t|||d	}| j, |  j|7  _|  j|7  _|  j|7  _|  j|7  _|  jd7  _W d   dS 1 sw   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_   s4   



"z4BedrockAnthropicTokenUsageCallbackHandler.on_llm_endc                 C      | S )z&Return a copy of the callback handler.r   r!   r   r   r   __copy__}   r.   z2BedrockAnthropicTokenUsageCallbackHandler.__copy__memoc                 C   r4   )z+Return a deep copy of the callback handler.r   )r"   r6   r   r   r   __deepcopy__   r.   z6BedrockAnthropicTokenUsageCallbackHandler.__deepcopy__)r   N)r   r   )__name__
__module____qualname____doc__r   int__annotations__r   r	   r   r   floatr   strr%   propertyboolr'   r   r   r   r+   r-   r   r3   r5   r7   __classcell__r   r   r#   r   r   :   s0   
 	


r   )r   typingr   r   r   r   Zlangchain_core.callbacksr   Zlangchain_core.outputsr   r   r   r<   r?   r>   r   r   r   r   r   r   <module>   sH    

