fix: refactor bundle and component names (#9140)

* Changed Youtube to YouTube

* Updated AIML to AI/ML API

* Updated AI/ML Model name

* Changed Anthropic description

* updated arXiv name

* Set Astra Vectorize as legacy

* Updated get env var

* Updates firecrawl names

* Updated Icon for Google Gen AI embeddings

* Add Space on Home Assistant

* Updated Hugging Face name

* Updated Maritalk Name

* Updated Not Diamond name

* Updated ScrapeGraph names

* Changed SearchApi Name

* Changed TwelveLabs naming

* Updated AstraDB naming

* Updated VertexAI naming

* Updated Wolfram

* Updated Yahoo naming

* Updated Yahoo Finance name

* Updated Yahoo Finance

* [autofix.ci] apply automated fixes

* Update google serper bundle

* updated ai ml icon name

* Updated maritalk

* Changed ai ml api name

* removed openai from base url

* Revert components-bundles changes

* revert changes on components-vector-stores

* Revert changes on deployment-hugging-face-spaces

* Revert changes on integrations-nvidia-ingest

* Revert changes on release-notes

* Update changes on sequential agent

* [autofix.ci] apply automated fixes

* fixed filterSidebar test

* updated filter edge test

* updated shard 11 test with new sidebar names

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
Lucas Oliveira 2025-07-23 20:06:45 -03:00 • committed by GitHub
commit 169b687ed0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
54 changed files with 415 additions and 741 deletions

View file

@ -8,10 +8,10 @@ globs:
alwaysApply: false alwaysApply: false
--- ---
# Component Icon Rules # Component Icon Rules
## Purpose ## Purpose
To ensure consistent, clear, and functional icon usage for components, covering both backend (Python) and frontend (React/TypeScript) steps. To ensure consistent, clear, and functional icon usage for components, covering both backend (Python) and frontend (React/TypeScript) steps.
--- ---
@ -36,17 +36,19 @@ To ensure consistent, clear, and functional icon usage for components, covering
- **Where:** - **Where:**
In a new directory for your icon, e.g., `src/frontend/src/icons/AstraDB/`. In a new directory for your icon, e.g., `src/frontend/src/icons/AstraDB/`.
- **How:** - **How:**
- Add your SVG as a React component, e.g., `AstraSVG` in `AstraDB.jsx`. - Add your SVG as a React component, e.g., `AstraSVG` in `AstraDB.jsx`.
```jsx ```jsx
const AstraSVG = (props) => ( const AstraSVG = (props) => (
<svg {...props}> <svg {...props}>
<path <path
// ... // ...
/> />
</svg> </svg>
); );
``` ```
- Create an `index.tsx` that exports your icon using `forwardRef`: - Create an `index.tsx` that exports your icon using `forwardRef`:
```tsx ```tsx
import React, { forwardRef } from "react"; import React, { forwardRef } from "react";
import AstraSVG from "./AstraDB"; import AstraSVG from "./AstraDB";
@ -118,6 +120,7 @@ To ensure consistent, clear, and functional icon usage for components, covering
--- ---
**Example for AstraDB:** **Example for AstraDB:**
- Backend: - Backend:
```python ```python
icon = "AstraDB" icon = "AstraDB"

View file

@ -3,19 +3,19 @@ from langchain_core.language_models.chat_models import BaseChatModel
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage, ToolCall from langchain_core.messages import AIMessage, HumanMessage, SystemMessage, ToolCall
from langchain_core.tools import BaseTool from langchain_core.tools import BaseTool
# Import HuggingFace Model base # Import Hugging Face Model base
from smolagents import Model, Tool from smolagents import Model, Tool
from smolagents.models import ChatMessage, ChatMessageToolCall, ChatMessageToolCallDefinition from smolagents.models import ChatMessage, ChatMessageToolCall, ChatMessageToolCallDefinition
def _lc_tool_call_to_hf_tool_call(tool_call: ToolCall) -> ChatMessageToolCall: def _lc_tool_call_to_hf_tool_call(tool_call: ToolCall) -> ChatMessageToolCall:
"""Convert a LangChain ToolCall to a HuggingFace ChatMessageToolCall. """Convert a LangChain ToolCall to a Hugging Face ChatMessageToolCall.
Args: Args:
tool_call (ToolCall): LangChain tool call to convert tool_call (ToolCall): LangChain tool call to convert
Returns: Returns:
ChatMessageToolCall: Equivalent HuggingFace tool call ChatMessageToolCall: Equivalent Hugging Face tool call
""" """
return ChatMessageToolCall( return ChatMessageToolCall(
function=ChatMessageToolCallDefinition(name=tool_call.name, arguments=tool_call.args), function=ChatMessageToolCallDefinition(name=tool_call.name, arguments=tool_call.args),
@ -24,24 +24,24 @@ def _lc_tool_call_to_hf_tool_call(tool_call: ToolCall) -> ChatMessageToolCall:
def _hf_tool_to_lc_tool(tool) -> BaseTool: def _hf_tool_to_lc_tool(tool) -> BaseTool:
"""Convert a HuggingFace Tool to a LangChain BaseTool. """Convert a Hugging Face Tool to a LangChain BaseTool.
Args: Args:
tool (Tool): HuggingFace tool to convert tool (Tool): Hugging Face tool to convert
Returns: Returns:
BaseTool: Equivalent LangChain tool BaseTool: Equivalent LangChain tool
""" """
if not hasattr(tool, "langchain_tool"): if not hasattr(tool, "langchain_tool"):
msg = "HuggingFace Tool does not have a langchain_tool attribute" msg = "Hugging Face Tool does not have a langchain_tool attribute"
raise ValueError(msg) raise ValueError(msg)
return tool.langchain_tool return tool.langchain_tool
class LangChainHFModel(Model): class LangChainHFModel(Model):
"""A class bridging HuggingFace's `Model` interface with a LangChain `BaseChatModel`. """A class bridging Hugging Face's `Model` interface with a LangChain `BaseChatModel`.
This adapter allows using any LangChain chat model with the HuggingFace interface. This adapter allows using any LangChain chat model with the Hugging Face interface.
It handles conversion of message formats and tool calls between the two frameworks. It handles conversion of message formats and tool calls between the two frameworks.
Usage: Usage:
@ -68,7 +68,7 @@ class LangChainHFModel(Model):
tools_to_call_from: list[Tool] | None = None, tools_to_call_from: list[Tool] | None = None,
**kwargs, **kwargs,
) -> ChatMessage: ) -> ChatMessage:
"""Process messages through the LangChain model and return HuggingFace format. """Process messages through the LangChain model and return Hugging Face format.
Args: Args:
messages: List of message dictionaries with 'role' and 'content' keys messages: List of message dictionaries with 'role' and 'content' keys
@ -78,7 +78,7 @@ class LangChainHFModel(Model):
**kwargs: Additional arguments passed to the LangChain model **kwargs: Additional arguments passed to the LangChain model
Returns: Returns:
ChatMessage: Response in HuggingFace format ChatMessage: Response in Hugging Face format
""" """
if grammar: if grammar:
msg = "Grammar is not yet supported." msg = "Grammar is not yet supported."

View file

@ -17,10 +17,10 @@ class AimlModels:
response = client.get("https://api.aimlapi.com/models") response = client.get("https://api.aimlapi.com/models")
response.raise_for_status() response.raise_for_status()
except httpx.RequestError as e: except httpx.RequestError as e:
msg = "Failed to connect to the AIML API." msg = "Failed to connect to the AI/ML API."
raise APIConnectionError(msg) from e raise APIConnectionError(msg) from e
except httpx.HTTPStatusError as e: except httpx.HTTPStatusError as e:
msg = f"AIML API responded with status code: {e.response.status_code}" msg = f"AI/ML API responded with status code: {e.response.status_code}"
raise APIError( raise APIError(
message=msg, message=msg,
body=None, body=None,
@ -31,7 +31,7 @@ class AimlModels:
models = response.json().get("data", []) models = response.json().get("data", [])
self.separate_models_by_type(models) self.separate_models_by_type(models)
except (ValueError, KeyError, TypeError) as e: except (ValueError, KeyError, TypeError) as e:
msg = "Failed to parse response data from AIML API. The format may be incorrect." msg = "Failed to parse response data from AI/ML API. The format may be incorrect."
raise ValueError(msg) from e raise ValueError(msg) from e
def separate_models_by_type(self, models): def separate_models_by_type(self, models):

View file

@ -97,7 +97,7 @@ GROQ_MODELS_DETAILED = [
create_model_metadata( # OpenAI create_model_metadata( # OpenAI
provider="Groq", name="whisper-large-v3-turbo", icon="Groq", not_supported=True provider="Groq", name="whisper-large-v3-turbo", icon="Groq", not_supported=True
), ),
create_model_metadata( # HuggingFace create_model_metadata( # Hugging Face
provider="Groq", name="distil-whisper-large-v3-en", icon="Groq", not_supported=True provider="Groq", name="distil-whisper-large-v3-en", icon="Groq", not_supported=True
), ),
] ]

View file

@ -17,8 +17,8 @@ from langflow.inputs.inputs import (
class AIMLModelComponent(LCModelComponent): class AIMLModelComponent(LCModelComponent):
display_name = "AIML" display_name = "AI/ML API"
description = "Generates text using AIML LLMs." description = "Generates text using AI/ML API LLMs."
icon = "AIML" icon = "AIML"
name = "AIMLModel" name = "AIMLModel"
documentation = "https://docs.aimlapi.com/api-reference" documentation = "https://docs.aimlapi.com/api-reference"
@ -42,15 +42,15 @@ class AIMLModelComponent(LCModelComponent):
), ),
StrInput( StrInput(
name="aiml_api_base", name="aiml_api_base",
display_name="AIML API Base", display_name="AI/ML API Base",
advanced=True, advanced=True,
info="The base URL of the OpenAI API. Defaults to https://api.aimlapi.com . " info="The base URL of the API. Defaults to https://api.aimlapi.com . "
"You can change this to use other APIs like JinaChat, LocalAI and Prem.", "You can change this to use other APIs like JinaChat, LocalAI and Prem.",
), ),
SecretStrInput( SecretStrInput(
name="api_key", name="api_key",
display_name="AIML API Key", display_name="AI/ML API Key",
info="The AIML API Key to use for the OpenAI model.", info="The AI/ML API Key to use for the OpenAI model.",
advanced=False, advanced=False,
value="AIML_API_KEY", value="AIML_API_KEY",
required=True, required=True,

View file

@ -6,9 +6,9 @@ from langflow.io import SecretStrInput
class AIMLEmbeddingsComponent(LCEmbeddingsModel): class AIMLEmbeddingsComponent(LCEmbeddingsModel):
display_name = "AI/ML Embeddings" display_name = "AI/ML API Embeddings"
description = "Generate embeddings using the AI/ML API." description = "Generate embeddings using the AI/ML API."
icon = "AI/ML" icon = "AIML"
name = "AIMLEmbeddings" name = "AIMLEmbeddings"
inputs = [ inputs = [

View file

@ -19,7 +19,7 @@ from langflow.schema.dotdict import dotdict
class AnthropicModelComponent(LCModelComponent): class AnthropicModelComponent(LCModelComponent):
display_name = "Anthropic" display_name = "Anthropic"
description = "Generate text using Anthropic Chat&Completion LLMs with prefill support." description = "Generate text using Anthropic's Messages API and models."
icon = "Anthropic" icon = "Anthropic"
name = "AnthropicModel" name = "AnthropicModel"
@ -74,9 +74,6 @@ class AnthropicModelComponent(LCModelComponent):
value=False, value=False,
real_time_refresh=True, real_time_refresh=True,
), ),
MessageTextInput(
name="prefill", display_name="Prefill", info="Prefill text to guide the model's response.", advanced=True
),
] ]
def build_model(self) -> LanguageModel: # type: ignore[type-var] def build_model(self) -> LanguageModel: # type: ignore[type-var]

View file

@ -12,6 +12,7 @@ class AstraVectorizeComponent(Component):
"This component is deprecated. Please use the Astra DB Component directly." "This component is deprecated. Please use the Astra DB Component directly."
) )
documentation: str = "https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html" documentation: str = "https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html"
legacy = True
icon = "AstraDB" icon = "AstraDB"
name = "AstraVectorize" name = "AstraVectorize"

View file

@ -277,7 +277,7 @@ class AstraDBCQLToolComponent(LCToolComponent):
name (str, optional): The name of the tool. name (str, optional): The name of the tool.
Returns: Returns:
Tool: The built AstraDB tool. Tool: The built Astra DB tool.
""" """
schema_dict = self.create_args_schema() schema_dict = self.create_args_schema()
return StructuredTool.from_function( return StructuredTool.from_function(

View file

@ -268,7 +268,7 @@ class AstraDBToolComponent(LCToolComponent):
return tool return tool
def projection_args(self, input_str: str) -> dict | None: def projection_args(self, input_str: str) -> dict | None:
"""Build the projection arguments for the AstraDB query.""" """Build the projection arguments for the Astra DB query."""
elements = input_str.split(",") elements = input_str.split(",")
result = {} result = {}
@ -329,7 +329,7 @@ class AstraDBToolComponent(LCToolComponent):
raise ValueError(msg) raise ValueError(msg)
def build_filter(self, args: dict, filter_settings: list) -> dict: def build_filter(self, args: dict, filter_settings: list) -> dict:
"""Build filter dictionary for AstraDB query. """Build filter dictionary for Astra DB query.
Args: Args:
args: Dictionary of arguments from the tool args: Dictionary of arguments from the tool
@ -370,7 +370,7 @@ class AstraDBToolComponent(LCToolComponent):
return filters return filters
def run_model(self, **args) -> Data | list[Data]: def run_model(self, **args) -> Data | list[Data]:
"""Run the query to get the data from the AstraDB collection.""" """Run the query to get the data from the Astra DB collection."""
collection = self._build_collection() collection = self._build_collection()
sort = {} sort = {}

View file

@ -13,28 +13,28 @@ class CassandraChatMemory(LCChatMemoryComponent):
MessageTextInput( MessageTextInput(
name="database_ref", name="database_ref",
display_name="Contact Points / Astra Database ID", display_name="Contact Points / Astra Database ID",
info="Contact points for the database (or AstraDB database ID)", info="Contact points for the database (or Astra DB database ID)",
required=True, required=True,
), ),
MessageTextInput( MessageTextInput(
name="username", display_name="Username", info="Username for the database (leave empty for AstraDB)." name="username", display_name="Username", info="Username for the database (leave empty for Astra DB)."
), ),
SecretStrInput( SecretStrInput(
name="token", name="token",
display_name="Password / AstraDB Token", display_name="Password / Astra DB Token",
info="User password for the database (or AstraDB token).", info="User password for the database (or Astra DB token).",
required=True, required=True,
), ),
MessageTextInput( MessageTextInput(
name="keyspace", name="keyspace",
display_name="Keyspace", display_name="Keyspace",
info="Table Keyspace (or AstraDB namespace).", info="Table Keyspace (or Astra DB namespace).",
required=True, required=True,
), ),
MessageTextInput( MessageTextInput(
name="table_name", name="table_name",
display_name="Table Name", display_name="Table Name",
info="The name of the table (or AstraDB collection) where vectors will be stored.", info="The name of the table (or Astra DB collection) where vectors will be stored.",
required=True, required=True,
), ),
MessageTextInput( MessageTextInput(

View file

@ -7,20 +7,20 @@ from langflow.template.field.base import Output
class GetEnvVar(Component): class GetEnvVar(Component):
display_name = "Get env var" display_name = "Get Environment Variable"
description = "Get env var" description = "Gets the value of an environment variable from the system."
icon = "AstraDB" icon = "AstraDB"
inputs = [ inputs = [
StrInput( StrInput(
name="env_var_name", name="env_var_name",
display_name="Env var name", display_name="Environment Variable Name",
info="Name of the environment variable to get", info="Name of the environment variable to get",
) )
] ]
outputs = [ outputs = [
Output(display_name="Env var value", name="env_var_value", method="process_inputs"), Output(display_name="Environment Variable Value", name="env_var_value", method="process_inputs"),
] ]
def process_inputs(self) -> Message: def process_inputs(self) -> Message:

View file

@ -6,8 +6,8 @@ from langflow.schema.data import Data
class FirecrawlCrawlApi(Component): class FirecrawlCrawlApi(Component):
display_name: str = "FirecrawlCrawlApi" display_name: str = "Firecrawl Crawl API"
description: str = "Firecrawl Crawl API." description: str = "Crawls a URL and returns the results."
name = "FirecrawlCrawlApi" name = "FirecrawlCrawlApi"
documentation: str = "https://docs.firecrawl.dev/v1/api-reference/endpoint/crawl-post" documentation: str = "https://docs.firecrawl.dev/v1/api-reference/endpoint/crawl-post"

View file

@ -12,8 +12,8 @@ from langflow.schema.data import Data
class FirecrawlExtractApi(Component): class FirecrawlExtractApi(Component):
display_name: str = "FirecrawlExtractApi" display_name: str = "Firecrawl Extract API"
description: str = "Firecrawl Extract API." description: str = "Extracts data from a URL."
name = "FirecrawlExtractApi" name = "FirecrawlExtractApi"
documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/extract" documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/extract"

View file

@ -9,8 +9,8 @@ from langflow.schema.data import Data
class FirecrawlMapApi(Component): class FirecrawlMapApi(Component):
display_name: str = "FirecrawlMapApi" display_name: str = "Firecrawl Map API"
description: str = "Firecrawl Map API." description: str = "Maps a URL and returns the results."
name = "FirecrawlMapApi" name = "FirecrawlMapApi"
documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/map" documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/map"

View file

@ -10,8 +10,8 @@ from langflow.schema.data import Data
class FirecrawlScrapeApi(Component): class FirecrawlScrapeApi(Component):
display_name: str = "FirecrawlScrapeApi" display_name: str = "Firecrawl Scrape API"
description: str = "Firecrawl Scrape API." description: str = "Scrapes a URL and returns the results."
name = "FirecrawlScrapeApi" name = "FirecrawlScrapeApi"
documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/scrape" documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/scrape"

View file

@ -24,7 +24,7 @@ class GoogleGenerativeAIEmbeddingsComponent(Component):
"found in the langchain-google-genai package." "found in the langchain-google-genai package."
) )
documentation: str = "https://python.langchain.com/v0.2/docs/integrations/text_embedding/google_generative_ai/" documentation: str = "https://python.langchain.com/v0.2/docs/integrations/text_embedding/google_generative_ai/"
icon = "Google" icon = "GoogleGenerativeAI"
name = "Google Generative AI Embeddings" name = "Google Generative AI Embeddings"
inputs = [ inputs = [

View file

@ -12,7 +12,7 @@ from langflow.schema.data import Data
class ListHomeAssistantStates(LCToolComponent): class ListHomeAssistantStates(LCToolComponent):
display_name: str = "List HomeAssistant States" display_name: str = "List Home Assistant States"
description: str = ( description: str = (
"Retrieve states from Home Assistant. " "Retrieve states from Home Assistant. "
"The agent only needs to specify 'filter_domain' (optional). " "The agent only needs to specify 'filter_domain' (optional). "

View file

@ -16,7 +16,7 @@ DEFAULT_MODEL = "meta-llama/Llama-3.3-70B-Instruct"
class HuggingFaceEndpointsComponent(LCModelComponent): class HuggingFaceEndpointsComponent(LCModelComponent):
display_name: str = "HuggingFace" display_name: str = "Hugging Face"
description: str = "Generate text using Hugging Face Inference APIs." description: str = "Generate text using Hugging Face Inference APIs."
icon = "HuggingFace" icon = "HuggingFace"
name = "HuggingFaceModel" name = "HuggingFaceModel"
@ -26,7 +26,7 @@ class HuggingFaceEndpointsComponent(LCModelComponent):
DropdownInput( DropdownInput(
name="model_id", name="model_id",
display_name="Model ID", display_name="Model ID",
info="Select a model from HuggingFace Hub", info="Select a model from Hugging Face Hub",
options=[ options=[
DEFAULT_MODEL, DEFAULT_MODEL,
"mistralai/Mixtral-8x7B-Instruct-v0.1", "mistralai/Mixtral-8x7B-Instruct-v0.1",
@ -44,7 +44,7 @@ class HuggingFaceEndpointsComponent(LCModelComponent):
StrInput( StrInput(
name="custom_model", name="custom_model",
display_name="Custom Model ID", display_name="Custom Model ID",
info="Enter a custom model ID from HuggingFace Hub", info="Enter a custom model ID from Hugging Face Hub",
value="", value="",
show=False, show=False,
required=True, required=True,
@ -191,7 +191,7 @@ class HuggingFaceEndpointsComponent(LCModelComponent):
repetition_penalty=repetition_penalty, repetition_penalty=repetition_penalty,
) )
except Exception as e: except Exception as e:
msg = "Could not connect to HuggingFace Endpoints API." msg = "Could not connect to Hugging Face Endpoints API."
raise ValueError(msg) from e raise ValueError(msg) from e
return llm return llm

View file

@ -13,8 +13,8 @@ from langflow.io import MessageTextInput, Output, SecretStrInput
class HuggingFaceInferenceAPIEmbeddingsComponent(LCEmbeddingsModel): class HuggingFaceInferenceAPIEmbeddingsComponent(LCEmbeddingsModel):
display_name = "HuggingFace Embeddings Inference" display_name = "Hugging Face Embeddings Inference"
description = "Generate embeddings using HuggingFace Text Embeddings Inference (TEI)" description = "Generate embeddings using Hugging Face Text Embeddings Inference (TEI)"
documentation = "https://huggingface.co/docs/text-embeddings-inference/index" documentation = "https://huggingface.co/docs/text-embeddings-inference/index"
icon = "HuggingFace" icon = "HuggingFace"
name = "HuggingFaceInferenceAPIEmbeddings" name = "HuggingFaceInferenceAPIEmbeddings"
@ -66,7 +66,7 @@ class HuggingFaceInferenceAPIEmbeddingsComponent(LCEmbeddingsModel):
raise ValueError(msg) from e raise ValueError(msg) from e
if response.status_code != requests.codes.ok: if response.status_code != requests.codes.ok:
msg = f"HuggingFace health check failed: {response.status_code}" msg = f"Hugging Face health check failed: {response.status_code}"
raise ValueError(msg) raise ValueError(msg)
# returning True to solve linting error # returning True to solve linting error
return True return True
@ -102,5 +102,5 @@ class HuggingFaceInferenceAPIEmbeddingsComponent(LCEmbeddingsModel):
try: try:
return self.create_huggingface_embeddings(api_key, api_url, self.model_name) return self.create_huggingface_embeddings(api_key, api_url, self.model_name)
except Exception as e: except Exception as e:
msg = "Could not connect to HuggingFace Inference API." msg = "Could not connect to Hugging Face Inference API."
raise ValueError(msg) from e raise ValueError(msg) from e

View file

@ -8,7 +8,7 @@ from langflow.utils.util import unescape_string
class CharacterTextSplitterComponent(LCTextSplitterComponent): class CharacterTextSplitterComponent(LCTextSplitterComponent):
display_name = "CharacterTextSplitter" display_name = "Character Text Splitter"
description = "Split text by number of characters." description = "Split text by number of characters."
documentation = "https://docs.langflow.org/components/text-splitters#charactertextsplitter" documentation = "https://docs.langflow.org/components/text-splitters#charactertextsplitter"
name = "CharacterTextSplitter" name = "CharacterTextSplitter"

View file

@ -14,7 +14,7 @@ from langflow.template.field.base import Output
class CSVAgentComponent(LCAgentComponent): class CSVAgentComponent(LCAgentComponent):
display_name = "CSVAgent" display_name = "CSV Agent"
description = "Construct a CSV agent from a CSV and tools." description = "Construct a CSV agent from a CSV and tools."
documentation = "https://python.langchain.com/docs/modules/agents/toolkits/csv" documentation = "https://python.langchain.com/docs/modules/agents/toolkits/csv"
name = "CSVAgent" name = "CSVAgent"

View file

@ -7,8 +7,8 @@ from langflow.inputs.inputs import DropdownInput, FloatInput, IntInput, SecretSt
class MaritalkModelComponent(LCModelComponent): class MaritalkModelComponent(LCModelComponent):
display_name = "Maritalk" display_name = "MariTalk"
description = "Generates text using Maritalk LLMs." description = "Generates text using MariTalk LLMs."
icon = "Maritalk" icon = "Maritalk"
name = "Maritalk" name = "Maritalk"
inputs = [ inputs = [
@ -29,8 +29,8 @@ class MaritalkModelComponent(LCModelComponent):
), ),
SecretStrInput( SecretStrInput(
name="api_key", name="api_key",
display_name="Maritalk API Key", display_name="MariTalk API Key",
info="The Maritalk API Key to use for the OpenAI model.", info="The MariTalk API Key to use for authentication.",
advanced=False, advanced=False,
), ),
FloatInput(name="temperature", display_name="Temperature", value=0.1, range_spec=RangeSpec(min=0, max=1)), FloatInput(name="temperature", display_name="Temperature", value=0.1, range_spec=RangeSpec(min=0, max=1)),

View file

@ -8,14 +8,12 @@ from langflow.schema.data import Data
class ScrapeGraphMarkdownifyApi(Component): class ScrapeGraphMarkdownifyApi(Component):
display_name: str = "ScrapeGraphMarkdownifyApi" display_name: str = "ScrapeGraph Markdownify API"
description: str = """ScrapeGraph Markdownify API. description: str = "Given a URL, it will return the markdownified content of the website."
Given a URL, it will return the markdownified content of the website.
More info at https://docs.scrapegraphai.com/services/markdownify"""
name = "ScrapeGraphMarkdownifyApi" name = "ScrapeGraphMarkdownifyApi"
output_types: list[str] = ["Document"] output_types: list[str] = ["Document"]
documentation: str = "https://docs.scrapegraphai.com/introduction" documentation: str = "https://docs.scrapegraphai.com/services/markdownify"
inputs = [ inputs = [
SecretStrInput( SecretStrInput(

View file

@ -8,13 +8,11 @@ from langflow.schema.data import Data
class ScrapeGraphSearchApi(Component): class ScrapeGraphSearchApi(Component):
display_name: str = "ScrapeGraphSearchApi" display_name: str = "ScrapeGraph Search API"
description: str = """ScrapeGraph Search API. description: str = "Given a search prompt, it will return search results using ScrapeGraph's search functionality."
Given a search prompt, it will return search results using ScrapeGraph's search functionality.
More info at https://docs.scrapegraphai.com/services/searchscraper"""
name = "ScrapeGraphSearchApi" name = "ScrapeGraphSearchApi"
documentation: str = "https://docs.scrapegraphai.com/introduction" documentation: str = "https://docs.scrapegraphai.com/services/searchscraper"
icon = "ScrapeGraph" icon = "ScrapeGraph"
inputs = [ inputs = [

View file

@ -8,14 +8,12 @@ from langflow.schema.data import Data
class ScrapeGraphSmartScraperApi(Component): class ScrapeGraphSmartScraperApi(Component):
display_name: str = "ScrapeGraphSmartScraperApi" display_name: str = "ScrapeGraph Smart Scraper API"
description: str = """ScrapeGraph Smart Scraper API. description: str = "Given a URL, it will return the structured data of the website."
Given a URL, it will return the structured data of the website.
More info at https://docs.scrapegraphai.com/services/smartscraper"""
name = "ScrapeGraphSmartScraperApi" name = "ScrapeGraphSmartScraperApi"
output_types: list[str] = ["Document"] output_types: list[str] = ["Document"]
documentation: str = "https://docs.scrapegraphai.com/introduction" documentation: str = "https://docs.scrapegraphai.com/services/smartscraper"
inputs = [ inputs = [
SecretStrInput( SecretStrInput(

View file

@ -10,8 +10,8 @@ from langflow.schema.dataframe import DataFrame
class SearchComponent(Component): class SearchComponent(Component):
display_name: str = "Search API" display_name: str = "SearchApi"
description: str = "Call the searchapi.io API with result limiting" description: str = "Calls the SearchApi API with result limiting. Supports Google, Bing and DuckDuckGo."
documentation: str = "https://www.searchapi.io/docs/google" documentation: str = "https://www.searchapi.io/docs/google"
icon = "SearchAPI" icon = "SearchAPI"

View file

@ -0,0 +1,3 @@
from .google_serper_api_core import GoogleSerperAPICore
__all__ = ["GoogleSerperAPICore"]

View file

@ -0,0 +1,74 @@
from langchain_community.utilities.google_serper import GoogleSerperAPIWrapper
from langflow.custom.custom_component.component import Component
from langflow.io import IntInput, MultilineInput, Output, SecretStrInput
from langflow.schema.dataframe import DataFrame
from langflow.schema.message import Message
class GoogleSerperAPICore(Component):
display_name = "Serper Google Search API"
description = "Calls the Serper.dev Google Search API and fetches the results."
icon = "Serper"
inputs = [
SecretStrInput(
name="serper_api_key",
display_name="Serper API Key",
required=True,
),
MultilineInput(
name="input_value",
display_name="Input",
tool_mode=True,
),
IntInput(
name="k",
display_name="Number of results",
value=4,
required=True,
),
]
outputs = [
Output(
display_name="Results",
name="results",
type_=DataFrame,
method="search_serper",
),
]
def search_serper(self) -> DataFrame:
try:
wrapper = self._build_wrapper()
results = wrapper.results(query=self.input_value)
list_results = results.get("organic", [])
# Convert results to DataFrame using list comprehension
df_data = [
{
"title": result.get("title", ""),
"link": result.get("link", ""),
"snippet": result.get("snippet", ""),
}
for result in list_results
]
return DataFrame(df_data)
except (ValueError, KeyError, ConnectionError) as e:
error_message = f"Error occurred while searching: {e!s}"
self.status = error_message
# Return DataFrame with error as a list of dictionaries
return DataFrame([{"error": error_message}])
def text_search_serper(self) -> Message:
search_results = self.search_serper()
text_result = search_results.to_string(index=False) if not search_results.empty else "No results found."
return Message(text=text_result)
def _build_wrapper(self):
return GoogleSerperAPIWrapper(serper_api_key=self.serper_api_key, k=self.k)
def build(self):
return self.search_serper

View file

@ -49,9 +49,9 @@ class YahooFinanceSchema(BaseModel):
class YfinanceToolComponent(LCToolComponent): class YfinanceToolComponent(LCToolComponent):
display_name = "Yahoo Finance [DEPRECATED]" display_name = "Yahoo! Finance [DEPRECATED]"
description = """Uses [yfinance](https://pypi.org/project/yfinance/) (unofficial package) \ description = """Uses [yfinance](https://pypi.org/project/yfinance/) (unofficial package) \
to access financial data and market information from Yahoo Finance.""" to access financial data and market information from Yahoo! Finance."""
icon = "trending-up" icon = "trending-up"
name = "YahooFinanceTool" name = "YahooFinanceTool"
legacy = True legacy = True
@ -87,7 +87,7 @@ to access financial data and market information from Yahoo Finance."""
def build_tool(self) -> Tool: def build_tool(self) -> Tool:
return StructuredTool.from_function( return StructuredTool.from_function(
name="yahoo_finance", name="yahoo_finance",
description="Access financial data and market information from Yahoo Finance.", description="Access financial data and market information from Yahoo! Finance.",
func=self._yahoo_finance_tool, func=self._yahoo_finance_tool,
args_schema=YahooFinanceSchema, args_schema=YahooFinanceSchema,
) )

View file

@ -7,10 +7,10 @@ from langflow.schema.message import Message
class ConvertAstraToTwelveLabs(Component): class ConvertAstraToTwelveLabs(Component):
"""Convert AstraDB search results to TwelveLabs Pegasus inputs.""" """Convert Astra DB search results to TwelveLabs Pegasus inputs."""
display_name = "Convert AstraDB to Pegasus Input" display_name = "Convert Astra DB to Pegasus Input"
description = "Converts AstraDB search results to inputs compatible with TwelveLabs Pegasus." description = "Converts Astra DB search results to inputs compatible with TwelveLabs Pegasus."
icon = "TwelveLabs" icon = "TwelveLabs"
name = "ConvertAstraToTwelveLabs" name = "ConvertAstraToTwelveLabs"
documentation = "https://github.com/twelvelabs-io/twelvelabs-developer-experience/blob/main/integrations/Langflow/TWELVE_LABS_COMPONENTS_README.md" documentation = "https://github.com/twelvelabs-io/twelvelabs-developer-experience/blob/main/integrations/Langflow/TWELVE_LABS_COMPONENTS_README.md"
@ -18,9 +18,9 @@ class ConvertAstraToTwelveLabs(Component):
inputs = [ inputs = [
HandleInput( HandleInput(
name="astra_results", name="astra_results",
display_name="AstraDB Results", display_name="Astra DB Results",
input_types=["Data"], input_types=["Data"],
info="Search results from AstraDB component", info="Search results from Astra DB component",
required=True, required=True,
is_list=True, is_list=True,
) )
@ -47,7 +47,7 @@ class ConvertAstraToTwelveLabs(Component):
self._index_id = None self._index_id = None
def build(self, **kwargs: Any) -> None: # noqa: ARG002 - Required for parent class compatibility def build(self, **kwargs: Any) -> None: # noqa: ARG002 - Required for parent class compatibility
"""Process the AstraDB results and extract TwelveLabs index information.""" """Process the Astra DB results and extract TwelveLabs index information."""
if not self.astra_results: if not self.astra_results:
return return

View file

@ -13,7 +13,7 @@ from langflow.schema import Data
class TwelveLabsError(Exception): class TwelveLabsError(Exception):
"""Base exception for Twelve Labs errors.""" """Base exception for TwelveLabs errors."""
class IndexCreationError(TwelveLabsError): class IndexCreationError(TwelveLabsError):
@ -29,10 +29,10 @@ class TaskTimeoutError(TwelveLabsError):
class PegasusIndexVideo(Component): class PegasusIndexVideo(Component):
"""Indexes videos using Twelve Labs Pegasus API and adds the video ID to metadata.""" """Indexes videos using TwelveLabs Pegasus API and adds the video ID to metadata."""
display_name = "Twelve Labs Pegasus Index Video" display_name = "TwelveLabs Pegasus Index Video"
description = "Index videos using Twelve Labs and add the video_id to metadata." description = "Index videos using TwelveLabs and add the video_id to metadata."
icon = "TwelveLabs" icon = "TwelveLabs"
name = "TwelveLabsPegasusIndexVideo" name = "TwelveLabsPegasusIndexVideo"
documentation = "https://github.com/twelvelabs-io/twelvelabs-developer-experience/blob/main/integrations/Langflow/TWELVE_LABS_COMPONENTS_README.md" documentation = "https://github.com/twelvelabs-io/twelvelabs-developer-experience/blob/main/integrations/Langflow/TWELVE_LABS_COMPONENTS_README.md"
@ -46,7 +46,7 @@ class PegasusIndexVideo(Component):
required=True, required=True,
), ),
SecretStrInput( SecretStrInput(
name="api_key", display_name="Twelve Labs API Key", info="Enter your Twelve Labs API Key.", required=True name="api_key", display_name="TwelveLabs API Key", info="Enter your TwelveLabs API Key.", required=True
), ),
DropdownInput( DropdownInput(
name="model_name", name="model_name",
@ -215,7 +215,7 @@ class PegasusIndexVideo(Component):
return [] return []
if not self.api_key: if not self.api_key:
error_msg = "Twelve Labs API Key is required" error_msg = "TwelveLabs API Key is required"
raise IndexCreationError(error_msg) raise IndexCreationError(error_msg)
if not (hasattr(self, "index_name") and self.index_name) and not (hasattr(self, "index_id") and self.index_id): if not (hasattr(self, "index_name") and self.index_name) and not (hasattr(self, "index_id") and self.index_id):
@ -230,7 +230,7 @@ class PegasusIndexVideo(Component):
index_id, index_name = self._get_or_create_index(client) index_id, index_name = self._get_or_create_index(client)
self.status = f"Using index: {index_name} (ID: {index_id})" self.status = f"Using index: {index_name} (ID: {index_id})"
except IndexCreationError as e: except IndexCreationError as e:
self.status = f"Failed to get/create Twelve Labs index: {e!s}" self.status = f"Failed to get/create TwelveLabs index: {e!s}"
raise raise
# First, validate all videos and create a list of valid ones # First, validate all videos and create a list of valid ones

View file

@ -34,14 +34,14 @@ class TwelveLabsTextEmbeddings(Embeddings):
class TwelveLabsTextEmbeddingsComponent(LCEmbeddingsModel): class TwelveLabsTextEmbeddingsComponent(LCEmbeddingsModel):
display_name = "Twelve Labs Text Embeddings" display_name = "TwelveLabs Text Embeddings"
description = "Generate embeddings using Twelve Labs text embedding models." description = "Generate embeddings using TwelveLabs text embedding models."
icon = "TwelveLabs" icon = "TwelveLabs"
name = "TwelveLabsTextEmbeddings" name = "TwelveLabsTextEmbeddings"
documentation = "https://github.com/twelvelabs-io/twelvelabs-developer-experience/blob/main/integrations/Langflow/TWELVE_LABS_COMPONENTS_README.md" documentation = "https://github.com/twelvelabs-io/twelvelabs-developer-experience/blob/main/integrations/Langflow/TWELVE_LABS_COMPONENTS_README.md"
inputs = [ inputs = [
SecretStrInput(name="api_key", display_name="Twelve Labs API Key", value="TWELVELABS_API_KEY", required=True), SecretStrInput(name="api_key", display_name="TwelveLabs API Key", value="TWELVELABS_API_KEY", required=True),
DropdownInput( DropdownInput(
name="model", name="model",
display_name="Model", display_name="Model",

View file

@ -35,8 +35,8 @@ class VideoValidationError(Exception):
class TwelveLabsPegasus(Component): class TwelveLabsPegasus(Component):
display_name = "Twelve Labs Pegasus" display_name = "TwelveLabs Pegasus"
description = "Chat with videos using Twelve Labs Pegasus API." description = "Chat with videos using TwelveLabs Pegasus API."
icon = "TwelveLabs" icon = "TwelveLabs"
name = "TwelveLabsPegasus" name = "TwelveLabsPegasus"
documentation = "https://github.com/twelvelabs-io/twelvelabs-developer-experience/blob/main/integrations/Langflow/TWELVE_LABS_COMPONENTS_README.md" documentation = "https://github.com/twelvelabs-io/twelvelabs-developer-experience/blob/main/integrations/Langflow/TWELVE_LABS_COMPONENTS_README.md"
@ -44,7 +44,7 @@ class TwelveLabsPegasus(Component):
inputs = [ inputs = [
DataInput(name="videodata", display_name="Video Data", info="Video Data", is_list=True), DataInput(name="videodata", display_name="Video Data", info="Video Data", is_list=True),
SecretStrInput( SecretStrInput(
name="api_key", display_name="Twelve Labs API Key", info="Enter your Twelve Labs API Key.", required=True name="api_key", display_name="TwelveLabs API Key", info="Enter your TwelveLabs API Key.", required=True
), ),
MessageInput( MessageInput(
name="video_id", name="video_id",
@ -306,7 +306,7 @@ class TwelveLabsPegasus(Component):
def process_video(self) -> Message: def process_video(self) -> Message:
"""Process video using Pegasus and generate response if message is provided. """Process video using Pegasus and generate response if message is provided.
Handles video indexing and question answering using the Twelve Labs API. Handles video indexing and question answering using the TwelveLabs API.
""" """
# Check and initialize inputs # Check and initialize inputs
if hasattr(self, "index_id") and self.index_id: if hasattr(self, "index_id") and self.index_id:

View file

@ -79,8 +79,8 @@ class TwelveLabsVideoEmbeddings(Embeddings):
class TwelveLabsVideoEmbeddingsComponent(LCEmbeddingsModel): class TwelveLabsVideoEmbeddingsComponent(LCEmbeddingsModel):
display_name = "Twelve Labs Video Embeddings" display_name = "TwelveLabs Video Embeddings"
description = "Generate embeddings from videos using Twelve Labs video embedding models." description = "Generate embeddings from videos using TwelveLabs video embedding models."
name = "TwelveLabsVideoEmbeddings" name = "TwelveLabsVideoEmbeddings"
icon = "TwelveLabs" icon = "TwelveLabs"
documentation = "https://github.com/twelvelabs-io/twelvelabs-developer-experience/blob/main/integrations/Langflow/TWELVE_LABS_COMPONENTS_README.md" documentation = "https://github.com/twelvelabs-io/twelvelabs-developer-experience/blob/main/integrations/Langflow/TWELVE_LABS_COMPONENTS_README.md"

View file

@ -24,28 +24,28 @@ class CassandraVectorStoreComponent(LCVectorStoreComponent):
MessageTextInput( MessageTextInput(
name="database_ref", name="database_ref",
display_name="Contact Points / Astra Database ID", display_name="Contact Points / Astra Database ID",
info="Contact points for the database (or AstraDB database ID)", info="Contact points for the database (or Astra DB database ID)",
required=True, required=True,
), ),
MessageTextInput( MessageTextInput(
name="username", display_name="Username", info="Username for the database (leave empty for AstraDB)." name="username", display_name="Username", info="Username for the database (leave empty for Astra DB)."
), ),
SecretStrInput( SecretStrInput(
name="token", name="token",
display_name="Password / AstraDB Token", display_name="Password / Astra DB Token",
info="User password for the database (or AstraDB token).", info="User password for the database (or Astra DB token).",
required=True, required=True,
), ),
MessageTextInput( MessageTextInput(
name="keyspace", name="keyspace",
display_name="Keyspace", display_name="Keyspace",
info="Table Keyspace (or AstraDB namespace).", info="Table Keyspace (or Astra DB namespace).",
required=True, required=True,
), ),
MessageTextInput( MessageTextInput(
name="table_name", name="table_name",
display_name="Table Name", display_name="Table Name",
info="The name of the table (or AstraDB collection) where vectors will be stored.", info="The name of the table (or Astra DB collection) where vectors will be stored.",
required=True, required=True,
), ),
IntInput( IntInput(

View file

@ -25,28 +25,28 @@ class CassandraGraphVectorStoreComponent(LCVectorStoreComponent):
MessageTextInput( MessageTextInput(
name="database_ref", name="database_ref",
display_name="Contact Points / Astra Database ID", display_name="Contact Points / Astra Database ID",
info="Contact points for the database (or AstraDB database ID)", info="Contact points for the database (or Astra DB database ID)",
required=True, required=True,
), ),
MessageTextInput( MessageTextInput(
name="username", display_name="Username", info="Username for the database (leave empty for AstraDB)." name="username", display_name="Username", info="Username for the database (leave empty for Astra DB)."
), ),
SecretStrInput( SecretStrInput(
name="token", name="token",
display_name="Password / AstraDB Token", display_name="Password / Astra DB Token",
info="User password for the database (or AstraDB token).", info="User password for the database (or Astra DB token).",
required=True, required=True,
), ),
MessageTextInput( MessageTextInput(
name="keyspace", name="keyspace",
display_name="Keyspace", display_name="Keyspace",
info="Table Keyspace (or AstraDB namespace).", info="Table Keyspace (or Astra DB namespace).",
required=True, required=True,
), ),
MessageTextInput( MessageTextInput(
name="table_name", name="table_name",
display_name="Table Name", display_name="Table Name",
info="The name of the table (or AstraDB collection) where vectors will be stored.", info="The name of the table (or Astra DB collection) where vectors will be stored.",
required=True, required=True,
), ),
DropdownInput( DropdownInput(

View file

@ -4,8 +4,8 @@ from langflow.io import BoolInput, FileInput, FloatInput, IntInput, MessageTextI
class VertexAIEmbeddingsComponent(LCModelComponent): class VertexAIEmbeddingsComponent(LCModelComponent):
display_name = "VertexAI Embeddings" display_name = "Vertex AI Embeddings"
description = "Generate embeddings using Google Cloud VertexAI models." description = "Generate embeddings using Google Cloud Vertex AI models."
icon = "VertexAI" icon = "VertexAI"
name = "VertexAIEmbeddings" name = "VertexAIEmbeddings"

View file

@ -10,7 +10,7 @@ from langflow.schema.dataframe import DataFrame
class WolframAlphaAPIComponent(LCToolComponent): class WolframAlphaAPIComponent(LCToolComponent):
display_name = "WolframAlpha API" display_name = "WolframAlpha API"
description = """Enables queries to Wolfram Alpha for computational data, facts, and calculations across various \ description = """Enables queries to WolframAlpha for computational data, facts, and calculations across various \
topics, delivering structured responses.""" topics, delivering structured responses."""
name = "WolframAlphaAPI" name = "WolframAlphaAPI"
@ -45,7 +45,7 @@ topics, delivering structured responses."""
return data return data
def fetch_content_dataframe(self) -> DataFrame: def fetch_content_dataframe(self) -> DataFrame:
"""Convert the Wolfram Alpha results to a DataFrame. """Convert the WolframAlpha results to a DataFrame.
Returns: Returns:
DataFrame: A DataFrame containing the query results. DataFrame: A DataFrame containing the query results.

View file

@ -49,9 +49,9 @@ class YahooFinanceSchema(BaseModel):
class YfinanceComponent(Component): class YfinanceComponent(Component):
display_name = "Yahoo Finance" display_name = "Yahoo! Finance"
description = """Uses [yfinance](https://pypi.org/project/yfinance/) (unofficial package) \ description = """Uses [yfinance](https://pypi.org/project/yfinance/) (unofficial package) \
to access financial data and market information from Yahoo Finance.""" to access financial data and market information from Yahoo! Finance."""
icon = "trending-up" icon = "trending-up"
inputs = [ inputs = [

View file

@ -8,7 +8,7 @@ from langflow.template.field.base import Output
class YouTubePlaylistComponent(Component): class YouTubePlaylistComponent(Component):
display_name = "Youtube Playlist" display_name = "YouTube Playlist"
description = "Extracts all video URLs from a YouTube playlist." description = "Extracts all video URLs from a YouTube playlist."
icon = "YouTube" # Replace with a suitable icon icon = "YouTube" # Replace with a suitable icon

View file

@ -90,7 +90,7 @@
"beta": false, "beta": false,
"conditional_paths": [], "conditional_paths": [],
"custom_fields": {}, "custom_fields": {},
"description": "ScrapeGraph Search API.\n Given a search prompt, it will return search results using ScrapeGraph's search functionality.\n More info at https://docs.scrapegraphai.com/services/searchscraper", "description": "Given a search prompt, it will return search results using ScrapeGraph's search functionality.",
"display_name": "ScrapeGraphSearchApi", "display_name": "ScrapeGraphSearchApi",
"documentation": "https://docs.scrapegraphai.com/introduction", "documentation": "https://docs.scrapegraphai.com/introduction",
"edited": false, "edited": false,
@ -103,7 +103,7 @@
"legacy": false, "legacy": false,
"lf_version": "1.1.5", "lf_version": "1.1.5",
"metadata": { "metadata": {
"code_hash": "cdea312e9de9", "code_hash": "99b8b89dc4ca",
"module": "langflow.components.scrapegraph.scrapegraph_search_api.ScrapeGraphSearchApi" "module": "langflow.components.scrapegraph.scrapegraph_search_api.ScrapeGraphSearchApi"
}, },
"minimized": false, "minimized": false,
@ -163,7 +163,7 @@
"show": true, "show": true,
"title_case": false, "title_case": false,
"type": "code", "type": "code",
"value": "from langflow.custom.custom_component.component import Component\nfrom langflow.io import (\n MessageTextInput,\n Output,\n SecretStrInput,\n)\nfrom langflow.schema.data import Data\n\n\nclass ScrapeGraphSearchApi(Component):\n display_name: str = \"ScrapeGraphSearchApi\"\n description: str = \"\"\"ScrapeGraph Search API.\n Given a search prompt, it will return search results using ScrapeGraph's search functionality.\n More info at https://docs.scrapegraphai.com/services/searchscraper\"\"\"\n name = \"ScrapeGraphSearchApi\"\n\n documentation: str = \"https://docs.scrapegraphai.com/introduction\"\n icon = \"ScrapeGraph\"\n\n inputs = [\n SecretStrInput(\n name=\"api_key\",\n display_name=\"ScrapeGraph API Key\",\n required=True,\n password=True,\n info=\"The API key to use ScrapeGraph API.\",\n ),\n MessageTextInput(\n name=\"user_prompt\",\n display_name=\"Search Prompt\",\n tool_mode=True,\n info=\"The search prompt to use.\",\n ),\n ]\n\n outputs = [\n Output(display_name=\"Data\", name=\"data\", method=\"search\"),\n ]\n\n def search(self) -> list[Data]:\n try:\n from scrapegraph_py import Client\n from scrapegraph_py.logger import sgai_logger\n except ImportError as e:\n msg = \"Could not import scrapegraph-py package. Please install it with `pip install scrapegraph-py`.\"\n raise ImportError(msg) from e\n\n # Set logging level\n sgai_logger.set_logging(level=\"INFO\")\n\n # Initialize the client with API key\n sgai_client = Client(api_key=self.api_key)\n\n try:\n # SearchScraper request\n response = sgai_client.searchscraper(\n user_prompt=self.user_prompt,\n )\n\n # Close the client\n sgai_client.close()\n\n return Data(data=response)\n except Exception:\n sgai_client.close()\n raise\n" "value": "from langflow.custom.custom_component.component import Component\nfrom langflow.io import (\n MessageTextInput,\n Output,\n SecretStrInput,\n)\nfrom langflow.schema.data import Data\n\n\nclass ScrapeGraphSearchApi(Component):\n display_name: str = \"ScrapeGraph Search API\"\n description: str = \"Given a search prompt, it will return search results using ScrapeGraph's search functionality.\"\n name = \"ScrapeGraphSearchApi\"\n\n documentation: str = \"https://docs.scrapegraphai.com/services/searchscraper\"\n icon = \"ScrapeGraph\"\n\n inputs = [\n SecretStrInput(\n name=\"api_key\",\n display_name=\"ScrapeGraph API Key\",\n required=True,\n password=True,\n info=\"The API key to use ScrapeGraph API.\",\n ),\n MessageTextInput(\n name=\"user_prompt\",\n display_name=\"Search Prompt\",\n tool_mode=True,\n info=\"The search prompt to use.\",\n ),\n ]\n\n outputs = [\n Output(display_name=\"Data\", name=\"data\", method=\"search\"),\n ]\n\n def search(self) -> list[Data]:\n try:\n from scrapegraph_py import Client\n from scrapegraph_py.logger import sgai_logger\n except ImportError as e:\n msg = \"Could not import scrapegraph-py package. Please install it with `pip install scrapegraph-py`.\"\n raise ImportError(msg) from e\n\n # Set logging level\n sgai_logger.set_logging(level=\"INFO\")\n\n # Initialize the client with API key\n sgai_client = Client(api_key=self.api_key)\n\n try:\n # SearchScraper request\n response = sgai_client.searchscraper(\n user_prompt=self.user_prompt,\n )\n\n # Close the client\n sgai_client.close()\n\n return Data(data=response)\n except Exception:\n sgai_client.close()\n raise\n"
}, },
"tools_metadata": { "tools_metadata": {
"_input_type": "ToolsInput", "_input_type": "ToolsInput",

File diff suppressed because one or more lines are too long

View file

@ -1417,7 +1417,7 @@
"beta": false, "beta": false,
"conditional_paths": [], "conditional_paths": [],
"custom_fields": {}, "custom_fields": {},
"description": "Call the searchapi.io API with result limiting", "description": "Calls the SearchApi API with result limiting. Supports Google, Bing and DuckDuckGo.",
"display_name": "Search API", "display_name": "Search API",
"documentation": "https://www.searchapi.io/docs/google", "documentation": "https://www.searchapi.io/docs/google",
"edited": false, "edited": false,
@ -1434,7 +1434,7 @@
"legacy": false, "legacy": false,
"lf_version": "1.2.0", "lf_version": "1.2.0",
"metadata": { "metadata": {
"code_hash": "727befdc79e7", "code_hash": "c561e416205b",
"module": "langflow.components.searchapi.search.SearchComponent" "module": "langflow.components.searchapi.search.SearchComponent"
}, },
"minimized": false, "minimized": false,
@ -1494,7 +1494,7 @@
"show": true, "show": true,
"title_case": false, "title_case": false,
"type": "code", "type": "code",
"value": "from typing import Any\n\nfrom langchain_community.utilities.searchapi import SearchApiAPIWrapper\n\nfrom langflow.custom.custom_component.component import Component\nfrom langflow.inputs.inputs import DictInput, DropdownInput, IntInput, MultilineInput, SecretStrInput\nfrom langflow.io import Output\nfrom langflow.schema.data import Data\nfrom langflow.schema.dataframe import DataFrame\n\n\nclass SearchComponent(Component):\n display_name: str = \"Search API\"\n description: str = \"Call the searchapi.io API with result limiting\"\n documentation: str = \"https://www.searchapi.io/docs/google\"\n icon = \"SearchAPI\"\n\n inputs = [\n DropdownInput(name=\"engine\", display_name=\"Engine\", value=\"google\", options=[\"google\", \"bing\", \"duckduckgo\"]),\n SecretStrInput(name=\"api_key\", display_name=\"SearchAPI API Key\", required=True),\n MultilineInput(\n name=\"input_value\",\n display_name=\"Input\",\n tool_mode=True,\n ),\n DictInput(name=\"search_params\", display_name=\"Search parameters\", advanced=True, is_list=True),\n IntInput(name=\"max_results\", display_name=\"Max Results\", value=5, advanced=True),\n IntInput(name=\"max_snippet_length\", display_name=\"Max Snippet Length\", value=100, advanced=True),\n ]\n\n outputs = [\n Output(display_name=\"DataFrame\", name=\"dataframe\", method=\"fetch_content_dataframe\"),\n ]\n\n def _build_wrapper(self):\n return SearchApiAPIWrapper(engine=self.engine, searchapi_api_key=self.api_key)\n\n def run_model(self) -> DataFrame:\n return self.fetch_content_dataframe()\n\n def fetch_content(self) -> list[Data]:\n wrapper = self._build_wrapper()\n\n def search_func(\n query: str, params: dict[str, Any] | None = None, max_results: int = 5, max_snippet_length: int = 100\n ) -> list[Data]:\n params = params or {}\n full_results = wrapper.results(query=query, **params)\n organic_results = full_results.get(\"organic_results\", [])[:max_results]\n\n return [\n Data(\n text=result.get(\"snippet\", \"\"),\n data={\n \"title\": result.get(\"title\", \"\")[:max_snippet_length],\n \"link\": result.get(\"link\", \"\"),\n \"snippet\": result.get(\"snippet\", \"\")[:max_snippet_length],\n },\n )\n for result in organic_results\n ]\n\n results = search_func(\n self.input_value,\n self.search_params or {},\n self.max_results,\n self.max_snippet_length,\n )\n self.status = results\n return results\n\n def fetch_content_dataframe(self) -> DataFrame:\n \"\"\"Convert the search results to a DataFrame.\n\n Returns:\n DataFrame: A DataFrame containing the search results.\n \"\"\"\n data = self.fetch_content()\n return DataFrame(data)\n" "value": "from typing import Any\n\nfrom langchain_community.utilities.searchapi import SearchApiAPIWrapper\n\nfrom langflow.custom.custom_component.component import Component\nfrom langflow.inputs.inputs import DictInput, DropdownInput, IntInput, MultilineInput, SecretStrInput\nfrom langflow.io import Output\nfrom langflow.schema.data import Data\nfrom langflow.schema.dataframe import DataFrame\n\n\nclass SearchComponent(Component):\n display_name: str = \"SearchApi\"\n description: str = \"Calls the SearchApi API with result limiting. Supports Google, Bing and DuckDuckGo.\"\n documentation: str = \"https://www.searchapi.io/docs/google\"\n icon = \"SearchAPI\"\n\n inputs = [\n DropdownInput(name=\"engine\", display_name=\"Engine\", value=\"google\", options=[\"google\", \"bing\", \"duckduckgo\"]),\n SecretStrInput(name=\"api_key\", display_name=\"SearchAPI API Key\", required=True),\n MultilineInput(\n name=\"input_value\",\n display_name=\"Input\",\n tool_mode=True,\n ),\n DictInput(name=\"search_params\", display_name=\"Search parameters\", advanced=True, is_list=True),\n IntInput(name=\"max_results\", display_name=\"Max Results\", value=5, advanced=True),\n IntInput(name=\"max_snippet_length\", display_name=\"Max Snippet Length\", value=100, advanced=True),\n ]\n\n outputs = [\n Output(display_name=\"DataFrame\", name=\"dataframe\", method=\"fetch_content_dataframe\"),\n ]\n\n def _build_wrapper(self):\n return SearchApiAPIWrapper(engine=self.engine, searchapi_api_key=self.api_key)\n\n def run_model(self) -> DataFrame:\n return self.fetch_content_dataframe()\n\n def fetch_content(self) -> list[Data]:\n wrapper = self._build_wrapper()\n\n def search_func(\n query: str, params: dict[str, Any] | None = None, max_results: int = 5, max_snippet_length: int = 100\n ) -> list[Data]:\n params = params or {}\n full_results = wrapper.results(query=query, **params)\n organic_results = full_results.get(\"organic_results\", [])[:max_results]\n\n return [\n Data(\n text=result.get(\"snippet\", \"\"),\n data={\n \"title\": result.get(\"title\", \"\")[:max_snippet_length],\n \"link\": result.get(\"link\", \"\"),\n \"snippet\": result.get(\"snippet\", \"\")[:max_snippet_length],\n },\n )\n for result in organic_results\n ]\n\n results = search_func(\n self.input_value,\n self.search_params or {},\n self.max_results,\n self.max_snippet_length,\n )\n self.status = results\n return results\n\n def fetch_content_dataframe(self) -> DataFrame:\n \"\"\"Convert the search results to a DataFrame.\n\n Returns:\n DataFrame: A DataFrame containing the search results.\n \"\"\"\n data = self.fetch_content()\n return DataFrame(data)\n"
}, },
"engine": { "engine": {
"_input_type": "DropdownInput", "_input_type": "DropdownInput",

View file

@ -9,16 +9,12 @@
"dataType": "YouTubeCommentsComponent", "dataType": "YouTubeCommentsComponent",
"id": "YouTubeCommentsComponent-y3wJZ", "id": "YouTubeCommentsComponent-y3wJZ",
"name": "comments", "name": "comments",
"output_types": [ "output_types": ["DataFrame"]
"DataFrame"
]
}, },
"targetHandle": { "targetHandle": {
"fieldName": "df", "fieldName": "df",
"id": "BatchRunComponent-30WdR", "id": "BatchRunComponent-30WdR",
"inputTypes": [ "inputTypes": ["DataFrame"],
"DataFrame"
],
"type": "other" "type": "other"
} }
}, },
@ -37,16 +33,12 @@
"dataType": "Prompt", "dataType": "Prompt",
"id": "Prompt-yqoLt", "id": "Prompt-yqoLt",
"name": "prompt", "name": "prompt",
"output_types": [ "output_types": ["Message"]
"Message"
]
}, },
"targetHandle": { "targetHandle": {
"fieldName": "input_value", "fieldName": "input_value",
"id": "Agent-JRSRu", "id": "Agent-JRSRu",
"inputTypes": [ "inputTypes": ["Message"],
"Message"
],
"type": "str" "type": "str"
} }
}, },
@ -65,18 +57,12 @@
"dataType": "Agent", "dataType": "Agent",
"id": "Agent-JRSRu", "id": "Agent-JRSRu",
"name": "response", "name": "response",
"output_types": [ "output_types": ["Message"]
"Message"
]
}, },
"targetHandle": { "targetHandle": {
"fieldName": "input_value", "fieldName": "input_value",
"id": "ChatOutput-vlskP", "id": "ChatOutput-vlskP",
"inputTypes": [ "inputTypes": ["Data", "DataFrame", "Message"],
"Data",
"DataFrame",
"Message"
],
"type": "str" "type": "str"
} }
}, },
@ -95,16 +81,12 @@
"dataType": "YouTubeTranscripts", "dataType": "YouTubeTranscripts",
"id": "YouTubeTranscripts-TlFcG", "id": "YouTubeTranscripts-TlFcG",
"name": "component_as_tool", "name": "component_as_tool",
"output_types": [ "output_types": ["Tool"]
"Tool"
]
}, },
"targetHandle": { "targetHandle": {
"fieldName": "tools", "fieldName": "tools",
"id": "Agent-JRSRu", "id": "Agent-JRSRu",
"inputTypes": [ "inputTypes": ["Tool"],
"Tool"
],
"type": "other" "type": "other"
} }
}, },
@ -123,17 +105,12 @@
"dataType": "BatchRunComponent", "dataType": "BatchRunComponent",
"id": "BatchRunComponent-30WdR", "id": "BatchRunComponent-30WdR",
"name": "batch_results", "name": "batch_results",
"output_types": [ "output_types": ["DataFrame"]
"DataFrame"
]
}, },
"targetHandle": { "targetHandle": {
"fieldName": "input_data", "fieldName": "input_data",
"id": "parser-k0Bpy", "id": "parser-k0Bpy",
"inputTypes": [ "inputTypes": ["DataFrame", "Data"],
"DataFrame",
"Data"
],
"type": "other" "type": "other"
} }
}, },
@ -152,16 +129,12 @@
"dataType": "parser", "dataType": "parser",
"id": "parser-k0Bpy", "id": "parser-k0Bpy",
"name": "parsed_text", "name": "parsed_text",
"output_types": [ "output_types": ["Message"]
"Message"
]
}, },
"targetHandle": { "targetHandle": {
"fieldName": "analysis", "fieldName": "analysis",
"id": "Prompt-yqoLt", "id": "Prompt-yqoLt",
"inputTypes": [ "inputTypes": ["Message"],
"Message"
],
"type": "str" "type": "str"
} }
}, },
@ -180,16 +153,12 @@
"dataType": "LanguageModelComponent", "dataType": "LanguageModelComponent",
"id": "LanguageModelComponent-OvIt5", "id": "LanguageModelComponent-OvIt5",
"name": "model_output", "name": "model_output",
"output_types": [ "output_types": ["LanguageModel"]
"LanguageModel"
]
}, },
"targetHandle": { "targetHandle": {
"fieldName": "model", "fieldName": "model",
"id": "BatchRunComponent-30WdR", "id": "BatchRunComponent-30WdR",
"inputTypes": [ "inputTypes": ["LanguageModel"],
"LanguageModel"
],
"type": "other" "type": "other"
} }
}, },
@ -208,16 +177,12 @@
"dataType": "ChatInput", "dataType": "ChatInput",
"id": "ChatInput-kaWcL", "id": "ChatInput-kaWcL",
"name": "message", "name": "message",
"output_types": [ "output_types": ["Message"]
"Message"
]
}, },
"targetHandle": { "targetHandle": {
"fieldName": "video_url", "fieldName": "video_url",
"id": "YouTubeCommentsComponent-y3wJZ", "id": "YouTubeCommentsComponent-y3wJZ",
"inputTypes": [ "inputTypes": ["Message"],
"Message"
],
"type": "str" "type": "str"
} }
}, },
@ -236,16 +201,12 @@
"dataType": "ChatInput", "dataType": "ChatInput",
"id": "ChatInput-kaWcL", "id": "ChatInput-kaWcL",
"name": "message", "name": "message",
"output_types": [ "output_types": ["Message"]
"Message"
]
}, },
"targetHandle": { "targetHandle": {
"fieldName": "url", "fieldName": "url",
"id": "Prompt-yqoLt", "id": "Prompt-yqoLt",
"inputTypes": [ "inputTypes": ["Message"],
"Message"
],
"type": "str" "type": "str"
} }
}, },
@ -262,9 +223,7 @@
"data": { "data": {
"id": "BatchRunComponent-30WdR", "id": "BatchRunComponent-30WdR",
"node": { "node": {
"base_classes": [ "base_classes": ["DataFrame"],
"DataFrame"
],
"beta": false, "beta": false,
"category": "helpers", "category": "helpers",
"conditional_paths": [], "conditional_paths": [],
@ -273,12 +232,7 @@
"display_name": "Batch Run", "display_name": "Batch Run",
"documentation": "", "documentation": "",
"edited": false, "edited": false,
"field_order": [ "field_order": ["model", "system_message", "df", "column_name"],
"model",
"system_message",
"df",
"column_name"
],
"frozen": false, "frozen": false,
"icon": "List", "icon": "List",
"key": "BatchRunComponent", "key": "BatchRunComponent",
@ -300,9 +254,7 @@
"name": "batch_results", "name": "batch_results",
"selected": "DataFrame", "selected": "DataFrame",
"tool_mode": true, "tool_mode": true,
"types": [ "types": ["DataFrame"],
"DataFrame"
],
"value": "__UNDEFINED__" "value": "__UNDEFINED__"
} }
], ],
@ -353,9 +305,7 @@
"display_name": "DataFrame", "display_name": "DataFrame",
"dynamic": false, "dynamic": false,
"info": "The DataFrame whose column (specified by 'column_name') we'll treat as text messages.", "info": "The DataFrame whose column (specified by 'column_name') we'll treat as text messages.",
"input_types": [ "input_types": ["DataFrame"],
"DataFrame"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"name": "df", "name": "df",
@ -393,9 +343,7 @@
"display_name": "Language Model", "display_name": "Language Model",
"dynamic": false, "dynamic": false,
"info": "Connect the 'Language Model' output from your LLM component here.", "info": "Connect the 'Language Model' output from your LLM component here.",
"input_types": [ "input_types": ["LanguageModel"],
"LanguageModel"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"name": "model", "name": "model",
@ -413,9 +361,7 @@
"display_name": "Output Column Name", "display_name": "Output Column Name",
"dynamic": false, "dynamic": false,
"info": "Name of the column where the model's response will be stored.", "info": "Name of the column where the model's response will be stored.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -436,9 +382,7 @@
"display_name": "Instructions", "display_name": "Instructions",
"dynamic": false, "dynamic": false,
"info": "Multi-line system instruction for all rows in the DataFrame.", "info": "Multi-line system instruction for all rows in the DataFrame.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -478,9 +422,7 @@
"data": { "data": {
"id": "YouTubeCommentsComponent-y3wJZ", "id": "YouTubeCommentsComponent-y3wJZ",
"node": { "node": {
"base_classes": [ "base_classes": ["DataFrame"],
"DataFrame"
],
"beta": false, "beta": false,
"category": "youtube", "category": "youtube",
"conditional_paths": [], "conditional_paths": [],
@ -518,9 +460,7 @@
"name": "comments", "name": "comments",
"selected": "DataFrame", "selected": "DataFrame",
"tool_mode": true, "tool_mode": true,
"types": [ "types": ["DataFrame"],
"DataFrame"
],
"value": "__UNDEFINED__" "value": "__UNDEFINED__"
} }
], ],
@ -626,10 +566,7 @@
"dynamic": false, "dynamic": false,
"info": "Sort comments by time or relevance.", "info": "Sort comments by time or relevance.",
"name": "sort_by", "name": "sort_by",
"options": [ "options": ["time", "relevance"],
"time",
"relevance"
],
"options_metadata": [], "options_metadata": [],
"placeholder": "", "placeholder": "",
"required": false, "required": false,
@ -646,9 +583,7 @@
"display_name": "Video URL", "display_name": "Video URL",
"dynamic": false, "dynamic": false,
"info": "The URL of the YouTube video to get comments from.", "info": "The URL of the YouTube video to get comments from.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -687,9 +622,7 @@
"data": { "data": {
"id": "Agent-JRSRu", "id": "Agent-JRSRu",
"node": { "node": {
"base_classes": [ "base_classes": ["Message"],
"Message"
],
"beta": false, "beta": false,
"conditional_paths": [], "conditional_paths": [],
"custom_fields": {}, "custom_fields": {},
@ -740,9 +673,7 @@
"required_inputs": null, "required_inputs": null,
"selected": "Message", "selected": "Message",
"tool_mode": true, "tool_mode": true,
"types": [ "types": ["Message"],
"Message"
],
"value": "__UNDEFINED__" "value": "__UNDEFINED__"
} }
], ],
@ -774,9 +705,7 @@
"display_name": "Agent Description [Deprecated]", "display_name": "Agent Description [Deprecated]",
"dynamic": false, "dynamic": false,
"info": "The description of the agent. This is only used when in Tool Mode. Defaults to 'A helpful assistant with access to the following tools:' and tools are added dynamically. This feature is deprecated and will be removed in future versions.", "info": "The description of the agent. This is only used when in Tool Mode. Defaults to 'A helpful assistant with access to the following tools:' and tools are added dynamically. This feature is deprecated and will be removed in future versions.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -897,9 +826,7 @@
"display_name": "Input", "display_name": "Input",
"dynamic": false, "dynamic": false,
"info": "The input provided by the user for the agent to process.", "info": "The input provided by the user for the agent to process.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -1107,9 +1034,7 @@
"display_name": "Agent Instructions", "display_name": "Agent Instructions",
"dynamic": false, "dynamic": false,
"info": "System Prompt: Initial instructions and context provided to guide the agent's behavior.", "info": "System Prompt: Initial instructions and context provided to guide the agent's behavior.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -1177,9 +1102,7 @@
"display_name": "Tools", "display_name": "Tools",
"dynamic": false, "dynamic": false,
"info": "These are the tools that the agent can use to help with tasks.", "info": "These are the tools that the agent can use to help with tasks.",
"input_types": [ "input_types": ["Tool"],
"Tool"
],
"list": true, "list": true,
"list_add_label": "Add More", "list_add_label": "Add More",
"name": "tools", "name": "tools",
@ -1233,26 +1156,18 @@
"data": { "data": {
"id": "Prompt-yqoLt", "id": "Prompt-yqoLt",
"node": { "node": {
"base_classes": [ "base_classes": ["Message"],
"Message"
],
"beta": false, "beta": false,
"conditional_paths": [], "conditional_paths": [],
"custom_fields": { "custom_fields": {
"template": [ "template": ["url", "analysis"]
"url",
"analysis"
]
}, },
"description": "Create a prompt template with dynamic variables.", "description": "Create a prompt template with dynamic variables.",
"display_name": "Prompt", "display_name": "Prompt",
"documentation": "", "documentation": "",
"edited": false, "edited": false,
"error": null, "error": null,
"field_order": [ "field_order": ["template", "tool_placeholder"],
"template",
"tool_placeholder"
],
"frozen": false, "frozen": false,
"full_path": null, "full_path": null,
"icon": "braces", "icon": "braces",
@ -1275,9 +1190,7 @@
"name": "prompt", "name": "prompt",
"selected": "Message", "selected": "Message",
"tool_mode": true, "tool_mode": true,
"types": [ "types": ["Message"],
"Message"
],
"value": "__UNDEFINED__" "value": "__UNDEFINED__"
} }
], ],
@ -1292,9 +1205,7 @@
"fileTypes": [], "fileTypes": [],
"file_path": "", "file_path": "",
"info": "", "info": "",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"load_from_db": false, "load_from_db": false,
"multiline": true, "multiline": true,
@ -1348,9 +1259,7 @@
"display_name": "Tool Placeholder", "display_name": "Tool Placeholder",
"dynamic": false, "dynamic": false,
"info": "A placeholder input for tool mode.", "info": "A placeholder input for tool mode.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -1373,9 +1282,7 @@
"fileTypes": [], "fileTypes": [],
"file_path": "", "file_path": "",
"info": "", "info": "",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"load_from_db": false, "load_from_db": false,
"multiline": true, "multiline": true,
@ -1411,9 +1318,7 @@
"data": { "data": {
"id": "ChatOutput-vlskP", "id": "ChatOutput-vlskP",
"node": { "node": {
"base_classes": [ "base_classes": ["Message"],
"Message"
],
"beta": false, "beta": false,
"category": "outputs", "category": "outputs",
"conditional_paths": [], "conditional_paths": [],
@ -1454,9 +1359,7 @@
"name": "message", "name": "message",
"selected": "Message", "selected": "Message",
"tool_mode": true, "tool_mode": true,
"types": [ "types": ["Message"],
"Message"
],
"value": "__UNDEFINED__" "value": "__UNDEFINED__"
} }
], ],
@ -1470,9 +1373,7 @@
"display_name": "Background Color", "display_name": "Background Color",
"dynamic": false, "dynamic": false,
"info": "The background color of the icon.", "info": "The background color of the icon.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -1493,9 +1394,7 @@
"display_name": "Icon", "display_name": "Icon",
"dynamic": false, "dynamic": false,
"info": "The icon of the message.", "info": "The icon of the message.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -1552,9 +1451,7 @@
"display_name": "Data Template", "display_name": "Data Template",
"dynamic": false, "dynamic": false,
"info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.", "info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -1575,11 +1472,7 @@
"display_name": "Inputs", "display_name": "Inputs",
"dynamic": false, "dynamic": false,
"info": "Message to be passed as output.", "info": "Message to be passed as output.",
"input_types": [ "input_types": ["Data", "DataFrame", "Message"],
"Data",
"DataFrame",
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -1603,10 +1496,7 @@
"dynamic": false, "dynamic": false,
"info": "Type of sender.", "info": "Type of sender.",
"name": "sender", "name": "sender",
"options": [ "options": ["Machine", "User"],
"Machine",
"User"
],
"options_metadata": [], "options_metadata": [],
"placeholder": "", "placeholder": "",
"required": false, "required": false,
@ -1623,9 +1513,7 @@
"display_name": "Sender Name", "display_name": "Sender Name",
"dynamic": false, "dynamic": false,
"info": "Name of the sender.", "info": "Name of the sender.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -1646,9 +1534,7 @@
"display_name": "Session ID", "display_name": "Session ID",
"dynamic": false, "dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.", "info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -1687,9 +1573,7 @@
"display_name": "Text Color", "display_name": "Text Color",
"dynamic": false, "dynamic": false,
"info": "The text color of the name", "info": "The text color of the name",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -1727,11 +1611,7 @@
"data": { "data": {
"id": "YouTubeTranscripts-TlFcG", "id": "YouTubeTranscripts-TlFcG",
"node": { "node": {
"base_classes": [ "base_classes": ["Data", "DataFrame", "Message"],
"Data",
"DataFrame",
"Message"
],
"beta": false, "beta": false,
"conditional_paths": [], "conditional_paths": [],
"custom_fields": {}, "custom_fields": {},
@ -1739,11 +1619,7 @@
"display_name": "YouTube Transcripts", "display_name": "YouTube Transcripts",
"documentation": "", "documentation": "",
"edited": false, "edited": false,
"field_order": [ "field_order": ["url", "chunk_size_seconds", "translation"],
"url",
"chunk_size_seconds",
"translation"
],
"frozen": false, "frozen": false,
"icon": "YouTube", "icon": "YouTube",
"last_updated": "2025-07-07T14:52:15.000Z", "last_updated": "2025-07-07T14:52:15.000Z",
@ -1768,9 +1644,7 @@
"required_inputs": null, "required_inputs": null,
"selected": "Tool", "selected": "Tool",
"tool_mode": true, "tool_mode": true,
"types": [ "types": ["Tool"],
"Tool"
],
"value": "__UNDEFINED__" "value": "__UNDEFINED__"
} }
], ],
@ -1845,9 +1719,7 @@
"name": "get_dataframe_output", "name": "get_dataframe_output",
"readonly": false, "readonly": false,
"status": true, "status": true,
"tags": [ "tags": ["get_dataframe_output"]
"get_dataframe_output"
]
}, },
{ {
"args": { "args": {
@ -1863,9 +1735,7 @@
"name": "get_message_output", "name": "get_message_output",
"readonly": false, "readonly": false,
"status": true, "status": true,
"tags": [ "tags": ["get_message_output"]
"get_message_output"
]
}, },
{ {
"args": { "args": {
@ -1881,9 +1751,7 @@
"name": "get_data_output", "name": "get_data_output",
"readonly": false, "readonly": false,
"status": true, "status": true,
"tags": [ "tags": ["get_data_output"]
"get_data_output"
]
} }
] ]
}, },
@ -1927,9 +1795,7 @@
"display_name": "Video URL", "display_name": "Video URL",
"dynamic": false, "dynamic": false,
"info": "Enter the YouTube video URL to get transcripts from.", "info": "Enter the YouTube video URL to get transcripts from.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -1969,7 +1835,7 @@
"data": { "data": {
"id": "note-eKoWw", "id": "note-eKoWw",
"node": { "node": {
"description": "# 📖 README\nThis flow performs comprehensive analysis of YouTube videos.\n1. Extract video comments and transcripts.\n2. Run sentiment analysis on comments using LLM.\n3. Combine transcript content and comment sentiment for comprehensive video analysis.\n## Quickstart\n- Add your **OpenAI API Key** to the **Language Model** and **YT-Insight** Agent Component\n- Add your **YouTube Data API v3 key**\n- If you don't have a YoutTube API key, create one in the [Google Cloud Console](https://console.cloud.google.com).\n- Ensure the chat input is a valid Youtube video URL. A sample URL is provided in the chat input component.\n", "description": "# 📖 README\nThis flow performs comprehensive analysis of YouTube videos.\n1. Extract video comments and transcripts.\n2. Run sentiment analysis on comments using LLM.\n3. Combine transcript content and comment sentiment for comprehensive video analysis.\n## Quickstart\n- Add your **OpenAI API Key** to the **Language Model** and **YT-Insight** Agent Component\n- Add your **YouTube Data API v3 key**\n- If you don't have a YoutTube API key, create one in the [Google Cloud Console](https://console.cloud.google.com).\n- Ensure the chat input is a valid YouTube video URL. A sample URL is provided in the chat input component.\n",
"display_name": "", "display_name": "",
"documentation": "", "documentation": "",
"template": { "template": {
@ -1998,9 +1864,7 @@
"data": { "data": {
"id": "parser-k0Bpy", "id": "parser-k0Bpy",
"node": { "node": {
"base_classes": [ "base_classes": ["Message"],
"Message"
],
"beta": false, "beta": false,
"category": "processing", "category": "processing",
"conditional_paths": [], "conditional_paths": [],
@ -2009,12 +1873,7 @@
"display_name": "Parser", "display_name": "Parser",
"documentation": "", "documentation": "",
"edited": false, "edited": false,
"field_order": [ "field_order": ["mode", "pattern", "input_data", "sep"],
"mode",
"pattern",
"input_data",
"sep"
],
"frozen": false, "frozen": false,
"icon": "braces", "icon": "braces",
"key": "parser", "key": "parser",
@ -2032,9 +1891,7 @@
"name": "parsed_text", "name": "parsed_text",
"selected": "Message", "selected": "Message",
"tool_mode": true, "tool_mode": true,
"types": [ "types": ["Message"],
"Message"
],
"value": "__UNDEFINED__" "value": "__UNDEFINED__"
} }
], ],
@ -2066,10 +1923,7 @@
"display_name": "Data or DataFrame", "display_name": "Data or DataFrame",
"dynamic": false, "dynamic": false,
"info": "Accepts either a DataFrame or a Data object.", "info": "Accepts either a DataFrame or a Data object.",
"input_types": [ "input_types": ["DataFrame", "Data"],
"DataFrame",
"Data"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"name": "input_data", "name": "input_data",
@ -2088,10 +1942,7 @@
"dynamic": false, "dynamic": false,
"info": "Convert into raw string instead of using a template.", "info": "Convert into raw string instead of using a template.",
"name": "mode", "name": "mode",
"options": [ "options": ["Parser", "Stringify"],
"Parser",
"Stringify"
],
"placeholder": "", "placeholder": "",
"real_time_refresh": true, "real_time_refresh": true,
"required": false, "required": false,
@ -2109,9 +1960,7 @@
"display_name": "Template", "display_name": "Template",
"dynamic": true, "dynamic": true,
"info": "Use variables within curly brackets to extract column values for DataFrames or key values for Data.For example: `Name: {Name}, Age: {Age}, Country: {Country}`", "info": "Use variables within curly brackets to extract column values for DataFrames or key values for Data.For example: `Name: {Name}, Age: {Age}, Country: {Country}`",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -2133,9 +1982,7 @@
"display_name": "Separator", "display_name": "Separator",
"dynamic": false, "dynamic": false,
"info": "String used to separate rows/items.", "info": "String used to separate rows/items.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -2174,10 +2021,7 @@
"data": { "data": {
"id": "LanguageModelComponent-OvIt5", "id": "LanguageModelComponent-OvIt5",
"node": { "node": {
"base_classes": [ "base_classes": ["LanguageModel", "Message"],
"LanguageModel",
"Message"
],
"beta": false, "beta": false,
"category": "models", "category": "models",
"conditional_paths": [], "conditional_paths": [],
@ -2223,9 +2067,7 @@
"required_inputs": null, "required_inputs": null,
"selected": "Message", "selected": "Message",
"tool_mode": true, "tool_mode": true,
"types": [ "types": ["Message"],
"Message"
],
"value": "__UNDEFINED__" "value": "__UNDEFINED__"
}, },
{ {
@ -2239,9 +2081,7 @@
"required_inputs": null, "required_inputs": null,
"selected": "LanguageModel", "selected": "LanguageModel",
"tool_mode": true, "tool_mode": true,
"types": [ "types": ["LanguageModel"],
"LanguageModel"
],
"value": "__UNDEFINED__" "value": "__UNDEFINED__"
} }
], ],
@ -2292,9 +2132,7 @@
"display_name": "Input", "display_name": "Input",
"dynamic": false, "dynamic": false,
"info": "The input text to send to the model", "info": "The input text to send to the model",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -2350,11 +2188,7 @@
"dynamic": false, "dynamic": false,
"info": "Select the model provider", "info": "Select the model provider",
"name": "provider", "name": "provider",
"options": [ "options": ["OpenAI", "Anthropic", "Google"],
"OpenAI",
"Anthropic",
"Google"
],
"options_metadata": [ "options_metadata": [
{ {
"icon": "OpenAI" "icon": "OpenAI"
@ -2402,9 +2236,7 @@
"display_name": "System Message", "display_name": "System Message",
"dynamic": false, "dynamic": false,
"info": "A system message that helps set the behavior of the assistant", "info": "A system message that helps set the behavior of the assistant",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -2472,9 +2304,7 @@
"data": { "data": {
"id": "ChatInput-kaWcL", "id": "ChatInput-kaWcL",
"node": { "node": {
"base_classes": [ "base_classes": ["Message"],
"Message"
],
"beta": false, "beta": false,
"category": "input_output", "category": "input_output",
"conditional_paths": [], "conditional_paths": [],
@ -2515,9 +2345,7 @@
"name": "message", "name": "message",
"selected": "Message", "selected": "Message",
"tool_mode": true, "tool_mode": true,
"types": [ "types": ["Message"],
"Message"
],
"value": "__UNDEFINED__" "value": "__UNDEFINED__"
} }
], ],
@ -2531,9 +2359,7 @@
"display_name": "Background Color", "display_name": "Background Color",
"dynamic": false, "dynamic": false,
"info": "The background color of the icon.", "info": "The background color of the icon.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -2554,9 +2380,7 @@
"display_name": "Icon", "display_name": "Icon",
"dynamic": false, "dynamic": false,
"info": "The icon of the message.", "info": "The icon of the message.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -2665,10 +2489,7 @@
"dynamic": false, "dynamic": false,
"info": "Type of sender.", "info": "Type of sender.",
"name": "sender", "name": "sender",
"options": [ "options": ["Machine", "User"],
"Machine",
"User"
],
"options_metadata": [], "options_metadata": [],
"placeholder": "", "placeholder": "",
"required": false, "required": false,
@ -2686,9 +2507,7 @@
"display_name": "Sender Name", "display_name": "Sender Name",
"dynamic": false, "dynamic": false,
"info": "Name of the sender.", "info": "Name of the sender.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -2709,9 +2528,7 @@
"display_name": "Session ID", "display_name": "Session ID",
"dynamic": false, "dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.", "info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -2750,9 +2567,7 @@
"display_name": "Text Color", "display_name": "Text Color",
"dynamic": false, "dynamic": false,
"info": "The text color of the name", "info": "The text color of the name",
"input_types": [ "input_types": ["Message"],
"Message"
],
"list": false, "list": false,
"list_add_label": "Add More", "list_add_label": "Add More",
"load_from_db": false, "load_from_db": false,
@ -2798,9 +2613,6 @@
"id": "3d1e15c2-b095-46de-8247-949c7a5bda04", "id": "3d1e15c2-b095-46de-8247-949c7a5bda04",
"is_component": false, "is_component": false,
"last_tested_version": "1.4.3", "last_tested_version": "1.4.3",
"name": "Youtube Analysis", "name": "YouTube Analysis",
"tags": [ "tags": ["agents", "assistants"]
"agents",
"assistants"
]
} }

View file

@ -22,7 +22,7 @@ class TestYfinanceComponent:
def test_initialization(self, component_class): def test_initialization(self, component_class):
component = component_class() component = component_class()
assert component.display_name == "Yahoo Finance" assert component.display_name == "Yahoo! Finance"
assert component.icon == "trending-up" assert component.icon == "trending-up"
assert "yfinance" in component.description assert "yfinance" in component.description

View file

@ -761,7 +761,7 @@ export const BUNDLES_SIDEBAR_FOLDER_NAMES = [
"assemblyai", "assemblyai",
"LangWatch", "LangWatch",
"langwatch", "langwatch",
"Youtube", "YouTube",
"youtube", "youtube",
]; ];

View file

@ -117,7 +117,7 @@ import { WindsurfIcon } from "./Windsurf";
// Export the eagerly loaded icons map // Export the eagerly loaded icons map
export const eagerIconsMapping = { export const eagerIconsMapping = {
"AI/ML": AIMLIcon, AIML: AIMLIcon,
AgentQL: AgentQLIcon, AgentQL: AgentQLIcon,
Airbyte: AirbyteIcon, Airbyte: AirbyteIcon,
Anthropic: AnthropicIcon, Anthropic: AnthropicIcon,

View file

@ -1,7 +1,6 @@
// Export the lazy loading mapping for icons // Export the lazy loading mapping for icons
export const lazyIconsMapping = { export const lazyIconsMapping = {
"AI/ML": () => AIML: () => import("@/icons/AIML").then((mod) => ({ default: mod.AIMLIcon })),
import("@/icons/AIML").then((mod) => ({ default: mod.AIMLIcon })),
AgentQL: () => AgentQL: () =>
import("@/icons/AgentQL").then((mod) => ({ default: mod.AgentQLIcon })), import("@/icons/AgentQL").then((mod) => ({ default: mod.AgentQLIcon })),
Airbyte: () => Airbyte: () =>

View file

@ -230,13 +230,13 @@ export const SIDEBAR_CATEGORIES = [
]; ];
export const SIDEBAR_BUNDLES = [ export const SIDEBAR_BUNDLES = [
{ display_name: "AI/ML", name: "aiml", icon: "AI/ML" }, { display_name: "AI/ML API", name: "aiml", icon: "AIML" },
{ display_name: "AgentQL", name: "agentql", icon: "AgentQL" }, { display_name: "AgentQL", name: "agentql", icon: "AgentQL" },
{ display_name: "Amazon", name: "amazon", icon: "Amazon" }, { display_name: "Amazon", name: "amazon", icon: "Amazon" },
{ display_name: "Anthropic", name: "anthropic", icon: "Anthropic" }, { display_name: "Anthropic", name: "anthropic", icon: "Anthropic" },
{ display_name: "Apify", name: "apify", icon: "Apify" }, { display_name: "Apify", name: "apify", icon: "Apify" },
{ display_name: "Arxiv", name: "arxiv", icon: "arXiv" }, { display_name: "arXiv", name: "arxiv", icon: "arXiv" },
{ display_name: "AssemblyAI", name: "assemblyai", icon: "AssemblyAI" }, { display_name: "AssemblyAI", name: "assemblyai", icon: "AssemblyAI" },
{ display_name: "Azure", name: "azure", icon: "Azure" }, { display_name: "Azure", name: "azure", icon: "Azure" },
{ display_name: "Baidu", name: "baidu", icon: "BaiduQianfan" }, { display_name: "Baidu", name: "baidu", icon: "BaiduQianfan" },
@ -270,7 +270,7 @@ export const SIDEBAR_BUNDLES = [
name: "homeassistant", name: "homeassistant",
icon: "HomeAssistant", icon: "HomeAssistant",
}, },
{ display_name: "HuggingFace", name: "huggingface", icon: "HuggingFace" }, { display_name: "Hugging Face", name: "huggingface", icon: "HuggingFace" },
{ display_name: "IBM", name: "ibm", icon: "WatsonxAI" }, { display_name: "IBM", name: "ibm", icon: "WatsonxAI" },
{ display_name: "Icosa Computing", name: "icosacomputing", icon: "Icosa" }, { display_name: "Icosa Computing", name: "icosacomputing", icon: "Icosa" },
{ display_name: "JigsawStack", name: "jigsawstack", icon: "JigsawStack" }, { display_name: "JigsawStack", name: "jigsawstack", icon: "JigsawStack" },
@ -282,7 +282,7 @@ export const SIDEBAR_BUNDLES = [
{ display_name: "Memories", name: "memories", icon: "Cpu" }, { display_name: "Memories", name: "memories", icon: "Cpu" },
{ display_name: "MistralAI", name: "mistral", icon: "MistralAI" }, { display_name: "MistralAI", name: "mistral", icon: "MistralAI" },
{ display_name: "Needle", name: "needle", icon: "Needle" }, { display_name: "Needle", name: "needle", icon: "Needle" },
{ display_name: "NotDiamond", name: "notdiamond", icon: "NotDiamond" }, { display_name: "Not Diamond", name: "notdiamond", icon: "NotDiamond" },
{ display_name: "Notion", name: "Notion", icon: "Notion" }, { display_name: "Notion", name: "Notion", icon: "Notion" },
{ display_name: "Novita", name: "novita", icon: "Novita" }, { display_name: "Novita", name: "novita", icon: "Novita" },
{ display_name: "NVIDIA", name: "nvidia", icon: "NVIDIA" }, { display_name: "NVIDIA", name: "nvidia", icon: "NVIDIA" },
@ -295,13 +295,14 @@ export const SIDEBAR_BUNDLES = [
{ display_name: "Redis", name: "redis", icon: "Redis" }, { display_name: "Redis", name: "redis", icon: "Redis" },
{ display_name: "SambaNova", name: "sambanova", icon: "SambaNova" }, { display_name: "SambaNova", name: "sambanova", icon: "SambaNova" },
{ display_name: "ScrapeGraph AI", name: "scrapegraph", icon: "ScrapeGraph" }, { display_name: "ScrapeGraph AI", name: "scrapegraph", icon: "ScrapeGraph" },
{ display_name: "SearchAPI", name: "searchapi", icon: "SearchAPI" }, { display_name: "SearchApi", name: "searchapi", icon: "SearchAPI" },
{ display_name: "SerpApi", name: "serpapi", icon: "SerpSearch" }, { display_name: "SerpApi", name: "serpapi", icon: "SerpSearch" },
{ display_name: "Serper", name: "serper", icon: "Serper" },
{ display_name: "Tavily", name: "tavily", icon: "TavilyIcon" }, { display_name: "Tavily", name: "tavily", icon: "TavilyIcon" },
{ display_name: "Twelve Labs", name: "twelvelabs", icon: "TwelveLabs" }, { display_name: "TwelveLabs", name: "twelvelabs", icon: "TwelveLabs" },
{ display_name: "Unstructured", name: "unstructured", icon: "Unstructured" }, { display_name: "Unstructured", name: "unstructured", icon: "Unstructured" },
{ display_name: "Vectara", name: "vectara", icon: "Vectara" }, { display_name: "Vectara", name: "vectara", icon: "Vectara" },
{ display_name: "VertexAI", name: "vertexai", icon: "VertexAI" }, { display_name: "Vertex AI", name: "vertexai", icon: "VertexAI" },
{ display_name: "Wikipedia", name: "wikipedia", icon: "Wikipedia" }, { display_name: "Wikipedia", name: "wikipedia", icon: "Wikipedia" },
{ {
display_name: "WolframAlpha", display_name: "WolframAlpha",
@ -309,8 +310,8 @@ export const SIDEBAR_BUNDLES = [
icon: "WolframAlphaAPI", icon: "WolframAlphaAPI",
}, },
{ display_name: "xAI", name: "xai", icon: "xAI" }, { display_name: "xAI", name: "xai", icon: "xAI" },
{ display_name: "YahooSearch", name: "yahoosearch", icon: "trending-up" }, { display_name: "Yahoo! Finance", name: "yahoosearch", icon: "trending-up" },
{ display_name: "Youtube", name: "youtube", icon: "YouTube" }, { display_name: "YouTube", name: "youtube", icon: "YouTube" },
{ display_name: "Zep", name: "zep", icon: "ZepMemory" }, { display_name: "Zep", name: "zep", icon: "ZepMemory" },
]; ];
@ -371,7 +372,7 @@ export const nodeIconToDisplayIconMap: Record<string, string> = {
ChatOutput: "MessagesSquare", ChatOutput: "MessagesSquare",
//Integration Icons //Integration Icons
Outlook: "Outlook", Outlook: "Outlook",
AIML: "AI/ML", AIML: "AIML",
AgentQL: "AgentQL", AgentQL: "AgentQL",
LanguageModels: "BrainCircuit", LanguageModels: "BrainCircuit",
EmbeddingModels: "Binary", EmbeddingModels: "Binary",

View file

@ -73,7 +73,7 @@ test(
await expect(page.getByTestId("input_outputChat Input")).toBeVisible(); await expect(page.getByTestId("input_outputChat Input")).toBeVisible();
await expect(page.getByTestId("input_outputChat Output")).toBeVisible(); await expect(page.getByTestId("input_outputChat Output")).toBeVisible();
await expect(page.getByTestId("processingPrompt Template")).toBeVisible(); await expect(page.getByTestId("processingPrompt Template")).toBeVisible();
await expect(page.getByTestId("langchain_utilitiesCSVAgent")).toBeVisible(); await expect(page.getByTestId("langchain_utilitiesCSV Agent")).toBeVisible();
await expect( await expect(
page.getByTestId("langchain_utilitiesConversationChain"), page.getByTestId("langchain_utilitiesConversationChain"),
).toBeVisible(); ).toBeVisible();

View file

@ -6,7 +6,7 @@ import { initialGPTsetup } from "../../utils/initialGPTsetup";
import { withEventDeliveryModes } from "../../utils/withEventDeliveryModes"; import { withEventDeliveryModes } from "../../utils/withEventDeliveryModes";
withEventDeliveryModes( withEventDeliveryModes(
"Youtube Analysis", "YouTube Analysis",
{ tag: ["@release", "@starter-projects"] }, { tag: ["@release", "@starter-projects"] },
async ({ page }) => { async ({ page }) => {
test.skip( test.skip(
@ -27,7 +27,7 @@ withEventDeliveryModes(
await awaitBootstrapTest(page); await awaitBootstrapTest(page);
await page.getByTestId("side_nav_options_all-templates").click(); await page.getByTestId("side_nav_options_all-templates").click();
await page.getByRole("heading", { name: "Youtube Analysis" }).click(); await page.getByRole("heading", { name: "YouTube Analysis" }).click();
await page.waitForSelector('[data-testid="fit_view"]', { await page.waitForSelector('[data-testid="fit_view"]', {
timeout: 100000, timeout: 100000,

View file

@ -1,5 +1,4 @@
import { expect, test } from "@playwright/test"; import { expect, test } from "@playwright/test";
import { addFlowToTestOnEmptyLangflow } from "../../utils/add-flow-to-test-on-empty-langflow";
import { addLegacyComponents } from "../../utils/add-legacy-components"; import { addLegacyComponents } from "../../utils/add-legacy-components";
import { adjustScreenView } from "../../utils/adjust-screen-view"; import { adjustScreenView } from "../../utils/adjust-screen-view";
import { awaitBootstrapTest } from "../../utils/await-bootstrap-test"; import { awaitBootstrapTest } from "../../utils/await-bootstrap-test";
@ -78,7 +77,7 @@ test(
"mem0Mem0 Chat Memory", "mem0Mem0 Chat Memory",
"logicCondition", "logicCondition",
"langchain_utilitiesSelf Query Retriever", "langchain_utilitiesSelf Query Retriever",
"langchain_utilitiesCharacterTextSplitter", "langchain_utilitiesCharacter Text Splitter",
]; ];
await Promise.all( await Promise.all(
@ -104,7 +103,7 @@ test(
"cohereCohere Language Models", "cohereCohere Language Models",
"groqGroq", "groqGroq",
"lmstudioLM Studio", "lmstudioLM Studio",
"maritalkMaritalk", "maritalkMariTalk",
"mistralMistralAI", "mistralMistralAI",
"perplexityPerplexity", "perplexityPerplexity",
"baiduQianfan", "baiduQianfan",

View file

@ -49,14 +49,14 @@ test(
await page.getByTestId("sidebar-search-input").click(); await page.getByTestId("sidebar-search-input").click();
await page.getByTestId("sidebar-search-input").fill("search api"); await page.getByTestId("sidebar-search-input").fill("search api");
await page.waitForSelector('[data-testid="searchapiSearch API"]', { await page.waitForSelector('[data-testid="searchapiSearchApi"]', {
timeout: 1000, timeout: 1000,
}); });
await zoomOut(page, 3); await zoomOut(page, 3);
await page await page
.getByTestId("searchapiSearch API") .getByTestId("searchapiSearchApi")
.dragTo(page.locator('//*[@id="react-flow-id"]'), { .dragTo(page.locator('//*[@id="react-flow-id"]'), {
targetPosition: { x: 100, y: 100 }, targetPosition: { x: 100, y: 100 },
}); });
@ -78,7 +78,7 @@ test(
await page.getByTestId("fit_view").click(); await page.getByTestId("fit_view").click();
await page.getByTestId("title-Search API").first().click(); await page.getByTestId("title-SearchApi").first().click();
await page.getByTestId("tool-mode-button").click(); await page.getByTestId("tool-mode-button").click();
//connection //connection