lfx-nightly 0.1.11.dev0__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.
- lfx/__init__.py +0 -0
- lfx/__main__.py +25 -0
- lfx/base/__init__.py +0 -0
- lfx/base/agents/__init__.py +0 -0
- lfx/base/agents/agent.py +268 -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 +346 -0
- lfx/base/agents/utils.py +205 -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 +1291 -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 +685 -0
- lfx/base/data/docling_utils.py +245 -0
- lfx/base/data/utils.py +198 -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/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 +20 -0
- lfx/base/io/text.py +22 -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 +1398 -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 +47 -0
- lfx/base/models/aws_constants.py +151 -0
- lfx/base/models/chat_result.py +76 -0
- lfx/base/models/google_generative_ai_constants.py +70 -0
- lfx/base/models/groq_constants.py +134 -0
- lfx/base/models/model.py +375 -0
- lfx/base/models/model_input_constants.py +307 -0
- lfx/base/models/model_metadata.py +41 -0
- lfx/base/models/model_utils.py +8 -0
- lfx/base/models/novita_constants.py +35 -0
- lfx/base/models/ollama_constants.py +49 -0
- lfx/base/models/openai_constants.py +122 -0
- lfx/base/models/sambanova_constants.py +18 -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 +224 -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 +319 -0
- lfx/cli/common.py +650 -0
- lfx/cli/run.py +441 -0
- lfx/cli/script_loader.py +247 -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 +411 -0
- lfx/components/_importing.py +42 -0
- lfx/components/agentql/__init__.py +3 -0
- lfx/components/agentql/agentql_api.py +151 -0
- lfx/components/agents/__init__.py +34 -0
- lfx/components/agents/agent.py +558 -0
- lfx/components/agents/mcp_component.py +501 -0
- lfx/components/aiml/__init__.py +37 -0
- lfx/components/aiml/aiml.py +112 -0
- lfx/components/aiml/aiml_embeddings.py +37 -0
- lfx/components/amazon/__init__.py +36 -0
- lfx/components/amazon/amazon_bedrock_embedding.py +109 -0
- lfx/components/amazon/amazon_bedrock_model.py +124 -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 +163 -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 +167 -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/composio/__init__.py +74 -0
- lfx/components/composio/composio_api.py +268 -0
- lfx/components/composio/dropbox_compnent.py +11 -0
- lfx/components/composio/github_composio.py +11 -0
- lfx/components/composio/gmail_composio.py +38 -0
- lfx/components/composio/googlecalendar_composio.py +11 -0
- lfx/components/composio/googlemeet_composio.py +11 -0
- lfx/components/composio/googletasks_composio.py +8 -0
- lfx/components/composio/linear_composio.py +11 -0
- lfx/components/composio/outlook_composio.py +11 -0
- lfx/components/composio/reddit_composio.py +11 -0
- lfx/components/composio/slack_composio.py +582 -0
- lfx/components/composio/slackbot_composio.py +11 -0
- lfx/components/composio/supabase_composio.py +11 -0
- lfx/components/composio/todoist_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 +107 -0
- lfx/components/crewai/hierarchical_crew.py +46 -0
- lfx/components/crewai/hierarchical_task.py +44 -0
- lfx/components/crewai/sequential_crew.py +52 -0
- lfx/components/crewai/sequential_task.py +73 -0
- lfx/components/crewai/sequential_task_agent.py +143 -0
- lfx/components/custom_component/__init__.py +34 -0
- lfx/components/custom_component/custom_component.py +31 -0
- lfx/components/data/__init__.py +64 -0
- lfx/components/data/api_request.py +544 -0
- lfx/components/data/csv_to_data.py +95 -0
- lfx/components/data/directory.py +113 -0
- lfx/components/data/file.py +577 -0
- lfx/components/data/json_to_data.py +98 -0
- lfx/components/data/news_search.py +164 -0
- lfx/components/data/rss.py +69 -0
- lfx/components/data/sql_executor.py +101 -0
- lfx/components/data/url.py +311 -0
- lfx/components/data/web_search.py +112 -0
- lfx/components/data/webhook.py +56 -0
- lfx/components/datastax/__init__.py +70 -0
- lfx/components/datastax/astra_assistant_manager.py +306 -0
- lfx/components/datastax/astra_db.py +75 -0
- lfx/components/datastax/astra_vectorize.py +124 -0
- lfx/components/datastax/astradb.py +1285 -0
- lfx/components/datastax/astradb_cql.py +314 -0
- lfx/components/datastax/astradb_graph.py +330 -0
- lfx/components/datastax/astradb_tool.py +414 -0
- lfx/components/datastax/astradb_vectorstore.py +1285 -0
- lfx/components/datastax/cassandra.py +92 -0
- lfx/components/datastax/create_assistant.py +58 -0
- lfx/components/datastax/create_thread.py +32 -0
- lfx/components/datastax/dotenv.py +35 -0
- lfx/components/datastax/get_assistant.py +37 -0
- lfx/components/datastax/getenvvar.py +30 -0
- lfx/components/datastax/graph_rag.py +141 -0
- lfx/components/datastax/hcd.py +314 -0
- lfx/components/datastax/list_assistants.py +25 -0
- lfx/components/datastax/run.py +89 -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 +231 -0
- lfx/components/docling/docling_remote.py +193 -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 +243 -0
- lfx/components/embeddings/__init__.py +37 -0
- lfx/components/embeddings/similarity.py +76 -0
- lfx/components/embeddings/text_embedder.py +64 -0
- lfx/components/exa/__init__.py +3 -0
- lfx/components/exa/exa_search.py +68 -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/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 +192 -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 +147 -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 +136 -0
- lfx/components/helpers/__init__.py +52 -0
- lfx/components/helpers/calculator_core.py +89 -0
- lfx/components/helpers/create_list.py +40 -0
- lfx/components/helpers/current_date.py +42 -0
- lfx/components/helpers/id_generator.py +42 -0
- lfx/components/helpers/memory.py +251 -0
- lfx/components/helpers/output_parser.py +45 -0
- lfx/components/helpers/store_message.py +90 -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 +197 -0
- lfx/components/huggingface/huggingface_inference_api.py +106 -0
- lfx/components/ibm/__init__.py +34 -0
- lfx/components/ibm/watsonx.py +203 -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 +38 -0
- lfx/components/input_output/chat.py +120 -0
- lfx/components/input_output/chat_output.py +200 -0
- lfx/components/input_output/text.py +27 -0
- lfx/components/input_output/text_output.py +29 -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/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 +107 -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 +45 -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/lmstudio/__init__.py +34 -0
- lfx/components/lmstudio/lmstudioembeddings.py +89 -0
- lfx/components/lmstudio/lmstudiomodel.py +129 -0
- lfx/components/logic/__init__.py +52 -0
- lfx/components/logic/conditional_router.py +171 -0
- lfx/components/logic/data_conditional_router.py +125 -0
- lfx/components/logic/flow_tool.py +110 -0
- lfx/components/logic/listen.py +29 -0
- lfx/components/logic/loop.py +125 -0
- lfx/components/logic/notify.py +88 -0
- lfx/components/logic/pass_message.py +35 -0
- lfx/components/logic/run_flow.py +71 -0
- lfx/components/logic/sub_flow.py +114 -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 +136 -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 +34 -0
- lfx/components/models/embedding_model.py +114 -0
- lfx/components/models/language_model.py +144 -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 +157 -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 +330 -0
- lfx/components/ollama/ollama_embeddings.py +106 -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 +202 -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 +117 -0
- lfx/components/processing/alter_metadata.py +108 -0
- lfx/components/processing/batch_run.py +205 -0
- lfx/components/processing/combine_text.py +39 -0
- lfx/components/processing/converter.py +159 -0
- lfx/components/processing/create_data.py +110 -0
- lfx/components/processing/data_operations.py +438 -0
- lfx/components/processing/data_to_dataframe.py +70 -0
- lfx/components/processing/dataframe_operations.py +313 -0
- lfx/components/processing/extract_key.py +53 -0
- lfx/components/processing/filter_data.py +42 -0
- lfx/components/processing/filter_data_values.py +88 -0
- lfx/components/processing/json_cleaner.py +103 -0
- lfx/components/processing/lambda_filter.py +154 -0
- lfx/components/processing/llm_router.py +499 -0
- lfx/components/processing/merge_data.py +90 -0
- lfx/components/processing/message_to_data.py +36 -0
- lfx/components/processing/parse_data.py +70 -0
- lfx/components/processing/parse_dataframe.py +68 -0
- lfx/components/processing/parse_json_data.py +90 -0
- lfx/components/processing/parser.py +143 -0
- lfx/components/processing/prompt.py +67 -0
- lfx/components/processing/python_repl_core.py +98 -0
- lfx/components/processing/regex.py +82 -0
- lfx/components/processing/save_file.py +225 -0
- lfx/components/processing/select_data.py +48 -0
- lfx/components/processing/split_text.py +141 -0
- lfx/components/processing/structured_output.py +202 -0
- lfx/components/processing/update_data.py +160 -0
- lfx/components/prototypes/__init__.py +34 -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 +72 -0
- lfx/components/tools/calculator.py +108 -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 +327 -0
- lfx/components/tools/python_repl.py +97 -0
- lfx/components/tools/search_api.py +87 -0
- lfx/components/tools/searxng.py +145 -0
- lfx/components/tools/serp_api.py +119 -0
- lfx/components/tools/tavily_search_tool.py +344 -0
- lfx/components/tools/wikidata_api.py +102 -0
- lfx/components/tools/wikipedia_api.py +49 -0
- lfx/components/tools/yahoo_finance.py +129 -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 +291 -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 +179 -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/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 +40 -0
- lfx/components/vectorstores/astradb.py +1285 -0
- lfx/components/vectorstores/astradb_graph.py +319 -0
- lfx/components/vectorstores/cassandra.py +264 -0
- lfx/components/vectorstores/cassandra_graph.py +238 -0
- lfx/components/vectorstores/chroma.py +167 -0
- lfx/components/vectorstores/clickhouse.py +135 -0
- lfx/components/vectorstores/couchbase.py +102 -0
- lfx/components/vectorstores/elasticsearch.py +267 -0
- lfx/components/vectorstores/faiss.py +111 -0
- lfx/components/vectorstores/graph_rag.py +141 -0
- lfx/components/vectorstores/hcd.py +314 -0
- lfx/components/vectorstores/local_db.py +261 -0
- lfx/components/vectorstores/milvus.py +115 -0
- lfx/components/vectorstores/mongodb_atlas.py +213 -0
- lfx/components/vectorstores/opensearch.py +243 -0
- lfx/components/vectorstores/pgvector.py +72 -0
- lfx/components/vectorstores/pinecone.py +134 -0
- lfx/components/vectorstores/qdrant.py +109 -0
- lfx/components/vectorstores/supabase.py +76 -0
- lfx/components/vectorstores/upstash.py +124 -0
- lfx/components/vectorstores/vectara.py +97 -0
- lfx/components/vectorstores/vectara_rag.py +164 -0
- lfx/components/vectorstores/weaviate.py +89 -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/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 +118 -0
- lfx/components/zep/__init__.py +3 -0
- lfx/components/zep/zep.py +44 -0
- lfx/constants.py +6 -0
- lfx/custom/__init__.py +7 -0
- lfx/custom/attributes.py +86 -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 +1808 -0
- lfx/custom/custom_component/component_with_cache.py +8 -0
- lfx/custom/custom_component/custom_component.py +588 -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 +488 -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 +215 -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 +277 -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 +2238 -0
- lfx/graph/graph/constants.py +63 -0
- lfx/graph/graph/runnable_vertices_manager.py +133 -0
- lfx/graph/graph/schema.py +52 -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 +237 -0
- lfx/graph/utils.py +200 -0
- lfx/graph/vertex/__init__.py +0 -0
- lfx/graph/vertex/base.py +823 -0
- lfx/graph/vertex/constants.py +0 -0
- lfx/graph/vertex/exceptions.py +4 -0
- lfx/graph/vertex/param_handler.py +264 -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 +1 -0
- lfx/helpers/base_model.py +71 -0
- lfx/helpers/custom.py +13 -0
- lfx/helpers/data.py +167 -0
- lfx/helpers/flow.py +194 -0
- lfx/inputs/__init__.py +68 -0
- lfx/inputs/constants.py +2 -0
- lfx/inputs/input_mixin.py +328 -0
- lfx/inputs/inputs.py +714 -0
- lfx/inputs/validators.py +19 -0
- lfx/interface/__init__.py +6 -0
- lfx/interface/components.py +489 -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 +224 -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 +289 -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 +385 -0
- lfx/memory/__init__.py +90 -0
- lfx/memory/stubs.py +283 -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/data.py +308 -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 +131 -0
- lfx/schema/json_schema.py +141 -0
- lfx/schema/log.py +61 -0
- lfx/schema/message.py +473 -0
- lfx/schema/openai_responses_schemas.py +74 -0
- lfx/schema/properties.py +41 -0
- lfx/schema/schema.py +171 -0
- lfx/schema/serialize.py +13 -0
- lfx/schema/table.py +140 -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 +23 -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/deps.py +129 -0
- lfx/services/factory.py +19 -0
- lfx/services/initialize.py +19 -0
- lfx/services/interfaces.py +103 -0
- lfx/services/manager.py +172 -0
- lfx/services/schema.py +20 -0
- lfx/services/session.py +82 -0
- lfx/services/settings/__init__.py +3 -0
- lfx/services/settings/auth.py +130 -0
- lfx/services/settings/base.py +539 -0
- lfx/services/settings/constants.py +31 -0
- lfx/services/settings/factory.py +23 -0
- lfx/services/settings/feature_flags.py +12 -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 +155 -0
- lfx/services/storage/service.py +54 -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 +257 -0
- lfx/template/field/prompt.py +15 -0
- lfx/template/frontend_node/__init__.py +6 -0
- lfx/template/frontend_node/base.py +212 -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 +205 -0
- lfx/utils/data_structure.py +212 -0
- lfx/utils/exceptions.py +22 -0
- lfx/utils/helpers.py +28 -0
- lfx/utils/image.py +73 -0
- lfx/utils/lazy_load.py +15 -0
- lfx/utils/request_utils.py +18 -0
- lfx/utils/schemas.py +139 -0
- lfx/utils/util.py +481 -0
- lfx/utils/util_strings.py +56 -0
- lfx/utils/version.py +24 -0
- lfx_nightly-0.1.11.dev0.dist-info/METADATA +293 -0
- lfx_nightly-0.1.11.dev0.dist-info/RECORD +699 -0
- lfx_nightly-0.1.11.dev0.dist-info/WHEEL +4 -0
- lfx_nightly-0.1.11.dev0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,36 @@
|
|
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.amazon.amazon_bedrock_embedding import AmazonBedrockEmbeddingsComponent
|
9
|
+
from lfx.components.amazon.amazon_bedrock_model import AmazonBedrockComponent
|
10
|
+
from lfx.components.amazon.s3_bucket_uploader import S3BucketUploaderComponent
|
11
|
+
|
12
|
+
_dynamic_imports = {
|
13
|
+
"AmazonBedrockEmbeddingsComponent": "amazon_bedrock_embedding",
|
14
|
+
"AmazonBedrockComponent": "amazon_bedrock_model",
|
15
|
+
"S3BucketUploaderComponent": "s3_bucket_uploader",
|
16
|
+
}
|
17
|
+
|
18
|
+
__all__ = ["AmazonBedrockComponent", "AmazonBedrockEmbeddingsComponent", "S3BucketUploaderComponent"]
|
19
|
+
|
20
|
+
|
21
|
+
def __getattr__(attr_name: str) -> Any:
|
22
|
+
"""Lazily import amazon components on attribute access."""
|
23
|
+
if attr_name not in _dynamic_imports:
|
24
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
25
|
+
raise AttributeError(msg)
|
26
|
+
try:
|
27
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
28
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
29
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
30
|
+
raise AttributeError(msg) from e
|
31
|
+
globals()[attr_name] = result
|
32
|
+
return result
|
33
|
+
|
34
|
+
|
35
|
+
def __dir__() -> list[str]:
|
36
|
+
return list(__all__)
|
@@ -0,0 +1,109 @@
|
|
1
|
+
from lfx.base.models.aws_constants import AWS_EMBEDDING_MODEL_IDS, AWS_REGIONS
|
2
|
+
from lfx.base.models.model import LCModelComponent
|
3
|
+
from lfx.field_typing import Embeddings
|
4
|
+
from lfx.inputs.inputs import SecretStrInput
|
5
|
+
from lfx.io import DropdownInput, MessageTextInput, Output
|
6
|
+
|
7
|
+
|
8
|
+
class AmazonBedrockEmbeddingsComponent(LCModelComponent):
|
9
|
+
display_name: str = "Amazon Bedrock Embeddings"
|
10
|
+
description: str = "Generate embeddings using Amazon Bedrock models."
|
11
|
+
icon = "Amazon"
|
12
|
+
name = "AmazonBedrockEmbeddings"
|
13
|
+
|
14
|
+
inputs = [
|
15
|
+
DropdownInput(
|
16
|
+
name="model_id",
|
17
|
+
display_name="Model Id",
|
18
|
+
options=AWS_EMBEDDING_MODEL_IDS,
|
19
|
+
value="amazon.titan-embed-text-v1",
|
20
|
+
),
|
21
|
+
SecretStrInput(
|
22
|
+
name="aws_access_key_id",
|
23
|
+
display_name="AWS Access Key ID",
|
24
|
+
info="The access key for your AWS account."
|
25
|
+
"Usually set in Python code as the environment variable 'AWS_ACCESS_KEY_ID'.",
|
26
|
+
value="AWS_ACCESS_KEY_ID",
|
27
|
+
required=True,
|
28
|
+
),
|
29
|
+
SecretStrInput(
|
30
|
+
name="aws_secret_access_key",
|
31
|
+
display_name="AWS Secret Access Key",
|
32
|
+
info="The secret key for your AWS account. "
|
33
|
+
"Usually set in Python code as the environment variable 'AWS_SECRET_ACCESS_KEY'.",
|
34
|
+
value="AWS_SECRET_ACCESS_KEY",
|
35
|
+
required=True,
|
36
|
+
),
|
37
|
+
SecretStrInput(
|
38
|
+
name="aws_session_token",
|
39
|
+
display_name="AWS Session Token",
|
40
|
+
advanced=False,
|
41
|
+
info="The session key for your AWS account. "
|
42
|
+
"Only needed for temporary credentials. "
|
43
|
+
"Usually set in Python code as the environment variable 'AWS_SESSION_TOKEN'.",
|
44
|
+
value="AWS_SESSION_TOKEN",
|
45
|
+
),
|
46
|
+
SecretStrInput(
|
47
|
+
name="credentials_profile_name",
|
48
|
+
display_name="Credentials Profile Name",
|
49
|
+
advanced=True,
|
50
|
+
info="The name of the profile to use from your "
|
51
|
+
"~/.aws/credentials file. "
|
52
|
+
"If not provided, the default profile will be used.",
|
53
|
+
value="AWS_CREDENTIALS_PROFILE_NAME",
|
54
|
+
),
|
55
|
+
DropdownInput(
|
56
|
+
name="region_name",
|
57
|
+
display_name="Region Name",
|
58
|
+
value="us-east-1",
|
59
|
+
options=AWS_REGIONS,
|
60
|
+
info="The AWS region where your Bedrock resources are located.",
|
61
|
+
),
|
62
|
+
MessageTextInput(
|
63
|
+
name="endpoint_url",
|
64
|
+
display_name="Endpoint URL",
|
65
|
+
advanced=True,
|
66
|
+
info="The URL of the AWS Bedrock endpoint to use.",
|
67
|
+
),
|
68
|
+
]
|
69
|
+
|
70
|
+
outputs = [
|
71
|
+
Output(display_name="Embeddings", name="embeddings", method="build_embeddings"),
|
72
|
+
]
|
73
|
+
|
74
|
+
def build_embeddings(self) -> Embeddings:
|
75
|
+
try:
|
76
|
+
from langchain_aws import BedrockEmbeddings
|
77
|
+
except ImportError as e:
|
78
|
+
msg = "langchain_aws is not installed. Please install it with `pip install langchain_aws`."
|
79
|
+
raise ImportError(msg) from e
|
80
|
+
try:
|
81
|
+
import boto3
|
82
|
+
except ImportError as e:
|
83
|
+
msg = "boto3 is not installed. Please install it with `pip install boto3`."
|
84
|
+
raise ImportError(msg) from e
|
85
|
+
if self.aws_access_key_id or self.aws_secret_access_key:
|
86
|
+
session = boto3.Session(
|
87
|
+
aws_access_key_id=self.aws_access_key_id,
|
88
|
+
aws_secret_access_key=self.aws_secret_access_key,
|
89
|
+
aws_session_token=self.aws_session_token,
|
90
|
+
)
|
91
|
+
elif self.credentials_profile_name:
|
92
|
+
session = boto3.Session(profile_name=self.credentials_profile_name)
|
93
|
+
else:
|
94
|
+
session = boto3.Session()
|
95
|
+
|
96
|
+
client_params = {}
|
97
|
+
if self.endpoint_url:
|
98
|
+
client_params["endpoint_url"] = self.endpoint_url
|
99
|
+
if self.region_name:
|
100
|
+
client_params["region_name"] = self.region_name
|
101
|
+
|
102
|
+
boto3_client = session.client("bedrock-runtime", **client_params)
|
103
|
+
return BedrockEmbeddings(
|
104
|
+
credentials_profile_name=self.credentials_profile_name,
|
105
|
+
client=boto3_client,
|
106
|
+
model_id=self.model_id,
|
107
|
+
endpoint_url=self.endpoint_url,
|
108
|
+
region_name=self.region_name,
|
109
|
+
)
|
@@ -0,0 +1,124 @@
|
|
1
|
+
from lfx.base.models.aws_constants import AWS_REGIONS, AWS_MODEL_IDs
|
2
|
+
from lfx.base.models.model import LCModelComponent
|
3
|
+
from lfx.field_typing import LanguageModel
|
4
|
+
from lfx.inputs.inputs import MessageTextInput, SecretStrInput
|
5
|
+
from lfx.io import DictInput, DropdownInput
|
6
|
+
|
7
|
+
|
8
|
+
class AmazonBedrockComponent(LCModelComponent):
|
9
|
+
display_name: str = "Amazon Bedrock"
|
10
|
+
description: str = "Generate text using Amazon Bedrock LLMs."
|
11
|
+
icon = "Amazon"
|
12
|
+
name = "AmazonBedrockModel"
|
13
|
+
|
14
|
+
inputs = [
|
15
|
+
*LCModelComponent.get_base_inputs(),
|
16
|
+
DropdownInput(
|
17
|
+
name="model_id",
|
18
|
+
display_name="Model ID",
|
19
|
+
options=AWS_MODEL_IDs,
|
20
|
+
value="anthropic.claude-3-haiku-20240307-v1:0",
|
21
|
+
info="List of available model IDs to choose from.",
|
22
|
+
),
|
23
|
+
SecretStrInput(
|
24
|
+
name="aws_access_key_id",
|
25
|
+
display_name="AWS Access Key ID",
|
26
|
+
info="The access key for your AWS account."
|
27
|
+
"Usually set in Python code as the environment variable 'AWS_ACCESS_KEY_ID'.",
|
28
|
+
value="AWS_ACCESS_KEY_ID",
|
29
|
+
required=True,
|
30
|
+
),
|
31
|
+
SecretStrInput(
|
32
|
+
name="aws_secret_access_key",
|
33
|
+
display_name="AWS Secret Access Key",
|
34
|
+
info="The secret key for your AWS account. "
|
35
|
+
"Usually set in Python code as the environment variable 'AWS_SECRET_ACCESS_KEY'.",
|
36
|
+
value="AWS_SECRET_ACCESS_KEY",
|
37
|
+
required=True,
|
38
|
+
),
|
39
|
+
SecretStrInput(
|
40
|
+
name="aws_session_token",
|
41
|
+
display_name="AWS Session Token",
|
42
|
+
advanced=False,
|
43
|
+
info="The session key for your AWS account. "
|
44
|
+
"Only needed for temporary credentials. "
|
45
|
+
"Usually set in Python code as the environment variable 'AWS_SESSION_TOKEN'.",
|
46
|
+
load_from_db=False,
|
47
|
+
),
|
48
|
+
SecretStrInput(
|
49
|
+
name="credentials_profile_name",
|
50
|
+
display_name="Credentials Profile Name",
|
51
|
+
advanced=True,
|
52
|
+
info="The name of the profile to use from your "
|
53
|
+
"~/.aws/credentials file. "
|
54
|
+
"If not provided, the default profile will be used.",
|
55
|
+
load_from_db=False,
|
56
|
+
),
|
57
|
+
DropdownInput(
|
58
|
+
name="region_name",
|
59
|
+
display_name="Region Name",
|
60
|
+
value="us-east-1",
|
61
|
+
options=AWS_REGIONS,
|
62
|
+
info="The AWS region where your Bedrock resources are located.",
|
63
|
+
),
|
64
|
+
DictInput(
|
65
|
+
name="model_kwargs",
|
66
|
+
display_name="Model Kwargs",
|
67
|
+
advanced=True,
|
68
|
+
is_list=True,
|
69
|
+
info="Additional keyword arguments to pass to the model.",
|
70
|
+
),
|
71
|
+
MessageTextInput(
|
72
|
+
name="endpoint_url",
|
73
|
+
display_name="Endpoint URL",
|
74
|
+
advanced=True,
|
75
|
+
info="The URL of the Bedrock endpoint to use.",
|
76
|
+
),
|
77
|
+
]
|
78
|
+
|
79
|
+
def build_model(self) -> LanguageModel: # type: ignore[type-var]
|
80
|
+
try:
|
81
|
+
from langchain_aws import ChatBedrock
|
82
|
+
except ImportError as e:
|
83
|
+
msg = "langchain_aws is not installed. Please install it with `pip install langchain_aws`."
|
84
|
+
raise ImportError(msg) from e
|
85
|
+
try:
|
86
|
+
import boto3
|
87
|
+
except ImportError as e:
|
88
|
+
msg = "boto3 is not installed. Please install it with `pip install boto3`."
|
89
|
+
raise ImportError(msg) from e
|
90
|
+
if self.aws_access_key_id or self.aws_secret_access_key:
|
91
|
+
try:
|
92
|
+
session = boto3.Session(
|
93
|
+
aws_access_key_id=self.aws_access_key_id,
|
94
|
+
aws_secret_access_key=self.aws_secret_access_key,
|
95
|
+
aws_session_token=self.aws_session_token,
|
96
|
+
)
|
97
|
+
except Exception as e:
|
98
|
+
msg = "Could not create a boto3 session."
|
99
|
+
raise ValueError(msg) from e
|
100
|
+
elif self.credentials_profile_name:
|
101
|
+
session = boto3.Session(profile_name=self.credentials_profile_name)
|
102
|
+
else:
|
103
|
+
session = boto3.Session()
|
104
|
+
|
105
|
+
client_params = {}
|
106
|
+
if self.endpoint_url:
|
107
|
+
client_params["endpoint_url"] = self.endpoint_url
|
108
|
+
if self.region_name:
|
109
|
+
client_params["region_name"] = self.region_name
|
110
|
+
|
111
|
+
boto3_client = session.client("bedrock-runtime", **client_params)
|
112
|
+
try:
|
113
|
+
output = ChatBedrock(
|
114
|
+
client=boto3_client,
|
115
|
+
model_id=self.model_id,
|
116
|
+
region_name=self.region_name,
|
117
|
+
model_kwargs=self.model_kwargs,
|
118
|
+
endpoint_url=self.endpoint_url,
|
119
|
+
streaming=self.stream,
|
120
|
+
)
|
121
|
+
except Exception as e:
|
122
|
+
msg = "Could not connect to AmazonBedrock API."
|
123
|
+
raise ValueError(msg) from e
|
124
|
+
return output
|
@@ -0,0 +1,211 @@
|
|
1
|
+
from pathlib import Path
|
2
|
+
from typing import Any
|
3
|
+
|
4
|
+
from lfx.custom.custom_component.component import Component
|
5
|
+
from lfx.io import (
|
6
|
+
BoolInput,
|
7
|
+
DropdownInput,
|
8
|
+
HandleInput,
|
9
|
+
Output,
|
10
|
+
SecretStrInput,
|
11
|
+
StrInput,
|
12
|
+
)
|
13
|
+
|
14
|
+
|
15
|
+
class S3BucketUploaderComponent(Component):
|
16
|
+
"""S3BucketUploaderComponent is a component responsible for uploading files to an S3 bucket.
|
17
|
+
|
18
|
+
It provides two strategies for file upload: "By Data" and "By File Name". The component
|
19
|
+
requires AWS credentials and bucket details as inputs and processes files accordingly.
|
20
|
+
|
21
|
+
Attributes:
|
22
|
+
display_name (str): The display name of the component.
|
23
|
+
description (str): A brief description of the components functionality.
|
24
|
+
icon (str): The icon representing the component.
|
25
|
+
name (str): The internal name of the component.
|
26
|
+
inputs (list): A list of input configurations required by the component.
|
27
|
+
outputs (list): A list of output configurations provided by the component.
|
28
|
+
|
29
|
+
Methods:
|
30
|
+
process_files() -> None:
|
31
|
+
Processes files based on the selected strategy. Calls the appropriate method
|
32
|
+
based on the strategy attribute.
|
33
|
+
process_files_by_data() -> None:
|
34
|
+
Processes and uploads files to an S3 bucket based on the data inputs. Iterates
|
35
|
+
over the data inputs, logs the file path and text content, and uploads each file
|
36
|
+
to the specified S3 bucket if both file path and text content are available.
|
37
|
+
process_files_by_name() -> None:
|
38
|
+
Processes and uploads files to an S3 bucket based on their names. Iterates through
|
39
|
+
the list of data inputs, retrieves the file path from each data item, and uploads
|
40
|
+
the file to the specified S3 bucket if the file path is available. Logs the file
|
41
|
+
path being uploaded.
|
42
|
+
_s3_client() -> Any:
|
43
|
+
Creates and returns an S3 client using the provided AWS access key ID and secret
|
44
|
+
access key.
|
45
|
+
|
46
|
+
Please note that this component requires the boto3 library to be installed. It is designed
|
47
|
+
to work with File and Director components as inputs
|
48
|
+
"""
|
49
|
+
|
50
|
+
display_name = "S3 Bucket Uploader"
|
51
|
+
description = "Uploads files to S3 bucket."
|
52
|
+
icon = "Amazon"
|
53
|
+
name = "s3bucketuploader"
|
54
|
+
|
55
|
+
inputs = [
|
56
|
+
SecretStrInput(
|
57
|
+
name="aws_access_key_id",
|
58
|
+
display_name="AWS Access Key ID",
|
59
|
+
required=True,
|
60
|
+
password=True,
|
61
|
+
info="AWS Access key ID.",
|
62
|
+
),
|
63
|
+
SecretStrInput(
|
64
|
+
name="aws_secret_access_key",
|
65
|
+
display_name="AWS Secret Key",
|
66
|
+
required=True,
|
67
|
+
password=True,
|
68
|
+
info="AWS Secret Key.",
|
69
|
+
),
|
70
|
+
StrInput(
|
71
|
+
name="bucket_name",
|
72
|
+
display_name="Bucket Name",
|
73
|
+
info="Enter the name of the bucket.",
|
74
|
+
advanced=False,
|
75
|
+
),
|
76
|
+
DropdownInput(
|
77
|
+
name="strategy",
|
78
|
+
display_name="Strategy for file upload",
|
79
|
+
options=["Store Data", "Store Original File"],
|
80
|
+
value="By Data",
|
81
|
+
info=(
|
82
|
+
"Choose the strategy to upload the file. By Data means that the source file "
|
83
|
+
"is parsed and stored as LangFlow data. By File Name means that the source "
|
84
|
+
"file is uploaded as is."
|
85
|
+
),
|
86
|
+
),
|
87
|
+
HandleInput(
|
88
|
+
name="data_inputs",
|
89
|
+
display_name="Data Inputs",
|
90
|
+
info="The data to split.",
|
91
|
+
input_types=["Data"],
|
92
|
+
is_list=True,
|
93
|
+
required=True,
|
94
|
+
),
|
95
|
+
StrInput(
|
96
|
+
name="s3_prefix",
|
97
|
+
display_name="S3 Prefix",
|
98
|
+
info="Prefix for all files.",
|
99
|
+
advanced=True,
|
100
|
+
),
|
101
|
+
BoolInput(
|
102
|
+
name="strip_path",
|
103
|
+
display_name="Strip Path",
|
104
|
+
info="Removes path from file path.",
|
105
|
+
required=True,
|
106
|
+
advanced=True,
|
107
|
+
),
|
108
|
+
]
|
109
|
+
|
110
|
+
outputs = [
|
111
|
+
Output(display_name="Writes to AWS Bucket", name="data", method="process_files"),
|
112
|
+
]
|
113
|
+
|
114
|
+
def process_files(self) -> None:
|
115
|
+
"""Process files based on the selected strategy.
|
116
|
+
|
117
|
+
This method uses a strategy pattern to process files. The strategy is determined
|
118
|
+
by the `self.strategy` attribute, which can be either "By Data" or "By File Name".
|
119
|
+
Depending on the strategy, the corresponding method (`process_files_by_data` or
|
120
|
+
`process_files_by_name`) is called. If an invalid strategy is provided, an error
|
121
|
+
is logged.
|
122
|
+
|
123
|
+
Returns:
|
124
|
+
None
|
125
|
+
"""
|
126
|
+
strategy_methods = {
|
127
|
+
"Store Data": self.process_files_by_data,
|
128
|
+
"Store Original File": self.process_files_by_name,
|
129
|
+
}
|
130
|
+
strategy_methods.get(self.strategy, lambda: self.log("Invalid strategy"))()
|
131
|
+
|
132
|
+
def process_files_by_data(self) -> None:
|
133
|
+
"""Processes and uploads files to an S3 bucket based on the data inputs.
|
134
|
+
|
135
|
+
This method iterates over the data inputs, logs the file path and text content,
|
136
|
+
and uploads each file to the specified S3 bucket if both file path and text content
|
137
|
+
are available.
|
138
|
+
|
139
|
+
Args:
|
140
|
+
None
|
141
|
+
|
142
|
+
Returns:
|
143
|
+
None
|
144
|
+
"""
|
145
|
+
for data_item in self.data_inputs:
|
146
|
+
file_path = data_item.data.get("file_path")
|
147
|
+
text_content = data_item.data.get("text")
|
148
|
+
|
149
|
+
if file_path and text_content:
|
150
|
+
self._s3_client().put_object(
|
151
|
+
Bucket=self.bucket_name, Key=self._normalize_path(file_path), Body=text_content
|
152
|
+
)
|
153
|
+
|
154
|
+
def process_files_by_name(self) -> None:
|
155
|
+
"""Processes and uploads files to an S3 bucket based on their names.
|
156
|
+
|
157
|
+
Iterates through the list of data inputs, retrieves the file path from each data item,
|
158
|
+
and uploads the file to the specified S3 bucket if the file path is available.
|
159
|
+
Logs the file path being uploaded.
|
160
|
+
|
161
|
+
Returns:
|
162
|
+
None
|
163
|
+
"""
|
164
|
+
for data_item in self.data_inputs:
|
165
|
+
file_path = data_item.data.get("file_path")
|
166
|
+
self.log(f"Uploading file: {file_path}")
|
167
|
+
if file_path:
|
168
|
+
self._s3_client().upload_file(file_path, Bucket=self.bucket_name, Key=self._normalize_path(file_path))
|
169
|
+
|
170
|
+
def _s3_client(self) -> Any:
|
171
|
+
"""Creates and returns an S3 client using the provided AWS access key ID and secret access key.
|
172
|
+
|
173
|
+
Returns:
|
174
|
+
Any: A boto3 S3 client instance.
|
175
|
+
"""
|
176
|
+
try:
|
177
|
+
import boto3
|
178
|
+
except ImportError as e:
|
179
|
+
msg = "boto3 is not installed. Please install it using `uv pip install boto3`."
|
180
|
+
raise ImportError(msg) from e
|
181
|
+
|
182
|
+
return boto3.client(
|
183
|
+
"s3",
|
184
|
+
aws_access_key_id=self.aws_access_key_id,
|
185
|
+
aws_secret_access_key=self.aws_secret_access_key,
|
186
|
+
)
|
187
|
+
|
188
|
+
def _normalize_path(self, file_path) -> str:
|
189
|
+
"""Process the file path based on the s3_prefix and path_as_prefix.
|
190
|
+
|
191
|
+
Args:
|
192
|
+
file_path (str): The original file path.
|
193
|
+
s3_prefix (str): The S3 prefix to use.
|
194
|
+
path_as_prefix (bool): Whether to use the file path as the S3 prefix.
|
195
|
+
|
196
|
+
Returns:
|
197
|
+
str: The processed file path.
|
198
|
+
"""
|
199
|
+
prefix = self.s3_prefix
|
200
|
+
strip_path = self.strip_path
|
201
|
+
processed_path: str = file_path
|
202
|
+
|
203
|
+
if strip_path:
|
204
|
+
# Filename only
|
205
|
+
processed_path = Path(file_path).name
|
206
|
+
|
207
|
+
# Concatenate the s3_prefix if it exists
|
208
|
+
if prefix:
|
209
|
+
processed_path = str(Path(prefix) / processed_path)
|
210
|
+
|
211
|
+
return processed_path
|
@@ -0,0 +1,34 @@
|
|
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.anthropic.anthropic import AnthropicModelComponent
|
9
|
+
|
10
|
+
_dynamic_imports = {
|
11
|
+
"AnthropicModelComponent": "anthropic",
|
12
|
+
}
|
13
|
+
|
14
|
+
__all__ = [
|
15
|
+
"AnthropicModelComponent",
|
16
|
+
]
|
17
|
+
|
18
|
+
|
19
|
+
def __getattr__(attr_name: str) -> Any:
|
20
|
+
"""Lazily import Anthropic components on attribute access."""
|
21
|
+
if attr_name not in _dynamic_imports:
|
22
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
23
|
+
raise AttributeError(msg)
|
24
|
+
try:
|
25
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
26
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
27
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
28
|
+
raise AttributeError(msg) from e
|
29
|
+
globals()[attr_name] = result
|
30
|
+
return result
|
31
|
+
|
32
|
+
|
33
|
+
def __dir__() -> list[str]:
|
34
|
+
return list(__all__)
|