
    ih::                         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-d0d1d2d1d3d4d5d6d7d8d9d4i d:d6d;d4d<d6d=d>d?d
d@d>dAd>dBdCdDdCdEdCdFddGddHddId>dJd>dKd>dLd>i dMd>dNd>dOddPddQddRdSdTdSdUdSdVdCdWdCdXdCdYdCdZdCd[dCd\d$d]d^d_d$i d`d$dadbdcd$ddd"ded"dfdgdhd$didgdjdgdkdgdldgdmdndodndpd$dqd^drdgdsd$i dtd$dud"dvd"dwdgdxd$dydgdzdgd{dgd|dnd}dnd~ddddd^dd^ddgddgddi dddddddd(dd"dd"dd"dddd+dddd(ddddddddddddgd$ddgdgddd(dSdZ G d de      Z	 dej(                  ddedededefdZ	 dej(                  ddededededef
dZ G d de      Zy)z(Callback Handler that prints to std out.    N)Enumauto)AnyDictList)warn_deprecated)BaseCallbackHandler)	AIMessage)ChatGeneration	LLMResult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o3-minig/nR?zo3-mini-2025-01-31zo3-mini-cachedg/nB?zo3-mini-2025-01-31-cachedzo3-mini-completiong/nr?z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-minig~jth?zo1-mini-cachedg~jtX?zo1-mini-2024-09-12zo1-mini-2024-09-12-cachedzo1-mini-completiong~jt?zo1-mini-2024-09-12-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-completiongpt-4og{Gzd?zgpt-4o-cachedg{GzT?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-completiong{Gz?zgpt-4o-2024-05-13-completionzgpt-4o-2024-08-06-completionzgpt-4o-2024-11-20-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-turbozgpt-3.5-turbo-0125gMb@?z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-completiongMb`?z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-001g-C6:?adaztext-babbage-001babbageztext-curie-001curieztext-davinci-003g{Gz?ztext-davinci-002zcode-davinci-002zbabbage-002-finetunedg-C6Z?z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-finetunedga2U0*3?z'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-finetunedga2U0*c?)z!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                   :    e Zd ZdZ e       Z e       Z e       Zy)	TokenTypezToken type enum.N)__name__
__module____qualname____doc__r   PROMPTPROMPT_CACHED
COMPLETION     g/var/www/html/dev/engine/venv/lib/python3.12/site-packages/langchain_community/callbacks/openai_info.pyr   r      s    VFFMJr   r   
token_type
model_nameis_completionr!   returnc                f   |rt        ddd       t        j                  }| j                         } d| v r| j	                  d      d   dz   } d| v r| j	                  d	      d   d
z   } d| v r| j	                  d	      d   dz   } |t        j                  k(  rQ| j                  d      s;| j                  d      s*| j                  d      s| j                  d      sd| v r	d| vr| dz   S |t        j                  k(  r8| j                  d      s| j                  d      r| j                  d      s| dz   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sincemessageremovalz.ft-r   z-azure-finetunedz:ft-:z-finetuned-legacyzft:   z
-finetunedr   zgpt-3.5zgpt-35zo1-	finetunedlegacyz-completionr   r   r   z-cached)r   r   r   lowersplit
startswithr   )r"   r#   r!   s      r   standardize_model_namer3      sI   & V 	
 ))
!!#J%%f-a03EE
%%c*1-0CC

%%c*1-<
Y)))g&  +  *  ':%(**DM))i---""8,
0E0Ed0K&&':;I%%r   
num_tokensc                    |rt        ddd       t        j                  }t        | |      } | t        vr3t        d|  ddj                  t        j                               z         t        |    |d	z  z  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   r3   MODEL_COST_PER_1K_TOKENS
ValueErrorjoinkeys)r"   r4   r#   r!   s       r   get_openai_token_cost_for_modelr:      s    ( c 	
 ))
'
zJJ11j\ *! !#'99-E-J-J-L#MN
 	
 $J/:3DEEr   c                       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ZdefdZedefd       Zdeeef   dee   deddfdZdededdfdZdededdfdZddZdedd fdZ x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                 T    t         |           t        j                         | _        y )N)super__init__	threadingLock_lock)self	__class__s    r   rF   zOpenAICallbackHandler.__init__  s    ^^%
r   c                     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): $)r=   r>   r?   r@   rA   rB   rC   rJ   s    r   __repr__zOpenAICallbackHandler.__repr__!  s    D--. /  $ 2 23 4))-)B)B(C D$$($:$:#; <%%)%:%:$; <$$($<$<#= >""&//!24	
r   c                      y)z;Whether to call verbose callbacks even if verbose is False.Tr   rM   s    r   always_verbosez$OpenAICallbackHandler.always_verbose,  s     r   
serializedpromptskwargsc                      y)zPrint out the prompts.Nr   )rJ   rQ   rR   rS   s       r   on_llm_startz"OpenAICallbackHandler.on_llm_start1  s     	r   tokenc                      y)zPrint out the token.Nr   )rJ   rV   rS   s      r   on_llm_new_tokenz&OpenAICallbackHandler.on_llm_new_token7  s    r   responsec                    	 |j                   d   d   }t        |t              r;	 |j                  }t        |t
              r|j                  }|j                  }nd}d}nd}d}d}d}|rd|d   i}	|d   }
|d   }|xs i j                  d      x}rt        |      }n4|j                  d}n%t        |j                  j                  dd            }d|j                  d	i       v r|d	   d   }d
|j                  di       v r|d   d
   }n|j                  yd|j                  vr+| j                  5  | xj                  dz  c_        ddd       y|j                  d   }	|	j                  dd      }
|	j                  dd      }t        |j                  j                  dd            }|t        v r_||z
  }t        ||t         j"                        }t        ||t         j$                        }||z   }t        ||
t         j&                        }nd}d}| j                  5  | xj(                  ||z   z  c_        | xj*                  |	j                  dd      z  c_        | xj,                  |z  c_        | xj.                  |z  c_        | xj0                  |
z  c_        | xj2                  |z  c_        | xj                  dz  c_        ddd       y# t        $ r d}Y w xY w# t        $ r d}d}Y w xY w# 1 sw Y   yxY w# 1 sw Y   yxY w)zCollect token usage.r   Nr=   output_tokensinput_tokensr"    
cache_readinput_token_details	reasoningoutput_token_detailstoken_usager-   r@   r>   r    )generations
IndexError
isinstancer   r*   r
   usage_metadataresponse_metadataAttributeErrorgetr3   
llm_outputrI   rB   r6   r:   r   r   r   r   rC   r=   r>   r?   r@   rA   )rJ   rY   rS   
generationr*   rf   rg   r?   rA   rb   r@   r>   response_model_namer"   uncached_prompt_tokensuncached_prompt_costcached_prompt_costprompt_costcompletion_costs                      r   
on_llm_endz OpenAICallbackHandler.on_llm_end;  sK   	!--a03J j.1
)$,,gy1%,%;%;N(/(A(A%%)N(,%
 "N $ )>.+IJK . ?*>:M'8'>B&C&CL&QQ"Q34GH
$$,
3''++L"=
 ~112GLL'56K'L ($ n001GLL#12H#I+#V ""*H$7$77ZZ 2,,1,2 #--m<K +0CQ G'OOOQ?M/##''b9J 11%25I%I"#B2y?O?O$  "A0Y=T=T" /1CCK=-):N:NO  OK ZZ 	*OO{_<<O!CC-/%%)==%""&77"!!%55!$$)$	* 	*S  	J	 " )!%$(!)B26	* 	*s;   K 9K! 1K5B'LKK!K21K25K>L
c                     | S )z&Return a copy of the callback handler.r   rM   s    r   __copy__zOpenAICallbackHandler.__copy__      r   memoc                     | S )z+Return a deep copy of the callback handler.r   )rJ   rv   s     r   __deepcopy__z"OpenAICallbackHandler.__deepcopy__  ru   r   )r$   N)r$   r<   )r   r   r   r   r=   int__annotations__r>   r?   r@   rA   rB   rC   floatrF   strrN   propertyboolrP   r   r   r   rU   rX   r   rr   rt   rx   __classcell__)rK   s   @r   r<   r<     s    3L#M3 !#!sc  J&	
# 	
   sCx.379HK	c S T U*9 U* U* U*n )@ r   r<   )F)r   rG   enumr   r   typingr   r   r   langchain_core._apir   langchain_core.callbacksr	   langchain_core.messagesr
   langchain_core.outputsr   r   r6   r   r   r|   r~   r3   ry   r{   r:   r<   r   r   r   <module>r      s   .   " " / 8 - <\%\ U\ 	\
 F\ T\ \ v\ &\ g\  \ &\  $V!\$ %%\& '\( U)\* #F+\. T/\0 '1\4 u5\6 f7\8 %9\:  ;\> %?\@ $UA\D 7E\F (G\H gI\J $XK\N fO\P (Q\T fU\V WW\X Y\Z [\\ ]\^ _\` a\d e\f #Eg\h #Di\j #Dk\n To\p $q\r $s\t u\v dw\x dy\z D{\| $}\~ $\@ 4A\B 4C\D dE\H I\J TK\L TM\N DO\P  Q\R  S\T &tU\V $TW\X $TY\Z %d[\\ d]\^ (_\f Vg\h &i\j &k\l &m\n %o\p fq\r s\t eu\| }\~ $V\@ $UA\B $UC\D $UE\F (G\H #EI\J (K\N FO\P Q\R S\T U\V VW\X Y\Z U[\^ u_\` #Fa\b #Ec\d #Ee\f 'g\h "5i\j 'k\n Fo\p 
6q\r s\t vu\v ew\x Uy\z {\| }\~ \B VC\D UE\F #EG\H #EI\J #EK\L 'M\N .wO\R 'S\T 'U\V .uW\X .uY\Z .u[\\ 26]\` "6a\b "5c\d *0.4.349" &# $w\ ~   4 &,,	444 	4
 	4t  %F
 &,,%F%F%F %F
 %F %FPF/ Fr   