lfx-nightly 0.2.0.dev25__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of lfx-nightly might be problematic. Click here for more details.
- lfx/__init__.py +0 -0
- lfx/__main__.py +25 -0
- lfx/_assets/component_index.json +1 -0
- lfx/base/__init__.py +0 -0
- lfx/base/agents/__init__.py +0 -0
- lfx/base/agents/agent.py +375 -0
- lfx/base/agents/altk_base_agent.py +380 -0
- lfx/base/agents/altk_tool_wrappers.py +565 -0
- lfx/base/agents/callback.py +130 -0
- lfx/base/agents/context.py +109 -0
- lfx/base/agents/crewai/__init__.py +0 -0
- lfx/base/agents/crewai/crew.py +231 -0
- lfx/base/agents/crewai/tasks.py +12 -0
- lfx/base/agents/default_prompts.py +23 -0
- lfx/base/agents/errors.py +15 -0
- lfx/base/agents/events.py +430 -0
- lfx/base/agents/utils.py +237 -0
- lfx/base/astra_assistants/__init__.py +0 -0
- lfx/base/astra_assistants/util.py +171 -0
- lfx/base/chains/__init__.py +0 -0
- lfx/base/chains/model.py +19 -0
- lfx/base/composio/__init__.py +0 -0
- lfx/base/composio/composio_base.py +2584 -0
- lfx/base/compressors/__init__.py +0 -0
- lfx/base/compressors/model.py +60 -0
- lfx/base/constants.py +46 -0
- lfx/base/curl/__init__.py +0 -0
- lfx/base/curl/parse.py +188 -0
- lfx/base/data/__init__.py +5 -0
- lfx/base/data/base_file.py +810 -0
- lfx/base/data/docling_utils.py +338 -0
- lfx/base/data/storage_utils.py +192 -0
- lfx/base/data/utils.py +362 -0
- lfx/base/datastax/__init__.py +5 -0
- lfx/base/datastax/astradb_base.py +896 -0
- lfx/base/document_transformers/__init__.py +0 -0
- lfx/base/document_transformers/model.py +43 -0
- lfx/base/embeddings/__init__.py +0 -0
- lfx/base/embeddings/aiml_embeddings.py +62 -0
- lfx/base/embeddings/embeddings_class.py +113 -0
- lfx/base/embeddings/model.py +26 -0
- lfx/base/flow_processing/__init__.py +0 -0
- lfx/base/flow_processing/utils.py +86 -0
- lfx/base/huggingface/__init__.py +0 -0
- lfx/base/huggingface/model_bridge.py +133 -0
- lfx/base/io/__init__.py +0 -0
- lfx/base/io/chat.py +21 -0
- lfx/base/io/text.py +22 -0
- lfx/base/knowledge_bases/__init__.py +3 -0
- lfx/base/knowledge_bases/knowledge_base_utils.py +137 -0
- lfx/base/langchain_utilities/__init__.py +0 -0
- lfx/base/langchain_utilities/model.py +35 -0
- lfx/base/langchain_utilities/spider_constants.py +1 -0
- lfx/base/langwatch/__init__.py +0 -0
- lfx/base/langwatch/utils.py +18 -0
- lfx/base/mcp/__init__.py +0 -0
- lfx/base/mcp/constants.py +2 -0
- lfx/base/mcp/util.py +1659 -0
- lfx/base/memory/__init__.py +0 -0
- lfx/base/memory/memory.py +49 -0
- lfx/base/memory/model.py +38 -0
- lfx/base/models/__init__.py +3 -0
- lfx/base/models/aiml_constants.py +51 -0
- lfx/base/models/anthropic_constants.py +51 -0
- lfx/base/models/aws_constants.py +151 -0
- lfx/base/models/chat_result.py +76 -0
- lfx/base/models/cometapi_constants.py +54 -0
- lfx/base/models/google_generative_ai_constants.py +70 -0
- lfx/base/models/google_generative_ai_model.py +38 -0
- lfx/base/models/groq_constants.py +150 -0
- lfx/base/models/groq_model_discovery.py +265 -0
- lfx/base/models/model.py +375 -0
- lfx/base/models/model_input_constants.py +378 -0
- lfx/base/models/model_metadata.py +41 -0
- lfx/base/models/model_utils.py +108 -0
- lfx/base/models/novita_constants.py +35 -0
- lfx/base/models/ollama_constants.py +52 -0
- lfx/base/models/openai_constants.py +129 -0
- lfx/base/models/sambanova_constants.py +18 -0
- lfx/base/models/watsonx_constants.py +36 -0
- lfx/base/processing/__init__.py +0 -0
- lfx/base/prompts/__init__.py +0 -0
- lfx/base/prompts/api_utils.py +224 -0
- lfx/base/prompts/utils.py +61 -0
- lfx/base/textsplitters/__init__.py +0 -0
- lfx/base/textsplitters/model.py +28 -0
- lfx/base/tools/__init__.py +0 -0
- lfx/base/tools/base.py +26 -0
- lfx/base/tools/component_tool.py +325 -0
- lfx/base/tools/constants.py +49 -0
- lfx/base/tools/flow_tool.py +132 -0
- lfx/base/tools/run_flow.py +698 -0
- lfx/base/vectorstores/__init__.py +0 -0
- lfx/base/vectorstores/model.py +193 -0
- lfx/base/vectorstores/utils.py +22 -0
- lfx/base/vectorstores/vector_store_connection_decorator.py +52 -0
- lfx/cli/__init__.py +5 -0
- lfx/cli/commands.py +327 -0
- lfx/cli/common.py +650 -0
- lfx/cli/run.py +506 -0
- lfx/cli/script_loader.py +289 -0
- lfx/cli/serve_app.py +546 -0
- lfx/cli/validation.py +69 -0
- lfx/components/FAISS/__init__.py +34 -0
- lfx/components/FAISS/faiss.py +111 -0
- lfx/components/Notion/__init__.py +19 -0
- lfx/components/Notion/add_content_to_page.py +269 -0
- lfx/components/Notion/create_page.py +94 -0
- lfx/components/Notion/list_database_properties.py +68 -0
- lfx/components/Notion/list_pages.py +122 -0
- lfx/components/Notion/list_users.py +77 -0
- lfx/components/Notion/page_content_viewer.py +93 -0
- lfx/components/Notion/search.py +111 -0
- lfx/components/Notion/update_page_property.py +114 -0
- lfx/components/__init__.py +428 -0
- lfx/components/_importing.py +42 -0
- lfx/components/agentql/__init__.py +3 -0
- lfx/components/agentql/agentql_api.py +151 -0
- lfx/components/aiml/__init__.py +37 -0
- lfx/components/aiml/aiml.py +115 -0
- lfx/components/aiml/aiml_embeddings.py +37 -0
- lfx/components/altk/__init__.py +34 -0
- lfx/components/altk/altk_agent.py +193 -0
- lfx/components/amazon/__init__.py +36 -0
- lfx/components/amazon/amazon_bedrock_converse.py +195 -0
- lfx/components/amazon/amazon_bedrock_embedding.py +109 -0
- lfx/components/amazon/amazon_bedrock_model.py +130 -0
- lfx/components/amazon/s3_bucket_uploader.py +211 -0
- lfx/components/anthropic/__init__.py +34 -0
- lfx/components/anthropic/anthropic.py +187 -0
- lfx/components/apify/__init__.py +5 -0
- lfx/components/apify/apify_actor.py +325 -0
- lfx/components/arxiv/__init__.py +3 -0
- lfx/components/arxiv/arxiv.py +169 -0
- lfx/components/assemblyai/__init__.py +46 -0
- lfx/components/assemblyai/assemblyai_get_subtitles.py +83 -0
- lfx/components/assemblyai/assemblyai_lemur.py +183 -0
- lfx/components/assemblyai/assemblyai_list_transcripts.py +95 -0
- lfx/components/assemblyai/assemblyai_poll_transcript.py +72 -0
- lfx/components/assemblyai/assemblyai_start_transcript.py +188 -0
- lfx/components/azure/__init__.py +37 -0
- lfx/components/azure/azure_openai.py +95 -0
- lfx/components/azure/azure_openai_embeddings.py +83 -0
- lfx/components/baidu/__init__.py +32 -0
- lfx/components/baidu/baidu_qianfan_chat.py +113 -0
- lfx/components/bing/__init__.py +3 -0
- lfx/components/bing/bing_search_api.py +61 -0
- lfx/components/cassandra/__init__.py +40 -0
- lfx/components/cassandra/cassandra.py +264 -0
- lfx/components/cassandra/cassandra_chat.py +92 -0
- lfx/components/cassandra/cassandra_graph.py +238 -0
- lfx/components/chains/__init__.py +3 -0
- lfx/components/chroma/__init__.py +34 -0
- lfx/components/chroma/chroma.py +169 -0
- lfx/components/cleanlab/__init__.py +40 -0
- lfx/components/cleanlab/cleanlab_evaluator.py +155 -0
- lfx/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
- lfx/components/cleanlab/cleanlab_remediator.py +131 -0
- lfx/components/clickhouse/__init__.py +34 -0
- lfx/components/clickhouse/clickhouse.py +135 -0
- lfx/components/cloudflare/__init__.py +32 -0
- lfx/components/cloudflare/cloudflare.py +81 -0
- lfx/components/cohere/__init__.py +40 -0
- lfx/components/cohere/cohere_embeddings.py +81 -0
- lfx/components/cohere/cohere_models.py +46 -0
- lfx/components/cohere/cohere_rerank.py +51 -0
- lfx/components/cometapi/__init__.py +32 -0
- lfx/components/cometapi/cometapi.py +166 -0
- lfx/components/composio/__init__.py +222 -0
- lfx/components/composio/agentql_composio.py +11 -0
- lfx/components/composio/agiled_composio.py +11 -0
- lfx/components/composio/airtable_composio.py +11 -0
- lfx/components/composio/apollo_composio.py +11 -0
- lfx/components/composio/asana_composio.py +11 -0
- lfx/components/composio/attio_composio.py +11 -0
- lfx/components/composio/bitbucket_composio.py +11 -0
- lfx/components/composio/bolna_composio.py +11 -0
- lfx/components/composio/brightdata_composio.py +11 -0
- lfx/components/composio/calendly_composio.py +11 -0
- lfx/components/composio/canva_composio.py +11 -0
- lfx/components/composio/canvas_composio.py +11 -0
- lfx/components/composio/coda_composio.py +11 -0
- lfx/components/composio/composio_api.py +278 -0
- lfx/components/composio/contentful_composio.py +11 -0
- lfx/components/composio/digicert_composio.py +11 -0
- lfx/components/composio/discord_composio.py +11 -0
- lfx/components/composio/dropbox_compnent.py +11 -0
- lfx/components/composio/elevenlabs_composio.py +11 -0
- lfx/components/composio/exa_composio.py +11 -0
- lfx/components/composio/figma_composio.py +11 -0
- lfx/components/composio/finage_composio.py +11 -0
- lfx/components/composio/firecrawl_composio.py +11 -0
- lfx/components/composio/fireflies_composio.py +11 -0
- lfx/components/composio/fixer_composio.py +11 -0
- lfx/components/composio/flexisign_composio.py +11 -0
- lfx/components/composio/freshdesk_composio.py +11 -0
- lfx/components/composio/github_composio.py +11 -0
- lfx/components/composio/gmail_composio.py +38 -0
- lfx/components/composio/googlebigquery_composio.py +11 -0
- lfx/components/composio/googlecalendar_composio.py +11 -0
- lfx/components/composio/googleclassroom_composio.py +11 -0
- lfx/components/composio/googledocs_composio.py +11 -0
- lfx/components/composio/googlemeet_composio.py +11 -0
- lfx/components/composio/googlesheets_composio.py +11 -0
- lfx/components/composio/googletasks_composio.py +8 -0
- lfx/components/composio/heygen_composio.py +11 -0
- lfx/components/composio/instagram_composio.py +11 -0
- lfx/components/composio/jira_composio.py +11 -0
- lfx/components/composio/jotform_composio.py +11 -0
- lfx/components/composio/klaviyo_composio.py +11 -0
- lfx/components/composio/linear_composio.py +11 -0
- lfx/components/composio/listennotes_composio.py +11 -0
- lfx/components/composio/mem0_composio.py +11 -0
- lfx/components/composio/miro_composio.py +11 -0
- lfx/components/composio/missive_composio.py +11 -0
- lfx/components/composio/notion_composio.py +11 -0
- lfx/components/composio/onedrive_composio.py +11 -0
- lfx/components/composio/outlook_composio.py +11 -0
- lfx/components/composio/pandadoc_composio.py +11 -0
- lfx/components/composio/peopledatalabs_composio.py +11 -0
- lfx/components/composio/perplexityai_composio.py +11 -0
- lfx/components/composio/reddit_composio.py +11 -0
- lfx/components/composio/serpapi_composio.py +11 -0
- lfx/components/composio/slack_composio.py +11 -0
- lfx/components/composio/slackbot_composio.py +11 -0
- lfx/components/composio/snowflake_composio.py +11 -0
- lfx/components/composio/supabase_composio.py +11 -0
- lfx/components/composio/tavily_composio.py +11 -0
- lfx/components/composio/timelinesai_composio.py +11 -0
- lfx/components/composio/todoist_composio.py +11 -0
- lfx/components/composio/wrike_composio.py +11 -0
- lfx/components/composio/youtube_composio.py +11 -0
- lfx/components/confluence/__init__.py +3 -0
- lfx/components/confluence/confluence.py +84 -0
- lfx/components/couchbase/__init__.py +34 -0
- lfx/components/couchbase/couchbase.py +102 -0
- lfx/components/crewai/__init__.py +49 -0
- lfx/components/crewai/crewai.py +108 -0
- lfx/components/crewai/hierarchical_crew.py +47 -0
- lfx/components/crewai/hierarchical_task.py +45 -0
- lfx/components/crewai/sequential_crew.py +53 -0
- lfx/components/crewai/sequential_task.py +74 -0
- lfx/components/crewai/sequential_task_agent.py +144 -0
- lfx/components/cuga/__init__.py +34 -0
- lfx/components/cuga/cuga_agent.py +730 -0
- lfx/components/custom_component/__init__.py +34 -0
- lfx/components/custom_component/custom_component.py +31 -0
- lfx/components/data/__init__.py +114 -0
- lfx/components/data_source/__init__.py +58 -0
- lfx/components/data_source/api_request.py +577 -0
- lfx/components/data_source/csv_to_data.py +101 -0
- lfx/components/data_source/json_to_data.py +106 -0
- lfx/components/data_source/mock_data.py +398 -0
- lfx/components/data_source/news_search.py +166 -0
- lfx/components/data_source/rss.py +71 -0
- lfx/components/data_source/sql_executor.py +101 -0
- lfx/components/data_source/url.py +311 -0
- lfx/components/data_source/web_search.py +326 -0
- lfx/components/datastax/__init__.py +76 -0
- lfx/components/datastax/astradb_assistant_manager.py +307 -0
- lfx/components/datastax/astradb_chatmemory.py +40 -0
- lfx/components/datastax/astradb_cql.py +288 -0
- lfx/components/datastax/astradb_graph.py +217 -0
- lfx/components/datastax/astradb_tool.py +378 -0
- lfx/components/datastax/astradb_vectorize.py +122 -0
- lfx/components/datastax/astradb_vectorstore.py +449 -0
- lfx/components/datastax/create_assistant.py +59 -0
- lfx/components/datastax/create_thread.py +33 -0
- lfx/components/datastax/dotenv.py +36 -0
- lfx/components/datastax/get_assistant.py +38 -0
- lfx/components/datastax/getenvvar.py +31 -0
- lfx/components/datastax/graph_rag.py +141 -0
- lfx/components/datastax/hcd.py +315 -0
- lfx/components/datastax/list_assistants.py +26 -0
- lfx/components/datastax/run.py +90 -0
- lfx/components/deactivated/__init__.py +15 -0
- lfx/components/deactivated/amazon_kendra.py +66 -0
- lfx/components/deactivated/chat_litellm_model.py +158 -0
- lfx/components/deactivated/code_block_extractor.py +26 -0
- lfx/components/deactivated/documents_to_data.py +22 -0
- lfx/components/deactivated/embed.py +16 -0
- lfx/components/deactivated/extract_key_from_data.py +46 -0
- lfx/components/deactivated/json_document_builder.py +57 -0
- lfx/components/deactivated/list_flows.py +20 -0
- lfx/components/deactivated/mcp_sse.py +61 -0
- lfx/components/deactivated/mcp_stdio.py +62 -0
- lfx/components/deactivated/merge_data.py +93 -0
- lfx/components/deactivated/message.py +37 -0
- lfx/components/deactivated/metal.py +54 -0
- lfx/components/deactivated/multi_query.py +59 -0
- lfx/components/deactivated/retriever.py +43 -0
- lfx/components/deactivated/selective_passthrough.py +77 -0
- lfx/components/deactivated/should_run_next.py +40 -0
- lfx/components/deactivated/split_text.py +63 -0
- lfx/components/deactivated/store_message.py +24 -0
- lfx/components/deactivated/sub_flow.py +124 -0
- lfx/components/deactivated/vectara_self_query.py +76 -0
- lfx/components/deactivated/vector_store.py +24 -0
- lfx/components/deepseek/__init__.py +34 -0
- lfx/components/deepseek/deepseek.py +136 -0
- lfx/components/docling/__init__.py +43 -0
- lfx/components/docling/chunk_docling_document.py +186 -0
- lfx/components/docling/docling_inline.py +238 -0
- lfx/components/docling/docling_remote.py +195 -0
- lfx/components/docling/export_docling_document.py +117 -0
- lfx/components/documentloaders/__init__.py +3 -0
- lfx/components/duckduckgo/__init__.py +3 -0
- lfx/components/duckduckgo/duck_duck_go_search_run.py +92 -0
- lfx/components/elastic/__init__.py +37 -0
- lfx/components/elastic/elasticsearch.py +267 -0
- lfx/components/elastic/opensearch.py +789 -0
- lfx/components/elastic/opensearch_multimodal.py +1575 -0
- lfx/components/embeddings/__init__.py +37 -0
- lfx/components/embeddings/similarity.py +77 -0
- lfx/components/embeddings/text_embedder.py +65 -0
- lfx/components/exa/__init__.py +3 -0
- lfx/components/exa/exa_search.py +68 -0
- lfx/components/files_and_knowledge/__init__.py +47 -0
- lfx/components/files_and_knowledge/directory.py +113 -0
- lfx/components/files_and_knowledge/file.py +841 -0
- lfx/components/files_and_knowledge/ingestion.py +694 -0
- lfx/components/files_and_knowledge/retrieval.py +264 -0
- lfx/components/files_and_knowledge/save_file.py +746 -0
- lfx/components/firecrawl/__init__.py +43 -0
- lfx/components/firecrawl/firecrawl_crawl_api.py +88 -0
- lfx/components/firecrawl/firecrawl_extract_api.py +136 -0
- lfx/components/firecrawl/firecrawl_map_api.py +89 -0
- lfx/components/firecrawl/firecrawl_scrape_api.py +73 -0
- lfx/components/flow_controls/__init__.py +58 -0
- lfx/components/flow_controls/conditional_router.py +208 -0
- lfx/components/flow_controls/data_conditional_router.py +126 -0
- lfx/components/flow_controls/flow_tool.py +111 -0
- lfx/components/flow_controls/listen.py +29 -0
- lfx/components/flow_controls/loop.py +163 -0
- lfx/components/flow_controls/notify.py +88 -0
- lfx/components/flow_controls/pass_message.py +36 -0
- lfx/components/flow_controls/run_flow.py +108 -0
- lfx/components/flow_controls/sub_flow.py +115 -0
- lfx/components/git/__init__.py +4 -0
- lfx/components/git/git.py +262 -0
- lfx/components/git/gitextractor.py +196 -0
- lfx/components/glean/__init__.py +3 -0
- lfx/components/glean/glean_search_api.py +173 -0
- lfx/components/google/__init__.py +17 -0
- lfx/components/google/gmail.py +193 -0
- lfx/components/google/google_bq_sql_executor.py +157 -0
- lfx/components/google/google_drive.py +92 -0
- lfx/components/google/google_drive_search.py +152 -0
- lfx/components/google/google_generative_ai.py +144 -0
- lfx/components/google/google_generative_ai_embeddings.py +141 -0
- lfx/components/google/google_oauth_token.py +89 -0
- lfx/components/google/google_search_api_core.py +68 -0
- lfx/components/google/google_serper_api_core.py +74 -0
- lfx/components/groq/__init__.py +34 -0
- lfx/components/groq/groq.py +143 -0
- lfx/components/helpers/__init__.py +154 -0
- lfx/components/homeassistant/__init__.py +7 -0
- lfx/components/homeassistant/home_assistant_control.py +152 -0
- lfx/components/homeassistant/list_home_assistant_states.py +137 -0
- lfx/components/huggingface/__init__.py +37 -0
- lfx/components/huggingface/huggingface.py +199 -0
- lfx/components/huggingface/huggingface_inference_api.py +106 -0
- lfx/components/ibm/__init__.py +34 -0
- lfx/components/ibm/watsonx.py +207 -0
- lfx/components/ibm/watsonx_embeddings.py +135 -0
- lfx/components/icosacomputing/__init__.py +5 -0
- lfx/components/icosacomputing/combinatorial_reasoner.py +84 -0
- lfx/components/input_output/__init__.py +40 -0
- lfx/components/input_output/chat.py +109 -0
- lfx/components/input_output/chat_output.py +184 -0
- lfx/components/input_output/text.py +27 -0
- lfx/components/input_output/text_output.py +29 -0
- lfx/components/input_output/webhook.py +56 -0
- lfx/components/jigsawstack/__init__.py +23 -0
- lfx/components/jigsawstack/ai_scrape.py +126 -0
- lfx/components/jigsawstack/ai_web_search.py +136 -0
- lfx/components/jigsawstack/file_read.py +115 -0
- lfx/components/jigsawstack/file_upload.py +94 -0
- lfx/components/jigsawstack/image_generation.py +205 -0
- lfx/components/jigsawstack/nsfw.py +60 -0
- lfx/components/jigsawstack/object_detection.py +124 -0
- lfx/components/jigsawstack/sentiment.py +112 -0
- lfx/components/jigsawstack/text_to_sql.py +90 -0
- lfx/components/jigsawstack/text_translate.py +77 -0
- lfx/components/jigsawstack/vocr.py +107 -0
- lfx/components/knowledge_bases/__init__.py +89 -0
- lfx/components/langchain_utilities/__init__.py +109 -0
- lfx/components/langchain_utilities/character.py +53 -0
- lfx/components/langchain_utilities/conversation.py +59 -0
- lfx/components/langchain_utilities/csv_agent.py +175 -0
- lfx/components/langchain_utilities/fake_embeddings.py +26 -0
- lfx/components/langchain_utilities/html_link_extractor.py +35 -0
- lfx/components/langchain_utilities/json_agent.py +100 -0
- lfx/components/langchain_utilities/langchain_hub.py +126 -0
- lfx/components/langchain_utilities/language_recursive.py +49 -0
- lfx/components/langchain_utilities/language_semantic.py +138 -0
- lfx/components/langchain_utilities/llm_checker.py +39 -0
- lfx/components/langchain_utilities/llm_math.py +42 -0
- lfx/components/langchain_utilities/natural_language.py +61 -0
- lfx/components/langchain_utilities/openai_tools.py +53 -0
- lfx/components/langchain_utilities/openapi.py +48 -0
- lfx/components/langchain_utilities/recursive_character.py +60 -0
- lfx/components/langchain_utilities/retrieval_qa.py +83 -0
- lfx/components/langchain_utilities/runnable_executor.py +137 -0
- lfx/components/langchain_utilities/self_query.py +80 -0
- lfx/components/langchain_utilities/spider.py +142 -0
- lfx/components/langchain_utilities/sql.py +40 -0
- lfx/components/langchain_utilities/sql_database.py +35 -0
- lfx/components/langchain_utilities/sql_generator.py +78 -0
- lfx/components/langchain_utilities/tool_calling.py +59 -0
- lfx/components/langchain_utilities/vector_store_info.py +49 -0
- lfx/components/langchain_utilities/vector_store_router.py +33 -0
- lfx/components/langchain_utilities/xml_agent.py +71 -0
- lfx/components/langwatch/__init__.py +3 -0
- lfx/components/langwatch/langwatch.py +278 -0
- lfx/components/link_extractors/__init__.py +3 -0
- lfx/components/llm_operations/__init__.py +46 -0
- lfx/components/llm_operations/batch_run.py +205 -0
- lfx/components/llm_operations/lambda_filter.py +218 -0
- lfx/components/llm_operations/llm_conditional_router.py +421 -0
- lfx/components/llm_operations/llm_selector.py +499 -0
- lfx/components/llm_operations/structured_output.py +244 -0
- lfx/components/lmstudio/__init__.py +34 -0
- lfx/components/lmstudio/lmstudioembeddings.py +89 -0
- lfx/components/lmstudio/lmstudiomodel.py +133 -0
- lfx/components/logic/__init__.py +181 -0
- lfx/components/maritalk/__init__.py +32 -0
- lfx/components/maritalk/maritalk.py +52 -0
- lfx/components/mem0/__init__.py +3 -0
- lfx/components/mem0/mem0_chat_memory.py +147 -0
- lfx/components/milvus/__init__.py +34 -0
- lfx/components/milvus/milvus.py +115 -0
- lfx/components/mistral/__init__.py +37 -0
- lfx/components/mistral/mistral.py +114 -0
- lfx/components/mistral/mistral_embeddings.py +58 -0
- lfx/components/models/__init__.py +89 -0
- lfx/components/models_and_agents/__init__.py +49 -0
- lfx/components/models_and_agents/agent.py +644 -0
- lfx/components/models_and_agents/embedding_model.py +423 -0
- lfx/components/models_and_agents/language_model.py +398 -0
- lfx/components/models_and_agents/mcp_component.py +594 -0
- lfx/components/models_and_agents/memory.py +268 -0
- lfx/components/models_and_agents/prompt.py +67 -0
- lfx/components/mongodb/__init__.py +34 -0
- lfx/components/mongodb/mongodb_atlas.py +213 -0
- lfx/components/needle/__init__.py +3 -0
- lfx/components/needle/needle.py +104 -0
- lfx/components/notdiamond/__init__.py +34 -0
- lfx/components/notdiamond/notdiamond.py +228 -0
- lfx/components/novita/__init__.py +32 -0
- lfx/components/novita/novita.py +130 -0
- lfx/components/nvidia/__init__.py +57 -0
- lfx/components/nvidia/nvidia.py +151 -0
- lfx/components/nvidia/nvidia_embedding.py +77 -0
- lfx/components/nvidia/nvidia_ingest.py +317 -0
- lfx/components/nvidia/nvidia_rerank.py +63 -0
- lfx/components/nvidia/system_assist.py +65 -0
- lfx/components/olivya/__init__.py +3 -0
- lfx/components/olivya/olivya.py +116 -0
- lfx/components/ollama/__init__.py +37 -0
- lfx/components/ollama/ollama.py +548 -0
- lfx/components/ollama/ollama_embeddings.py +103 -0
- lfx/components/openai/__init__.py +37 -0
- lfx/components/openai/openai.py +100 -0
- lfx/components/openai/openai_chat_model.py +176 -0
- lfx/components/openrouter/__init__.py +32 -0
- lfx/components/openrouter/openrouter.py +104 -0
- lfx/components/output_parsers/__init__.py +3 -0
- lfx/components/perplexity/__init__.py +34 -0
- lfx/components/perplexity/perplexity.py +75 -0
- lfx/components/pgvector/__init__.py +34 -0
- lfx/components/pgvector/pgvector.py +72 -0
- lfx/components/pinecone/__init__.py +34 -0
- lfx/components/pinecone/pinecone.py +134 -0
- lfx/components/processing/__init__.py +72 -0
- lfx/components/processing/alter_metadata.py +109 -0
- lfx/components/processing/combine_text.py +40 -0
- lfx/components/processing/converter.py +248 -0
- lfx/components/processing/create_data.py +111 -0
- lfx/components/processing/create_list.py +40 -0
- lfx/components/processing/data_operations.py +528 -0
- lfx/components/processing/data_to_dataframe.py +71 -0
- lfx/components/processing/dataframe_operations.py +313 -0
- lfx/components/processing/dataframe_to_toolset.py +259 -0
- lfx/components/processing/dynamic_create_data.py +357 -0
- lfx/components/processing/extract_key.py +54 -0
- lfx/components/processing/filter_data.py +43 -0
- lfx/components/processing/filter_data_values.py +89 -0
- lfx/components/processing/json_cleaner.py +104 -0
- lfx/components/processing/merge_data.py +91 -0
- lfx/components/processing/message_to_data.py +37 -0
- lfx/components/processing/output_parser.py +46 -0
- lfx/components/processing/parse_data.py +71 -0
- lfx/components/processing/parse_dataframe.py +69 -0
- lfx/components/processing/parse_json_data.py +91 -0
- lfx/components/processing/parser.py +148 -0
- lfx/components/processing/regex.py +83 -0
- lfx/components/processing/select_data.py +49 -0
- lfx/components/processing/split_text.py +141 -0
- lfx/components/processing/store_message.py +91 -0
- lfx/components/processing/update_data.py +161 -0
- lfx/components/prototypes/__init__.py +35 -0
- lfx/components/prototypes/python_function.py +73 -0
- lfx/components/qdrant/__init__.py +34 -0
- lfx/components/qdrant/qdrant.py +109 -0
- lfx/components/redis/__init__.py +37 -0
- lfx/components/redis/redis.py +89 -0
- lfx/components/redis/redis_chat.py +43 -0
- lfx/components/sambanova/__init__.py +32 -0
- lfx/components/sambanova/sambanova.py +84 -0
- lfx/components/scrapegraph/__init__.py +40 -0
- lfx/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
- lfx/components/scrapegraph/scrapegraph_search_api.py +64 -0
- lfx/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
- lfx/components/searchapi/__init__.py +34 -0
- lfx/components/searchapi/search.py +79 -0
- lfx/components/serpapi/__init__.py +3 -0
- lfx/components/serpapi/serp.py +115 -0
- lfx/components/supabase/__init__.py +34 -0
- lfx/components/supabase/supabase.py +76 -0
- lfx/components/tavily/__init__.py +4 -0
- lfx/components/tavily/tavily_extract.py +117 -0
- lfx/components/tavily/tavily_search.py +212 -0
- lfx/components/textsplitters/__init__.py +3 -0
- lfx/components/toolkits/__init__.py +3 -0
- lfx/components/tools/__init__.py +66 -0
- lfx/components/tools/calculator.py +109 -0
- lfx/components/tools/google_search_api.py +45 -0
- lfx/components/tools/google_serper_api.py +115 -0
- lfx/components/tools/python_code_structured_tool.py +328 -0
- lfx/components/tools/python_repl.py +98 -0
- lfx/components/tools/search_api.py +88 -0
- lfx/components/tools/searxng.py +145 -0
- lfx/components/tools/serp_api.py +120 -0
- lfx/components/tools/tavily_search_tool.py +345 -0
- lfx/components/tools/wikidata_api.py +103 -0
- lfx/components/tools/wikipedia_api.py +50 -0
- lfx/components/tools/yahoo_finance.py +130 -0
- lfx/components/twelvelabs/__init__.py +52 -0
- lfx/components/twelvelabs/convert_astra_results.py +84 -0
- lfx/components/twelvelabs/pegasus_index.py +311 -0
- lfx/components/twelvelabs/split_video.py +301 -0
- lfx/components/twelvelabs/text_embeddings.py +57 -0
- lfx/components/twelvelabs/twelvelabs_pegasus.py +408 -0
- lfx/components/twelvelabs/video_embeddings.py +100 -0
- lfx/components/twelvelabs/video_file.py +191 -0
- lfx/components/unstructured/__init__.py +3 -0
- lfx/components/unstructured/unstructured.py +121 -0
- lfx/components/upstash/__init__.py +34 -0
- lfx/components/upstash/upstash.py +124 -0
- lfx/components/utilities/__init__.py +43 -0
- lfx/components/utilities/calculator_core.py +89 -0
- lfx/components/utilities/current_date.py +42 -0
- lfx/components/utilities/id_generator.py +42 -0
- lfx/components/utilities/python_repl_core.py +98 -0
- lfx/components/vectara/__init__.py +37 -0
- lfx/components/vectara/vectara.py +97 -0
- lfx/components/vectara/vectara_rag.py +164 -0
- lfx/components/vectorstores/__init__.py +34 -0
- lfx/components/vectorstores/local_db.py +270 -0
- lfx/components/vertexai/__init__.py +37 -0
- lfx/components/vertexai/vertexai.py +71 -0
- lfx/components/vertexai/vertexai_embeddings.py +67 -0
- lfx/components/vlmrun/__init__.py +34 -0
- lfx/components/vlmrun/vlmrun_transcription.py +224 -0
- lfx/components/weaviate/__init__.py +34 -0
- lfx/components/weaviate/weaviate.py +89 -0
- lfx/components/wikipedia/__init__.py +4 -0
- lfx/components/wikipedia/wikidata.py +86 -0
- lfx/components/wikipedia/wikipedia.py +53 -0
- lfx/components/wolframalpha/__init__.py +3 -0
- lfx/components/wolframalpha/wolfram_alpha_api.py +54 -0
- lfx/components/xai/__init__.py +32 -0
- lfx/components/xai/xai.py +167 -0
- lfx/components/yahoosearch/__init__.py +3 -0
- lfx/components/yahoosearch/yahoo.py +137 -0
- lfx/components/youtube/__init__.py +52 -0
- lfx/components/youtube/channel.py +227 -0
- lfx/components/youtube/comments.py +231 -0
- lfx/components/youtube/playlist.py +33 -0
- lfx/components/youtube/search.py +120 -0
- lfx/components/youtube/trending.py +285 -0
- lfx/components/youtube/video_details.py +263 -0
- lfx/components/youtube/youtube_transcripts.py +206 -0
- lfx/components/zep/__init__.py +3 -0
- lfx/components/zep/zep.py +45 -0
- lfx/constants.py +6 -0
- lfx/custom/__init__.py +7 -0
- lfx/custom/attributes.py +87 -0
- lfx/custom/code_parser/__init__.py +3 -0
- lfx/custom/code_parser/code_parser.py +361 -0
- lfx/custom/custom_component/__init__.py +0 -0
- lfx/custom/custom_component/base_component.py +128 -0
- lfx/custom/custom_component/component.py +1890 -0
- lfx/custom/custom_component/component_with_cache.py +8 -0
- lfx/custom/custom_component/custom_component.py +650 -0
- lfx/custom/dependency_analyzer.py +165 -0
- lfx/custom/directory_reader/__init__.py +3 -0
- lfx/custom/directory_reader/directory_reader.py +359 -0
- lfx/custom/directory_reader/utils.py +171 -0
- lfx/custom/eval.py +12 -0
- lfx/custom/schema.py +32 -0
- lfx/custom/tree_visitor.py +21 -0
- lfx/custom/utils.py +877 -0
- lfx/custom/validate.py +523 -0
- lfx/events/__init__.py +1 -0
- lfx/events/event_manager.py +110 -0
- lfx/exceptions/__init__.py +0 -0
- lfx/exceptions/component.py +15 -0
- lfx/field_typing/__init__.py +91 -0
- lfx/field_typing/constants.py +216 -0
- lfx/field_typing/range_spec.py +35 -0
- lfx/graph/__init__.py +6 -0
- lfx/graph/edge/__init__.py +0 -0
- lfx/graph/edge/base.py +300 -0
- lfx/graph/edge/schema.py +119 -0
- lfx/graph/edge/utils.py +0 -0
- lfx/graph/graph/__init__.py +0 -0
- lfx/graph/graph/ascii.py +202 -0
- lfx/graph/graph/base.py +2298 -0
- lfx/graph/graph/constants.py +63 -0
- lfx/graph/graph/runnable_vertices_manager.py +133 -0
- lfx/graph/graph/schema.py +53 -0
- lfx/graph/graph/state_model.py +66 -0
- lfx/graph/graph/utils.py +1024 -0
- lfx/graph/schema.py +75 -0
- lfx/graph/state/__init__.py +0 -0
- lfx/graph/state/model.py +250 -0
- lfx/graph/utils.py +206 -0
- lfx/graph/vertex/__init__.py +0 -0
- lfx/graph/vertex/base.py +826 -0
- lfx/graph/vertex/constants.py +0 -0
- lfx/graph/vertex/exceptions.py +4 -0
- lfx/graph/vertex/param_handler.py +316 -0
- lfx/graph/vertex/schema.py +26 -0
- lfx/graph/vertex/utils.py +19 -0
- lfx/graph/vertex/vertex_types.py +489 -0
- lfx/helpers/__init__.py +141 -0
- lfx/helpers/base_model.py +71 -0
- lfx/helpers/custom.py +13 -0
- lfx/helpers/data.py +167 -0
- lfx/helpers/flow.py +308 -0
- lfx/inputs/__init__.py +68 -0
- lfx/inputs/constants.py +2 -0
- lfx/inputs/input_mixin.py +352 -0
- lfx/inputs/inputs.py +718 -0
- lfx/inputs/validators.py +19 -0
- lfx/interface/__init__.py +6 -0
- lfx/interface/components.py +897 -0
- lfx/interface/importing/__init__.py +5 -0
- lfx/interface/importing/utils.py +39 -0
- lfx/interface/initialize/__init__.py +3 -0
- lfx/interface/initialize/loading.py +317 -0
- lfx/interface/listing.py +26 -0
- lfx/interface/run.py +16 -0
- lfx/interface/utils.py +111 -0
- lfx/io/__init__.py +63 -0
- lfx/io/schema.py +295 -0
- lfx/load/__init__.py +8 -0
- lfx/load/load.py +256 -0
- lfx/load/utils.py +99 -0
- lfx/log/__init__.py +5 -0
- lfx/log/logger.py +411 -0
- lfx/logging/__init__.py +11 -0
- lfx/logging/logger.py +24 -0
- lfx/memory/__init__.py +70 -0
- lfx/memory/stubs.py +302 -0
- lfx/processing/__init__.py +1 -0
- lfx/processing/process.py +238 -0
- lfx/processing/utils.py +25 -0
- lfx/py.typed +0 -0
- lfx/schema/__init__.py +66 -0
- lfx/schema/artifact.py +83 -0
- lfx/schema/content_block.py +62 -0
- lfx/schema/content_types.py +91 -0
- lfx/schema/cross_module.py +80 -0
- lfx/schema/data.py +309 -0
- lfx/schema/dataframe.py +210 -0
- lfx/schema/dotdict.py +74 -0
- lfx/schema/encoders.py +13 -0
- lfx/schema/graph.py +47 -0
- lfx/schema/image.py +184 -0
- lfx/schema/json_schema.py +186 -0
- lfx/schema/log.py +62 -0
- lfx/schema/message.py +493 -0
- lfx/schema/openai_responses_schemas.py +74 -0
- lfx/schema/properties.py +41 -0
- lfx/schema/schema.py +180 -0
- lfx/schema/serialize.py +13 -0
- lfx/schema/table.py +142 -0
- lfx/schema/validators.py +114 -0
- lfx/serialization/__init__.py +5 -0
- lfx/serialization/constants.py +2 -0
- lfx/serialization/serialization.py +314 -0
- lfx/services/__init__.py +26 -0
- lfx/services/base.py +28 -0
- lfx/services/cache/__init__.py +6 -0
- lfx/services/cache/base.py +183 -0
- lfx/services/cache/service.py +166 -0
- lfx/services/cache/utils.py +169 -0
- lfx/services/chat/__init__.py +1 -0
- lfx/services/chat/config.py +2 -0
- lfx/services/chat/schema.py +10 -0
- lfx/services/database/__init__.py +5 -0
- lfx/services/database/service.py +25 -0
- lfx/services/deps.py +194 -0
- lfx/services/factory.py +19 -0
- lfx/services/initialize.py +19 -0
- lfx/services/interfaces.py +103 -0
- lfx/services/manager.py +185 -0
- lfx/services/mcp_composer/__init__.py +6 -0
- lfx/services/mcp_composer/factory.py +16 -0
- lfx/services/mcp_composer/service.py +1441 -0
- lfx/services/schema.py +21 -0
- lfx/services/session.py +87 -0
- lfx/services/settings/__init__.py +3 -0
- lfx/services/settings/auth.py +133 -0
- lfx/services/settings/base.py +668 -0
- lfx/services/settings/constants.py +43 -0
- lfx/services/settings/factory.py +23 -0
- lfx/services/settings/feature_flags.py +11 -0
- lfx/services/settings/service.py +35 -0
- lfx/services/settings/utils.py +40 -0
- lfx/services/shared_component_cache/__init__.py +1 -0
- lfx/services/shared_component_cache/factory.py +30 -0
- lfx/services/shared_component_cache/service.py +9 -0
- lfx/services/storage/__init__.py +5 -0
- lfx/services/storage/local.py +185 -0
- lfx/services/storage/service.py +177 -0
- lfx/services/tracing/__init__.py +1 -0
- lfx/services/tracing/service.py +21 -0
- lfx/settings.py +6 -0
- lfx/template/__init__.py +6 -0
- lfx/template/field/__init__.py +0 -0
- lfx/template/field/base.py +260 -0
- lfx/template/field/prompt.py +15 -0
- lfx/template/frontend_node/__init__.py +6 -0
- lfx/template/frontend_node/base.py +214 -0
- lfx/template/frontend_node/constants.py +65 -0
- lfx/template/frontend_node/custom_components.py +79 -0
- lfx/template/template/__init__.py +0 -0
- lfx/template/template/base.py +100 -0
- lfx/template/utils.py +217 -0
- lfx/type_extraction/__init__.py +19 -0
- lfx/type_extraction/type_extraction.py +75 -0
- lfx/type_extraction.py +80 -0
- lfx/utils/__init__.py +1 -0
- lfx/utils/async_helpers.py +42 -0
- lfx/utils/component_utils.py +154 -0
- lfx/utils/concurrency.py +60 -0
- lfx/utils/connection_string_parser.py +11 -0
- lfx/utils/constants.py +233 -0
- lfx/utils/data_structure.py +212 -0
- lfx/utils/exceptions.py +22 -0
- lfx/utils/helpers.py +34 -0
- lfx/utils/image.py +79 -0
- lfx/utils/langflow_utils.py +52 -0
- lfx/utils/lazy_load.py +15 -0
- lfx/utils/request_utils.py +18 -0
- lfx/utils/schemas.py +139 -0
- lfx/utils/ssrf_protection.py +384 -0
- lfx/utils/util.py +626 -0
- lfx/utils/util_strings.py +56 -0
- lfx/utils/validate_cloud.py +26 -0
- lfx/utils/version.py +24 -0
- lfx_nightly-0.2.0.dev25.dist-info/METADATA +312 -0
- lfx_nightly-0.2.0.dev25.dist-info/RECORD +769 -0
- lfx_nightly-0.2.0.dev25.dist-info/WHEEL +4 -0
- lfx_nightly-0.2.0.dev25.dist-info/entry_points.txt +2 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any
|
|
4
|
+
|
|
5
|
+
from lfx.components._importing import import_mod
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from .firecrawl_crawl_api import FirecrawlCrawlApi
|
|
9
|
+
from .firecrawl_extract_api import FirecrawlExtractApi
|
|
10
|
+
from .firecrawl_map_api import FirecrawlMapApi
|
|
11
|
+
from .firecrawl_scrape_api import FirecrawlScrapeApi
|
|
12
|
+
|
|
13
|
+
_dynamic_imports = {
|
|
14
|
+
"FirecrawlCrawlApi": "firecrawl_crawl_api",
|
|
15
|
+
"FirecrawlExtractApi": "firecrawl_extract_api",
|
|
16
|
+
"FirecrawlMapApi": "firecrawl_map_api",
|
|
17
|
+
"FirecrawlScrapeApi": "firecrawl_scrape_api",
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"FirecrawlCrawlApi",
|
|
22
|
+
"FirecrawlExtractApi",
|
|
23
|
+
"FirecrawlMapApi",
|
|
24
|
+
"FirecrawlScrapeApi",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def __getattr__(attr_name: str) -> Any:
|
|
29
|
+
"""Lazily import firecrawl components on attribute access."""
|
|
30
|
+
if attr_name not in _dynamic_imports:
|
|
31
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
|
32
|
+
raise AttributeError(msg)
|
|
33
|
+
try:
|
|
34
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
|
35
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
|
36
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
|
37
|
+
raise AttributeError(msg) from e
|
|
38
|
+
globals()[attr_name] = result
|
|
39
|
+
return result
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def __dir__() -> list[str]:
|
|
43
|
+
return list(__all__)
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import uuid
|
|
2
|
+
|
|
3
|
+
from lfx.custom.custom_component.component import Component
|
|
4
|
+
from lfx.io import DataInput, IntInput, MultilineInput, Output, SecretStrInput, StrInput
|
|
5
|
+
from lfx.schema.data import Data
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class FirecrawlCrawlApi(Component):
|
|
9
|
+
display_name: str = "Firecrawl Crawl API"
|
|
10
|
+
description: str = "Crawls a URL and returns the results."
|
|
11
|
+
name = "FirecrawlCrawlApi"
|
|
12
|
+
|
|
13
|
+
documentation: str = "https://docs.firecrawl.dev/v1/api-reference/endpoint/crawl-post"
|
|
14
|
+
|
|
15
|
+
inputs = [
|
|
16
|
+
SecretStrInput(
|
|
17
|
+
name="api_key",
|
|
18
|
+
display_name="Firecrawl API Key",
|
|
19
|
+
required=True,
|
|
20
|
+
password=True,
|
|
21
|
+
info="The API key to use Firecrawl API.",
|
|
22
|
+
),
|
|
23
|
+
MultilineInput(
|
|
24
|
+
name="url",
|
|
25
|
+
display_name="URL",
|
|
26
|
+
required=True,
|
|
27
|
+
info="The URL to scrape.",
|
|
28
|
+
tool_mode=True,
|
|
29
|
+
),
|
|
30
|
+
IntInput(
|
|
31
|
+
name="timeout",
|
|
32
|
+
display_name="Timeout",
|
|
33
|
+
info="Timeout in milliseconds for the request.",
|
|
34
|
+
),
|
|
35
|
+
StrInput(
|
|
36
|
+
name="idempotency_key",
|
|
37
|
+
display_name="Idempotency Key",
|
|
38
|
+
info="Optional idempotency key to ensure unique requests.",
|
|
39
|
+
),
|
|
40
|
+
DataInput(
|
|
41
|
+
name="crawlerOptions",
|
|
42
|
+
display_name="Crawler Options",
|
|
43
|
+
info="The crawler options to send with the request.",
|
|
44
|
+
),
|
|
45
|
+
DataInput(
|
|
46
|
+
name="scrapeOptions",
|
|
47
|
+
display_name="Scrape Options",
|
|
48
|
+
info="The page options to send with the request.",
|
|
49
|
+
),
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
outputs = [
|
|
53
|
+
Output(display_name="Data", name="data", method="crawl"),
|
|
54
|
+
]
|
|
55
|
+
idempotency_key: str | None = None
|
|
56
|
+
|
|
57
|
+
def crawl(self) -> Data:
|
|
58
|
+
try:
|
|
59
|
+
from firecrawl import FirecrawlApp
|
|
60
|
+
except ImportError as e:
|
|
61
|
+
msg = "Could not import firecrawl integration package. Please install it with `pip install firecrawl-py`."
|
|
62
|
+
raise ImportError(msg) from e
|
|
63
|
+
|
|
64
|
+
params = self.crawlerOptions.__dict__["data"] if self.crawlerOptions else {}
|
|
65
|
+
scrape_options_dict = self.scrapeOptions.__dict__["data"] if self.scrapeOptions else {}
|
|
66
|
+
if scrape_options_dict:
|
|
67
|
+
params["scrapeOptions"] = scrape_options_dict
|
|
68
|
+
|
|
69
|
+
# Set default values for new parameters in v1
|
|
70
|
+
params.setdefault("maxDepth", 2)
|
|
71
|
+
params.setdefault("limit", 10000)
|
|
72
|
+
params.setdefault("allowExternalLinks", False)
|
|
73
|
+
params.setdefault("allowBackwardLinks", False)
|
|
74
|
+
params.setdefault("ignoreSitemap", False)
|
|
75
|
+
params.setdefault("ignoreQueryParameters", False)
|
|
76
|
+
|
|
77
|
+
# Ensure onlyMainContent is explicitly set if not provided
|
|
78
|
+
if "scrapeOptions" in params:
|
|
79
|
+
params["scrapeOptions"].setdefault("onlyMainContent", True)
|
|
80
|
+
else:
|
|
81
|
+
params["scrapeOptions"] = {"onlyMainContent": True}
|
|
82
|
+
|
|
83
|
+
if not self.idempotency_key:
|
|
84
|
+
self.idempotency_key = str(uuid.uuid4())
|
|
85
|
+
|
|
86
|
+
app = FirecrawlApp(api_key=self.api_key)
|
|
87
|
+
crawl_result = app.crawl_url(self.url, params=params, idempotency_key=self.idempotency_key)
|
|
88
|
+
return Data(data={"results": crawl_result})
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
from lfx.custom.custom_component.component import Component
|
|
2
|
+
from lfx.io import BoolInput, DataInput, MultilineInput, Output, SecretStrInput
|
|
3
|
+
from lfx.log.logger import logger
|
|
4
|
+
from lfx.schema.data import Data
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class FirecrawlExtractApi(Component):
|
|
8
|
+
display_name: str = "Firecrawl Extract API"
|
|
9
|
+
description: str = "Extracts data from a URL."
|
|
10
|
+
name = "FirecrawlExtractApi"
|
|
11
|
+
|
|
12
|
+
documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/extract"
|
|
13
|
+
|
|
14
|
+
inputs = [
|
|
15
|
+
SecretStrInput(
|
|
16
|
+
name="api_key",
|
|
17
|
+
display_name="Firecrawl API Key",
|
|
18
|
+
required=True,
|
|
19
|
+
password=True,
|
|
20
|
+
info="The API key to use Firecrawl API.",
|
|
21
|
+
),
|
|
22
|
+
MultilineInput(
|
|
23
|
+
name="urls",
|
|
24
|
+
display_name="URLs",
|
|
25
|
+
required=True,
|
|
26
|
+
info="List of URLs to extract data from (separated by commas or new lines).",
|
|
27
|
+
tool_mode=True,
|
|
28
|
+
),
|
|
29
|
+
MultilineInput(
|
|
30
|
+
name="prompt",
|
|
31
|
+
display_name="Prompt",
|
|
32
|
+
required=True,
|
|
33
|
+
info="Prompt to guide the extraction process.",
|
|
34
|
+
tool_mode=True,
|
|
35
|
+
),
|
|
36
|
+
DataInput(
|
|
37
|
+
name="schema",
|
|
38
|
+
display_name="Schema",
|
|
39
|
+
required=False,
|
|
40
|
+
info="Schema to define the structure of the extracted data.",
|
|
41
|
+
),
|
|
42
|
+
BoolInput(
|
|
43
|
+
name="enable_web_search",
|
|
44
|
+
display_name="Enable Web Search",
|
|
45
|
+
info="When true, the extraction will use web search to find additional data.",
|
|
46
|
+
),
|
|
47
|
+
# # Optional: Not essential for basic extraction
|
|
48
|
+
# BoolInput(
|
|
49
|
+
# name="ignore_sitemap",
|
|
50
|
+
# display_name="Ignore Sitemap",
|
|
51
|
+
# info="When true, sitemap.xml files will be ignored during website scanning.",
|
|
52
|
+
# ),
|
|
53
|
+
# # Optional: Not essential for basic extraction
|
|
54
|
+
# BoolInput(
|
|
55
|
+
# name="include_subdomains",
|
|
56
|
+
# display_name="Include Subdomains",
|
|
57
|
+
# info="When true, subdomains of the provided URLs will also be scanned.",
|
|
58
|
+
# ),
|
|
59
|
+
# # Optional: Not essential for basic extraction
|
|
60
|
+
# BoolInput(
|
|
61
|
+
# name="show_sources",
|
|
62
|
+
# display_name="Show Sources",
|
|
63
|
+
# info="When true, the sources used to extract the data will be included in the response.",
|
|
64
|
+
# ),
|
|
65
|
+
]
|
|
66
|
+
|
|
67
|
+
outputs = [
|
|
68
|
+
Output(display_name="Data", name="data", method="extract"),
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
def extract(self) -> Data:
|
|
72
|
+
try:
|
|
73
|
+
from firecrawl import FirecrawlApp
|
|
74
|
+
except ImportError as e:
|
|
75
|
+
msg = "Could not import firecrawl integration package. Please install it with `pip install firecrawl-py`."
|
|
76
|
+
raise ImportError(msg) from e
|
|
77
|
+
|
|
78
|
+
# Validate API key
|
|
79
|
+
if not self.api_key:
|
|
80
|
+
msg = "API key is required"
|
|
81
|
+
raise ValueError(msg)
|
|
82
|
+
|
|
83
|
+
# Validate URLs
|
|
84
|
+
if not self.urls:
|
|
85
|
+
msg = "URLs are required"
|
|
86
|
+
raise ValueError(msg)
|
|
87
|
+
|
|
88
|
+
# Split and validate URLs (handle both commas and newlines)
|
|
89
|
+
urls = [url.strip() for url in self.urls.replace("\n", ",").split(",") if url.strip()]
|
|
90
|
+
if not urls:
|
|
91
|
+
msg = "No valid URLs provided"
|
|
92
|
+
raise ValueError(msg)
|
|
93
|
+
|
|
94
|
+
# Validate and process prompt
|
|
95
|
+
if not self.prompt:
|
|
96
|
+
msg = "Prompt is required"
|
|
97
|
+
raise ValueError(msg)
|
|
98
|
+
|
|
99
|
+
# Get the prompt text (handling both string and multiline input)
|
|
100
|
+
prompt_text = self.prompt.strip()
|
|
101
|
+
|
|
102
|
+
# Enhance the prompt to encourage comprehensive extraction
|
|
103
|
+
enhanced_prompt = prompt_text
|
|
104
|
+
if "schema" not in prompt_text.lower():
|
|
105
|
+
enhanced_prompt = f"{prompt_text}. Please extract all instances in a comprehensive, structured format."
|
|
106
|
+
|
|
107
|
+
params = {
|
|
108
|
+
"prompt": enhanced_prompt,
|
|
109
|
+
"enableWebSearch": self.enable_web_search,
|
|
110
|
+
# Optional parameters - not essential for basic extraction
|
|
111
|
+
"ignoreSitemap": self.ignore_sitemap,
|
|
112
|
+
"includeSubdomains": self.include_subdomains,
|
|
113
|
+
"showSources": self.show_sources,
|
|
114
|
+
"timeout": 300,
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
# Only add schema to params if it's provided and is a valid schema structure
|
|
118
|
+
if self.schema:
|
|
119
|
+
try:
|
|
120
|
+
if isinstance(self.schema, dict) and "type" in self.schema:
|
|
121
|
+
params["schema"] = self.schema
|
|
122
|
+
elif hasattr(self.schema, "dict") and "type" in self.schema.dict():
|
|
123
|
+
params["schema"] = self.schema.dict()
|
|
124
|
+
else:
|
|
125
|
+
# Skip invalid schema without raising an error
|
|
126
|
+
pass
|
|
127
|
+
except Exception as e: # noqa: BLE001
|
|
128
|
+
logger.error(f"Invalid schema: {e!s}")
|
|
129
|
+
|
|
130
|
+
try:
|
|
131
|
+
app = FirecrawlApp(api_key=self.api_key)
|
|
132
|
+
extract_result = app.extract(urls, params=params)
|
|
133
|
+
return Data(data=extract_result)
|
|
134
|
+
except Exception as e:
|
|
135
|
+
msg = f"Error during extraction: {e!s}"
|
|
136
|
+
raise ValueError(msg) from e
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
from lfx.custom.custom_component.component import Component
|
|
2
|
+
from lfx.io import (
|
|
3
|
+
BoolInput,
|
|
4
|
+
MultilineInput,
|
|
5
|
+
Output,
|
|
6
|
+
SecretStrInput,
|
|
7
|
+
)
|
|
8
|
+
from lfx.schema.data import Data
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class FirecrawlMapApi(Component):
|
|
12
|
+
display_name: str = "Firecrawl Map API"
|
|
13
|
+
description: str = "Maps a URL and returns the results."
|
|
14
|
+
name = "FirecrawlMapApi"
|
|
15
|
+
|
|
16
|
+
documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/map"
|
|
17
|
+
|
|
18
|
+
inputs = [
|
|
19
|
+
SecretStrInput(
|
|
20
|
+
name="api_key",
|
|
21
|
+
display_name="Firecrawl API Key",
|
|
22
|
+
required=True,
|
|
23
|
+
password=True,
|
|
24
|
+
info="The API key to use Firecrawl API.",
|
|
25
|
+
),
|
|
26
|
+
MultilineInput(
|
|
27
|
+
name="urls",
|
|
28
|
+
display_name="URLs",
|
|
29
|
+
required=True,
|
|
30
|
+
info="List of URLs to create maps from (separated by commas or new lines).",
|
|
31
|
+
tool_mode=True,
|
|
32
|
+
),
|
|
33
|
+
BoolInput(
|
|
34
|
+
name="ignore_sitemap",
|
|
35
|
+
display_name="Ignore Sitemap",
|
|
36
|
+
info="When true, the sitemap.xml file will be ignored during crawling.",
|
|
37
|
+
),
|
|
38
|
+
BoolInput(
|
|
39
|
+
name="sitemap_only",
|
|
40
|
+
display_name="Sitemap Only",
|
|
41
|
+
info="When true, only links found in the sitemap will be returned.",
|
|
42
|
+
),
|
|
43
|
+
BoolInput(
|
|
44
|
+
name="include_subdomains",
|
|
45
|
+
display_name="Include Subdomains",
|
|
46
|
+
info="When true, subdomains of the provided URL will also be scanned.",
|
|
47
|
+
),
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
outputs = [
|
|
51
|
+
Output(display_name="Data", name="data", method="map"),
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
def map(self) -> Data:
|
|
55
|
+
try:
|
|
56
|
+
from firecrawl import FirecrawlApp
|
|
57
|
+
except ImportError as e:
|
|
58
|
+
msg = "Could not import firecrawl integration package. Please install it with `pip install firecrawl-py`."
|
|
59
|
+
raise ImportError(msg) from e
|
|
60
|
+
|
|
61
|
+
# Validate URLs
|
|
62
|
+
if not self.urls:
|
|
63
|
+
msg = "URLs are required"
|
|
64
|
+
raise ValueError(msg)
|
|
65
|
+
|
|
66
|
+
# Split and validate URLs (handle both commas and newlines)
|
|
67
|
+
urls = [url.strip() for url in self.urls.replace("\n", ",").split(",") if url.strip()]
|
|
68
|
+
if not urls:
|
|
69
|
+
msg = "No valid URLs provided"
|
|
70
|
+
raise ValueError(msg)
|
|
71
|
+
|
|
72
|
+
params = {
|
|
73
|
+
"ignoreSitemap": self.ignore_sitemap,
|
|
74
|
+
"sitemapOnly": self.sitemap_only,
|
|
75
|
+
"includeSubdomains": self.include_subdomains,
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
app = FirecrawlApp(api_key=self.api_key)
|
|
79
|
+
|
|
80
|
+
# Map all provided URLs and combine results
|
|
81
|
+
combined_links = []
|
|
82
|
+
for url in urls:
|
|
83
|
+
result = app.map_url(url, params=params)
|
|
84
|
+
if isinstance(result, dict) and "links" in result:
|
|
85
|
+
combined_links.extend(result["links"])
|
|
86
|
+
|
|
87
|
+
map_result = {"success": True, "links": combined_links}
|
|
88
|
+
|
|
89
|
+
return Data(data=map_result)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from lfx.custom.custom_component.component import Component
|
|
2
|
+
from lfx.io import (
|
|
3
|
+
DataInput,
|
|
4
|
+
IntInput,
|
|
5
|
+
MultilineInput,
|
|
6
|
+
Output,
|
|
7
|
+
SecretStrInput,
|
|
8
|
+
)
|
|
9
|
+
from lfx.schema.data import Data
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class FirecrawlScrapeApi(Component):
|
|
13
|
+
display_name: str = "Firecrawl Scrape API"
|
|
14
|
+
description: str = "Scrapes a URL and returns the results."
|
|
15
|
+
name = "FirecrawlScrapeApi"
|
|
16
|
+
|
|
17
|
+
documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/scrape"
|
|
18
|
+
|
|
19
|
+
inputs = [
|
|
20
|
+
SecretStrInput(
|
|
21
|
+
name="api_key",
|
|
22
|
+
display_name="Firecrawl API Key",
|
|
23
|
+
required=True,
|
|
24
|
+
password=True,
|
|
25
|
+
info="The API key to use Firecrawl API.",
|
|
26
|
+
),
|
|
27
|
+
MultilineInput(
|
|
28
|
+
name="url",
|
|
29
|
+
display_name="URL",
|
|
30
|
+
required=True,
|
|
31
|
+
info="The URL to scrape.",
|
|
32
|
+
tool_mode=True,
|
|
33
|
+
),
|
|
34
|
+
IntInput(
|
|
35
|
+
name="timeout",
|
|
36
|
+
display_name="Timeout",
|
|
37
|
+
info="Timeout in milliseconds for the request.",
|
|
38
|
+
),
|
|
39
|
+
DataInput(
|
|
40
|
+
name="scrapeOptions",
|
|
41
|
+
display_name="Scrape Options",
|
|
42
|
+
info="The page options to send with the request.",
|
|
43
|
+
),
|
|
44
|
+
DataInput(
|
|
45
|
+
name="extractorOptions",
|
|
46
|
+
display_name="Extractor Options",
|
|
47
|
+
info="The extractor options to send with the request.",
|
|
48
|
+
),
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
outputs = [
|
|
52
|
+
Output(display_name="Data", name="data", method="scrape"),
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
def scrape(self) -> Data:
|
|
56
|
+
try:
|
|
57
|
+
from firecrawl import FirecrawlApp
|
|
58
|
+
except ImportError as e:
|
|
59
|
+
msg = "Could not import firecrawl integration package. Please install it with `pip install firecrawl-py`."
|
|
60
|
+
raise ImportError(msg) from e
|
|
61
|
+
|
|
62
|
+
params = self.scrapeOptions.__dict__.get("data", {}) if self.scrapeOptions else {}
|
|
63
|
+
extractor_options_dict = self.extractorOptions.__dict__.get("data", {}) if self.extractorOptions else {}
|
|
64
|
+
if extractor_options_dict:
|
|
65
|
+
params["extract"] = extractor_options_dict
|
|
66
|
+
|
|
67
|
+
# Set default values for parameters
|
|
68
|
+
params.setdefault("formats", ["markdown"]) # Default output format
|
|
69
|
+
params.setdefault("onlyMainContent", True) # Default to only main content
|
|
70
|
+
|
|
71
|
+
app = FirecrawlApp(api_key=self.api_key)
|
|
72
|
+
results = app.scrape_url(self.url, params=params)
|
|
73
|
+
return Data(data=results)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any
|
|
4
|
+
|
|
5
|
+
from lfx.components._importing import import_mod
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from lfx.components.flow_controls.conditional_router import ConditionalRouterComponent
|
|
9
|
+
from lfx.components.flow_controls.data_conditional_router import DataConditionalRouterComponent
|
|
10
|
+
from lfx.components.flow_controls.flow_tool import FlowToolComponent
|
|
11
|
+
from lfx.components.flow_controls.listen import ListenComponent
|
|
12
|
+
from lfx.components.flow_controls.loop import LoopComponent
|
|
13
|
+
from lfx.components.flow_controls.notify import NotifyComponent
|
|
14
|
+
from lfx.components.flow_controls.pass_message import PassMessageComponent
|
|
15
|
+
from lfx.components.flow_controls.run_flow import RunFlowComponent
|
|
16
|
+
from lfx.components.flow_controls.sub_flow import SubFlowComponent
|
|
17
|
+
|
|
18
|
+
_dynamic_imports = {
|
|
19
|
+
"ConditionalRouterComponent": "conditional_router",
|
|
20
|
+
"DataConditionalRouterComponent": "data_conditional_router",
|
|
21
|
+
"FlowToolComponent": "flow_tool",
|
|
22
|
+
"ListenComponent": "listen",
|
|
23
|
+
"LoopComponent": "loop",
|
|
24
|
+
"NotifyComponent": "notify",
|
|
25
|
+
"PassMessageComponent": "pass_message",
|
|
26
|
+
"RunFlowComponent": "run_flow",
|
|
27
|
+
"SubFlowComponent": "sub_flow",
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
__all__ = [
|
|
31
|
+
"ConditionalRouterComponent",
|
|
32
|
+
"DataConditionalRouterComponent",
|
|
33
|
+
"FlowToolComponent",
|
|
34
|
+
"ListenComponent",
|
|
35
|
+
"LoopComponent",
|
|
36
|
+
"NotifyComponent",
|
|
37
|
+
"PassMessageComponent",
|
|
38
|
+
"RunFlowComponent",
|
|
39
|
+
"SubFlowComponent",
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def __getattr__(attr_name: str) -> Any:
|
|
44
|
+
"""Lazily import flow control components on attribute access."""
|
|
45
|
+
if attr_name not in _dynamic_imports:
|
|
46
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
|
47
|
+
raise AttributeError(msg)
|
|
48
|
+
try:
|
|
49
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
|
50
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
|
51
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
|
52
|
+
raise AttributeError(msg) from e
|
|
53
|
+
globals()[attr_name] = result
|
|
54
|
+
return result
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def __dir__() -> list[str]:
|
|
58
|
+
return list(__all__)
|