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:
@@ -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"
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
),
|
||||
]
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 = {}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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). "
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)),
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
3
src/backend/base/langflow/components/serper/__init__.py
Normal file
3
src/backend/base/langflow/components/serper/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from .google_serper_api_core import GoogleSerperAPICore
|
||||
|
||||
__all__ = ["GoogleSerperAPICore"]
|
||||
@@ -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
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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",
|
||||
|
||||
@@ -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"]
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -761,7 +761,7 @@ export const BUNDLES_SIDEBAR_FOLDER_NAMES = [
|
||||
"assemblyai",
|
||||
"LangWatch",
|
||||
"langwatch",
|
||||
"Youtube",
|
||||
"YouTube",
|
||||
"youtube",
|
||||
];
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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: () =>
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user