Spaces:
Running
Running
| from langchain_community.chat_models import ChatPerplexity | |
| from pydantic.v1 import SecretStr | |
| from langflow.base.models.model import LCModelComponent | |
| from langflow.field_typing import LanguageModel | |
| from langflow.inputs.inputs import HandleInput | |
| from langflow.io import DropdownInput, FloatInput, IntInput, SecretStrInput | |
| class PerplexityComponent(LCModelComponent): | |
| display_name = "Perplexity" | |
| description = "Generate text using Perplexity LLMs." | |
| documentation = "https://python.langchain.com/v0.2/docs/integrations/chat/perplexity/" | |
| icon = "Perplexity" | |
| name = "PerplexityModel" | |
| inputs = [ | |
| *LCModelComponent._base_inputs, | |
| DropdownInput( | |
| name="model_name", | |
| display_name="Model Name", | |
| advanced=False, | |
| options=[ | |
| "llama-3.1-sonar-small-128k-online", | |
| "llama-3.1-sonar-large-128k-online", | |
| "llama-3.1-sonar-huge-128k-online", | |
| "llama-3.1-sonar-small-128k-chat", | |
| "llama-3.1-sonar-large-128k-chat", | |
| "llama-3.1-8b-instruct", | |
| "llama-3.1-70b-instruct", | |
| ], | |
| value="llama-3.1-sonar-small-128k-online", | |
| ), | |
| IntInput( | |
| name="max_output_tokens", display_name="Max Output Tokens", info="The maximum number of tokens to generate." | |
| ), | |
| SecretStrInput( | |
| name="api_key", | |
| display_name="Perplexity API Key", | |
| info="The Perplexity API Key to use for the Perplexity model.", | |
| advanced=False, | |
| ), | |
| FloatInput(name="temperature", display_name="Temperature", value=0.75), | |
| FloatInput( | |
| name="top_p", | |
| display_name="Top P", | |
| info="The maximum cumulative probability of tokens to consider when sampling.", | |
| advanced=True, | |
| ), | |
| IntInput( | |
| name="n", | |
| display_name="N", | |
| info="Number of chat completions to generate for each prompt. " | |
| "Note that the API may not return the full n completions if duplicates are generated.", | |
| advanced=True, | |
| ), | |
| IntInput( | |
| name="top_k", | |
| display_name="Top K", | |
| info="Decode using top-k sampling: consider the set of top_k most probable tokens. Must be positive.", | |
| advanced=True, | |
| ), | |
| HandleInput( | |
| name="output_parser", | |
| display_name="Output Parser", | |
| info="The parser to use to parse the output of the model", | |
| advanced=True, | |
| input_types=["OutputParser"], | |
| ), | |
| ] | |
| def build_model(self) -> LanguageModel: # type: ignore[type-var] | |
| api_key = SecretStr(self.api_key).get_secret_value() | |
| temperature = self.temperature | |
| model = self.model_name | |
| max_output_tokens = self.max_output_tokens | |
| top_k = self.top_k | |
| top_p = self.top_p | |
| n = self.n | |
| return ChatPerplexity( | |
| model=model, | |
| temperature=temperature or 0.75, | |
| pplx_api_key=api_key, | |
| top_k=top_k or None, | |
| top_p=top_p or None, | |
| n=n or 1, | |
| max_output_tokens=max_output_tokens, | |
| ) | |