feat: Add Perplexity Models Component (#3351)
This commit is contained in:
parent
5181fd880e
commit
a2406fac72
7 changed files with 118 additions and 0 deletions
|
|
@ -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
|
||||||
|
|
@ -9,6 +9,7 @@ from .HuggingFaceModel import HuggingFaceEndpointsComponent
|
||||||
from .OllamaModel import ChatOllamaComponent
|
from .OllamaModel import ChatOllamaComponent
|
||||||
from .OpenAIModel import OpenAIModelComponent
|
from .OpenAIModel import OpenAIModelComponent
|
||||||
from .VertexAiModel import ChatVertexAIComponent
|
from .VertexAiModel import ChatVertexAIComponent
|
||||||
|
from .PerplexityModel import PerplexityComponent
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"AIMLModelComponent",
|
"AIMLModelComponent",
|
||||||
|
|
@ -22,5 +23,6 @@ __all__ = [
|
||||||
"ChatOllamaComponent",
|
"ChatOllamaComponent",
|
||||||
"OpenAIModelComponent",
|
"OpenAIModelComponent",
|
||||||
"ChatVertexAIComponent",
|
"ChatVertexAIComponent",
|
||||||
|
"PerplexityComponent",
|
||||||
"base",
|
"base",
|
||||||
]
|
]
|
||||||
|
|
|
||||||
1
src/frontend/package-lock.json
generated
1
src/frontend/package-lock.json
generated
|
|
@ -1079,6 +1079,7 @@
|
||||||
},
|
},
|
||||||
"node_modules/@clack/prompts/node_modules/is-unicode-supported": {
|
"node_modules/@clack/prompts/node_modules/is-unicode-supported": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
|
"extraneous": true,
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|
|
||||||
21
src/frontend/src/icons/Perplexity/Perplexity.jsx
Normal file
21
src/frontend/src/icons/Perplexity/Perplexity.jsx
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
const SvgPerplexity = (props) => (
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 512 509.64" // Adjust viewBox if needed
|
||||||
|
width="1em"
|
||||||
|
height="1em"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
fill="#1F1F1F"
|
||||||
|
d="M115.613 0h280.774C459.974 0 512 52.025 512 115.612v278.415c0 63.587-52.026 115.613-115.613 115.613H115.613C52.026 509.64 0 457.614 0 394.027V115.612C0 52.025 52.026 0 115.613 0z"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
fill="#fff"
|
||||||
|
fillRule="nonzero"
|
||||||
|
d="M348.851 128.063l-68.946 58.302h68.946v-58.302zm-83.908 48.709l100.931-85.349v94.942h32.244v143.421h-38.731v90.004l-94.442-86.662v83.946h-17.023v-83.906l-96.596 86.246v-89.628h-37.445V186.365h38.732V90.768l95.309 84.958v-83.16h17.023l-.002 84.206zm-29.209 26.616c-34.955.02-69.893 0-104.83 0v109.375h20.415v-27.121l84.415-82.254zm41.445 0l82.208 82.324v27.051h21.708V203.388c-34.617 0-69.274.02-103.916 0zm-42.874-17.023l-64.669-57.646v57.646h64.669zm13.617 124.076v-95.2l-79.573 77.516v88.731l79.573-71.047zm17.252-95.022v94.863l77.19 70.83c0-29.485-.012-58.943-.012-88.425l-77.178-77.268z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default SvgPerplexity;
|
||||||
9
src/frontend/src/icons/Perplexity/index.tsx
Normal file
9
src/frontend/src/icons/Perplexity/index.tsx
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
import React, { forwardRef } from "react";
|
||||||
|
import PerplexitySVG from "./perplexity";
|
||||||
|
|
||||||
|
export const PerplexityIcon = forwardRef<
|
||||||
|
SVGSVGElement,
|
||||||
|
React.PropsWithChildren<{}>
|
||||||
|
>((props, ref) => {
|
||||||
|
return <PerplexitySVG ref={ref} {...props} />;
|
||||||
|
});
|
||||||
BIN
src/frontend/src/icons/Perplexity/perplexity.svg
Normal file
BIN
src/frontend/src/icons/Perplexity/perplexity.svg
Normal file
Binary file not shown.
|
|
@ -1,4 +1,5 @@
|
||||||
import { AIMLIcon } from "@/icons/AIML";
|
import { AIMLIcon } from "@/icons/AIML";
|
||||||
|
import Perplexity from "@/icons/Perplexity/Perplexity";
|
||||||
import { AthenaIcon } from "@/icons/athena/index";
|
import { AthenaIcon } from "@/icons/athena/index";
|
||||||
import { freezeAllIcon } from "@/icons/freezeAll";
|
import { freezeAllIcon } from "@/icons/freezeAll";
|
||||||
import {
|
import {
|
||||||
|
|
@ -599,4 +600,5 @@ export const nodeIconsLucide: iconsType = {
|
||||||
athenaIcon: AthenaIcon,
|
athenaIcon: AthenaIcon,
|
||||||
OptionIcon: OptionIcon,
|
OptionIcon: OptionIcon,
|
||||||
Option: OptionIcon,
|
Option: OptionIcon,
|
||||||
|
Perplexity,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue