
    Ngb+              	       "   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dS )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-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   } |ra|                     d
          sG|                     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-35zo1-	finetunedlegacyz-completion)lowersplit
startswith)r   r   s     e/var/www/html/ai-engine/env/lib/python3.11/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*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PJ111!j ! ! !#'99-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*   r1   s    r   __repr__zOpenAICallbackHandler.__repr__   s^    4D- 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 r4   s    r   always_verbosez$OpenAICallbackHandler.always_verbose   s	     tr   
serializedpromptskwargsc                     dS )zPrint out the prompts.Nr7   )r1   r9   r:   r;   s       r   on_llm_startz"OpenAICallbackHandler.on_llm_start   s	     	r   tokenc                     dS )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         }n# t          $ r d}Y nw xY wt          |t                    rE	 |j        }t          |t
                    r|j        }|j        }nd}d}n# t          $ r d}d}Y nw xY wd}d}|rvd|d         i}|d         }|d         }	|pi 	                    d          x}
rt          |
          }n|j        d}nt          |j        	                    dd                    }n|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.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   sv   	!-a03JJ 	 	 	JJJ	j.11 	%
)$,gy11 -%,%;N(/(A%%%)N(,%! ) ) )!%$(!!!) "N $ 	)>.+IJK . ?*>:M'8'>B&C&CL&Q&QQ" 34GHH

$,

3'++L"== 


 "*tH$777Z 2 2,,1,,2 2 2 2 2 2 2 2 2 2 2 2 2 2 2t #-m<K +0CQ G G'OOOQ??M/#''b99 J 111=-T  O :*mTTKKOK Z 	* 	*OO{_<<OO!C!CC-/""&77""$$)$$	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*sB    %%/A. .A?>A?D44D8;D8A(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3L#M3s    J& & & & & &
# 
 
 
 
     XsCx.379HK	   c S T    B*9 B* B* B* 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      sX   . .     " " " " " " " " " " 8 8 8 8 8 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!$F59F
F F F F0o o o o o/ o o o o or   