
    Fd'                       U d dl mZ d dlZd dlZd dlmZ d dlmZmZm	Z	 d dl
mZ d dlZd dlmc mc mZ d dlmZmZ d dlmZmZmZ d dlmZ erd d	lmZ d d
lmZmZmZm Z m!Z! d dl"m#Z# d  edddd           edddd           edddd           edddd           edddd           edddd           edddd          fD             Z$ddddd Z%e%&                                D ]$\  Z'Z( edKi e$e(         j)        Z*e'e*_+        e*e$e'<   %d!  e d"d#d#d$          fD             Z,d%  ed&d'd(d)*          fD             Z-i e$e,e-Z.d+e/d,<   d- Z0	 	 	 dLdMd7Z1e0 e1            dNd<                        Z2e0 e1            dOd?                        Z3e0 e1            dPdB                        Z4e G dC dD                      Z5e G dE dF                      Z6dQdJZ7dS )R    )annotationsN)	dataclass)TYPE_CHECKINGListOptional)patch)ForeStyle)APIErrorRateLimitErrorTimeout)OpenAIObject)Agent)ChatModelInfoEmbeddingModelInfoMessageDictTextModelInfoTText)loggerc                    i | ]
}|j         |S  name.0infos     PC:\Users\Administrator\Downloads\Auto-GPT-master\autogpt\llm\providers\openai.py
<dictcomp>r      s,     . . . 	It. . .    zgpt-3.5-turbo-0301g~jtX?gMb`?i   )r   prompt_token_costcompletion_token_cost
max_tokenszgpt-3.5-turbo-0613zgpt-3.5-turbo-16k-0613g~jth?gMbp?i @  z
gpt-4-0314gQ?gQ?i    z
gpt-4-0613zgpt-4-32k-0314gQ?i   zgpt-4-32k-0613)zgpt-3.5-turbozgpt-3.5-turbo-16kzgpt-4z	gpt-4-32kc                    i | ]
}|j         |S r   r   r   s     r   r   r   V   s,     
 
 
 	It
 
 
r   ztext-davinci-003g{Gz?i  c                    i | ]
}|j         |S r   r   r   s     r   r   r   b   s,     
 
 
 	It
 
 
r   ztext-embedding-ada-002g-C6?i  i   )r   r    r"   embedding_dimensionsz=dict[str, ChatModelInfo | EmbeddingModelInfo | TextModelInfo]OPEN_AI_MODELSc                v     ddl m}  |            t          j        j        dfdfd fd}|S )	zAAdds ApiManager metering to functions which make OpenAI API callsr   )
ApiManagerresponser   c                :   	 | j         }t          j        d| j         d|                                | j         j        d|v r| j         j        nd| j                   d S # t          $ r/}t          j        d|j	        j
         d|            Y d }~d S d }~ww xY w)Nz"Reported usage from call to model z: completion_tokensr   zFailed to update API costs: )usager   debugmodelupdate_costprompt_tokensr+   	Exceptionwarn	__class____name__)r)   r,   errapi_managers      r   update_usage_with_responsez-meter_api.<locals>.update_usage_with_response}   s    		XNELWhnWWPUWWXXX##,4G54P4P00VW    
  	X 	X 	XKVs}7MVVQTVVWWWWWWWWW	Xs   AA! !
B+$BBc                 `     | i |}t          |t                    rd|v r |           |S )Nr,   )
isinstancer   )argskwargs
openai_objopenai_obj_processorr7   s      r   metering_wrapperz#meter_api.<locals>.metering_wrapper   sK    ))4:6::
j,// 	3Gz4I4I&&z222r   c                     t          j        t          j        d          5   | i |cd d d            S # 1 swxY w Y   d S )Nconvert_to_openai_object)side_effect)r   objectengine_api_resourceutil)r:   r;   funcr>   s     r   metered_funczmeter_api.<locals>.metered_func   s    \$&(
 
 
 	) 	)
 4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   8<<)r)   r   )autogpt.llm.api_managerr(   openairD   r@   )rE   r(   rF   r6   r>   r=   r7   s   `  @@@@r   	meter_apirI   u   s    222222*,,K!;?
X 
X 
X 
X 
X 
X     ) ) ) ) ) ) r   
          @Tnum_retriesintbackoff_basefloat	warn_userboolc                    t           j         dt           j         dt           j        t          j        z    dt          j         dt           j         dt           j         t           j         dt           j          fd}|S )zRetry an OpenAI API call.

    Args:
        num_retries int: Number of retries. Defaults to 10.
        backoff_base float: Base for exponential backoff. Defaults to 2.
        warn_user bool: Whether to warn the user. Defaults to True.
    z%Error: Reached rate limit, passing...z*Please double check that you have setup a PAIDz- OpenAI API Account. You can read more here: z.https://docs.agpt.co/setup/#getting-an-api-keyz4Error: API Bad gateway. Waiting {backoff} seconds...c                T     t          j                    fd            }|S )Nc                     }dz   }t          d|dz             D ]}	  
| i |c S # t          $ r6 ||k    r t          j                   |st          j                   d}Y n-t
          t          f$ r}|j        dvs||k    r Y d }~nd }~ww xY w|dz   z  }t          j        	                    |                     t          j
        |           d S )N   T)i  i  i     )backoff)ranger   r   r-   double_checkr   r   http_statusformattimesleep)r:   r;   user_warnednum_attemptsattempterX   api_key_error_msgrN   backoff_msgrE   rL   retry_limit_msgrP   s          r   _wrappedz-retry_api.<locals>._wrapper.<locals>._wrapped   s@   '-K&?L L1$455 $ $4000000% + + +,..L111& ++,=>>>&* '*   _<<<// 0//// '7Q;7[///@@AAA
7####+$ $s   *=B)B9BB)	functoolswraps)rE   rf   rc   rN   rd   rL   re   rP   s   ` r   _wrapperzretry_api.<locals>._wrapper   sW    				$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 
		$4 r   )r	   REDRESETCYANr
   BRIGHT	RESET_ALL)rL   rN   rP   ri   rc   rd   re   s   ``` @@@r   	retry_apiro      s     XXDJXXO	a9u|#	a 	a).	a 	a9	a 	aTXT^	a 	a  8WW4:WW          < Or   messagesList[MessageDict]returnr   c                    t          j        j        dd| i|}t          |d          st	          j        d|            |S )a  Create a chat completion using the OpenAI API

    Args:
        messages: A list of messages to feed to the chatbot.
        kwargs: Other arguments to pass to the OpenAI API chat completion call.
    Returns:
        OpenAIObject: The ChatCompletion response from OpenAI

    rp   errorz
Response: r   )rH   ChatCompletioncreatehasattrr   r-   )rp   _r;   
completions       r   create_chat_completionrz      sa       &4;     
   J :w'' 0.*..///r   promptstrc                2    t          j        j        dd| i|S )a  Create a text completion using the OpenAI API

    Args:
        prompt: A text prompt to feed to the LLM
        kwargs: Other arguments to pass to the OpenAI API text completion call.
    Returns:
        OpenAIObject: The Completion response from OpenAI

    r{   r   )rH   
Completionrv   )r{   rx   r;   s      r   create_text_completionr      s1      #  
  r   input%str | TText | List[str] | List[TText]c                2    t          j        j        dd| i|S )zCreate an embedding using the OpenAI API

    Args:
        input: The text to embed.
        kwargs: Other arguments to pass to the OpenAI API embedding call.
    Returns:
        OpenAIObject: The Embedding response from OpenAI

    r   r   )rH   	Embeddingrv   )r   rx   r;   s      r   create_embeddingr      s1      "  
  r   c                  (    e Zd ZU dZded<   ded<   dS )OpenAIFunctionCallzRepresents a function call as generated by an OpenAI model

    Attributes:
        name: the name of the function that the LLM wants to call
        arguments: a stringified JSON object (unverified) containing `arg: value` pairs
    r|   r   	argumentsN)r4   
__module____qualname____doc____annotations__r   r   r   r   r     s.           IIINNNNNr   r   c                  r    e Zd ZU dZded<   ded<   ded<   e G d d                      Zed	             Zd
S )OpenAIFunctionSpeczKRepresents a "function" in OpenAI, which is mapped to a Command in Auto-GPTr|   r   descriptionzdict[str, ParameterSpec]
parametersc                  <    e Zd ZU ded<   ded<   ded<   dZded<   d	S )
 OpenAIFunctionSpec.ParameterSpecr|   r   typezOptional[str]r   FrQ   requiredN)r4   r   r   r   r   r   r   r   ParameterSpecr   +  sA         						""""r   r   c                    | j         | j        dd | j                                        D             d | j                                        D             ddS )z2Output an OpenAI-consumable function specificationrB   c                8    i | ]}|j         |j        |j        d S ))r   r   )r   r   r   r   params     r   r   z/OpenAIFunctionSpec.__dict__.<locals>.<dictcomp>:  sA       
 	 J %
','8! !  r   c                *    g | ]}|j         	|j        S r   )r   r   r   s     r   
<listcomp>z/OpenAIFunctionSpec.__dict__.<locals>.<listcomp>A  s1       #(J  r   )r   
propertiesr   r   r   r   )r   r   r   values)selfs    r   __dict__zOpenAIFunctionSpec.__dict__2  s     I+  
 "&!7!7!9!9   ,0O,B,B,D,D   
 
 	
r   N)	r4   r   r   r   r   r   r   propertyr   r   r   r   r   r   #  s         UUIII((((       Y 
 
 X
 
 
r   r   agentr   list[OpenAIFunctionSpec]c                n    | j         j        sg S d | j        j                                        D             S )zGet OpenAI-consumable function specs for the agent's available commands.
    see https://platform.openai.com/docs/guides/gpt/function-calling
    c                d    g | ]-}t          |j        |j        d  |j        D                       .S )c           	     ~    i | ]:}|j         t                              |j         |j        |j        |j                   ;S ))r   r   r   r   )r   r   r   r   r   r   r   s     r   r   z7get_openai_command_specs.<locals>.<listcomp>.<dictcomp>S  sY         
.<<"^ % 1	 =    r   r   )r   r   r   r   )r   commands     r   r   z,get_openai_command_specs.<locals>.<listcomp>O  se         	+  %/  	
 	
 	
  r   )configopenai_functionscommand_registrycommandsr   )r   s    r   get_openai_command_specsr   H  sK     <( 	  -6==??   r   r   )rJ   rK   T)rL   rM   rN   rO   rP   rQ   )rp   rq   rr   r   )r{   r|   rr   r   )r   r   rr   r   )r   r   rr   r   )8
__future__r   rg   r]   dataclassesr   typingr   r   r   unittest.mockr   rH   1openai.api_resources.abstract.engine_api_resourceapi_resourcesabstractrC   coloramar	   r
   openai.errorr   r   r   openai.openai_objectr   autogpt.agent.agentr   autogpt.llm.baser   r   r   r   r   autogpt.logsr   OPEN_AI_CHAT_MODELSchat_model_mappingitemsaliastargetr   
alias_infor   OPEN_AI_TEXT_MODELSOPEN_AI_EMBEDDING_MODELSr&   r   rI   ro   rz   r   r   r   r   r   r   r   r   <module>r      s   " " " " " " "      ! ! ! ! ! ! 0 0 0 0 0 0 0 0 0 0        O O O O O O O O O O O O                 : : : : : : : : : : - - - - - - *))))))                    . . 	%$"'		
 	
 	
 	%$"'		
 	
 	
 	)#"'		
 	
 	
 	""&		
 	
 	
 	""&		
 	
 	
 	!""&		
 	
 	
 	!""&		
 	
 	
K+. . . b *1!	   (--// , ,ME6FF!4V!<!EFFJJO!+
 
 	#""&		
 	
 	

 
 
 
 
 	)$!%		
 	
 	

 
 
 QQQ Q    " " "L 4 4 4 4 4n 
    . 
    ( 
    ( 	 	 	 	 	 	 	 	 !
 !
 !
 !
 !
 !
 !
 !
H     r   