a
    bgr!                     @   sd   d dl Z d dlmZmZmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZmZ G dd deZdS )    N)AnyDictListMappingOptionalUnion)CallbackManagerForLLMRun)LLM)Field	SecretStrc                   @   s   e Zd ZU dZeed< eed< dZee ed< dZ	ee ed< dZ
ee ed< eedZeeef ed	< ed
ddZeed< eedddZdeeee  ee eedddZeeeef dddZedddZdS )	Predibasea  Use your Predibase models with Langchain.

    To use, you should have the ``predibase`` python package installed,
    and have your Predibase API key.

    The `model` parameter is the Predibase "serverless" base_model ID
    (see https://docs.predibase.com/user-guide/inference/models for the catalog).

    An optional `adapter_id` parameter is the Predibase ID or HuggingFace ID of a
    fine-tuned LLM adapter, whose base model is the `model` parameter; the
    fine-tuned adapter must be compatible with its base model;
    otherwise, an error is raised.  If the fine-tuned adapter is hosted at Predibase,
    then `adapter_version` in the adapter repository must be specified.

    An optional `predibase_sdk_version` parameter defaults to latest SDK version.
    modelpredibase_api_keyNpredibase_sdk_version
adapter_idadapter_version)default_factorymodel_kwargs   g?)Zmax_new_tokensZtemperaturedefault_options_for_generation)returnc                 C   s   dS )N	predibase selfr   r   p/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/llms/predibase.py	_llm_type(   s    zPredibase._llm_type)promptstoprun_managerkwargsr   c               
   K   s   i | j | jpi |pi }|  r~zrddlm} ddlm} ddlm}m	}	 ddl
m}
m} ddlm} ddlm} || j dd	d
}||d}W nZ ty } ztd|W Y d }~n6d }~0  ty } ztd|W Y d }~n
d }~0 0 |jd| j d}| jrjz|j| j| jd d}W n( |yP   |jd| j d}Y n0 |j|dj||d}n|j||d}|jS ddlm} dtjd< || j d}dd l }ddl!m"} ddl#m$} ddl%m&} |j'j(| jd}| jr| jrd| j d| j }|)dd  z|jf ||d|}W n8 |y` } ztd| d |W Y d }~n
d }~0 0 nZz|jf || jd!d"|}W n: |y } z td#| j d$|W Y d }~n
d }~0 0 nVz|jf d%|i|}W n< |j*y } z td&| j d'|W Y d }~n
d }~0 0 |j+}|S )(Nr   )PredibaseClient)get_session)ServerResponseErrorSession)HuggingFaceLLMLLMDeployment)GeneratedResponse)Modelz https://api.app.predibase.com/v1zserving.app.predibase.com)tokenZgatewayZserving_endpoint)sessionzZCould not import Predibase Python package. Please install it with `pip install predibase`.z-Your API key is not correct. Please try againzpb://deployments/)uri)nameversionZmodel_idzhf://)r   )r   options)r   zhttps://api.app.predibase.comZPREDIBASE_GATEWAY)	api_token)Client)GenerationError)Response)Zdeployment_ref/r/   )r   r   zAn adapter with the ID "zE" cannot be found in the Predibase repository of fine-tuned adapters.Zhub)r   r   Zadapter_sourcezEither an adapter with the ID "z" cannot be found in a HuggingFace repository, or it is incompatible with the base model (please make sure that the adapter configuration is consistent).
r   zAn LLM with the deployment ID "z" cannot be found at Predibase (please refer to "https://docs.predibase.com/user-guide/inference/models" for the list of supported models).
),r   r   _is_deprecated_sdk_versionr   r!   Zpredibase.pqlr"   Zpredibase.pql.apir#   r$   Z predibase.resource.llm.interfacer%   r&   Zpredibase.resource.llm.responser'   Zpredibase.resource.modelr(   r   Zget_secret_valueImportError
ValueErrorr	   r   r   Z	get_modelr   Zwith_adaptergenerateresponser   osenvironrequestsZlorax.clientr0   Zlorax.errorsr1   Zlorax.typesr2   ZdeploymentsclientpopJSONDecodeErrorZgenerated_text) r   r   r   r   r    r.   r!   r"   r#   r$   r%   r&   r'   r(   r*   ZpceZbase_llm_deploymentZadapter_modelresultr   r   r;   ZLoraxClientr1   r2   Zlorax_clientZpb_adapter_idr8   geZjdeZresponse_textr   r   r   _call,   s    
 






zPredibase._callc                 C   s   i d| j iS )zGet the identifying parameters.r   )r   r   r   r   r   _identifying_params   s    zPredibase._identifying_paramsc              
   C   s   zVdd l }ddlm} ddlm} |jdd}| jp6|}|j|d}||kpRd|v  W S  ty } ztd|W Y d }~n
d }~0 0 d S )Nr   )__version__)Versionz2024.4.8)version_stringz+devzkCould not import Predibase Python package. Please install it with `pip install semantic_version predibase`.)semantic_versionZpredibase.versionrD   Zsemantic_version.baserE   r   r5   )r   rG   current_versionrE   Zsdk_semver_deprecatedZactual_current_versionZsdk_semver_currentr?   r   r   r   r4      s(    
z$Predibase._is_deprecated_sdk_version)NN)__name__
__module____qualname____doc__str__annotations__r   r   r   r   r   intr
   dictr   r   r   r   propertyr   r   r   rB   r   rC   boolr4   r   r   r   r   r   	   s6   
  
 r   )r9   typingr   r   r   r   r   r   Zlangchain_core.callbacksr   Z#langchain_core.language_models.llmsr	   Zpydanticr
   r   r   r   r   r   r   <module>   s
    