a
    bg::                     @   s  d Z ddlZddlmZmZ ddl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mZ d	d	d
d
ddddddddd	d
d	d
ddddddddddddddddddddddd	ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d d d!ddddd"dd!dd#d#d#d$ddddddd!d%ddd&ZG d'd( d(eZd3ejd*eeeed+d,d-Zd4ejd*eeeeed.d/d0ZG d1d2 d2eZdS )5z(Callback Handler that prints to std out.    N)Enumauto)AnyDictList)warn_deprecated)BaseCallbackHandler)	AIMessage)ChatGeneration	LLMResultgQ?gQ~?gQ?g/nR?g/nB?g/nr?g~jth?g~jtX?g~jt?ga2U0*#?ga2U0*?ga2U0*C?g{Gzd?g{GzT?g{Gzt?g{Gz?gQ?gQ?gMb@?gMbP?gMb`?gMbp?g-C6:?g{Gz?g-C6Z?ga2U0*3?g~jtx?ga2U0*S?ga2U0*c?)o1zo1-2024-12-17z	o1-cachedzo1-2024-12-17-cachedzo1-completionzo1-2024-12-17-completionzo3-minizo3-mini-2025-01-31zo3-mini-cachedzo3-mini-2025-01-31-cachedzo3-mini-completionzo3-mini-2025-01-31-completionz
o1-previewzo1-preview-cachedzo1-preview-2024-09-12zo1-preview-2024-09-12-cachedzo1-preview-completionz o1-preview-2024-09-12-completionzo1-minizo1-mini-cachedzo1-mini-2024-09-12zo1-mini-2024-09-12-cachedzo1-mini-completionzo1-mini-2024-09-12-completionzgpt-4o-minizgpt-4o-mini-cachedzgpt-4o-mini-2024-07-18zgpt-4o-mini-2024-07-18-cachedzgpt-4o-mini-completionz!gpt-4o-mini-2024-07-18-completiongpt-4ozgpt-4o-cachedgpt-4o-2024-05-13zgpt-4o-2024-08-06zgpt-4o-2024-08-06-cachedzgpt-4o-2024-11-20zgpt-4o-2024-11-20-cachedzgpt-4o-completionzgpt-4o-2024-05-13-completionzgpt-4o-2024-08-06-completionzgpt-4o-2024-11-20-completiongpt-4z
gpt-4-0314z
gpt-4-0613z	gpt-4-32kzgpt-4-32k-0314zgpt-4-32k-0613zgpt-4-vision-previewzgpt-4-1106-previewzgpt-4-0125-previewzgpt-4-turbo-previewzgpt-4-turbozgpt-4-turbo-2024-04-09zgpt-4-completionzgpt-4-0314-completionzgpt-4-0613-completionzgpt-4-32k-completionzgpt-4-32k-0314-completionzgpt-4-32k-0613-completionzgpt-4-vision-preview-completionzgpt-4-1106-preview-completionzgpt-4-0125-preview-completionzgpt-4-turbo-preview-completionzgpt-4-turbo-completionz!gpt-4-turbo-2024-04-09-completionzgpt-3.5-turbozgpt-3.5-turbo-0125zgpt-3.5-turbo-0301zgpt-3.5-turbo-0613zgpt-3.5-turbo-1106zgpt-3.5-turbo-instructzgpt-3.5-turbo-16kzgpt-3.5-turbo-16k-0613zgpt-3.5-turbo-completionzgpt-3.5-turbo-0125-completionzgpt-3.5-turbo-0301-completionzgpt-3.5-turbo-0613-completionzgpt-3.5-turbo-1106-completionz!gpt-3.5-turbo-instruct-completionzgpt-3.5-turbo-16k-completionz!gpt-3.5-turbo-16k-0613-completionzgpt-35-turbozgpt-35-turbo-0125zgpt-35-turbo-0301zgpt-35-turbo-0613zgpt-35-turbo-instructzgpt-35-turbo-16kzgpt-35-turbo-16k-0613zgpt-35-turbo-completionzgpt-35-turbo-0125-completionzgpt-35-turbo-0301-completionzgpt-35-turbo-0613-completionz gpt-35-turbo-instruct-completionzgpt-35-turbo-16k-completionz gpt-35-turbo-16k-0613-completionztext-ada-001adaztext-babbage-001Zbabbageztext-curie-001Zcurieztext-davinci-003ztext-davinci-002zcode-davinci-002zbabbage-002-finetunedzdavinci-002-finetunedzgpt-3.5-turbo-0613-finetunedzgpt-3.5-turbo-1106-finetunedzgpt-3.5-turbo-0125-finetunedz gpt-4o-mini-2024-07-18-finetunedz'gpt-4o-mini-2024-07-18-finetuned-cachedz babbage-002-finetuned-completionz davinci-002-finetuned-completionz'gpt-3.5-turbo-0613-finetuned-completionz'gpt-3.5-turbo-1106-finetuned-completionz'gpt-3.5-turbo-0125-finetuned-completionz+gpt-4o-mini-2024-07-18-finetuned-completionzbabbage-002-azure-finetunedzdavinci-002-azure-finetunedz!gpt-35-turbo-0613-azure-finetunedz&babbage-002-azure-finetuned-completionz&davinci-002-azure-finetuned-completionz,gpt-35-turbo-0613-azure-finetuned-completionzada-finetuned-legacyzbabbage-finetuned-legacyzcurie-finetuned-legacyzdavinci-finetuned-legacyc                   @   s"   e Zd ZdZe Ze Ze ZdS )	TokenTypezToken type enum.N)__name__
__module____qualname____doc__r   PROMPTPROMPT_CACHED
COMPLETION r   r   w/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/callbacks/openai_info.pyr      s   r   F
token_type)
model_nameis_completionr   returnc                C   s   |rt dddd tj}|  } d| v r:| dd d } d| v rT| d	d d
 } d| v rn| d	d d } |tjkr| ds| ds| ds| dsd| v rd| vr| d S |tjkr| ds| dr| ds| d S | S dS )a  
    Standardize the model name to a format that can be used in the OpenAI API.

    Args:
        model_name: Model name to standardize.
        is_completion: Whether the model is used for completion or not.
            Defaults to False. Deprecated in favor of ``token_type``.
        token_type: Token type. Defaults to ``TokenType.PROMPT``.

    Returns:
        Standardized model name.

    0.3.13zis_completion is deprecated. Use token_type instead. Example:

from langchain_community.callbacks.openai_info import TokenType

standardize_model_name('gpt-4o', token_type=TokenType.COMPLETION)
1.0ZsincemessageZremovalz.ft-r   z-azure-finetunedz:ft-:z-finetuned-legacyzft:   z
-finetunedr   zgpt-3.5zgpt-35zo1-Z	finetunedlegacyz-completionr   r   r   z-cachedN)r   r   r   lowersplit
startswithr   )r   r   r   r   r   r   standardize_model_name   sL    	
r*   )r   
num_tokensr   r   r   c                C   sZ   |rt dddd tj}t| |d} | tvrJtd|  ddt  t|  |d	  S )
a  
    Get the cost in USD for a given model and number of tokens.

    Args:
        model_name: Name of the model
        num_tokens: Number of tokens.
        is_completion: Whether the model is used for completion or not.
            Defaults to False. Deprecated in favor of ``token_type``.
        token_type: Token type. Defaults to ``TokenType.PROMPT``.

    Returns:
        Cost in USD.
    r    zis_completion is deprecated. Use token_type instead. Example:

from langchain_community.callbacks.openai_info import TokenType

get_openai_token_cost_for_model('gpt-4o', 10, token_type=TokenType.COMPLETION)
r!   r"   r   zUnknown model: z=. Please provide a valid OpenAI model name.Known models are: z, i  )r   r   r   r*   MODEL_COST_PER_1K_TOKENS
ValueErrorjoinkeys)r   r+   r   r   r   r   r   get_openai_token_cost_for_model   s    	
r0   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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 )!OpenAICallbackHandlerz)Callback Handler that tracks OpenAI info.r   total_tokensprompt_tokensprompt_tokens_cachedcompletion_tokensreasoning_tokenssuccessful_requestsg        
total_costN)r   c                    s   t    t | _d S )N)super__init__	threadingLock_lockself	__class__r   r   r:     s    
zOpenAICallbackHandler.__init__c                 C   s<   d| j  d| j d| j d| j d| j d| j d| j S )NzTokens Used: z
	Prompt Tokens: z
		Prompt Tokens Cached: z
	Completion Tokens: z
		Reasoning Tokens: z
Successful Requests: z
Total Cost (USD): $)r2   r3   r4   r5   r6   r7   r8   r>   r   r   r   __repr__!  s    
zOpenAICallbackHandler.__repr__c                 C   s   dS )z;Whether to call verbose callbacks even if verbose is False.Tr   r>   r   r   r   always_verbose,  s    z$OpenAICallbackHandler.always_verbose)
serializedpromptskwargsr   c                 K   s   dS )zPrint out the prompts.Nr   )r?   rD   rE   rF   r   r   r   on_llm_start1  s    z"OpenAICallbackHandler.on_llm_start)tokenrF   r   c                 K   s   dS )zPrint out the token.Nr   )r?   rH   rF   r   r   r   on_llm_new_token7  s    z&OpenAICallbackHandler.on_llm_new_token)responserF   r   c                 K   s  z|j d d }W n ty(   d}Y n0 t|tr|z*|j}t|trT|j}|j}nd}d}W q tyx   d}d}Y q0 nd}d}d}d}|r*d|d i}	|d }
|d }|pi 	d }rt
|}n"|jdu rd}nt
|j	dd}d|	d	i v r
|d	 d }d
|	di v r|d d
 }n|jdu r:dS d|jvr| j |  jd7  _W d   n1 sr0    Y  dS |jd }	|		dd}
|		dd}t
|j	dd}|tv r || }t||tjd}t||tjd}|| }t||
tjd}nd}d}| j~ |  j|| 7  _|  j|		dd7  _|  j|7  _|  j|7  _|  j|
7  _|  j|7  _|  jd7  _W d   n1 s0    Y  dS )zCollect token usage.r   Nr2   Zoutput_tokensZinput_tokensr    Z
cache_readZinput_token_detailsZ	reasoningZoutput_token_detailstoken_usager%   r5   r3   r   )Zgenerations
IndexError
isinstancer
   r#   r	   usage_metadataresponse_metadataAttributeErrorgetr*   Z
llm_outputr=   r7   r,   r0   r   r   r   r   r8   r2   r3   r4   r5   r6   )r?   rJ   rF   Z
generationr#   rO   rP   r4   r6   rL   r5   r3   Zresponse_model_namer   Zuncached_prompt_tokensZuncached_prompt_costZcached_prompt_costZprompt_costZcompletion_costr   r   r   
on_llm_end;  s    




.

z OpenAICallbackHandler.on_llm_endc                 C   s   | S )z&Return a copy of the callback handler.r   r>   r   r   r   __copy__  s    zOpenAICallbackHandler.__copy__)memor   c                 C   s   | S )z+Return a deep copy of the callback handler.r   )r?   rU   r   r   r   __deepcopy__  s    z"OpenAICallbackHandler.__deepcopy__)r   r   r   r   r2   int__annotations__r3   r4   r5   r6   r7   r8   floatr:   strrB   propertyboolrC   r   r   r   rG   rI   r   rS   rT   rV   __classcell__r   r   r@   r   r1     s&   
Wr1   )F)F)r   r;   enumr   r   typingr   r   r   Zlangchain_core._apir   Zlangchain_core.callbacksr   Zlangchain_core.messagesr	   Zlangchain_core.outputsr
   r   r,   r   r   rZ   r\   r*   rW   rY   r0   r1   r   r   r   r   <module>   s<     
 : (