
    go/                         d dl mZmZmZmZmZ d dlZd dlZd dlm	Z	 d dl
mZmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d	d
lmZ er	d dlmZ eZneZ G d de      Zy)    )TYPE_CHECKINGAnyListOptionalUnionN)convert_content_list_to_str)custom_promptprompt_factory)
BaseConfigBaseLLMException)AllMessageValues)ModelResponseUsage)token_counter   ReplicateError)Loggingc                       e Zd ZU dZdZee   ed<   dZee	   ed<   dZ
ee	   ed<   dZee	   ed<   dZee	   ed<   dZee	   ed<   dZee   ed	<   dZee	   ed
<   dZee   ed<   	 	 	 	 	 	 	 	 	 d+dee   dee	   dee	   dee	   dee	   dee	   d	ee   d
ee	   dee   ddfdZe fd       ZdedefdZdededededef
dZdedefdZdede	deeej8                  f   defdZ	 d,dedededee   def
dZdede e!   dedededefdZ"	 	 d-ded ejF                  d!e$d"e%d#ede e!   deded$e&d%ee   d&ee   de$fd'Z'd(ejF                  defd)Z(	 	 d-dedede e!   ded%ee   dee   defd*Z) xZ*S ).ReplicateConfiga  
    Reference: https://replicate.com/meta/llama-2-70b-chat/api
    - `prompt` (string): The prompt to send to the model.

    - `system_prompt` (string): The system prompt to send to the model. This is prepended to the prompt and helps guide system behavior. Default value: `You are a helpful assistant`.

    - `max_new_tokens` (integer): Maximum number of tokens to generate. Typically, a word is made up of 2-3 tokens. Default value: `128`.

    - `min_new_tokens` (integer): Minimum number of tokens to generate. To disable, set to `-1`. A word is usually 2-3 tokens. Default value: `-1`.

    - `temperature` (number): Adjusts the randomness of outputs. Values greater than 1 increase randomness, 0 is deterministic, and 0.75 is a reasonable starting value. Default value: `0.75`.

    - `top_p` (number): During text decoding, it samples from the top `p` percentage of most likely tokens. Reduce this to ignore less probable tokens. Default value: `0.9`.

    - `top_k` (integer): During text decoding, samples from the top `k` most likely tokens. Reduce this to ignore less probable tokens. Default value: `50`.

    - `stop_sequences` (string): A comma-separated list of sequences to stop generation at. For example, inputting '<end>,<stop>' will cease generation at the first occurrence of either 'end' or '<stop>'.

    - `seed` (integer): This is the seed for the random generator. Leave it blank to randomize the seed.

    - `debug` (boolean): If set to `True`, it provides debugging output in logs.

    Please note that Replicate's mapping of these parameters can be inconsistent across different models, indicating that not all of these parameters may be available for use with all models.
    Nsystem_promptmax_new_tokensmin_new_tokenstemperaturetop_ptop_kstop_sequencesseeddebugreturnc
                     t               }
|
j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y )Nself)localsitemssetattr	__class__)r"   r   r   r   r   r   r   r   r   r   locals_keyvalues                _/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/replicate/chat/transformation.py__init__zReplicateConfig.__init__@   s;     (!--/JCf}!2U3 *    c                      t         |          S N)super
get_config)clsr&   s    r*   r0   zReplicateConfig.get_configQ   s    w!##r,   modelc                 
    g dS )N)
streamr   
max_tokensr   stopr   toolstool_choice	functionsfunction_call )r"   r2   s     r*   get_supported_openai_paramsz+ReplicateConfig.get_supported_openai_paramsU   s    
 	
r,   non_default_paramsoptional_paramsdrop_paramsc                     |j                         D ]P  \  }}|dk(  r||d<   |dk(  rd|v sd|v r||d<   nd|v r||d<   n||d<   |dk(  r||d<   |d	k(  r||d	<   |d
k(  sL||d<   R |S )Nr4   r5   vicunaflan
max_lengthzmeta/codellama-13br   r   r   r6   r   )r$   )r"   r=   r>   r2   r?   paramr)   s          r*   map_openai_paramsz!ReplicateConfig.map_openai_paramsc   s     /446LE5 ,1)$u$%49OL1)U249OL18=O$45%16.+0(49 01 7" r,   c                 :    d|v r|j                  d      }|d   S |S )N:   )split)r"   r2   split_models      r*   model_to_version_idz#ReplicateConfig.model_to_version_id~   s&    %<++c*Kq>!r,   error_messagestatus_codeheadersc                     t        |||      S )NrM   messagerN   r   )r"   rL   rM   rN   s       r*   get_error_classzReplicateConfig.get_error_class   s     #]G
 	
r,   api_baser4   c                 x    | j                  |      }|}d|v r|j                  dd      }d| }nd| }| d}|S )Ndeploymentszdeployments/ z)https://api.replicate.com/v1/deployments/z$https://api.replicate.com/v1/models/z/predictions)rK   replace)r"   rS   r2   r>   r4   
version_idbase_urls          r*   get_complete_urlz ReplicateConfig.get_complete_url   s\     --e4
J&#++NB?JB:,OH=j\JHZ|,r,   messageslitellm_paramsc           
         t         j                  j                         }|j                         D ]  \  }}||vs|||<    d }	|d|v r|j	                  d      }
nd}
|
rBt        t        |            D ]+  }||   d   dk(  s|j	                  |      }t        |      }	 n |t         j                  v rut         j                  |   }t        |j                  di       |j                  dd      |j                  dd      |j                  d	d      |j                  d
d      |      }nt        ||      }|t        |t              st        ddj                  |      i       |	||	d|}nd|i|}| j!                  |      }d|i}d|v rFt        |      dkD  r8|j#                  d      }t        |      dkD  rt        |d         dk(  r|d   |d<   |S )Nsupports_system_promptFrolesystemrolesinitial_prompt_valuerV   final_prompt_value	bos_token	eos_token)	role_dictrb   rc   rd   re   r[   r2   r[     z+LiteLLM Error - prompt is not a string - {}rP   )promptr   ri   inputrG   @   rH   version)litellmr   r0   r$   poprangelenr   custom_prompt_dictr	   getr
   
isinstancestrr   formatrK   rI   )r"   r2   r[   r>   r\   rN   configkvr   supports_sys_promptifirst_sys_messagemodel_prompt_detailsri   
input_datarX   request_datamodel_partss                      r*   transform_requestz!ReplicateConfig.transform_request   s    ((335LLNDAq(%&"	 # &+C+V"1"5"56N"O"'3x=)A;v&(2(0Q%$?@Q$RM	 * G...#*#=#=e#D ".227B?%9%=%=*B& $8#;#;<PRT#U.22;C.22;C!	F $%(CF>FC!8 ELLVT  $ !. "J #F>o>J--e4
%z2*Z2!5$**3/KK 1$[^)<)B*5a.Y'r,   raw_responsemodel_responselogging_objr~   encodingapi_key	json_modec                 "   |j                  ||
|j                  d|i       |j                         }|j                  d      dk7  r't	        ddj                  |      |j                        |j                  dg       }d	j                  |      }t        |      d
k(  rd}t        |      dk\  r||j                  d
   j                  _        t        ||      }t        ||d      }d|z   |_        t        ||||z         }t        |d|       |S )Ncomplete_input_dict)rj   r   original_responseadditional_argsstatus	succeededi  z-LiteLLM Error - prediction not succeeded - {}rP   outputrV   r    rH   rg   T)r2   textcount_response_tokensz
replicate/)prompt_tokenscompletion_tokenstotal_tokensusage)	post_callr   jsonrr   r   ru   rN   joinrp   choicesrQ   contentr   r2   r   r%   )r"   r2   r   r   r   r~   r[   r>   r\   r   r   r   raw_response_jsonoutputsresponse_strr   r   r   s                     r*   transform_responsez"ReplicateConfig.transform_response   s8    	*//2LA	 	 	
 )--/  *k9 GNN% %,,  $''"5www'|!L |!8DN""1%--5 &EHE)"&

  ,e3'/&)::

 	/r,   responsec                     |j                         }|j                  di       j                  d      }|'t        ddj                  |      |j                        |S )aa  
        response json: {
        ...,
        "urls":{"cancel":"https://api.replicate.com/v1/predictions/gqsmqmp1pdrj00cknr08dgmvb4/cancel","get":"https://api.replicate.com/v1/predictions/gqsmqmp1pdrj00cknr08dgmvb4","stream":"https://stream-b.svc.rno2.c.replicate.net/v1/streams/eot4gbydowuin4snhncydwxt57dfwgsc3w3snycx5nid7oef7jga"}
        }
        urlsrr   rh   z+LiteLLM Error - prediction url is None - {}rP   )r   rr   r   ru   rN   )r"   r   response_jsonprediction_urls       r*   get_prediction_urlz"ReplicateConfig.get_prediction_url  sf     !&**626::5A! ELL! !((  r,   c                     d| dd}|S )NzToken zapplication/json)AuthorizationzContent-Typer;   )r"   rN   r2   r[   r>   r   rS   s          r*   validate_environmentz$ReplicateConfig.validate_environment1  s      &gY/.
 r,   )	NNNNNNNNNr.   )NN)+__name__
__module____qualname____doc__r   r   rt   __annotations__r   intr   r   r   r   r   r   r   boolr+   classmethodr0   listr<   dictrE   rK   r   httpxHeadersr   rR   rZ   r   r   r   Responser   LoggingClassr   r   r   r   __classcell__)r&   s   @r*   r   r      si   2 $(M8C='$(NHSM($(NHSM(!%K#%E8C=E8C=$(NHSM(D(3- E8D>  (,(,(,%)##(," $4}4 !4 !	4
 c]4 }4 }4 !4 sm4 ~4 
4" $ $
 
 
   	
  
6  
 
/2
=B4CV=W
	
 "&  	
  
$HH '(H 	H
 H H 
Hj "&$(55 nn5 &	5
 "5 5 '(5 5 5 5 #5 D>5 
5n5>> c 2 "&"&  '(	
  # 3- 
r,   r   )typingr   r   r   r   r   r   rm   8litellm.litellm_core_utils.prompt_templates.common_utilsr   3litellm.litellm_core_utils.prompt_templates.factoryr	   r
   )litellm.llms.base_llm.chat.transformationr   r   litellm.types.llms.openair   litellm.types.utilsr   r   litellm.utilsr   common_utilsr   *litellm.litellm_core_utils.litellm_loggingr   LiteLLMLoggingObjr   r   r;   r,   r*   <module>r      sK    < <   S 6 4 ' )W$LLbj br,   