o
    ưip0                     @   s   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 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rWd dlmZ eZneZG dd deZdS )    )TYPE_CHECKINGAnyListOptionalUnionN)#REPLICATE_MODEL_NAME_WITH_ID_LENGTH)convert_content_list_to_str)custom_promptprompt_factory)
BaseConfigBaseLLMException)AllMessageValues)ModelResponseUsage)token_counter   ReplicateError)Loggingc                       s  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< 									d6d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dZe fddZdedefddZdededededef
ddZdedefddZdede	deeejf defddZ	d7d ee d!ee deded"ed#ee defd$d%Zded&e e! ded"ededefd'd(Z"		d8ded)ej#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/d0Z'd1ej#defd2d3Z(		d8deded&e e! ded"ed!ee d ee defd4d5Z)  Z*S )9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
                 C   s>   t   }
|
 D ]\}}|dkr|d urt| j|| q	d S )Nself)localscopyitemssetattr	__class__)r    r   r   r   r   r   r   r   r   r   Zlocals_keyvalue r(   a/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/replicate/chat/transformation.py__init__A   s   
zReplicateConfig.__init__c                    s
   t   S N)super
get_config)clsr%   r(   r)   r-   R   s   
zReplicateConfig.get_configmodelc                 C   s   g dS )N)
streamr   
max_tokensr   stopr   ZtoolsZtool_choiceZ	functionsZfunction_callr(   )r    r0   r(   r(   r)   get_supported_openai_paramsV   s   z+ReplicateConfig.get_supported_openai_paramsnon_default_paramsoptional_paramsdrop_paramsc                 C   s   |  D ]B\}}|dkr||d< |dkr.d|v sd|v r!||d< nd|v r*||d< n||d< |dkr6||d< |d	kr>||d	< |d
krF||d< q|S )Nr1   r2   ZvicunaZflan
max_lengthzmeta/codellama-13br   r   r   r3   r   )r#   )r    r5   r6   r0   r7   paramr'   r(   r(   r)   map_openai_paramsd   s"   

z!ReplicateConfig.map_openai_paramsc                 C   s   d|v r| d}|d S |S )N:   )split)r    r0   Zsplit_modelr(   r(   r)   model_to_version_id   s   
z#ReplicateConfig.model_to_version_iderror_messagestatus_codeheadersc                 C   s   t |||dS )Nr@   messagerA   r   )r    r?   r@   rA   r(   r(   r)   get_error_class   s   zReplicateConfig.get_error_classapi_baseapi_keylitellm_paramsr1   c           	      C   sF   |  |}|}d|v r|dd}d| }nd| }| d}|S )NZdeploymentszdeployments/ z)https://api.replicate.com/v1/deployments/z$https://api.replicate.com/v1/models/z/predictions)r>   replace)	r    rE   rF   r0   r6   rG   r1   
version_idbase_urlr(   r(   r)   get_complete_url   s   
	

z ReplicateConfig.get_complete_urlmessagesc              	   C   s  t j }| D ]\}}||vr|||< q	d }	|d ur&d|v r&|d}
nd}
|
rFtt|D ]}|| d dkrE||}t|}	 nq0|t jv rot j| }t	|
di |
dd|
dd|
d	d|
d
d|d}nt||d}|d u s~t|tstdd|i d|	d ur||	d|}nd|i|}| |}d|i}d|v rt|tkr|d}t|dkrt|d tkr|d |d< |S )NZsupports_system_promptFZrolesystemZrolesinitial_prompt_valuerH   final_prompt_value	bos_token	eos_token)Z	role_dictrO   rP   rQ   rR   rM   r0   rM     z+LiteLLM Error - prompt is not a string - {}rB   )promptr   rU   inputr;   r<   version)litellmr   r-   r#   poprangelenr   Zcustom_prompt_dictr	   getr
   
isinstancestrr   formatr>   r   r=   )r    r0   rM   r6   rG   rA   configkvr   Zsupports_sys_promptiZfirst_sys_messageZmodel_prompt_detailsrU   Z
input_datarJ   request_dataZmodel_partsr(   r(   r)   transform_request   sd   
	








z!ReplicateConfig.transform_requestraw_responsemodel_responselogging_objrd   encoding	json_modec                 C   s   |j ||
|jd|id | }|ddkr"tdd||jd|dg }d	|}t|d
kr5d}t|dkrB||j	d
 j
_t||d}t||dd}d| |_t|||| d}t|d| |S )NZcomplete_input_dict)rV   rF   original_responseZadditional_argsstatusZ	succeededi  z-LiteLLM Error - prediction not succeeded - {}rB   outputrH   r    r<   rS   T)r0   textZcount_response_tokensz
replicate/)prompt_tokenscompletion_tokensZtotal_tokensusage)Z	post_callro   jsonr\   r   r_   rA   joinr[   choicesrC   contentr   r0   r   r$   )r    r0   rf   rg   rh   rd   rM   r6   rG   ri   rF   rj   Zraw_response_jsonZoutputsZresponse_strrp   rq   rr   r(   r(   r)   transform_response   sF   

z"ReplicateConfig.transform_responseresponsec                 C   s<   |  }|di d}|du rtdd||jd|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"}
        }
        urlsr\   NrT   z+LiteLLM Error - prediction url is None - {}rB   )rs   r\   r   r_   rA   )r    rx   Zresponse_jsonZprediction_urlr(   r(   r)   get_prediction_url"  s   z"ReplicateConfig.get_prediction_urlc                 C   s   d| dd}|S )NzToken zapplication/json)AuthorizationzContent-Typer(   )r    rA   r0   rM   r6   rG   rF   rE   r(   r(   r)   validate_environment5  s   z$ReplicateConfig.validate_environment)	NNNNNNNNNr+   )NN)+__name__
__module____qualname____doc__r   r   r^   __annotations__r   intr   r   r   r   r   r   r   boolr*   classmethodr-   listr4   dictr:   r>   r   httpxZHeadersr   rD   rL   r   r   re   Responser   LoggingClassr   rw   rz   r|   __classcell__r(   r(   r/   r)   r      s  
 	





V	

7	r   ) typingr   r   r   r   r   r   rX   Zlitellm.constantsr   Z8litellm.litellm_core_utils.prompt_templates.common_utilsr   Z3litellm.litellm_core_utils.prompt_templates.factoryr	   r
   Z)litellm.llms.base_llm.chat.transformationr   r   Zlitellm.types.llms.openair   Zlitellm.types.utilsr   r   Zlitellm.utilsr   Zcommon_utilsr   Z*litellm.litellm_core_utils.litellm_loggingr   ZLiteLLMLoggingObjr   r   r(   r(   r(   r)   <module>   s     