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
parent 0ed47065f5
commit 169b687ed0
54 changed files with 415 additions and 741 deletions

View File

@@ -8,10 +8,10 @@ globs:
alwaysApply: false
---
# Component Icon Rules
## Purpose
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:**
In a new directory for your icon, e.g., `src/frontend/src/icons/AstraDB/`.
- **How:**
- Add your SVG as a React component, e.g., `AstraSVG` in `AstraDB.jsx`.
```jsx
const AstraSVG = (props) => (
<svg {...props}>
<path
// ...
// ...
/>
</svg>
);
```
- Create an `index.tsx` that exports your icon using `forwardRef`:
```tsx
import React, { forwardRef } from "react";
import AstraSVG from "./AstraDB";
@@ -118,6 +120,7 @@ To ensure consistent, clear, and functional icon usage for components, covering
---
**Example for AstraDB:**
- Backend:
```python
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.tools import BaseTool
# Import HuggingFace Model base
# Import Hugging Face Model base
from smolagents import Model, Tool
from smolagents.models import ChatMessage, ChatMessageToolCall, ChatMessageToolCallDefinition
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:
tool_call (ToolCall): LangChain tool call to convert
Returns:
ChatMessageToolCall: Equivalent HuggingFace tool call
ChatMessageToolCall: Equivalent Hugging Face tool call
"""
return ChatMessageToolCall(
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:
"""Convert a HuggingFace Tool to a LangChain BaseTool.
"""Convert a Hugging Face Tool to a LangChain BaseTool.
Args:
tool (Tool): HuggingFace tool to convert
tool (Tool): Hugging Face tool to convert
Returns:
BaseTool: Equivalent 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)
return tool.langchain_tool
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.
Usage:
@@ -68,7 +68,7 @@ class LangChainHFModel(Model):
tools_to_call_from: list[Tool] | None = None,
**kwargs,
) -> ChatMessage:
"""Process messages through the LangChain model and return HuggingFace format.
"""Process messages through the LangChain model and return Hugging Face format.
Args:
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
Returns:
ChatMessage: Response in HuggingFace format
ChatMessage: Response in Hugging Face format
"""
if grammar:
msg = "Grammar is not yet supported."

View File

@@ -17,10 +17,10 @@ class AimlModels:
response = client.get("https://api.aimlapi.com/models")
response.raise_for_status()
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
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(
message=msg,
body=None,
@@ -31,7 +31,7 @@ class AimlModels:
models = response.json().get("data", [])
self.separate_models_by_type(models)
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
def separate_models_by_type(self, models):

View File

@@ -97,7 +97,7 @@ GROQ_MODELS_DETAILED = [
create_model_metadata( # OpenAI
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
),
]

View File

@@ -17,8 +17,8 @@ from langflow.inputs.inputs import (
class AIMLModelComponent(LCModelComponent):
display_name = "AIML"
description = "Generates text using AIML LLMs."
display_name = "AI/ML API"
description = "Generates text using AI/ML API LLMs."
icon = "AIML"
name = "AIMLModel"
documentation = "https://docs.aimlapi.com/api-reference"
@@ -42,15 +42,15 @@ class AIMLModelComponent(LCModelComponent):
),
StrInput(
name="aiml_api_base",
display_name="AIML API Base",
display_name="AI/ML API Base",
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.",
),
SecretStrInput(
name="api_key",
display_name="AIML API Key",
info="The AIML API Key to use for the OpenAI model.",
display_name="AI/ML API Key",
info="The AI/ML API Key to use for the OpenAI model.",
advanced=False,
value="AIML_API_KEY",
required=True,

View File

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

View File

@@ -19,7 +19,7 @@ from langflow.schema.dotdict import dotdict
class AnthropicModelComponent(LCModelComponent):
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"
name = "AnthropicModel"
@@ -74,9 +74,6 @@ class AnthropicModelComponent(LCModelComponent):
value=False,
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]

View File

@@ -12,6 +12,7 @@ class AstraVectorizeComponent(Component):
"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"
legacy = True
icon = "AstraDB"
name = "AstraVectorize"

View File

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

View File

@@ -268,7 +268,7 @@ class AstraDBToolComponent(LCToolComponent):
return tool
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(",")
result = {}
@@ -329,7 +329,7 @@ class AstraDBToolComponent(LCToolComponent):
raise ValueError(msg)
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: Dictionary of arguments from the tool
@@ -370,7 +370,7 @@ class AstraDBToolComponent(LCToolComponent):
return filters
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()
sort = {}

View File

@@ -13,28 +13,28 @@ class CassandraChatMemory(LCChatMemoryComponent):
MessageTextInput(
name="database_ref",
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,
),
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(
name="token",
display_name="Password / AstraDB Token",
info="User password for the database (or AstraDB token).",
display_name="Password / Astra DB Token",
info="User password for the database (or Astra DB token).",
required=True,
),
MessageTextInput(
name="keyspace",
display_name="Keyspace",
info="Table Keyspace (or AstraDB namespace).",
info="Table Keyspace (or Astra DB namespace).",
required=True,
),
MessageTextInput(
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,
),
MessageTextInput(

View File

@@ -7,20 +7,20 @@ from langflow.template.field.base import Output
class GetEnvVar(Component):
display_name = "Get env var"
description = "Get env var"
display_name = "Get Environment Variable"
description = "Gets the value of an environment variable from the system."
icon = "AstraDB"
inputs = [
StrInput(
name="env_var_name",
display_name="Env var name",
display_name="Environment Variable Name",
info="Name of the environment variable to get",
)
]
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:

View File

@@ -6,8 +6,8 @@ from langflow.schema.data import Data
class FirecrawlCrawlApi(Component):
display_name: str = "FirecrawlCrawlApi"
description: str = "Firecrawl Crawl API."
display_name: str = "Firecrawl Crawl API"
description: str = "Crawls a URL and returns the results."
name = "FirecrawlCrawlApi"
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):
display_name: str = "FirecrawlExtractApi"
description: str = "Firecrawl Extract API."
display_name: str = "Firecrawl Extract API"
description: str = "Extracts data from a URL."
name = "FirecrawlExtractApi"
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):
display_name: str = "FirecrawlMapApi"
description: str = "Firecrawl Map API."
display_name: str = "Firecrawl Map API"
description: str = "Maps a URL and returns the results."
name = "FirecrawlMapApi"
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):
display_name: str = "FirecrawlScrapeApi"
description: str = "Firecrawl Scrape API."
display_name: str = "Firecrawl Scrape API"
description: str = "Scrapes a URL and returns the results."
name = "FirecrawlScrapeApi"
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."
)
documentation: str = "https://python.langchain.com/v0.2/docs/integrations/text_embedding/google_generative_ai/"
icon = "Google"
icon = "GoogleGenerativeAI"
name = "Google Generative AI Embeddings"
inputs = [

View File

@@ -12,7 +12,7 @@ from langflow.schema.data import Data
class ListHomeAssistantStates(LCToolComponent):
display_name: str = "List HomeAssistant States"
display_name: str = "List Home Assistant States"
description: str = (
"Retrieve states from Home Assistant. "
"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):
display_name: str = "HuggingFace"
display_name: str = "Hugging Face"
description: str = "Generate text using Hugging Face Inference APIs."
icon = "HuggingFace"
name = "HuggingFaceModel"
@@ -26,7 +26,7 @@ class HuggingFaceEndpointsComponent(LCModelComponent):
DropdownInput(
name="model_id",
display_name="Model ID",
info="Select a model from HuggingFace Hub",
info="Select a model from Hugging Face Hub",
options=[
DEFAULT_MODEL,
"mistralai/Mixtral-8x7B-Instruct-v0.1",
@@ -44,7 +44,7 @@ class HuggingFaceEndpointsComponent(LCModelComponent):
StrInput(
name="custom_model",
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="",
show=False,
required=True,
@@ -191,7 +191,7 @@ class HuggingFaceEndpointsComponent(LCModelComponent):
repetition_penalty=repetition_penalty,
)
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
return llm

View File

@@ -13,8 +13,8 @@ from langflow.io import MessageTextInput, Output, SecretStrInput
class HuggingFaceInferenceAPIEmbeddingsComponent(LCEmbeddingsModel):
display_name = "HuggingFace Embeddings Inference"
description = "Generate embeddings using HuggingFace Text Embeddings Inference (TEI)"
display_name = "Hugging Face Embeddings Inference"
description = "Generate embeddings using Hugging Face Text Embeddings Inference (TEI)"
documentation = "https://huggingface.co/docs/text-embeddings-inference/index"
icon = "HuggingFace"
name = "HuggingFaceInferenceAPIEmbeddings"
@@ -66,7 +66,7 @@ class HuggingFaceInferenceAPIEmbeddingsComponent(LCEmbeddingsModel):
raise ValueError(msg) from e
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)
# returning True to solve linting error
return True
@@ -102,5 +102,5 @@ class HuggingFaceInferenceAPIEmbeddingsComponent(LCEmbeddingsModel):
try:
return self.create_huggingface_embeddings(api_key, api_url, self.model_name)
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

View File

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

View File

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

View File

@@ -7,8 +7,8 @@ from langflow.inputs.inputs import DropdownInput, FloatInput, IntInput, SecretSt
class MaritalkModelComponent(LCModelComponent):
display_name = "Maritalk"
description = "Generates text using Maritalk LLMs."
display_name = "MariTalk"
description = "Generates text using MariTalk LLMs."
icon = "Maritalk"
name = "Maritalk"
inputs = [
@@ -29,8 +29,8 @@ class MaritalkModelComponent(LCModelComponent):
),
SecretStrInput(
name="api_key",
display_name="Maritalk API Key",
info="The Maritalk API Key to use for the OpenAI model.",
display_name="MariTalk API Key",
info="The MariTalk API Key to use for authentication.",
advanced=False,
),
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):
display_name: str = "ScrapeGraphMarkdownifyApi"
description: str = """ScrapeGraph Markdownify API.
Given a URL, it will return the markdownified content of the website.
More info at https://docs.scrapegraphai.com/services/markdownify"""
display_name: str = "ScrapeGraph Markdownify API"
description: str = "Given a URL, it will return the markdownified content of the website."
name = "ScrapeGraphMarkdownifyApi"
output_types: list[str] = ["Document"]
documentation: str = "https://docs.scrapegraphai.com/introduction"
documentation: str = "https://docs.scrapegraphai.com/services/markdownify"
inputs = [
SecretStrInput(

View File

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

View File

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

View File

@@ -10,8 +10,8 @@ from langflow.schema.dataframe import DataFrame
class SearchComponent(Component):
display_name: str = "Search API"
description: str = "Call the searchapi.io API with result limiting"
display_name: str = "SearchApi"
description: str = "Calls the SearchApi API with result limiting. Supports Google, Bing and DuckDuckGo."
documentation: str = "https://www.searchapi.io/docs/google"
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):
display_name = "Yahoo Finance [DEPRECATED]"
display_name = "Yahoo! Finance [DEPRECATED]"
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"
name = "YahooFinanceTool"
legacy = True
@@ -87,7 +87,7 @@ to access financial data and market information from Yahoo Finance."""
def build_tool(self) -> Tool:
return StructuredTool.from_function(
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,
args_schema=YahooFinanceSchema,
)

View File

@@ -7,10 +7,10 @@ from langflow.schema.message import Message
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"
description = "Converts AstraDB search results to inputs compatible with TwelveLabs Pegasus."
display_name = "Convert Astra DB to Pegasus Input"
description = "Converts Astra DB search results to inputs compatible with TwelveLabs Pegasus."
icon = "TwelveLabs"
name = "ConvertAstraToTwelveLabs"
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 = [
HandleInput(
name="astra_results",
display_name="AstraDB Results",
display_name="Astra DB Results",
input_types=["Data"],
info="Search results from AstraDB component",
info="Search results from Astra DB component",
required=True,
is_list=True,
)
@@ -47,7 +47,7 @@ class ConvertAstraToTwelveLabs(Component):
self._index_id = None
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:
return

View File

@@ -13,7 +13,7 @@ from langflow.schema import Data
class TwelveLabsError(Exception):
"""Base exception for Twelve Labs errors."""
"""Base exception for TwelveLabs errors."""
class IndexCreationError(TwelveLabsError):
@@ -29,10 +29,10 @@ class TaskTimeoutError(TwelveLabsError):
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"
description = "Index videos using Twelve Labs and add the video_id to metadata."
display_name = "TwelveLabs Pegasus Index Video"
description = "Index videos using TwelveLabs and add the video_id to metadata."
icon = "TwelveLabs"
name = "TwelveLabsPegasusIndexVideo"
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,
),
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(
name="model_name",
@@ -215,7 +215,7 @@ class PegasusIndexVideo(Component):
return []
if not self.api_key:
error_msg = "Twelve Labs API Key is required"
error_msg = "TwelveLabs API Key is required"
raise IndexCreationError(error_msg)
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)
self.status = f"Using index: {index_name} (ID: {index_id})"
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
# First, validate all videos and create a list of valid ones

View File

@@ -34,14 +34,14 @@ class TwelveLabsTextEmbeddings(Embeddings):
class TwelveLabsTextEmbeddingsComponent(LCEmbeddingsModel):
display_name = "Twelve Labs Text Embeddings"
description = "Generate embeddings using Twelve Labs text embedding models."
display_name = "TwelveLabs Text Embeddings"
description = "Generate embeddings using TwelveLabs text embedding models."
icon = "TwelveLabs"
name = "TwelveLabsTextEmbeddings"
documentation = "https://github.com/twelvelabs-io/twelvelabs-developer-experience/blob/main/integrations/Langflow/TWELVE_LABS_COMPONENTS_README.md"
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(
name="model",
display_name="Model",

View File

@@ -35,8 +35,8 @@ class VideoValidationError(Exception):
class TwelveLabsPegasus(Component):
display_name = "Twelve Labs Pegasus"
description = "Chat with videos using Twelve Labs Pegasus API."
display_name = "TwelveLabs Pegasus"
description = "Chat with videos using TwelveLabs Pegasus API."
icon = "TwelveLabs"
name = "TwelveLabsPegasus"
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 = [
DataInput(name="videodata", display_name="Video Data", info="Video Data", is_list=True),
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(
name="video_id",
@@ -306,7 +306,7 @@ class TwelveLabsPegasus(Component):
def process_video(self) -> Message:
"""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
if hasattr(self, "index_id") and self.index_id:

View File

@@ -79,8 +79,8 @@ class TwelveLabsVideoEmbeddings(Embeddings):
class TwelveLabsVideoEmbeddingsComponent(LCEmbeddingsModel):
display_name = "Twelve Labs Video Embeddings"
description = "Generate embeddings from videos using Twelve Labs video embedding models."
display_name = "TwelveLabs Video Embeddings"
description = "Generate embeddings from videos using TwelveLabs video embedding models."
name = "TwelveLabsVideoEmbeddings"
icon = "TwelveLabs"
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(
name="database_ref",
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,
),
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(
name="token",
display_name="Password / AstraDB Token",
info="User password for the database (or AstraDB token).",
display_name="Password / Astra DB Token",
info="User password for the database (or Astra DB token).",
required=True,
),
MessageTextInput(
name="keyspace",
display_name="Keyspace",
info="Table Keyspace (or AstraDB namespace).",
info="Table Keyspace (or Astra DB namespace).",
required=True,
),
MessageTextInput(
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,
),
IntInput(

View File

@@ -25,28 +25,28 @@ class CassandraGraphVectorStoreComponent(LCVectorStoreComponent):
MessageTextInput(
name="database_ref",
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,
),
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(
name="token",
display_name="Password / AstraDB Token",
info="User password for the database (or AstraDB token).",
display_name="Password / Astra DB Token",
info="User password for the database (or Astra DB token).",
required=True,
),
MessageTextInput(
name="keyspace",
display_name="Keyspace",
info="Table Keyspace (or AstraDB namespace).",
info="Table Keyspace (or Astra DB namespace).",
required=True,
),
MessageTextInput(
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,
),
DropdownInput(

View File

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

View File

@@ -10,7 +10,7 @@ from langflow.schema.dataframe import DataFrame
class WolframAlphaAPIComponent(LCToolComponent):
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."""
name = "WolframAlphaAPI"
@@ -45,7 +45,7 @@ topics, delivering structured responses."""
return data
def fetch_content_dataframe(self) -> DataFrame:
"""Convert the Wolfram Alpha results to a DataFrame.
"""Convert the WolframAlpha results to a DataFrame.
Returns:
DataFrame: A DataFrame containing the query results.

View File

@@ -49,9 +49,9 @@ class YahooFinanceSchema(BaseModel):
class YfinanceComponent(Component):
display_name = "Yahoo Finance"
display_name = "Yahoo! Finance"
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"
inputs = [

View File

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

View File

@@ -90,7 +90,7 @@
"beta": false,
"conditional_paths": [],
"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",
"documentation": "https://docs.scrapegraphai.com/introduction",
"edited": false,
@@ -103,7 +103,7 @@
"legacy": false,
"lf_version": "1.1.5",
"metadata": {
"code_hash": "cdea312e9de9",
"code_hash": "99b8b89dc4ca",
"module": "langflow.components.scrapegraph.scrapegraph_search_api.ScrapeGraphSearchApi"
},
"minimized": false,
@@ -163,7 +163,7 @@
"show": true,
"title_case": false,
"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": {
"_input_type": "ToolsInput",

File diff suppressed because one or more lines are too long

View File

@@ -1417,7 +1417,7 @@
"beta": false,
"conditional_paths": [],
"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",
"documentation": "https://www.searchapi.io/docs/google",
"edited": false,
@@ -1434,7 +1434,7 @@
"legacy": false,
"lf_version": "1.2.0",
"metadata": {
"code_hash": "727befdc79e7",
"code_hash": "c561e416205b",
"module": "langflow.components.searchapi.search.SearchComponent"
},
"minimized": false,
@@ -1494,7 +1494,7 @@
"show": true,
"title_case": false,
"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": {
"_input_type": "DropdownInput",

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -230,13 +230,13 @@ export const SIDEBAR_CATEGORIES = [
];
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: "Amazon", name: "amazon", icon: "Amazon" },
{ display_name: "Anthropic", name: "anthropic", icon: "Anthropic" },
{ 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: "Azure", name: "azure", icon: "Azure" },
{ display_name: "Baidu", name: "baidu", icon: "BaiduQianfan" },
@@ -270,7 +270,7 @@ export const SIDEBAR_BUNDLES = [
name: "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: "Icosa Computing", name: "icosacomputing", icon: "Icosa" },
{ display_name: "JigsawStack", name: "jigsawstack", icon: "JigsawStack" },
@@ -282,7 +282,7 @@ export const SIDEBAR_BUNDLES = [
{ display_name: "Memories", name: "memories", icon: "Cpu" },
{ display_name: "MistralAI", name: "mistral", icon: "MistralAI" },
{ 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: "Novita", name: "novita", icon: "Novita" },
{ display_name: "NVIDIA", name: "nvidia", icon: "NVIDIA" },
@@ -295,13 +295,14 @@ export const SIDEBAR_BUNDLES = [
{ display_name: "Redis", name: "redis", icon: "Redis" },
{ display_name: "SambaNova", name: "sambanova", icon: "SambaNova" },
{ 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: "Serper", name: "serper", icon: "Serper" },
{ 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: "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: "WolframAlpha",
@@ -309,8 +310,8 @@ export const SIDEBAR_BUNDLES = [
icon: "WolframAlphaAPI",
},
{ display_name: "xAI", name: "xai", icon: "xAI" },
{ display_name: "YahooSearch", name: "yahoosearch", icon: "trending-up" },
{ display_name: "Youtube", name: "youtube", icon: "YouTube" },
{ display_name: "Yahoo! Finance", name: "yahoosearch", icon: "trending-up" },
{ display_name: "YouTube", name: "youtube", icon: "YouTube" },
{ display_name: "Zep", name: "zep", icon: "ZepMemory" },
];
@@ -371,7 +372,7 @@ export const nodeIconToDisplayIconMap: Record<string, string> = {
ChatOutput: "MessagesSquare",
//Integration Icons
Outlook: "Outlook",
AIML: "AI/ML",
AIML: "AIML",
AgentQL: "AgentQL",
LanguageModels: "BrainCircuit",
EmbeddingModels: "Binary",

View File

@@ -73,7 +73,7 @@ test(
await expect(page.getByTestId("input_outputChat Input")).toBeVisible();
await expect(page.getByTestId("input_outputChat Output")).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(
page.getByTestId("langchain_utilitiesConversationChain"),
).toBeVisible();

View File

@@ -6,7 +6,7 @@ import { initialGPTsetup } from "../../utils/initialGPTsetup";
import { withEventDeliveryModes } from "../../utils/withEventDeliveryModes";
withEventDeliveryModes(
"Youtube Analysis",
"YouTube Analysis",
{ tag: ["@release", "@starter-projects"] },
async ({ page }) => {
test.skip(
@@ -27,7 +27,7 @@ withEventDeliveryModes(
await awaitBootstrapTest(page);
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"]', {
timeout: 100000,

View File

@@ -1,5 +1,4 @@
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 { adjustScreenView } from "../../utils/adjust-screen-view";
import { awaitBootstrapTest } from "../../utils/await-bootstrap-test";
@@ -78,7 +77,7 @@ test(
"mem0Mem0 Chat Memory",
"logicCondition",
"langchain_utilitiesSelf Query Retriever",
"langchain_utilitiesCharacterTextSplitter",
"langchain_utilitiesCharacter Text Splitter",
];
await Promise.all(
@@ -104,7 +103,7 @@ test(
"cohereCohere Language Models",
"groqGroq",
"lmstudioLM Studio",
"maritalkMaritalk",
"maritalkMariTalk",
"mistralMistralAI",
"perplexityPerplexity",
"baiduQianfan",

View File

@@ -49,14 +49,14 @@ test(
await page.getByTestId("sidebar-search-input").click();
await page.getByTestId("sidebar-search-input").fill("search api");
await page.waitForSelector('[data-testid="searchapiSearch API"]', {
await page.waitForSelector('[data-testid="searchapiSearchApi"]', {
timeout: 1000,
});
await zoomOut(page, 3);
await page
.getByTestId("searchapiSearch API")
.getByTestId("searchapiSearchApi")
.dragTo(page.locator('//*[@id="react-flow-id"]'), {
targetPosition: { x: 100, y: 100 },
});
@@ -78,7 +78,7 @@ test(
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();
//connection