o
    |qihP                     @   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 i 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"i d#d"d$d
d%dd&d
d'dd(dd)dd*dd+dd,d-d.d-d/d0d1d0d2d"d3d"d4d5d6d5i d7d8d9d8d:d5d;d5d<dd=dd>d"d?d"d@dAdBdAdCdDdEdDdFdGdHdGdIdJdKdJdLdMi dNdMdOdPdQdPdRdGdSdGdTdUdVdUdWddXddYd-dZd-d[d0d\d0d]d^d_d^d`dadbdai dcdddedddfd^dgd^dhdidjdidkdddldddmd^dndidod^dpdidqdddrdddsdJdtdMdudJi dvdMdwdPdxdPdydzd{d
d|d}d~dzdd
ddzdd
ddddJddddddzddzddzi dddddddd}dd}dd}ddzddzddzddddddddddddddddi ddddddddddddddddddddddddddddddddzddzi ddddddddddddddddddddPddPddPddddddddddi ddddPddPddPddʓddʓddʓddddddddddddddԓdd-ddԓddԓi ddٓddԓddddddddԓddddddddddddddԓdd-ddddԓddԓi ddddddddԓdddddddddddd"dd"dd-dd-ddddddddi dddd8ddddd ddddddddd8ddddddd	dd
ddd"ddddԓd"ddd8dddʐdZG dd deZ	dejddedededefddZ	dejddededededef
ddZG dd deZdS (   z(Callback Handler that prints to std out.    N)Enumauto)AnyDictList)warn_deprecated)BaseCallbackHandler)	AIMessage)ChatGeneration	LLMResultgpt-5g{GzT?zgpt-5-cachedgMb ?zgpt-5-2025-08-07zgpt-5-2025-08-07-cachedzgpt-5-completiong{Gz?zgpt-5-2025-08-07-completionz
gpt-5-minigMb0?zgpt-5-mini-cachedg-C6>zgpt-5-mini-2025-08-07zgpt-5-mini-2025-08-07-cachedzgpt-5-mini-completiongMb`?z gpt-5-mini-2025-08-07-completionz
gpt-5-nanog-C6
?zgpt-5-nano-cachedgh㈵>zgpt-5-nano-2025-08-07zgpt-5-nano-2025-08-07-cachedzgpt-5-nano-completiong-C6:?z gpt-5-nano-2025-08-07-completionzgpt-5-chat-latestzgpt-5-chat-latest-cachedzgpt-5-chat-latest-2025-08-07z#gpt-5-chat-latest-2025-08-07-cachedzgpt-5-chat-latest-completionz'gpt-5-chat-latest-2025-08-07-completiongpt-4.1zgpt-4.1-2025-04-14zgpt-4.1-cachedgMb@?zgpt-4.1-2025-04-14-cachedzgpt-4.1-completiongMb?zgpt-4.1-2025-04-14-completionzgpt-4.1-minizgpt-4.1-mini-2025-04-14zgpt-4.1-mini-cachedg-C6?zgpt-4.1-mini-2025-04-14-cachedzgpt-4.1-mini-completiong-C6Z?z"gpt-4.1-mini-2025-04-14-completionzgpt-4.1-nanozgpt-4.1-nano-2025-04-14zgpt-4.1-nano-cachedzgpt-4.1-nano-2025-04-14-cachedzgpt-4.1-nano-completionz"gpt-4.1-nano-2025-04-14-completionzgpt-4.5-previewg333333?zgpt-4.5-preview-2025-02-27zgpt-4.5-preview-cachedg333333?z!gpt-4.5-preview-2025-02-27-cachedzgpt-4.5-preview-completiong333333?z%gpt-4.5-preview-2025-02-27-completiono1gQ?zo1-2024-12-17z	o1-cachedgQ~?zo1-2024-12-17-cachedzo1-completiongQ?zo1-2024-12-17-completionzo1-prozo1-pro-2025-03-19zo1-pro-completiong333333?zo1-pro-2025-03-19-completiono3zo3-2025-04-16z	o3-cachedzo3-2025-04-16-cachedzo3-completionzo3-2025-04-16-completionzo4-minig/nR?zo4-mini-2025-04-16zo4-mini-cachedg/n2?zo4-mini-2025-04-16-cachedzo4-mini-completiong/nr?zo4-mini-2025-04-16-completionzo3-minizo3-mini-2025-01-31zo3-mini-cachedg/nB?zo3-mini-2025-01-31-cachedzo3-mini-completionzo3-mini-2025-01-31-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
o1-previewzo1-preview-cachedzo1-preview-2024-09-12zo1-preview-2024-09-12-cachedzo1-preview-completionz o1-preview-2024-09-12-completiongpt-4og{Gzd?zgpt-4o-cachedgpt-4o-2024-05-13g{Gzt?z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-completionzgpt-4o-audio-previewzgpt-4o-audio-preview-2024-12-17zgpt-4o-audio-preview-2024-10-01zgpt-4o-audio-preview-completionz*gpt-4o-audio-preview-2024-12-17-completionz*gpt-4o-audio-preview-2024-10-01-completionzgpt-4o-realtime-previewz"gpt-4o-realtime-preview-2024-12-17z"gpt-4o-realtime-preview-2024-10-01zgpt-4o-realtime-preview-cachedz)gpt-4o-realtime-preview-2024-12-17-cachedz)gpt-4o-realtime-preview-2024-10-01-cachedz"gpt-4o-realtime-preview-completiong{Gz?z-gpt-4o-realtime-preview-2024-12-17-completionz-gpt-4o-realtime-preview-2024-10-01-completionzgpt-4o-miniga2U0*#?zgpt-4o-mini-cachedga2U0*?zgpt-4o-mini-2024-07-18zgpt-4o-mini-2024-07-18-cachedzgpt-4o-mini-completionga2U0*C?z!gpt-4o-mini-2024-07-18-completionzgpt-4o-mini-audio-previewz$gpt-4o-mini-audio-preview-2024-12-17z$gpt-4o-mini-audio-preview-completionz/gpt-4o-mini-audio-preview-2024-12-17-completionzgpt-4o-mini-realtime-previewz'gpt-4o-mini-realtime-preview-2024-12-17z#gpt-4o-mini-realtime-preview-cachedga2U0*3?z.gpt-4o-mini-realtime-preview-2024-12-17-cachedz'gpt-4o-mini-realtime-preview-completionga2U0*c?z2gpt-4o-mini-realtime-preview-2024-12-17-completionzgpt-4o-mini-search-previewz%gpt-4o-mini-search-preview-2025-03-11z%gpt-4o-mini-search-preview-completionz0gpt-4o-mini-search-preview-2025-03-11-completionzgpt-4o-search-previewz gpt-4o-search-preview-2025-03-11z gpt-4o-search-preview-completionz+gpt-4o-search-preview-2025-03-11-completionzcomputer-use-previewg~jth?zcomputer-use-preview-2025-03-11zcomputer-use-preview-completiong~jt?z*computer-use-preview-2025-03-11-completiongpt-4gQ?z
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-completiongQ?z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-turbog~jtX?zgpt-3.5-turbo-0125zgpt-3.5-turbo-0301zgpt-3.5-turbo-0613zgpt-3.5-turbo-1106gMbP?z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-completiongMbp?z!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-completiong~jtx?z'gpt-3.5-turbo-1106-finetuned-completionz'gpt-3.5-turbo-0125-finetuned-completionz+gpt-4o-mini-2024-07-18-finetuned-completionga2U0*S?zbabbage-002-azure-finetunedzdavinci-002-azure-finetunedz!gpt-35-turbo-0613-azure-finetuned)z&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   p/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/langchain_community/callbacks/openai_info.pyr   4  s
    
r   F
token_type
model_nameis_completionr   returnc                C   s2  |rt dddd tj}|  } d| v r| dd d } d| v r*| d	d d
 } d| v r7| d	d d } |tjkrk| dsg| dsg| dsg| dsg| dsg| dsg| dsgd| v rkd| vrk| d S |tjkr| ds| ds| ds| ds| ds| dr| ds| d S | 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   r   zgpt-3.5zgpt-35zo1-zo3-zo4-Z	finetunedlegacyz-completionr   r   r   r   Zo4r   z-cached)r   r   r   lowersplit
startswithr   )r    r!   r   r   r   r   standardize_model_name<  s`   	

	r-   
num_tokensc                C   sZ   |rt dddd tj}t| |d} | tvr%t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   	
r3   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# 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 )%OpenAICallbackHandlerz)Callback Handler that tracks OpenAI info.r   total_tokensprompt_tokensprompt_tokens_cachedcompletion_tokensreasoning_tokenssuccessful_requestsg        
total_costr"   Nc                    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): $)r5   r6   r7   r8   r9   r:   r;   rA   r   r   r   __repr__  s   
zOpenAICallbackHandler.__repr__c                 C      dS )z;Whether to call verbose callbacks even if verbose is False.Tr   rA   r   r   r   always_verbose  s   z$OpenAICallbackHandler.always_verbose
serializedpromptskwargsc                 K   rF   )zPrint out the prompts.Nr   )rB   rH   rI   rJ   r   r   r   on_llm_start  s   z"OpenAICallbackHandler.on_llm_starttokenc                 K   rF   )zPrint out the token.Nr   )rB   rL   rJ   r   r   r   on_llm_new_token     z&OpenAICallbackHandler.on_llm_new_tokenresponsec                 K   s  z	|j d d }W n ty   d}Y nw t|tr=z|j}t|tr*|j}|j}nd}d}W n ty<   d}d}Y nw d}d}d}d}|rd|d i}	|d }
|d }|pXi 	d }rct
|}n|jdu rkd}n	t
|j	dd}d|	d	i v r|d	 d }d
|	di v r|d d
 }nC|jdu rdS d|jvr| j |  jd7  _W d   dS 1 sw   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   dS 1 sDw   Y  dS )zCollect token usage.r   Nr5   Zoutput_tokensZinput_tokensr     Z
cache_readZinput_token_detailsZ	reasoningZoutput_token_detailstoken_usager(   r8   r6   r   )Zgenerations
IndexError
isinstancer
   r&   r	   usage_metadataresponse_metadataAttributeErrorgetr-   Z
llm_outputr@   r:   r/   r3   r   r   r   r   r;   r5   r6   r7   r8   r9   )rB   rO   rJ   Z
generationr&   rT   rU   r7   r9   rQ   r8   r6   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 )z&Return a copy of the callback handler.r   rA   r   r   r   __copy__%  rN   zOpenAICallbackHandler.__copy__memoc                 C   rY   )z+Return a deep copy of the callback handler.r   )rB   r[   r   r   r   __deepcopy__)  rN   z"OpenAICallbackHandler.__deepcopy__)r"   N)r"   r4   )r   r   r   r   r5   int__annotations__r6   r7   r8   r9   r:   r;   floatr=   strrE   propertyboolrG   r   r   r   rK   rM   r   rX   rZ   r\   __classcell__r   r   rC   r   r4     s4   
 


Wr4   )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   r`   rb   r-   r]   r_   r3   r4   r   r   r   r   <module>   s6   
 "#$%'(*+,-/0234578:;<=?@BCDEGHJKMNPQRSUVXYZ[]^`abcefhijkmnpqrsuvxyz{|}~               
                                    !  "  $  %  '  (  )  *  ,  -  /  0  2  3  5  6  8  9  ;  <  >  ?  A  B  C  D  E  F  G  H  I  J  K  L  N  O  P  Q  R  S  T  U  V  W  X  Y  ]  ^  _  `  a  b  c  d  h  i  j  k  l  m  n  o  q  r  s  t  u  v  w  y  z  {  |  }  ~                                 	    
                                                                      
  *

D
(