[docs]classPredibase(LLM):"""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:strpredibase_api_key:SecretStrpredibase_sdk_version:Optional[str]=Noneadapter_id:Optional[str]=Noneadapter_version:Optional[int]=Nonemodel_kwargs:Dict[str,Any]=Field(default_factory=dict)default_options_for_generation:dict=Field({"max_new_tokens":256,"temperature":0.1,})@propertydef_llm_type(self)->str:return"predibase"def_call(self,prompt:str,stop:Optional[List[str]]=None,run_manager:Optional[CallbackManagerForLLMRun]=None,**kwargs:Any,)->str:options:Dict[str,Union[str,float]]={**self.default_options_for_generation,**(self.model_kwargsor{}),**(kwargsor{}),}ifself._is_deprecated_sdk_version():try:frompredibaseimportPredibaseClientfrompredibase.pqlimportget_sessionfrompredibase.pql.apiimport(ServerResponseError,Session,)frompredibase.resource.llm.interfaceimport(HuggingFaceLLM,LLMDeployment,)frompredibase.resource.llm.responseimportGeneratedResponsefrompredibase.resource.modelimportModelsession:Session=get_session(token=self.predibase_api_key.get_secret_value(),gateway="https://api.app.predibase.com/v1",serving_endpoint="serving.app.predibase.com",)pc:PredibaseClient=PredibaseClient(session=session)exceptImportErrorase:raiseImportError("Could not import Predibase Python package. ""Please install it with `pip install predibase`.")fromeexceptValueErrorase:raiseValueError("Your API key is not correct. Please try again")fromebase_llm_deployment:LLMDeployment=pc.LLM(uri=f"pb://deployments/{self.model}")result:GeneratedResponseifself.adapter_id:""" Attempt to retrieve the fine-tuned adapter from a Predibase repository. If absent, then load the fine-tuned adapter from a HuggingFace repository. """adapter_model:Union[Model,HuggingFaceLLM]try:adapter_model=pc.get_model(name=self.adapter_id,version=self.adapter_version,model_id=None,)exceptServerResponseError:# Predibase does not recognize the adapter ID (query HuggingFace).adapter_model=pc.LLM(uri=f"hf://{self.adapter_id}")result=base_llm_deployment.with_adapter(model=adapter_model).generate(prompt=prompt,options=options,)else:result=base_llm_deployment.generate(prompt=prompt,options=options,)returnresult.responsefrompredibaseimportPredibaseos.environ["PREDIBASE_GATEWAY"]="https://api.app.predibase.com"predibase:Predibase=Predibase(api_token=self.predibase_api_key.get_secret_value())importrequestsfromlorax.clientimportClientasLoraxClientfromlorax.errorsimportGenerationErrorfromlorax.typesimportResponselorax_client:LoraxClient=predibase.deployments.client(deployment_ref=self.model)response:Responseifself.adapter_id:""" Attempt to retrieve the fine-tuned adapter from a Predibase repository. If absent, then load the fine-tuned adapter from a HuggingFace repository. """ifself.adapter_version:# Since the adapter version is provided, query the Predibase repository.pb_adapter_id:str=f"{self.adapter_id}/{self.adapter_version}"options.pop("api_token",None)# The "api_token" is not used for Predibase-hosted models.try:response=lorax_client.generate(prompt=prompt,adapter_id=pb_adapter_id,**options,)exceptGenerationErrorasge:raiseValueError(f"""An adapter with the ID "{pb_adapter_id}" cannot be \found in the Predibase repository of fine-tuned adapters.""")fromgeelse:# The adapter version is omitted,# hence look for the adapter ID in the HuggingFace repository.try:response=lorax_client.generate(prompt=prompt,adapter_id=self.adapter_id,adapter_source="hub",**options,)exceptGenerationErrorasge:raiseValueError(f"""Either an adapter with the ID "{self.adapter_id}" \cannot be found in a HuggingFace repository, or it is incompatible with the \base model (please make sure that the adapter configuration is consistent).""")fromgeelse:try:response=lorax_client.generate(prompt=prompt,**options,)exceptrequests.JSONDecodeErrorasjde:raiseValueError(f"""An LLM with the deployment ID "{self.model}" cannot be found \at Predibase (please refer to \"https://docs.predibase.com/user-guide/inference/models" for the list of \supported models).""")fromjderesponse_text=response.generated_textreturnresponse_text@propertydef_identifying_params(self)->Mapping[str,Any]:"""Get the identifying parameters."""return{**{"model_kwargs":self.model_kwargs},}def_is_deprecated_sdk_version(self)->bool:try:importsemantic_versionfrompredibase.versionimport__version__ascurrent_versionfromsemantic_version.baseimportVersionsdk_semver_deprecated:Version=semantic_version.Version(version_string="2024.4.8")actual_current_version:str=self.predibase_sdk_versionorcurrent_versionsdk_semver_current:Version=semantic_version.Version(version_string=actual_current_version)returnnot((sdk_semver_current>sdk_semver_deprecated)or("+dev"inactual_current_version))exceptImportErrorase:raiseImportError("Could not import Predibase Python package. ""Please install it with `pip install semantic_version predibase`.")frome