
    gw&                         d dl Z d dlmZmZ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 d dlmZmZmZmZ ddl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)    N)TYPE_CHECKINGAnyAsyncIteratorIteratorListOptionalUnionconvert_content_list_to_str)
BaseConfigBaseLLMException)AllMessageValues)ChoicesMessageModelResponseUsage   CohereError)ModelResponseIterator)validate_environment)Loggingc                   T    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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ee   dee   dee
   dee   ddfdZe fd       Z	 	 d0dede
dee   dedee
   dee
   defdZde
dedeeej>                  f   d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e   ded!ededefd"Z%	 	 d0de
d#ejL                  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*	 d1d*ee   defd+Z+	 d2d,ee,e
   e-e
   e'f   d-e#d(ee#   fd.Z. xZ/S )3CohereTextConfiga%  
    Reference: https://docs.cohere.com/reference/generate

    The class `CohereConfig` provides configuration for the Cohere's API interface. Below are the parameters:

    - `num_generations` (integer): Maximum number of generations returned. Default is 1, with a minimum value of 1 and a maximum value of 5.

    - `max_tokens` (integer): Maximum number of tokens the model will generate as part of the response. Default value is 20.

    - `truncate` (string): Specifies how the API handles inputs longer than maximum token length. Options include NONE, START, END. Default is END.

    - `temperature` (number): A non-negative float controlling the randomness in generation. Lower temperatures result in less random generations. Default is 0.75.

    - `preset` (string): Identifier of a custom preset, a combination of parameters such as prompt, temperature etc.

    - `end_sequences` (array of strings): The generated text gets cut at the beginning of the earliest occurrence of an end sequence, which will be excluded from the text.

    - `stop_sequences` (array of strings): The generated text gets cut at the end of the earliest occurrence of a stop sequence, which will be included in the text.

    - `k` (integer): Limits generation at each step to top `k` most likely tokens. Default is 0.

    - `p` (number): Limits generation at each step to most likely tokens with total probability mass of `p`. Default is 0.

    - `frequency_penalty` (number): Reduces repetitiveness of generated tokens. Higher values apply stronger penalties to previously occurred tokens.

    - `presence_penalty` (number): Reduces repetitiveness of generated tokens. Similar to frequency_penalty, but this penalty applies equally to all tokens that have already appeared.

    - `return_likelihoods` (string): Specifies how and if token likelihoods are returned with the response. Options include GENERATION, ALL and NONE.

    - `logit_bias` (object): Used to prevent the model from generating unwanted tokens or to incentivize it to include desired tokens. e.g. {"hello_world": 1233}
    Nnum_generations
max_tokenstruncatetemperaturepresetend_sequencesstop_sequenceskpfrequency_penaltypresence_penaltyreturn_likelihoods
logit_bias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#   r$   r%   r&   r'   locals_keyvalues                    b/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/cohere/completion/transformation.py__init__zCohereTextConfig.__init__I   s;      (!--/JCf}!2U3 *    c                      t         |          S N)super
get_config)clsr.   s    r2   r8   zCohereTextConfig.get_config^   s    w!##r4   headersmodelmessagesoptional_paramsapi_keyapi_basec                 "    t        |||||      S )N)r:   r;   r<   r=   r>   )cohere_validate_environment)r*   r:   r;   r<   r=   r>   r?   s          r2   r   z%CohereTextConfig.validate_environmentb   s      ++
 	
r4   error_messagestatus_codec                     t        ||      S )N)rC   messager   )r*   rB   rC   r:   s       r2   get_error_classz CohereTextConfig.get_error_classs   s     {MJJr4   c                 
    g dS )N)
streamr   r   r'   top_pr$   r%   stopnextra_headers )r*   r;   s     r2   get_supported_openai_paramsz,CohereTextConfig.get_supported_openai_paramsx   s    
 	
r4   non_default_paramsdrop_paramsc                     |j                         D ]h  \  }}|dk(  r||d<   |dk(  r||d<   |dk(  r||d<   '|dk(  r||d<   2|dk(  r||d<   =|dk(  r||d<   H|d	k(  r||d	<   S|d
k(  r||d
<   ^|dk(  sd||d<   j |S )NrH   r   r   rK   r   r'   rI   r#   r$   r%   rJ   r!   )r,   )r*   rO   r=   r;   rP   paramr1   s          r2   map_openai_paramsz"CohereTextConfig.map_openai_params   s     /446LE5 ,1)-'16.,&05-#5: 12,&05-'!',$--7< 34,,6; 23&49 01% 7& r4   litellm_paramsc                    dj                  d |D              }t        j                  j                         }|j	                         D ]  \  }}	||vs|	||<    d|v rd}
| j                  |d         }||d<   ||d|}|S )N c              3   4   K   | ]  }t        |         yw)rE   Nr
   .0rE   s     r2   	<genexpr>z5CohereTextConfig.transform_request.<locals>.<genexpr>         
HPW'88   toolsT)r^   )r;   prompt)joinlitellmCohereConfigr8   r,   )_construct_cohere_tool_for_completion_api)r*   r;   r<   r=   rT   r:   r_   configr"   v_is_function_calltool_calling_system_promptdatas                r2   transform_requestz"CohereTextConfig.transform_request   s      
HP
 

 %%002LLNDAq(%&"	 # o% $)-)W)W%g. *X *& (BOG$ 
 
 r4   raw_responsemodel_responselogging_objrequest_dataencoding	json_modec                 `   dj                  d |D              }|j                         }g }t        |d         D ]W  \  }}t        |d         dkD  rt	        |d         }nt	        d       }t        |d   |dz   |	      }|j                  |       Y ||_        t        |	j                  |            }t        |	j                  |d
   d   d   j                  dd                  }t        t        j                               |_        ||_        t        ||||z         }t        |d|       |S )NrV   c              3   4   K   | ]  }t        |         ywrX   r
   rY   s     r2   r[   z6CohereTextConfig.transform_response.<locals>.<genexpr>   r\   r]   generationstextr   )contentfinish_reason   )ru   indexrE   choicesrE   rt    )prompt_tokenscompletion_tokenstotal_tokensusage)r`   json	enumeratelenr   r   appendrx   encodegetinttimecreatedr;   r   r-   )r*   r;   rj   rk   rl   rm   r<   r=   rT   rn   r>   ro   r_   completion_responsechoices_listidxitemmessage_obj
choice_objrz   r{   r}   s                         r2   transform_responsez#CohereTextConfig.transform_response   sA     
HP
 
 +//1"#6}#EFIC4< 1$%d6l;%d3 "?3Ag#J
 
+ G ". HOOF34OON95a8CGG	SUVW
 "%TYY[!1$'/&)::

 	/r4   r^   c                     |g }d|iS )Nr^   rM   )r*   r^   s     r2   rc   z:CohereTextConfig._construct_cohere_tool_for_completion_api   s     =Er4   streaming_responsesync_streamc                     t        |||      S )N)r   r   ro   )CohereModelResponseIterator)r*   r   r   ro   s       r2   get_model_response_iteratorz,CohereTextConfig.get_model_response_iterator   s     +1#
 	
r4   )NNNNNNNNNNNNN)NNr6   )F)0__name__
__module____qualname____doc__r   r   r   __annotations__r   r   strr   r   r    listr!   r"   r#   r$   r%   r&   r'   dictr3   classmethodr8   r   r   r   r	   httpxHeadersr   rF   rN   boolrS   ri   Responser   LiteLLMLoggingObjr   r   rc   r   r   r   __classcell__)r.   s   @r2   r   r      s   @ &*OXc]) $J$"Hhsm"!%K#% FHSM $(M8D>(%)NHTN)Ax}Ax}'+x}+&*hsm*(,,!%J% *.$("&%) $(,)-+/*.,0%)4!#4 SM4 3-	4
 c]4 4  ~4 !4 C=4 C=4 $C=4 #3-4 %SM4 TN4 
4* $ $ "&"&

 
 '(	

 
 #
 3-
 

"K K/2K=B4CV=WK	K

 
 
   	
  
8"" '(" 	"
 " " 
"^ "&$(.. nn. &	.
 '. . '(. . . . #. D>. 
.d !% ~  
  %*	

!(3-s1C]"RS

 

 D>	

r4   r   )"r   typingr   r   r   r   r   r   r	   r   ra   8litellm.litellm_core_utils.prompt_templates.common_utilsr   )litellm.llms.base_llm.chat.transformationr   r   litellm.types.llms.openair   litellm.types.utilsr   r   r   r   common_utilsr   r   r   r   rA   *litellm.litellm_core_utils.litellm_loggingr   _LiteLLMLoggingObjr   r   rM   r4   r2   <module>r      sT     U U U   S 6 F F & O NX*n
z n
r4   