feat: Add Perplexity Models Component (#3351)

This commit is contained in:
Sai Kolasani 2024-08-19 14:28:28 -07:00 • committed by GitHub
commit a2406fac72
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 118 additions and 0 deletions

View file

@ -0,0 +1,83 @@
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.io import FloatInput, SecretStrInput, DropdownInput, IntInput
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,
),
]
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
output = 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,
)
return output # type: ignore

View file

@ -9,6 +9,7 @@ from .HuggingFaceModel import HuggingFaceEndpointsComponent
from .OllamaModel import ChatOllamaComponent
from .OpenAIModel import OpenAIModelComponent
from .VertexAiModel import ChatVertexAIComponent
from .PerplexityModel import PerplexityComponent
__all__ = [
"AIMLModelComponent",
@ -22,5 +23,6 @@ __all__ = [
"ChatOllamaComponent",
"OpenAIModelComponent",
"ChatVertexAIComponent",
"PerplexityComponent",
"base",
]