
    Igb+              	          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	 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-dd.dd/dd0dd1dd2d3i d4d3d5d3d6d#d7d#d8d#d9d#d:d#d;d#d<d=d>d?d@d=dAd=dBdCdDd=dEddFddGdHi dId=dJdHdKdHdLdHdMdHdNdOdPdOdQd=dRd?dSdHdTd=dUd=dVddWddXdHdYd=dZdHi d[dHd\dHd]dOd^dOd_d`dad`dbd?dcd?dddHdedHdfdgdhdgdidgdjdkdlddmddndi doddpdqdrdkdsddtdudvdudwdudxdydzd`d{dHd|d=d}d`d~dHddHddkdddddd3iZ	 ddededefdZ	 ddedededefdZ G d de      Zy)z(Callback Handler that prints to std out.    N)AnyDictList)BaseCallbackHandler)	AIMessage)ChatGeneration	LLMResultz
o1-previewgQ?zo1-preview-2024-09-12zo1-preview-completiongQ?z o1-preview-2024-09-12-completionzo1-minig~jth?zo1-mini-2024-09-12zo1-mini-completiong~jt?zo1-mini-2024-09-12-completionzgpt-4o-miniga2U0*#?zgpt-4o-mini-2024-07-18zgpt-4o-mini-completionga2U0*C?z!gpt-4o-mini-2024-07-18-completionzgpt-4og{Gzd?zgpt-4o-2024-05-13g{Gzt?zgpt-4o-2024-08-06zgpt-4o-completiong{Gz?zgpt-4o-2024-05-13-completionzgpt-4o-2024-08-06-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-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 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-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-legacy
model_nameis_completionreturnc                 n   | 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   } |rQ| j                  d
      s;| j                  d      s*| j                  d      s| j                  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-35zo1-	finetunedlegacyz-completion)lowersplit
startswith)r   r   s     f/var/www/html/answerous/venv/lib/python3.12/site-packages/langchain_community/callbacks/openai_info.pystandardize_model_namer      s      !!#J%%f-a03EE
%%c*1-0CC

%%c*1-<
g&  +  *  ':%(**DM))    
num_tokensc                     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.

    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#      sj     (
-PJ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 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                 T    t         |           t        j                         | _        y )N)super__init__	threadingLock_lock)self	__class__s    r   r-   zOpenAICallbackHandler.__init__   s    ^^%
r   c           
          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*   r1   s    r   __repr__zOpenAICallbackHandler.__repr__   s\    D--. /  $ 2 23 4$$($:$:#; <$$($<$<#= >""&//!2	4	
r   c                      y)z;Whether to call verbose callbacks even if verbose is False.T r4   s    r   always_verbosez$OpenAICallbackHandler.always_verbose   s     r   
serializedpromptskwargsc                      y)zPrint out the prompts.Nr7   )r1   r9   r:   r;   s       r   on_llm_startz"OpenAICallbackHandler.on_llm_start   s     	r   tokenc                      y)zPrint out the token.Nr7   )r1   r>   r;   s      r   on_llm_new_tokenz&OpenAICallbackHandler.on_llm_new_token   s    r   responsec                    	 |j                   d   d   }t        |t              r;	 |j                  }t        |t
              r|j                  }|j                  }nd}d}nd}d}|rid|d   i}|d   }|d   }	|xs i j                  d      x}
rt        |
      }n|j                  d}nt        |j                  j                  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t        ||d      }t        ||	      }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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    token_usager   r(   r'   Tr   )generations
IndexError
isinstancer   messager   usage_metadataresponse_metadataAttributeErrorgetr   
llm_outputr0   r)   r   r#   r*   r&   r'   r(   )r1   rA   r;   
generationrJ   rK   rL   rF   r(   r'   response_model_namer   completion_costprompt_costs                 r   
on_llm_endz OpenAICallbackHandler.on_llm_end   s   	!--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"=

 ""*H$7$77ZZ 2,,1,2 #--m<K +0CQ G'OOOQ?M/##''b9J 11=-TO :*mTKOK ZZ 	*OO{_<<O!CC-/""&77"$$)$	* 	*q  	J	 " )!%$(!)02&	* 	*s;   H% 9H7 5IA=I%H43H47IIII c                     | S )z&Return a copy of the callback handler.r7   r4   s    r   __copy__zOpenAICallbackHandler.__copy__1      r   memoc                     | S )z+Return a deep copy of the callback handler.r7   )r1   rX   s     r   __deepcopy__z"OpenAICallbackHandler.__deepcopy__5  rW   r   )r   N)r   r%   )__name__
__module____qualname____doc__r&   int__annotations__r'   r(   r)   r*   floatr-   strr5   propertyboolr8   r   r   r   r=   r@   r	   rT   rV   rZ   __classcell__)r2   s   @r   r%   r%      s    3L#M3s  J&
# 
   sCx.379HK	c S T B*9 B* B* B*H )@ r   r%   )F)r^   r.   typingr   r   r   langchain_core.callbacksr   langchain_core.messagesr   langchain_core.outputsr   r	   r   rb   rd   r   r_   ra   r#   r%   r7   r   r   <module>rj      sc   .  " " 8 - <@%@ U@
 T@ '@ u@ %@ %@ $U@ 7@ g@" f#@$ (%@( f)@* +@, -@0 1@2 #E3@4 #D5@8 T9@: $;@< $=@> ?@@ dA@B dC@D DE@F $G@H $I@J 4K@L 4M@N dO@R S@T TU@V TW@X DY@Z  [@\  ]@^ &t_@` $Ta@b $Tc@d %de@f dg@h (i@p Vq@r &s@t &u@v &w@x %y@z f{@| }@~ e@F G@H $VI@J $UK@L $UM@N $UO@P (Q@R #ES@T (U@X FY@Z [@\ ]@^ _@` Va@b c@d Ue@h ui@j #Fk@l #Em@n #Eo@p 'q@r "5s@t 'u@x Fy@z 
6{@| }@~ v@@ eA@B UC@D E@F G@H I@L VM@N UO@P #EQ@R #ES@T #EU@V 'W@Z '[@\ ']@^ .u_@` .ua@b .uc@d 26e@h "6i@j "5k@l (m@p -fq@r -es@t 3Eu@x Fy@z {@| e}@~ @ J      	 H =BFF!$F59F
F0o/ or   