Ë
    uPêj}$  ã                   ó¢   — d Z ddlmZmZmZ ddl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 ddlmZ dd	lmZ d
dlmZ erddlZ G d„ de«      Zy)zU
Translate from OpenAI's `/v1/chat/completions` to Lemonade's `/v1/chat/completions`
é    )ÚTYPE_CHECKINGÚAnyÚFinal)ÚquoteN)Úverbose_logger)ÚLogging)Úget_secret_str)ÚAllMessageValues)ÚModelResponseé   )ÚOpenAILikeChatConfigc                   ó`  ‡ — e Zd ZU dZdZedz  ed<   dZedz  ed<   dZ	e
dz  ed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZedz  ed	<   dZeez  dz  ed
<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZe
dz  ed<   dZedz  ed<   	 	 	 	 	 	 	 	 	 	 	 	 	 d,dedz  dedz  de
dz  dedz  dedz  dedz  d	edz  d
eez  dz  dedz  dedz  dedz  de
dz  dedz  ddfd„Zededz  fd„«       Zeˆ fd„«       Zd-dedz  dedz  fd„Zedededz  fd„«       Zede
de
fd„«       Z de
dedz  fd„Z!dede
fd„Z"	 	 d-dededz  dedz  defd„Z#dedz  dedz  de$edz  edz  f   fd„Z%dedz  de
fd „Z&	 	 d-ded!e'jP                  d"e)d#e*d$e
d%ee+   d&e
d'e
d(d)dedz  d*e,dz  de)fˆ fd+„Z-ˆ xZ.S ).ÚLemonadeChatConfigÚlemonadeNÚrepeat_penaltyÚ	functionsÚ
logit_biasÚ
max_tokensÚmax_completion_tokensÚnÚpresence_penaltyÚstopÚtemperatureÚtop_pÚtop_kÚresponse_formatÚtoolsÚreturnc                 ó¤   — t        «       j                  «       }|j                  «       D ]%  \  }}|dk7  sŒ|€Œt        | j                  ||«       Œ' y )NÚself)ÚlocalsÚcopyÚitemsÚsetattrÚ	__class__)r    r   r   r   r   r   r   r   r   r   r   r   r   r   Úlocals_ÚkeyÚvalues                    ún/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/lemonade/chat/transformation.pyÚ__init__zLemonadeChatConfig.__init__*   sF   € ô   ›Ÿ™›ˆØ!Ÿ-™-›/ò 	4‰JˆC�Ø�f‹} Ñ!2Ü˜Ÿ™¨¨UÕ3ñ	4ó    c                  ó   — y)Nr   © )r    s    r)   Úcustom_llm_providerz&LemonadeChatConfig.custom_llm_provider?   s   € àr+   c                 ó    •— t         ‰| �  «       S )N)ÚsuperÚ
get_config)Úclsr%   s    €r)   r1   zLemonadeChatConfig.get_configC   s   ø€ ä‰wÑ!Ó#Ð#r+   Úapi_keyÚapi_basec                 óÌ  — | j                  ||¬«      \  }}|€t        d«      ‚	 t        j                  j	                  |› d�| j                  |«      ¬«      }|j                  dk7  r%t        d|j                  › d	|j                  › �«      ‚|j                  «       j	                  d
g «      }|D �cg c]
  }d|d   z   ‘Œ c}S # t        $ r}t        d|› �«      ‚d}~ww xY wc c}w )a¯  
        Get available models from Lemonade API.

        This method queries the Lemonade /models endpoint to retrieve the list of available models.

        Args:
            api_key: Optional API key for authenticated Lemonade servers
            api_base: Optional API base URL (defaults to LEMONADE_API_BASE env var or http://localhost:8000)

        Returns:
            List of model names prefixed with "lemonade/"
        ©r4   r3   NzgLEMONADE_API_BASE is not set. Please set the environment variable to query Lemonade's /models endpoint.z/models©ÚurlÚheaderszqFailed to fetch models from Lemonade. Set Lemonade API Base via `LEMONADE_API_BASE` environment variable. Error: éÈ   z3Failed to fetch models from Lemonade. Status code: z, Response: Údataú	lemonade/Úid)
Ú$_get_openai_compatible_provider_infoÚ
ValueErrorÚlitellmÚmodule_level_clientÚgetÚ_get_auth_headersÚ	ExceptionÚstatus_codeÚtextÚjson)r    r3   r4   ÚresponseÚeÚ
model_listÚmodels          r)   Ú
get_modelszLemonadeChatConfig.get_modelsG   s  € ð !×EÑEÈxÐahÐEÓiÑˆ�'àÐÜØyóð ð
	Ü%×9Ñ9×=Ñ=Ø�j Ð(Ø×.Ñ.¨wÓ7ð >ó ˆHð ×Ñ 3Ò&ÜØEÀh×FZÑFZÐE[Ð[gÐhp×huÑhuÐgvÐwóð ð %ŸM™M›O×/Ñ/°¸Ó;ˆ
Ø7AÖB¨e�˜e D™kÓ)ÒBÐBøô ò 	Üð Dð  EFð  DGð  Hóð ûð	üò Cs   ¥3C Â0C!Ã	CÃCÃCr(   c                 ó¸   — t        | t        «      ry t        | t        «      r| dkD  r| S t        | t        «      r	 t        | «      }|dkD  r|S y # t        $ r Y y w xY w)Nr   )Ú
isinstanceÚboolÚintÚstrr?   )r(   Úparseds     r)   Ú_get_positive_intz$LemonadeChatConfig._get_positive_intn   sa   € ä�eœTÔ"ØÜ�eœSÔ! e¨a¢iØˆLÜ�eœSÔ!ðÜ # E£
�ð ˜ŠzØ�Øøô	 ò Ùðús   ºA Á	AÁAÚ
model_infoc                 ó–   — | j                  d«      }t        |t        «      si }n|j                  «       }dD ]  }|| v sŒ| |   ||<   Œ |S )NÚprovider_specific_entry)Úrecipe_optionsÚcontext_windowÚmax_context_window)rB   rN   Údictr"   )rT   rV   r'   s      r)   Ú_get_provider_specific_entryz/LemonadeChatConfig._get_provider_specific_entry}   s`   € à",§.¡.Ð1JÓ"KÐÜÐ1´4Ô8Ø&(Ñ#à&=×&BÑ&BÓ&DÐ#àMò 	?ˆCØ�jÒ Ø/9¸#©Ð'¨Ò,ð	?ð 'Ð&r+   c                 ó(  — | j                  |«      }|j                  d«      }t        |t        «      si }|j                  d«      |j                  d«      |j                  d«      |j                  d«      fD ]  }| j	                  |«      }|€Œ|c S  y )NrW   Úctx_sizeÚmax_input_tokensrX   rY   )r[   rB   rN   rZ   rS   )r    rT   rV   rW   r(   rR   s         r)   Ú_get_context_windowz&LemonadeChatConfig._get_context_window‹   s¡   € Ø)-×)JÑ)JÈ:Ó)VÐØ0×4Ñ4Ð5EÓFˆÜ˜.¬$Ô/ØˆNð ×Ñ˜zÓ*Ø�N‰NÐ-Ó.Ø#×'Ñ'Ð(8Ó9Ø#×'Ñ'Ð(<Ó=ð	
ò 	ˆEð ×+Ñ+¨EÓ2ˆFØÑ!Ø’ð	ð r+   rK   c           	      ó   — d|z   ddddd d d dœS )Nr<   r   Úchatg        )r'   Úlitellm_providerÚmodeÚinput_cost_per_tokenÚoutput_cost_per_tokenr   r^   Úmax_output_tokensr-   )r    rK   s     r)   Ú_get_default_model_infoz*LemonadeChatConfig._get_default_model_infoœ   s)   € à Ñ&Ø *ØØ$'Ø%(ØØ $Ø!%ñ	
ð 		
r+   c                 óÔ  — |j                  d«      r|j                  dd«      d   }| j                  ||¬«      \  }}t        |d¬«      }	 t        j
                  j                  |› d|› �| j                  |«      ¬«      }|j                  «        |j                  «       }| j                  |«      }| j                  |j                  d
«      «      }| j                  |j                  d«      «      }	| j!                  |«      }
| j                  |«      }|j#                  |	xs |||dœ«       |
r|
|d<   |S # t        $ r) t        j                  d	«       | j                  |«      cY S w xY w)Nr<   ú/é   r6   Ú )Úsafez/models/r7   z(LemonadeError: Could not get model info.rf   r   )r   r^   rf   rV   )Ú
startswithÚsplitr>   r   r@   rA   rB   rC   Úraise_for_statusrG   rD   r   Údebugrg   r_   rS   r[   Úupdate)r    rK   r4   r3   Úencoded_modelrH   rT   r^   rf   r   rV   Úmodel_info_responses               r)   Úget_model_infoz!LemonadeChatConfig.get_model_info¨   sv  € ð ×Ñ˜KÔ(Ø—K‘K  QÓ'¨Ñ*ˆEà ×EÑEÈxÐahÐEÓiÑˆ�'Ü$ U°Ô4ˆð		7Ü%×9Ñ9×=Ñ=Ø�j ¨¨Ð8Ø×.Ñ.¨wÓ7ð >ó ˆHð ×%Ñ%Ô'Ø (§¡£ˆJð
 #'×":Ñ":¸:Ó"FÐØ#'×#9Ñ#9¸*¿.¹.ÐI\Ó:]Ó#^ÐØ ×2Ñ2°:·>±>À,Ó3OÓPˆ
Ø)-×)JÑ)JÈ:Ó)VÐà%)×%AÑ%AÀ%Ó%HÐØ×"Ñ"à(Ò=Ð,=Ø$4Ø%6ñô	
ñ #Ø=TÐÐ 9Ñ:Ø"Ð"øô' ò 	7Ü× Ñ Ð!KÔLØ×/Ñ/°Ó6Ò6ð	7ús   ÁAD5 Ä5/E'Å&E'c                 ó²   — |}|xs t        d«      xs d}| j                  }|�|r/|xs+ t        j                  xs t        d«      xs | j                  }||fS )NÚLEMONADE_API_BASEzhttp://localhost:8000/api/v1ÚLEMONADE_API_KEY)r	   Ú_DEFAULT_API_KEYr@   Úlemonade_key)r    r4   r3   Úpassed_api_baser'   s        r)   r>   z7LemonadeChatConfig._get_openai_compatible_provider_infoÐ   sc   € ð "*ˆØÒdœ~Ð.AÓBÒdÐFdˆØ×#Ñ#ˆØÐ"¡gØÒpœW×1Ñ1Òp´^ÐDVÓ5WÒpÐ[_×[pÑ[pˆCØ˜ˆ}Ðr+   c                 ó6   — |�|| j                   k(  ri S dd|› �iS )NÚAuthorizationzBearer )rx   )r    r3   s     r)   rC   z$LemonadeChatConfig._get_auth_headersÛ   s+   € Øˆ?˜g¨×)>Ñ)>Ò>ØˆIØ 7¨7¨)Ð!4Ð5Ð5r+   Úraw_responseÚmodel_responseÚlogging_objÚrequest_dataÚmessagesÚoptional_paramsÚlitellm_paramsÚencodingztiktoken.Encoding | NoneÚ	json_modec                 ó\   •— t         ‰| �  |||||||	||||
¬«      }t        |dd|z   «       |S )N)rK   r~   r}   r�   r   r€   r„   r‚   r…   rƒ   r3   rK   r<   )r0   Útransform_responser$   )r    rK   r}   r~   r   r€   r�   r‚   rƒ   r„   r3   r…   r%   s               €r)   r‡   z%LemonadeChatConfig.transform_responseà   sS   ø€ ô ™Ñ3ØØ)Ø%ØØ#Ø%ØØ+ØØ)Øð 4ó 
ˆô 	� ¨°uÑ)<Ô=àÐr+   )NNNNNNNNNNNNN)NN)/Ú__name__Ú
__module__Ú__qualname__rx   r   ÚfloatÚ__annotations__r   Úlistr   rZ   r   rP   r   r   r   r   rQ   r   r   r   r   r   r*   Úpropertyr.   Úclassmethodr1   rL   Ústaticmethodr   rS   r[   r_   rg   rt   Útupler>   rC   ÚhttpxÚResponser   ÚLiteLLMLoggingObjr
   rO   r‡   Ú__classcell__)r%   s   @r)   r   r      sŸ  ø… Ø!Ðà#'€N�E˜D‘LÓ'Ø!€Iˆt�d‰{Ó!Ø"€J��t‘Ó"Ø!€J��d‘
Ó!Ø(,Ð˜3 ™:Ó,Ø€A€sˆT�zÓØ#'Ð�c˜D‘jÓ'Ø"€Dˆ#�‰*�tÑ
Ó"Ø"€K��t‘Ó"Ø€Eˆ3�‰:ÓØ€Eˆ3�‰:ÓØ#'€O�T˜D‘[Ó'Ø€Eˆ4�$‰;Óð (,Ø!%Ø"&Ø,0Ø!%ØØ'+Ø"&Ø"&Ø Ø Ø'+Ø!ñ4à ™ð4ð ˜$‘;ð4ð ˜4‘Kð	4ð
  # T™zð4ð ˜$‘Jð4ð �‰:ð4ð  ™*ð4ð �D‰j˜4Ñð4ð ˜4‘Zð4ð �T‰zð4ð �T‰zð4ð  ™ð4ð �d‰{ð4ð 
ó4ð* ð S¨4¡Zò ó ðð ó$ó ð$ñ%C #¨¡*ð %C¸sÀT¹zó %CðN ð ð ¨¨t©ò ó ðð ð'°ð '¸$ò 'ó ð'ð¨dð °s¸T±zó ð"

¨Sð 

°Tó 

ð  $Ø"ñ	&#àð&#ð ˜‘*ð&#ð �t‘ð	&#ð
 
ó&#ðP	Ø˜d™
ð	Ø-0°4©Zð	à	ˆs�T‰z˜3 ™:Ð%Ñ	&ó	ð6¨¨t©ð 6¸ó 6ð  #Ø!%ñàðð —n‘nðð &ð	ð
 'ðð ðð Ð'Ñ(ðð ðð ðð -ðð �t‘ðð ˜$‘;ðð 
÷ñ r+   r   )Ú__doc__Útypingr   r   r   Úurllib.parser   r’   r@   Úlitellm._loggingr   Ú*litellm.litellm_core_utils.litellm_loggingr   r”   Úlitellm.secret_managers.mainr	   Úlitellm.types.llms.openair
   Úlitellm.types.utilsr   Úopenai_like.chat.transformationr   Útiktokenr   r-   r+   r)   ú<module>r       sF   ðñ÷ -Ñ ,Ý ã ã Ý +Ý SÝ 7õõ .å CáÛôfÐ-õ fr+   