§
    æ˜ºh  ã            	       ó>  — d Z ddlZddlmZmZmZ ddlmZ ddl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*d+“d,d+“d-d“d.d“d/d“d0d“¥i d1d"“d2d"“d3d%“d4d%“d5d%“d6d%“d7d+“d8d+“d9d:“d;d:“d<d=“d>d=“d?d%“d@d%“dAdB“dCdB“dDdB“¥i dEdF“dGdH“dIdH“dJdH“dKdF“dLdH“dMdN“dOdN“dPd:“dQd%“dRd“dSd:“dTd%“dUd%“dVdF“dWdX“dYdH“¥dZdi¥Z
	 ddd\ed]ed^efd_„Z	 ddd\ed`ed]ed^efda„Z G db„ dce¦  «        ZdS )ez(Callback Handler that prints to std out.é    N)ÚAnyÚDictÚList)ÚBaseCallbackHandler)Ú	LLMResultúgpt-4g¸…ëQ¸ž?z
gpt-4-0314z
gpt-4-0613z	gpt-4-32kg¸…ëQ¸®?zgpt-4-32k-0314zgpt-4-32k-0613zgpt-4-vision-previewg{®Gáz„?zgpt-4-1106-previewz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-3.5-turbogú~j¼t“X?zgpt-3.5-turbo-0301zgpt-3.5-turbo-0613zgpt-3.5-turbo-1106gü©ñÒMbP?zgpt-3.5-turbo-instructzgpt-3.5-turbo-16kgú~j¼t“h?zgpt-3.5-turbo-16k-0613zgpt-3.5-turbo-completiongü©ñÒMb`?z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-completiongü©ñÒMbp?z!gpt-3.5-turbo-16k-0613-completionzgpt-35-turboz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-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-001gü©ñÒMb@?Úbabbageztext-curie-001Úcurieztext-davinci-003g{®Gáz”?ztext-davinci-002zcode-davinci-002zbabbage-002-finetunedg-Cëâ6Z?zdavinci-002-finetunedgú~j¼t“ˆ?zgpt-3.5-turbo-0613-finetunedzgpt-3.5-turbo-1106-finetunedz babbage-002-finetuned-completionz davinci-002-finetuned-completionz'gpt-3.5-turbo-0613-finetuned-completiongü©ñÒMb�?z'gpt-3.5-turbo-1106-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-legacyga2U0*©c?zcurie-finetuned-legacyzdavinci-finetuned-legacyFÚ
model_nameÚis_completionÚreturnc                 ó–  — |                       ¦   «         } d| v r|                      d¦  «        d         dz   } d| v r|                      d¦  «        d         dz   } d| v r|                      d¦  «        d         d	z   } |rL|                      d
¦  «        s2|                      d¦  «        s|                      d¦  «        sd| v r	d| vr| 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.

    Returns:
        Standardized model name.

    z.ft-r   z-azure-finetunedz:ft-ú:z-finetuned-legacyzft:é   z
-finetunedr   zgpt-3.5zgpt-35Ú	finetunedÚlegacyz-completion)ÚlowerÚsplitÚ
startswith)r   r   s     úq/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/callbacks/openai_info.pyÚstandardize_model_namer   ]   s  € ð  ×!Ò!Ñ#Ô#€JØ�ÐÐØ×%Ò% fÑ-Ô-¨aÔ0Ð3EÑEˆ
Ø�ÐÐØ×%Ò% cÑ*Ô*¨1Ô-Ð0CÑCˆ
Ø�
ÐÐØ×%Ò% cÑ*Ô*¨1Ô-°Ñ<ˆ
Øð Ø×Ò˜gÑ&Ô&ðà× Ò  Ñ+Ô+ðð × Ò  Ñ*Ô*ðð ˜:Ð%Ð%¨(¸*Ð*DÐ*Dà˜MÑ)Ð)àÐó    Ú
num_tokensc                 óÜ   — t          | |¬¦  «        } | t          vr@t          d| › d�d                     t                               ¦   «         ¦  «        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.

    Returns:
        Cost in USD.
    ©r   zUnknown model: z=. Please provide a valid OpenAI model name.Known models are: z, iè  )r   ÚMODEL_COST_PER_1K_TOKENSÚ
ValueErrorÚjoinÚkeys)r   r   r   s      r   Úget_openai_token_cost_for_modelr!      sƒ   € õ (¨
À-ÐPÑPÔP€JØÕ1Ð1Ð1Ýð!˜jð !ð !ð !Ø#'§9¢9Õ-E×-JÒ-JÑ-LÔ-LÑ#MÔ#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ˆ 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Úcompletion_tokensÚsuccessful_requestsg        Ú
total_costr   Nc                 óx   •— t          ¦   «                              ¦   «          t          j        ¦   «         | _        d S )N)ÚsuperÚ__init__Ú	threadingÚLockÚ_lock)ÚselfÚ	__class__s    €r   r+   zOpenAICallbackHandler.__init__    s,   ø€ Ý‰Œ×ÒÑÔÐÝ”^Ñ%Ô%ˆŒ
ˆ
ˆ
r   c           
      óV   — 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/   s    r   Ú__repr__zOpenAICallbackHandler.__repr__¤   s^   € ð4˜DÔ-ð 4ð 4Ø $Ô 2ð4ð 4à$(Ô$:ð4ð 4ð %)Ô$<ð4ð 4ð #'¤/ð	4ð 4ð	
r   c                 ó   — dS )z;Whether to call verbose callbacks even if verbose is False.T© r2   s    r   Úalways_verbosez$OpenAICallbackHandler.always_verbose­   s	   € ð ˆtr   Ú
serializedÚpromptsÚkwargsc                 ó   — dS )zPrint out the prompts.Nr5   )r/   r7   r8   r9   s       r   Úon_llm_startz"OpenAICallbackHandler.on_llm_start²   s	   € ð 	ˆr   Útokenc                 ó   — dS )zPrint out the token.Nr5   )r/   r<   r9   s      r   Úon_llm_new_tokenz&OpenAICallbackHandler.on_llm_new_token¸   s   € àˆr   Úresponsec                 ó¼  — |j         €dS d|j         vr1| j        5  | xj        dz  c_        ddd¦  «         n# 1 swxY w Y   dS |j         d         }|                     dd¦  «        }|                     dd¦  «        }t	          |j                              dd¦  «        ¦  «        }|t
          v r#t          ||d	¬
¦  «        }t          ||¦  «        }nd}d}| j        5  | xj        ||z   z  c_        | xj        |                     dd¦  «        z  c_        | xj	        |z  c_	        | xj
        |z  c_
        | xj        dz  c_        ddd¦  «         dS # 1 swxY w Y   dS )zCollect token usage.NÚtoken_usager   r&   r   r%   r   Ú Tr   r$   )Ú
llm_outputr.   r'   Úgetr   r   r!   r(   r$   r%   r&   )	r/   r?   r9   rA   r&   r%   r   Úcompletion_costÚprompt_costs	            r   Ú
on_llm_endz OpenAICallbackHandler.on_llm_end¼   s  € àÔÐ&Ø�4à Ô 3Ð3Ð3Ø”ð .ð .ØÐ(Ô(¨AÑ-Ð(Ô(ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .à�4ð Ô)¨-Ô8ˆØ'ŸOšOÐ,?ÀÑCÔCÐØ#Ÿš¨¸Ñ;Ô;ˆÝ+¨HÔ,?×,CÒ,CÀLÐRTÑ,UÔ,UÑVÔVˆ
ØÕ1Ð1Ð1Ý=ØÐ-¸Tðñ ô ˆOõ :¸*ÀmÑTÔTˆKˆKàˆOØˆKð ŒZð 	*ð 	*ØˆOŒO˜{¨_Ñ<Ñ<ˆOŒOØÐÔ §¢°ÀÑ!CÔ!CÑCÐÔØÐÔ -Ñ/ÐÔØÐ"Ô"Ð&7Ñ7Ð"Ô"ØÐ$Ô$¨Ñ)Ð$Ô$ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	*ð 	*s   š7·;¾;ÃA(EÅEÅEc                 ó   — | S )z&Return a copy of the callback handler.r5   r2   s    r   Ú__copy__zOpenAICallbackHandler.__copy__Ü   ó   € àˆr   Úmemoc                 ó   — | S )z+Return a deep copy of the callback handler.r5   )r/   rK   s     r   Ú__deepcopy__z"OpenAICallbackHandler.__deepcopy__à   rJ   r   )r   N)r   r#   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   ÚintÚ__annotations__r%   r&   r'   r(   Úfloatr+   Ústrr3   ÚpropertyÚboolr6   r   r   r   r;   r>   r   rG   rI   rM   Ú__classcell__)r0   s   @r   r#   r#   —   s£  ø€ € € € € € Ø3Ð3à€L�#ÐÐÑØ€M�3ÐÐÑØÐ�sÐÐÑØ Ð˜Ð Ð Ñ Ø€J�ÐÐÑð&ð &ð &ð &ð &ð &ð
˜#ð 
ð 
ð 
ð 
ð ð ð ð ð ñ „XððØ˜s C˜xœ.ðØ37¸´9ðØHKðà	ðð ð ð ð cð °Sð ¸Tð ð ð ð ð* 9ð *¸ð *Àð *ð *ð *ð *ð@ð ð ð ð ð Ð)@ð ð ð ð ð ð ð ð r   r#   )F)rQ   r,   Útypingr   r   r   Úlangchain_core.callbacksr   Úlangchain_core.outputsr   r   rU   rW   r   rR   rT   r!   r#   r5   r   r   ú<module>r\      s   ðØ .Ð .Ø Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ðRàˆTðRð �$ðRð �$ð	Rð
 �ðRð �dðRð �dðRð ˜DðRð ˜$ðRð ˜ðRð ˜TðRð ˜TðRð ˜DðRð   ðRð    ð!Rð" & tð#Rð$ $ Tð%Rð( �Vð)Rð Rð* ˜&ð+Rð, ˜&ð-Rð. ˜%ð/Rð0 ˜fð1Rð2 ˜ð3Rð4 ˜eð5Rð8  ð9Rð: $ Uð;Rð< $ Uð=Rð> $ Uð?Rð@ (¨ðARðB # EðCRðD (¨ðERðH �FðIRðJ ˜ðKRðL ˜ðMRðN ˜VðORð Rð RðP ˜ðQRðR ˜UðSRðV ˜uðWRðX # EðYRðZ # Eð[Rð\ '¨ð]Rð^ " 5ð_Rð` '¨ðaRðd �FðeRðf 
ˆ6ðgRðh ˜ðiRðj ˆvðkRðl �eðmRðn ˆUðoRðp ˜ðqRðr ˜ðsRðt ˜ðuRð Rð Rðx ˜VðyRðz ˜Uð{Rð| # Eð}Rð~ # EðRðB '¨ðCRðD '¨ðERðF .¨uðGRðH .¨uðIRðL " 6ðMRðN " 5ðORðP (¨ðQRðT -¨fðURðV -¨eðWRðX 3°EðYRð\ ˜Fð]Rð^  ð_Rð` ˜eðaRð Rðb  ðcRð RÐ ðn  ðð Øðàðð 	ðð ð ð ðF =BðFð FØðFØ!$ðFØ59ðFà
ðFð Fð Fð Fð0Kð Kð Kð Kð KÐ/ñ Kô Kð Kð Kð Kr   