diff --git a/src/backend/base/langflow/components/agentql/agentql_api.py b/src/backend/base/langflow/components/agentql/agentql_api.py index adf99b8b3f5f..d1724cc59f70 100644 --- a/src/backend/base/langflow/components/agentql/agentql_api.py +++ b/src/backend/base/langflow/components/agentql/agentql_api.py @@ -17,7 +17,7 @@ class AgentQL(Component): inputs = [ SecretStrInput( name="api_key", - display_name="API Key", + display_name="AgentQL API Key", required=True, password=True, info="Your AgentQL API key from dev.agentql.com", diff --git a/src/backend/base/langflow/components/azure/azure_openai.py b/src/backend/base/langflow/components/azure/azure_openai.py index c44aed57ad4a..4a3623ea452d 100644 --- a/src/backend/base/langflow/components/azure/azure_openai.py +++ b/src/backend/base/langflow/components/azure/azure_openai.py @@ -39,7 +39,7 @@ class AzureChatOpenAIComponent(LCModelComponent): required=True, ), MessageTextInput(name="azure_deployment", display_name="Deployment Name", required=True), - SecretStrInput(name="api_key", display_name="API Key", required=True), + SecretStrInput(name="api_key", display_name="Azure Chat OpenAI API Key", required=True), DropdownInput( name="api_version", display_name="API Version", diff --git a/src/backend/base/langflow/components/azure/azure_openai_embeddings.py b/src/backend/base/langflow/components/azure/azure_openai_embeddings.py index cf6fabd91e8b..84eef7bbb6b9 100644 --- a/src/backend/base/langflow/components/azure/azure_openai_embeddings.py +++ b/src/backend/base/langflow/components/azure/azure_openai_embeddings.py @@ -50,7 +50,7 @@ class AzureOpenAIEmbeddingsComponent(LCModelComponent): ), SecretStrInput( name="api_key", - display_name="API Key", + display_name="Azure OpenAI API Key", required=True, ), IntInput( diff --git a/src/backend/base/langflow/components/clickhouse/clickhouse.py b/src/backend/base/langflow/components/clickhouse/clickhouse.py index 18fc968fcfa1..de1d35ad67c2 100644 --- a/src/backend/base/langflow/components/clickhouse/clickhouse.py +++ b/src/backend/base/langflow/components/clickhouse/clickhouse.py @@ -26,7 +26,7 @@ class ClickhouseVectorStoreComponent(LCVectorStoreComponent): StrInput(name="database", display_name="database", required=True), StrInput(name="table", display_name="Table name", required=True), StrInput(name="username", display_name="The ClickHouse user name.", required=True), - SecretStrInput(name="password", display_name="The password for username.", required=True), + SecretStrInput(name="password", display_name="Clickhouse Password", required=True), DropdownInput( name="index_type", display_name="index_type", diff --git a/src/backend/base/langflow/components/confluence/confluence.py b/src/backend/base/langflow/components/confluence/confluence.py index 06f735c87d33..774b0cffc69f 100644 --- a/src/backend/base/langflow/components/confluence/confluence.py +++ b/src/backend/base/langflow/components/confluence/confluence.py @@ -29,7 +29,7 @@ class ConfluenceComponent(Component): ), SecretStrInput( name="api_key", - display_name="API Key", + display_name="Confluence API Key", required=True, info="Atlassian Key. Create at: https://id.atlassian.com/manage-profile/security/api-tokens", ), diff --git a/src/backend/base/langflow/components/datastax/astra_db.py b/src/backend/base/langflow/components/datastax/astra_db.py index 63d8e20646a8..8440f27afd47 100644 --- a/src/backend/base/langflow/components/datastax/astra_db.py +++ b/src/backend/base/langflow/components/datastax/astra_db.py @@ -24,7 +24,7 @@ class AstraDBChatMemory(LCChatMemoryComponent): ), SecretStrInput( name="api_endpoint", - display_name="API Endpoint", + display_name="Astra DB API Endpoint", info="API endpoint URL for the Astra DB service.", value="ASTRA_DB_API_ENDPOINT", required=True, diff --git a/src/backend/base/langflow/components/deactivated/chat_litellm_model.py b/src/backend/base/langflow/components/deactivated/chat_litellm_model.py index 10ac5b189739..58758e113f95 100644 --- a/src/backend/base/langflow/components/deactivated/chat_litellm_model.py +++ b/src/backend/base/langflow/components/deactivated/chat_litellm_model.py @@ -32,7 +32,7 @@ class ChatLiteLLMModelComponent(LCModelComponent): ), SecretStrInput( name="api_key", - display_name="API Key", + display_name="Chat LiteLLM API Key", advanced=False, required=False, ), diff --git a/src/backend/base/langflow/components/deactivated/metal.py b/src/backend/base/langflow/components/deactivated/metal.py index 5c4bb067f313..0cb0a0a4ae2a 100644 --- a/src/backend/base/langflow/components/deactivated/metal.py +++ b/src/backend/base/langflow/components/deactivated/metal.py @@ -15,7 +15,7 @@ class MetalRetrieverComponent(CustomComponent): inputs = [ SecretStrInput( name="api_key", - display_name="API Key", + display_name="Metal Retriever API Key", required=True, ), SecretStrInput( diff --git a/src/backend/base/langflow/components/elastic/elasticsearch.py b/src/backend/base/langflow/components/elastic/elasticsearch.py index 336484e8d875..01fab6d734b5 100644 --- a/src/backend/base/langflow/components/elastic/elasticsearch.py +++ b/src/backend/base/langflow/components/elastic/elasticsearch.py @@ -58,7 +58,7 @@ class ElasticsearchVectorStoreComponent(LCVectorStoreComponent): ), SecretStrInput( name="password", - display_name="Password", + display_name="Elasticsearch Password", value="", advanced=False, info=( diff --git a/src/backend/base/langflow/components/elastic/opensearch.py b/src/backend/base/langflow/components/elastic/opensearch.py index c0daac174e35..a84fb00141dd 100644 --- a/src/backend/base/langflow/components/elastic/opensearch.py +++ b/src/backend/base/langflow/components/elastic/opensearch.py @@ -71,7 +71,7 @@ class OpenSearchVectorStoreComponent(LCVectorStoreComponent): ), SecretStrInput( name="password", - display_name="Password", + display_name="OpenSearch Password", value="admin", advanced=True, ), diff --git a/src/backend/base/langflow/components/firecrawl/firecrawl_crawl_api.py b/src/backend/base/langflow/components/firecrawl/firecrawl_crawl_api.py index 6fc381bf630c..3185c4e4b95a 100644 --- a/src/backend/base/langflow/components/firecrawl/firecrawl_crawl_api.py +++ b/src/backend/base/langflow/components/firecrawl/firecrawl_crawl_api.py @@ -15,7 +15,7 @@ class FirecrawlCrawlApi(Component): inputs = [ SecretStrInput( name="api_key", - display_name="API Key", + display_name="Firecrawl API Key", required=True, password=True, info="The API key to use Firecrawl API.", diff --git a/src/backend/base/langflow/components/firecrawl/firecrawl_extract_api.py b/src/backend/base/langflow/components/firecrawl/firecrawl_extract_api.py index 1a940af639b6..4b3178dbe8d1 100644 --- a/src/backend/base/langflow/components/firecrawl/firecrawl_extract_api.py +++ b/src/backend/base/langflow/components/firecrawl/firecrawl_extract_api.py @@ -14,7 +14,7 @@ class FirecrawlExtractApi(Component): inputs = [ SecretStrInput( name="api_key", - display_name="API Key", + display_name="Firecrawl API Key", required=True, password=True, info="The API key to use Firecrawl API.", diff --git a/src/backend/base/langflow/components/firecrawl/firecrawl_map_api.py b/src/backend/base/langflow/components/firecrawl/firecrawl_map_api.py index 287210901769..0fd3438e461b 100644 --- a/src/backend/base/langflow/components/firecrawl/firecrawl_map_api.py +++ b/src/backend/base/langflow/components/firecrawl/firecrawl_map_api.py @@ -18,7 +18,7 @@ class FirecrawlMapApi(Component): inputs = [ SecretStrInput( name="api_key", - display_name="API Key", + display_name="Firecrawl API Key", required=True, password=True, info="The API key to use Firecrawl API.", diff --git a/src/backend/base/langflow/components/firecrawl/firecrawl_scrape_api.py b/src/backend/base/langflow/components/firecrawl/firecrawl_scrape_api.py index fb2fa2216bdf..5582739a59b8 100644 --- a/src/backend/base/langflow/components/firecrawl/firecrawl_scrape_api.py +++ b/src/backend/base/langflow/components/firecrawl/firecrawl_scrape_api.py @@ -19,7 +19,7 @@ class FirecrawlScrapeApi(Component): inputs = [ SecretStrInput( name="api_key", - display_name="API Key", + display_name="Firecrawl API Key", required=True, password=True, info="The API key to use Firecrawl API.", diff --git a/src/backend/base/langflow/components/google/google_generative_ai_embeddings.py b/src/backend/base/langflow/components/google/google_generative_ai_embeddings.py index 29f97b354edc..26c9f27824ad 100644 --- a/src/backend/base/langflow/components/google/google_generative_ai_embeddings.py +++ b/src/backend/base/langflow/components/google/google_generative_ai_embeddings.py @@ -28,7 +28,7 @@ class GoogleGenerativeAIEmbeddingsComponent(Component): name = "Google Generative AI Embeddings" inputs = [ - SecretStrInput(name="api_key", display_name="API Key", required=True), + SecretStrInput(name="api_key", display_name="Google Generative AI API Key", required=True), MessageTextInput(name="model_name", display_name="Model Name", value="models/text-embedding-004"), ] diff --git a/src/backend/base/langflow/components/huggingface/huggingface.py b/src/backend/base/langflow/components/huggingface/huggingface.py index 77b59a26077d..dab4cff9ad70 100644 --- a/src/backend/base/langflow/components/huggingface/huggingface.py +++ b/src/backend/base/langflow/components/huggingface/huggingface.py @@ -104,7 +104,9 @@ class HuggingFaceEndpointsComponent(LCModelComponent): advanced=True, info="The task to call the model with. Should be a task that returns `generated_text` or `summary_text`.", ), - SecretStrInput(name="huggingfacehub_api_token", display_name="API Token", password=True, required=True), + SecretStrInput( + name="huggingfacehub_api_token", display_name="HuggingFace HubAPI Token", password=True, required=True + ), DictInput(name="model_kwargs", display_name="Model Keyword Arguments", advanced=True), IntInput(name="retry_attempts", display_name="Retry Attempts", value=1, advanced=True), ] diff --git a/src/backend/base/langflow/components/huggingface/huggingface_inference_api.py b/src/backend/base/langflow/components/huggingface/huggingface_inference_api.py index 46ebb3cb6189..02fd593eaf14 100644 --- a/src/backend/base/langflow/components/huggingface/huggingface_inference_api.py +++ b/src/backend/base/langflow/components/huggingface/huggingface_inference_api.py @@ -22,7 +22,7 @@ class HuggingFaceInferenceAPIEmbeddingsComponent(LCEmbeddingsModel): inputs = [ SecretStrInput( name="api_key", - display_name="API Key", + display_name="HuggingFace API Key", advanced=False, info="Required for non-local inference endpoints. Local inference does not require an API Key.", ), diff --git a/src/backend/base/langflow/components/ibm/watsonx.py b/src/backend/base/langflow/components/ibm/watsonx.py index 9dd65947e17a..557f4f0080d1 100644 --- a/src/backend/base/langflow/components/ibm/watsonx.py +++ b/src/backend/base/langflow/components/ibm/watsonx.py @@ -47,7 +47,7 @@ class WatsonxAIComponent(LCModelComponent): ), SecretStrInput( name="api_key", - display_name="API Key", + display_name="Watsonx API Key", info="The API Key to use for the model.", required=True, ), diff --git a/src/backend/base/langflow/components/ibm/watsonx_embeddings.py b/src/backend/base/langflow/components/ibm/watsonx_embeddings.py index d86c4a0ca57c..87a44a63c039 100644 --- a/src/backend/base/langflow/components/ibm/watsonx_embeddings.py +++ b/src/backend/base/langflow/components/ibm/watsonx_embeddings.py @@ -51,7 +51,7 @@ class WatsonxEmbeddingsComponent(LCEmbeddingsModel): ), SecretStrInput( name="api_key", - display_name="API Key", + display_name="Watsonx API Key", info="The API Key to use for the model.", required=True, ), diff --git a/src/backend/base/langflow/components/icosacomputing/combinatorial_reasoner.py b/src/backend/base/langflow/components/icosacomputing/combinatorial_reasoner.py index e2242f0da486..1169b5920623 100644 --- a/src/backend/base/langflow/components/icosacomputing/combinatorial_reasoner.py +++ b/src/backend/base/langflow/components/icosacomputing/combinatorial_reasoner.py @@ -34,7 +34,7 @@ class CombinatorialReasonerComponent(Component): ), SecretStrInput( name="password", - display_name="Password", + display_name="Combinatorial Reasoner Password", info="Password to authenticate access to Icosa CR API.", advanced=False, required=True, diff --git a/src/backend/base/langflow/components/langchain_utilities/langchain_hub.py b/src/backend/base/langflow/components/langchain_utilities/langchain_hub.py index 64ebca3559e0..a6e0451d4f74 100644 --- a/src/backend/base/langflow/components/langchain_utilities/langchain_hub.py +++ b/src/backend/base/langflow/components/langchain_utilities/langchain_hub.py @@ -19,7 +19,7 @@ class LangChainHubPromptComponent(Component): inputs = [ SecretStrInput( name="langchain_api_key", - display_name="Your LangChain API Key", + display_name="LangChain API Key", info="The LangChain API Key to use.", required=True, ), diff --git a/src/backend/base/langflow/components/langwatch/langwatch.py b/src/backend/base/langflow/components/langwatch/langwatch.py index 2b5d8b0a14e6..2f0bb1637327 100644 --- a/src/backend/base/langflow/components/langwatch/langwatch.py +++ b/src/backend/base/langflow/components/langwatch/langwatch.py @@ -41,7 +41,7 @@ class LangWatchComponent(Component): ), SecretStrInput( name="api_key", - display_name="API Key", + display_name="LangWatch API Key", required=True, info="Enter your LangWatch API key.", ), diff --git a/src/backend/base/langflow/components/milvus/milvus.py b/src/backend/base/langflow/components/milvus/milvus.py index 43b0334d19b3..f0bc9606ca40 100644 --- a/src/backend/base/langflow/components/milvus/milvus.py +++ b/src/backend/base/langflow/components/milvus/milvus.py @@ -31,7 +31,7 @@ class MilvusVectorStoreComponent(LCVectorStoreComponent): ), SecretStrInput( name="password", - display_name="Token", + display_name="Milvus Token", value="", info="Ignore this field if no token is required to make connection.", ), diff --git a/src/backend/base/langflow/components/olivya/olivya.py b/src/backend/base/langflow/components/olivya/olivya.py index eab1a674972a..9b1cd69e7aca 100644 --- a/src/backend/base/langflow/components/olivya/olivya.py +++ b/src/backend/base/langflow/components/olivya/olivya.py @@ -18,7 +18,7 @@ class OlivyaComponent(Component): inputs = [ MessageTextInput( name="api_key", - display_name="API Key", + display_name="Olivya API Key", info="Your API key for authentication", value="", required=True, diff --git a/src/backend/base/langflow/components/qdrant/qdrant.py b/src/backend/base/langflow/components/qdrant/qdrant.py index e2f2fca66624..4ca2d63d4c5a 100644 --- a/src/backend/base/langflow/components/qdrant/qdrant.py +++ b/src/backend/base/langflow/components/qdrant/qdrant.py @@ -23,7 +23,7 @@ class QdrantVectorStoreComponent(LCVectorStoreComponent): StrInput(name="host", display_name="Host", value="localhost", advanced=True), IntInput(name="port", display_name="Port", value=6333, advanced=True), IntInput(name="grpc_port", display_name="gRPC Port", value=6334, advanced=True), - SecretStrInput(name="api_key", display_name="API Key", advanced=True), + SecretStrInput(name="api_key", display_name="Qdrant API Key", advanced=True), StrInput(name="prefix", display_name="Prefix", advanced=True), IntInput(name="timeout", display_name="Timeout", advanced=True), StrInput(name="path", display_name="Path", advanced=True), diff --git a/src/backend/base/langflow/components/redis/redis_chat.py b/src/backend/base/langflow/components/redis/redis_chat.py index 95b47da03543..aa4f01eb165b 100644 --- a/src/backend/base/langflow/components/redis/redis_chat.py +++ b/src/backend/base/langflow/components/redis/redis_chat.py @@ -23,7 +23,7 @@ class RedisIndexChatMemory(LCChatMemoryComponent): name="username", display_name="Username", value="", info="The Redis user name.", advanced=True ), SecretStrInput( - name="password", display_name="Password", value="", info="The password for username.", advanced=True + name="password", display_name="Redis Password", value="", info="The password for username.", advanced=True ), StrInput(name="key_prefix", display_name="Key prefix", info="Key prefix.", advanced=True), MessageTextInput( diff --git a/src/backend/base/langflow/components/twelvelabs/video_embeddings.py b/src/backend/base/langflow/components/twelvelabs/video_embeddings.py index 50819cbf9603..d7dc5c3d7c7b 100644 --- a/src/backend/base/langflow/components/twelvelabs/video_embeddings.py +++ b/src/backend/base/langflow/components/twelvelabs/video_embeddings.py @@ -85,7 +85,7 @@ class TwelveLabsVideoEmbeddingsComponent(LCEmbeddingsModel): icon = "TwelveLabs" 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="API Key", required=True), + SecretStrInput(name="api_key", display_name="TwelveLabs API Key", required=True), DropdownInput( name="model_name", display_name="Model", diff --git a/src/backend/base/langflow/components/upstash/upstash.py b/src/backend/base/langflow/components/upstash/upstash.py index 3dfee691a3b8..f69a48112e05 100644 --- a/src/backend/base/langflow/components/upstash/upstash.py +++ b/src/backend/base/langflow/components/upstash/upstash.py @@ -27,7 +27,7 @@ class UpstashVectorStoreComponent(LCVectorStoreComponent): ), SecretStrInput( name="index_token", - display_name="Index Token", + display_name="Upstash Index Token", info="The token for the Upstash index.", required=True, ), diff --git a/src/backend/base/langflow/components/weaviate/weaviate.py b/src/backend/base/langflow/components/weaviate/weaviate.py index 964dd170dc79..e66df8e0399f 100644 --- a/src/backend/base/langflow/components/weaviate/weaviate.py +++ b/src/backend/base/langflow/components/weaviate/weaviate.py @@ -15,7 +15,7 @@ class WeaviateVectorStoreComponent(LCVectorStoreComponent): inputs = [ StrInput(name="url", display_name="Weaviate URL", value="http://localhost:8080", required=True), - SecretStrInput(name="api_key", display_name="API Key", required=False), + SecretStrInput(name="api_key", display_name="Weaviate API Key", required=False), StrInput( name="index_name", display_name="Index Name", diff --git a/src/backend/base/langflow/components/wolframalpha/wolfram_alpha_api.py b/src/backend/base/langflow/components/wolframalpha/wolfram_alpha_api.py index 61e1e8ada400..749f7b78771e 100644 --- a/src/backend/base/langflow/components/wolframalpha/wolfram_alpha_api.py +++ b/src/backend/base/langflow/components/wolframalpha/wolfram_alpha_api.py @@ -22,7 +22,7 @@ class WolframAlphaAPIComponent(LCToolComponent): MultilineInput( name="input_value", display_name="Input Query", info="Example query: 'What is the population of France?'" ), - SecretStrInput(name="app_id", display_name="App ID", required=True), + SecretStrInput(name="app_id", display_name="WolframAlpha App ID", required=True), ] icon = "WolframAlphaAPI" diff --git a/src/backend/base/langflow/components/zep/zep.py b/src/backend/base/langflow/components/zep/zep.py index 27473a951ba8..a4e60ef48c3b 100644 --- a/src/backend/base/langflow/components/zep/zep.py +++ b/src/backend/base/langflow/components/zep/zep.py @@ -12,7 +12,7 @@ class ZepChatMemory(LCChatMemoryComponent): inputs = [ MessageTextInput(name="url", display_name="Zep URL", info="URL of the Zep instance."), - SecretStrInput(name="api_key", display_name="API Key", info="API Key for the Zep instance."), + SecretStrInput(name="api_key", display_name="Zep API Key", info="API Key for the Zep instance."), DropdownInput( name="api_base_path", display_name="API Base Path", diff --git a/src/backend/base/langflow/initial_setup/starter_projects/News Aggregator.json b/src/backend/base/langflow/initial_setup/starter_projects/News Aggregator.json index 9184e74c1e3d..a72e188bd76f 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/News Aggregator.json +++ b/src/backend/base/langflow/initial_setup/starter_projects/News Aggregator.json @@ -205,7 +205,7 @@ "legacy": false, "lf_version": "1.4.3", "metadata": { - "code_hash": "ab828f4cdff2", + "code_hash": "c88b73d7a17d", "dependencies": { "dependencies": [ { @@ -248,7 +248,7 @@ "api_key": { "_input_type": "SecretStrInput", "advanced": false, - "display_name": "API Key", + "display_name": "AgentQL API Key", "dynamic": false, "info": "Your AgentQL API key from dev.agentql.com", "input_types": [], @@ -278,7 +278,7 @@ "show": true, "title_case": false, "type": "code", - "value": "import httpx\n\nfrom langflow.custom.custom_component.component import Component\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.io import BoolInput, DropdownInput, IntInput, MessageTextInput, MultilineInput, Output, SecretStrInput\nfrom langflow.logging.logger import logger\nfrom langflow.schema.data import Data\n\n\nclass AgentQL(Component):\n display_name = \"Extract Web Data\"\n description = \"Extracts structured data from a web page using an AgentQL query or a Natural Language description.\"\n documentation: str = \"https://docs.agentql.com/rest-api/api-reference\"\n icon = \"AgentQL\"\n name = \"AgentQL\"\n\n inputs = [\n SecretStrInput(\n name=\"api_key\",\n display_name=\"API Key\",\n required=True,\n password=True,\n info=\"Your AgentQL API key from dev.agentql.com\",\n ),\n MessageTextInput(\n name=\"url\",\n display_name=\"URL\",\n required=True,\n info=\"The URL of the public web page you want to extract data from.\",\n tool_mode=True,\n ),\n MultilineInput(\n name=\"query\",\n display_name=\"AgentQL Query\",\n required=False,\n info=\"The AgentQL query to execute. Learn more at https://docs.agentql.com/agentql-query or use a prompt.\",\n tool_mode=True,\n ),\n MultilineInput(\n name=\"prompt\",\n display_name=\"Prompt\",\n required=False,\n info=\"A Natural Language description of the data to extract from the page. Alternative to AgentQL query.\",\n tool_mode=True,\n ),\n BoolInput(\n name=\"is_stealth_mode_enabled\",\n display_name=\"Enable Stealth Mode (Beta)\",\n info=\"Enable experimental anti-bot evasion strategies. May not work for all websites at all times.\",\n value=False,\n advanced=True,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"Seconds to wait for a request.\",\n value=900,\n advanced=True,\n ),\n DropdownInput(\n name=\"mode\",\n display_name=\"Request Mode\",\n info=\"'standard' uses deep data analysis, while 'fast' trades some depth of analysis for speed.\",\n options=[\"fast\", \"standard\"],\n value=\"fast\",\n advanced=True,\n ),\n IntInput(\n name=\"wait_for\",\n display_name=\"Wait For\",\n info=\"Seconds to wait for the page to load before extracting data.\",\n value=0,\n range_spec=RangeSpec(min=0, max=10, step_type=\"int\"),\n advanced=True,\n ),\n BoolInput(\n name=\"is_scroll_to_bottom_enabled\",\n display_name=\"Enable scroll to bottom\",\n info=\"Scroll to bottom of the page before extracting data.\",\n value=False,\n advanced=True,\n ),\n BoolInput(\n name=\"is_screenshot_enabled\",\n display_name=\"Enable screenshot\",\n info=\"Take a screenshot before extracting data. Returned in 'metadata' as a Base64 string.\",\n value=False,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Data\", name=\"data\", method=\"build_output\"),\n ]\n\n def build_output(self) -> Data:\n endpoint = \"https://api.agentql.com/v1/query-data\"\n headers = {\n \"X-API-Key\": self.api_key,\n \"Content-Type\": \"application/json\",\n \"X-TF-Request-Origin\": \"langflow\",\n }\n\n payload = {\n \"url\": self.url,\n \"query\": self.query,\n \"prompt\": self.prompt,\n \"params\": {\n \"mode\": self.mode,\n \"wait_for\": self.wait_for,\n \"is_scroll_to_bottom_enabled\": self.is_scroll_to_bottom_enabled,\n \"is_screenshot_enabled\": self.is_screenshot_enabled,\n },\n \"metadata\": {\n \"experimental_stealth_mode_enabled\": self.is_stealth_mode_enabled,\n },\n }\n\n if not self.prompt and not self.query:\n self.status = \"Either Query or Prompt must be provided.\"\n raise ValueError(self.status)\n if self.prompt and self.query:\n self.status = \"Both Query and Prompt can't be provided at the same time.\"\n raise ValueError(self.status)\n\n try:\n response = httpx.post(endpoint, headers=headers, json=payload, timeout=self.timeout)\n response.raise_for_status()\n\n json = response.json()\n data = Data(result=json[\"data\"], metadata=json[\"metadata\"])\n\n except httpx.HTTPStatusError as e:\n response = e.response\n if response.status_code == httpx.codes.UNAUTHORIZED:\n self.status = \"Please, provide a valid API Key. You can create one at https://dev.agentql.com.\"\n else:\n try:\n error_json = response.json()\n logger.error(\n f\"Failure response: '{response.status_code} {response.reason_phrase}' with body: {error_json}\"\n )\n msg = error_json[\"error_info\"] if \"error_info\" in error_json else error_json[\"detail\"]\n except (ValueError, TypeError):\n msg = f\"HTTP {e}.\"\n self.status = msg\n raise ValueError(self.status) from e\n\n else:\n self.status = data\n return data\n" + "value": "import httpx\n\nfrom langflow.custom.custom_component.component import Component\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.io import BoolInput, DropdownInput, IntInput, MessageTextInput, MultilineInput, Output, SecretStrInput\nfrom langflow.logging.logger import logger\nfrom langflow.schema.data import Data\n\n\nclass AgentQL(Component):\n display_name = \"Extract Web Data\"\n description = \"Extracts structured data from a web page using an AgentQL query or a Natural Language description.\"\n documentation: str = \"https://docs.agentql.com/rest-api/api-reference\"\n icon = \"AgentQL\"\n name = \"AgentQL\"\n\n inputs = [\n SecretStrInput(\n name=\"api_key\",\n display_name=\"AgentQL API Key\",\n required=True,\n password=True,\n info=\"Your AgentQL API key from dev.agentql.com\",\n ),\n MessageTextInput(\n name=\"url\",\n display_name=\"URL\",\n required=True,\n info=\"The URL of the public web page you want to extract data from.\",\n tool_mode=True,\n ),\n MultilineInput(\n name=\"query\",\n display_name=\"AgentQL Query\",\n required=False,\n info=\"The AgentQL query to execute. Learn more at https://docs.agentql.com/agentql-query or use a prompt.\",\n tool_mode=True,\n ),\n MultilineInput(\n name=\"prompt\",\n display_name=\"Prompt\",\n required=False,\n info=\"A Natural Language description of the data to extract from the page. Alternative to AgentQL query.\",\n tool_mode=True,\n ),\n BoolInput(\n name=\"is_stealth_mode_enabled\",\n display_name=\"Enable Stealth Mode (Beta)\",\n info=\"Enable experimental anti-bot evasion strategies. May not work for all websites at all times.\",\n value=False,\n advanced=True,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"Seconds to wait for a request.\",\n value=900,\n advanced=True,\n ),\n DropdownInput(\n name=\"mode\",\n display_name=\"Request Mode\",\n info=\"'standard' uses deep data analysis, while 'fast' trades some depth of analysis for speed.\",\n options=[\"fast\", \"standard\"],\n value=\"fast\",\n advanced=True,\n ),\n IntInput(\n name=\"wait_for\",\n display_name=\"Wait For\",\n info=\"Seconds to wait for the page to load before extracting data.\",\n value=0,\n range_spec=RangeSpec(min=0, max=10, step_type=\"int\"),\n advanced=True,\n ),\n BoolInput(\n name=\"is_scroll_to_bottom_enabled\",\n display_name=\"Enable scroll to bottom\",\n info=\"Scroll to bottom of the page before extracting data.\",\n value=False,\n advanced=True,\n ),\n BoolInput(\n name=\"is_screenshot_enabled\",\n display_name=\"Enable screenshot\",\n info=\"Take a screenshot before extracting data. Returned in 'metadata' as a Base64 string.\",\n value=False,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Data\", name=\"data\", method=\"build_output\"),\n ]\n\n def build_output(self) -> Data:\n endpoint = \"https://api.agentql.com/v1/query-data\"\n headers = {\n \"X-API-Key\": self.api_key,\n \"Content-Type\": \"application/json\",\n \"X-TF-Request-Origin\": \"langflow\",\n }\n\n payload = {\n \"url\": self.url,\n \"query\": self.query,\n \"prompt\": self.prompt,\n \"params\": {\n \"mode\": self.mode,\n \"wait_for\": self.wait_for,\n \"is_scroll_to_bottom_enabled\": self.is_scroll_to_bottom_enabled,\n \"is_screenshot_enabled\": self.is_screenshot_enabled,\n },\n \"metadata\": {\n \"experimental_stealth_mode_enabled\": self.is_stealth_mode_enabled,\n },\n }\n\n if not self.prompt and not self.query:\n self.status = \"Either Query or Prompt must be provided.\"\n raise ValueError(self.status)\n if self.prompt and self.query:\n self.status = \"Both Query and Prompt can't be provided at the same time.\"\n raise ValueError(self.status)\n\n try:\n response = httpx.post(endpoint, headers=headers, json=payload, timeout=self.timeout)\n response.raise_for_status()\n\n json = response.json()\n data = Data(result=json[\"data\"], metadata=json[\"metadata\"])\n\n except httpx.HTTPStatusError as e:\n response = e.response\n if response.status_code == httpx.codes.UNAUTHORIZED:\n self.status = \"Please, provide a valid API Key. You can create one at https://dev.agentql.com.\"\n else:\n try:\n error_json = response.json()\n logger.error(\n f\"Failure response: '{response.status_code} {response.reason_phrase}' with body: {error_json}\"\n )\n msg = error_json[\"error_info\"] if \"error_info\" in error_json else error_json[\"detail\"]\n except (ValueError, TypeError):\n msg = f\"HTTP {e}.\"\n self.status = msg\n raise ValueError(self.status) from e\n\n else:\n self.status = data\n return data\n" }, "is_screenshot_enabled": { "_input_type": "BoolInput", diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Price Deal Finder.json b/src/backend/base/langflow/initial_setup/starter_projects/Price Deal Finder.json index ec791581060b..b8ecdd322196 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/Price Deal Finder.json +++ b/src/backend/base/langflow/initial_setup/starter_projects/Price Deal Finder.json @@ -1207,7 +1207,7 @@ "legacy": false, "lf_version": "1.3.2", "metadata": { - "code_hash": "ab828f4cdff2", + "code_hash": "c88b73d7a17d", "dependencies": { "dependencies": [ { @@ -1250,7 +1250,7 @@ "api_key": { "_input_type": "SecretStrInput", "advanced": false, - "display_name": "API Key", + "display_name": "AgentQL API Key", "dynamic": false, "info": "Your AgentQL API key from dev.agentql.com", "input_types": [], @@ -1280,7 +1280,7 @@ "show": true, "title_case": false, "type": "code", - "value": "import httpx\n\nfrom langflow.custom.custom_component.component import Component\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.io import BoolInput, DropdownInput, IntInput, MessageTextInput, MultilineInput, Output, SecretStrInput\nfrom langflow.logging.logger import logger\nfrom langflow.schema.data import Data\n\n\nclass AgentQL(Component):\n display_name = \"Extract Web Data\"\n description = \"Extracts structured data from a web page using an AgentQL query or a Natural Language description.\"\n documentation: str = \"https://docs.agentql.com/rest-api/api-reference\"\n icon = \"AgentQL\"\n name = \"AgentQL\"\n\n inputs = [\n SecretStrInput(\n name=\"api_key\",\n display_name=\"API Key\",\n required=True,\n password=True,\n info=\"Your AgentQL API key from dev.agentql.com\",\n ),\n MessageTextInput(\n name=\"url\",\n display_name=\"URL\",\n required=True,\n info=\"The URL of the public web page you want to extract data from.\",\n tool_mode=True,\n ),\n MultilineInput(\n name=\"query\",\n display_name=\"AgentQL Query\",\n required=False,\n info=\"The AgentQL query to execute. Learn more at https://docs.agentql.com/agentql-query or use a prompt.\",\n tool_mode=True,\n ),\n MultilineInput(\n name=\"prompt\",\n display_name=\"Prompt\",\n required=False,\n info=\"A Natural Language description of the data to extract from the page. Alternative to AgentQL query.\",\n tool_mode=True,\n ),\n BoolInput(\n name=\"is_stealth_mode_enabled\",\n display_name=\"Enable Stealth Mode (Beta)\",\n info=\"Enable experimental anti-bot evasion strategies. May not work for all websites at all times.\",\n value=False,\n advanced=True,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"Seconds to wait for a request.\",\n value=900,\n advanced=True,\n ),\n DropdownInput(\n name=\"mode\",\n display_name=\"Request Mode\",\n info=\"'standard' uses deep data analysis, while 'fast' trades some depth of analysis for speed.\",\n options=[\"fast\", \"standard\"],\n value=\"fast\",\n advanced=True,\n ),\n IntInput(\n name=\"wait_for\",\n display_name=\"Wait For\",\n info=\"Seconds to wait for the page to load before extracting data.\",\n value=0,\n range_spec=RangeSpec(min=0, max=10, step_type=\"int\"),\n advanced=True,\n ),\n BoolInput(\n name=\"is_scroll_to_bottom_enabled\",\n display_name=\"Enable scroll to bottom\",\n info=\"Scroll to bottom of the page before extracting data.\",\n value=False,\n advanced=True,\n ),\n BoolInput(\n name=\"is_screenshot_enabled\",\n display_name=\"Enable screenshot\",\n info=\"Take a screenshot before extracting data. Returned in 'metadata' as a Base64 string.\",\n value=False,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Data\", name=\"data\", method=\"build_output\"),\n ]\n\n def build_output(self) -> Data:\n endpoint = \"https://api.agentql.com/v1/query-data\"\n headers = {\n \"X-API-Key\": self.api_key,\n \"Content-Type\": \"application/json\",\n \"X-TF-Request-Origin\": \"langflow\",\n }\n\n payload = {\n \"url\": self.url,\n \"query\": self.query,\n \"prompt\": self.prompt,\n \"params\": {\n \"mode\": self.mode,\n \"wait_for\": self.wait_for,\n \"is_scroll_to_bottom_enabled\": self.is_scroll_to_bottom_enabled,\n \"is_screenshot_enabled\": self.is_screenshot_enabled,\n },\n \"metadata\": {\n \"experimental_stealth_mode_enabled\": self.is_stealth_mode_enabled,\n },\n }\n\n if not self.prompt and not self.query:\n self.status = \"Either Query or Prompt must be provided.\"\n raise ValueError(self.status)\n if self.prompt and self.query:\n self.status = \"Both Query and Prompt can't be provided at the same time.\"\n raise ValueError(self.status)\n\n try:\n response = httpx.post(endpoint, headers=headers, json=payload, timeout=self.timeout)\n response.raise_for_status()\n\n json = response.json()\n data = Data(result=json[\"data\"], metadata=json[\"metadata\"])\n\n except httpx.HTTPStatusError as e:\n response = e.response\n if response.status_code == httpx.codes.UNAUTHORIZED:\n self.status = \"Please, provide a valid API Key. You can create one at https://dev.agentql.com.\"\n else:\n try:\n error_json = response.json()\n logger.error(\n f\"Failure response: '{response.status_code} {response.reason_phrase}' with body: {error_json}\"\n )\n msg = error_json[\"error_info\"] if \"error_info\" in error_json else error_json[\"detail\"]\n except (ValueError, TypeError):\n msg = f\"HTTP {e}.\"\n self.status = msg\n raise ValueError(self.status) from e\n\n else:\n self.status = data\n return data\n" + "value": "import httpx\n\nfrom langflow.custom.custom_component.component import Component\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.io import BoolInput, DropdownInput, IntInput, MessageTextInput, MultilineInput, Output, SecretStrInput\nfrom langflow.logging.logger import logger\nfrom langflow.schema.data import Data\n\n\nclass AgentQL(Component):\n display_name = \"Extract Web Data\"\n description = \"Extracts structured data from a web page using an AgentQL query or a Natural Language description.\"\n documentation: str = \"https://docs.agentql.com/rest-api/api-reference\"\n icon = \"AgentQL\"\n name = \"AgentQL\"\n\n inputs = [\n SecretStrInput(\n name=\"api_key\",\n display_name=\"AgentQL API Key\",\n required=True,\n password=True,\n info=\"Your AgentQL API key from dev.agentql.com\",\n ),\n MessageTextInput(\n name=\"url\",\n display_name=\"URL\",\n required=True,\n info=\"The URL of the public web page you want to extract data from.\",\n tool_mode=True,\n ),\n MultilineInput(\n name=\"query\",\n display_name=\"AgentQL Query\",\n required=False,\n info=\"The AgentQL query to execute. Learn more at https://docs.agentql.com/agentql-query or use a prompt.\",\n tool_mode=True,\n ),\n MultilineInput(\n name=\"prompt\",\n display_name=\"Prompt\",\n required=False,\n info=\"A Natural Language description of the data to extract from the page. Alternative to AgentQL query.\",\n tool_mode=True,\n ),\n BoolInput(\n name=\"is_stealth_mode_enabled\",\n display_name=\"Enable Stealth Mode (Beta)\",\n info=\"Enable experimental anti-bot evasion strategies. May not work for all websites at all times.\",\n value=False,\n advanced=True,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"Seconds to wait for a request.\",\n value=900,\n advanced=True,\n ),\n DropdownInput(\n name=\"mode\",\n display_name=\"Request Mode\",\n info=\"'standard' uses deep data analysis, while 'fast' trades some depth of analysis for speed.\",\n options=[\"fast\", \"standard\"],\n value=\"fast\",\n advanced=True,\n ),\n IntInput(\n name=\"wait_for\",\n display_name=\"Wait For\",\n info=\"Seconds to wait for the page to load before extracting data.\",\n value=0,\n range_spec=RangeSpec(min=0, max=10, step_type=\"int\"),\n advanced=True,\n ),\n BoolInput(\n name=\"is_scroll_to_bottom_enabled\",\n display_name=\"Enable scroll to bottom\",\n info=\"Scroll to bottom of the page before extracting data.\",\n value=False,\n advanced=True,\n ),\n BoolInput(\n name=\"is_screenshot_enabled\",\n display_name=\"Enable screenshot\",\n info=\"Take a screenshot before extracting data. Returned in 'metadata' as a Base64 string.\",\n value=False,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Data\", name=\"data\", method=\"build_output\"),\n ]\n\n def build_output(self) -> Data:\n endpoint = \"https://api.agentql.com/v1/query-data\"\n headers = {\n \"X-API-Key\": self.api_key,\n \"Content-Type\": \"application/json\",\n \"X-TF-Request-Origin\": \"langflow\",\n }\n\n payload = {\n \"url\": self.url,\n \"query\": self.query,\n \"prompt\": self.prompt,\n \"params\": {\n \"mode\": self.mode,\n \"wait_for\": self.wait_for,\n \"is_scroll_to_bottom_enabled\": self.is_scroll_to_bottom_enabled,\n \"is_screenshot_enabled\": self.is_screenshot_enabled,\n },\n \"metadata\": {\n \"experimental_stealth_mode_enabled\": self.is_stealth_mode_enabled,\n },\n }\n\n if not self.prompt and not self.query:\n self.status = \"Either Query or Prompt must be provided.\"\n raise ValueError(self.status)\n if self.prompt and self.query:\n self.status = \"Both Query and Prompt can't be provided at the same time.\"\n raise ValueError(self.status)\n\n try:\n response = httpx.post(endpoint, headers=headers, json=payload, timeout=self.timeout)\n response.raise_for_status()\n\n json = response.json()\n data = Data(result=json[\"data\"], metadata=json[\"metadata\"])\n\n except httpx.HTTPStatusError as e:\n response = e.response\n if response.status_code == httpx.codes.UNAUTHORIZED:\n self.status = \"Please, provide a valid API Key. You can create one at https://dev.agentql.com.\"\n else:\n try:\n error_json = response.json()\n logger.error(\n f\"Failure response: '{response.status_code} {response.reason_phrase}' with body: {error_json}\"\n )\n msg = error_json[\"error_info\"] if \"error_info\" in error_json else error_json[\"detail\"]\n except (ValueError, TypeError):\n msg = f\"HTTP {e}.\"\n self.status = msg\n raise ValueError(self.status) from e\n\n else:\n self.status = data\n return data\n" }, "is_screenshot_enabled": { "_input_type": "BoolInput", diff --git a/src/frontend/src/controllers/API/queries/flows/use-get-refresh-flows-query.ts b/src/frontend/src/controllers/API/queries/flows/use-get-refresh-flows-query.ts index 1bbca7636b2f..9b8ac944c883 100644 --- a/src/frontend/src/controllers/API/queries/flows/use-get-refresh-flows-query.ts +++ b/src/frontend/src/controllers/API/queries/flows/use-get-refresh-flows-query.ts @@ -7,7 +7,7 @@ import { useTypesStore } from "@/stores/typesStore"; import type { useQueryFunctionType } from "@/types/api"; import type { FlowType, PaginatedFlowsType } from "@/types/flow"; import { - extractFieldsFromComponenents, + extractSecretFieldsFromComponents, processFlows, } from "@/utils/reactflowUtils"; import { api } from "../../api"; @@ -58,7 +58,7 @@ export const useGetRefreshFlowsQuery: useQueryFunctionType< const { data } = processFlows(dbDataComponents); useTypesStore.setState((state) => ({ data: { ...state.data, ["saved_components"]: data }, - ComponentFields: extractFieldsFromComponenents({ + ComponentFields: extractSecretFieldsFromComponents({ ...state.data, ["saved_components"]: data, }), diff --git a/src/frontend/src/stores/typesStore.ts b/src/frontend/src/stores/typesStore.ts index a7e487ade767..e2181855d5f7 100644 --- a/src/frontend/src/stores/typesStore.ts +++ b/src/frontend/src/stores/typesStore.ts @@ -2,7 +2,7 @@ import { create } from "zustand"; import type { APIDataType } from "../types/api"; import type { TypesStoreType } from "../types/zustand/types"; import { - extractFieldsFromComponenents, + extractSecretFieldsFromComponents, templatesGenerator, typesGenerator, } from "../utils/reactflowUtils"; @@ -22,7 +22,7 @@ export const useTypesStore = create((set, get) => ({ set((old) => ({ types: typesGenerator(data), data: { ...old.data, ...data }, - ComponentFields: extractFieldsFromComponenents({ + ComponentFields: extractSecretFieldsFromComponents({ ...old.data, ...data, }), @@ -36,6 +36,6 @@ export const useTypesStore = create((set, get) => ({ const newChange = typeof change === "function" ? change(get().data) : change; set({ data: newChange }); - get().setComponentFields(extractFieldsFromComponenents(newChange)); + get().setComponentFields(extractSecretFieldsFromComponents(newChange)); }, })); diff --git a/src/frontend/src/utils/reactflowUtils.ts b/src/frontend/src/utils/reactflowUtils.ts index 01fcb52b3455..539db41973ba 100644 --- a/src/frontend/src/utils/reactflowUtils.ts +++ b/src/frontend/src/utils/reactflowUtils.ts @@ -1821,6 +1821,84 @@ export function templatesGenerator(data: APIObjectType) { }, {}); } +/** + * Determines if a field is a SecretStr field type + */ +function isSecretField(fieldData: any): boolean { + // Check if field type is specifically SecretStr + if (fieldData?.type === "SecretStr") { + return true; + } + + // Also check for fields that have both password=true and load_from_db=true + // which are characteristics of SecretStrInput fields + if (fieldData?.password === true && fieldData?.load_from_db === true) { + return true; + } + + return false; +} + +/** + * Extract only SecretStr type fields from components for global variables + */ +export function extractSecretFieldsFromComponents(data: APIObjectType) { + const fields = new Set(); + + // Check if data exists + if (!data) { + console.warn( + "[Types] Data is undefined in extractSecretFieldsFromComponents", + ); + return fields; + } + + Object.keys(data).forEach((key) => { + // Check if data[key] exists + if (!data[key]) { + console.warn( + `[Types] data["${key}"] is undefined in extractSecretFieldsFromComponents`, + ); + return; + } + + Object.keys(data[key]).forEach((kind) => { + // Check if data[key][kind] exists + if (!data[key][kind]) { + console.warn( + `[Types] data["${key}"]["${kind}"] is undefined in extractSecretFieldsFromComponents`, + ); + return; + } + + // Skip legacy components + if (data[key][kind].legacy === true) { + return; + } + + // Check if template exists + if (!data[key][kind].template) { + console.warn( + `[Types] data["${key}"]["${kind}"].template is undefined in extractSecretFieldsFromComponents`, + ); + return; + } + + Object.keys(data[key][kind].template).forEach((field) => { + const fieldData = data[key][kind].template[field]; + if ( + fieldData?.display_name && + fieldData?.show && + isSecretField(fieldData) + ) + fields.add(fieldData.display_name!); + }); + }); + }); + + return fields; +} + export function extractFieldsFromComponenents(data: APIObjectType) { const fields = new Set(); @@ -1847,7 +1925,6 @@ export function extractFieldsFromComponenents(data: APIObjectType) { ); return; } - // Check if template exists if (!data[key][kind].template) { console.warn(