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,121 @@
|
|
1
|
+
from langchain_unstructured import UnstructuredLoader
|
2
|
+
|
3
|
+
from lfx.base.data.base_file import BaseFileComponent
|
4
|
+
from lfx.inputs.inputs import DropdownInput, MessageTextInput, NestedDictInput, SecretStrInput
|
5
|
+
from lfx.schema.data import Data
|
6
|
+
|
7
|
+
|
8
|
+
class UnstructuredComponent(BaseFileComponent):
|
9
|
+
display_name = "Unstructured API"
|
10
|
+
description = (
|
11
|
+
"Uses Unstructured.io API to extract clean text from raw source documents. Supports a wide range of file types."
|
12
|
+
)
|
13
|
+
documentation = (
|
14
|
+
"https://python.langchain.com/api_reference/unstructured/document_loaders/"
|
15
|
+
"langchain_unstructured.document_loaders.UnstructuredLoader.html"
|
16
|
+
)
|
17
|
+
trace_type = "tool"
|
18
|
+
icon = "Unstructured"
|
19
|
+
name = "Unstructured"
|
20
|
+
|
21
|
+
# https://docs.unstructured.io/api-reference/api-services/overview#supported-file-types
|
22
|
+
VALID_EXTENSIONS = [
|
23
|
+
"bmp",
|
24
|
+
"csv",
|
25
|
+
"doc",
|
26
|
+
"docx",
|
27
|
+
"eml",
|
28
|
+
"epub",
|
29
|
+
"heic",
|
30
|
+
"html",
|
31
|
+
"jpeg",
|
32
|
+
"png",
|
33
|
+
"md",
|
34
|
+
"msg",
|
35
|
+
"odt",
|
36
|
+
"org",
|
37
|
+
"p7s",
|
38
|
+
"pdf",
|
39
|
+
"png",
|
40
|
+
"ppt",
|
41
|
+
"pptx",
|
42
|
+
"rst",
|
43
|
+
"rtf",
|
44
|
+
"tiff",
|
45
|
+
"txt",
|
46
|
+
"tsv",
|
47
|
+
"xls",
|
48
|
+
"xlsx",
|
49
|
+
"xml",
|
50
|
+
]
|
51
|
+
|
52
|
+
inputs = [
|
53
|
+
*BaseFileComponent.get_base_inputs(),
|
54
|
+
SecretStrInput(
|
55
|
+
name="api_key",
|
56
|
+
display_name="Unstructured.io Serverless API Key",
|
57
|
+
required=True,
|
58
|
+
info="Unstructured API Key. Create at: https://app.unstructured.io/",
|
59
|
+
),
|
60
|
+
MessageTextInput(
|
61
|
+
name="api_url",
|
62
|
+
display_name="Unstructured.io API URL",
|
63
|
+
required=False,
|
64
|
+
info="Unstructured API URL.",
|
65
|
+
),
|
66
|
+
DropdownInput(
|
67
|
+
name="chunking_strategy",
|
68
|
+
display_name="Chunking Strategy",
|
69
|
+
info="Chunking strategy to use, see https://docs.unstructured.io/api-reference/api-services/chunking",
|
70
|
+
options=["", "basic", "by_title", "by_page", "by_similarity"],
|
71
|
+
real_time_refresh=False,
|
72
|
+
value="",
|
73
|
+
),
|
74
|
+
NestedDictInput(
|
75
|
+
name="unstructured_args",
|
76
|
+
display_name="Additional Arguments",
|
77
|
+
required=False,
|
78
|
+
info=(
|
79
|
+
"Optional dictionary of additional arguments to the Loader. "
|
80
|
+
"See https://docs.unstructured.io/api-reference/api-services/api-parameters for more information."
|
81
|
+
),
|
82
|
+
),
|
83
|
+
]
|
84
|
+
|
85
|
+
outputs = [
|
86
|
+
*BaseFileComponent.get_base_outputs(),
|
87
|
+
]
|
88
|
+
|
89
|
+
def process_files(self, file_list: list[BaseFileComponent.BaseFile]) -> list[BaseFileComponent.BaseFile]:
|
90
|
+
file_paths = [str(file.path) for file in file_list if file.path]
|
91
|
+
|
92
|
+
if not file_paths:
|
93
|
+
self.log("No files to process.")
|
94
|
+
return file_list
|
95
|
+
|
96
|
+
# https://docs.unstructured.io/api-reference/api-services/api-parameters
|
97
|
+
args = self.unstructured_args or {}
|
98
|
+
|
99
|
+
if self.chunking_strategy:
|
100
|
+
args["chunking_strategy"] = self.chunking_strategy
|
101
|
+
|
102
|
+
args["api_key"] = self.api_key
|
103
|
+
args["partition_via_api"] = True
|
104
|
+
if self.api_url:
|
105
|
+
args["url"] = self.api_url
|
106
|
+
|
107
|
+
loader = UnstructuredLoader(
|
108
|
+
file_paths,
|
109
|
+
**args,
|
110
|
+
)
|
111
|
+
|
112
|
+
documents = loader.load()
|
113
|
+
|
114
|
+
processed_data: list[Data | None] = [Data.from_document(doc) if doc else None for doc in documents]
|
115
|
+
|
116
|
+
# Rename the `source` field to `self.SERVER_FILE_PATH_FIELDNAME`, to avoid conflicts with the `source` field
|
117
|
+
for data in processed_data:
|
118
|
+
if data and "source" in data.data:
|
119
|
+
data.data[self.SERVER_FILE_PATH_FIELDNAME] = data.data.pop("source")
|
120
|
+
|
121
|
+
return self.rollup_data(file_list, processed_data)
|
@@ -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 .upstash import UpstashVectorStoreComponent
|
9
|
+
|
10
|
+
_dynamic_imports = {
|
11
|
+
"UpstashVectorStoreComponent": "upstash",
|
12
|
+
}
|
13
|
+
|
14
|
+
__all__ = [
|
15
|
+
"UpstashVectorStoreComponent",
|
16
|
+
]
|
17
|
+
|
18
|
+
|
19
|
+
def __getattr__(attr_name: str) -> Any:
|
20
|
+
"""Lazily import Upstash 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__)
|
@@ -0,0 +1,124 @@
|
|
1
|
+
from langchain_community.vectorstores import UpstashVectorStore
|
2
|
+
|
3
|
+
from lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
|
4
|
+
from lfx.helpers.data import docs_to_data
|
5
|
+
from lfx.io import (
|
6
|
+
HandleInput,
|
7
|
+
IntInput,
|
8
|
+
MultilineInput,
|
9
|
+
SecretStrInput,
|
10
|
+
StrInput,
|
11
|
+
)
|
12
|
+
from lfx.schema.data import Data
|
13
|
+
|
14
|
+
|
15
|
+
class UpstashVectorStoreComponent(LCVectorStoreComponent):
|
16
|
+
display_name = "Upstash"
|
17
|
+
description = "Upstash Vector Store with search capabilities"
|
18
|
+
name = "Upstash"
|
19
|
+
icon = "Upstash"
|
20
|
+
|
21
|
+
inputs = [
|
22
|
+
StrInput(
|
23
|
+
name="index_url",
|
24
|
+
display_name="Index URL",
|
25
|
+
info="The URL of the Upstash index.",
|
26
|
+
required=True,
|
27
|
+
),
|
28
|
+
SecretStrInput(
|
29
|
+
name="index_token",
|
30
|
+
display_name="Index Token",
|
31
|
+
info="The token for the Upstash index.",
|
32
|
+
required=True,
|
33
|
+
),
|
34
|
+
StrInput(
|
35
|
+
name="text_key",
|
36
|
+
display_name="Text Key",
|
37
|
+
info="The key in the record to use as text.",
|
38
|
+
value="text",
|
39
|
+
advanced=True,
|
40
|
+
),
|
41
|
+
StrInput(
|
42
|
+
name="namespace",
|
43
|
+
display_name="Namespace",
|
44
|
+
info="Leave empty for default namespace.",
|
45
|
+
),
|
46
|
+
*LCVectorStoreComponent.inputs,
|
47
|
+
MultilineInput(
|
48
|
+
name="metadata_filter",
|
49
|
+
display_name="Metadata Filter",
|
50
|
+
info="Filters documents by metadata. Look at the documentation for more information.",
|
51
|
+
),
|
52
|
+
HandleInput(
|
53
|
+
name="embedding",
|
54
|
+
display_name="Embedding",
|
55
|
+
input_types=["Embeddings"],
|
56
|
+
info="To use Upstash's embeddings, don't provide an embedding.",
|
57
|
+
),
|
58
|
+
IntInput(
|
59
|
+
name="number_of_results",
|
60
|
+
display_name="Number of Results",
|
61
|
+
info="Number of results to return.",
|
62
|
+
value=4,
|
63
|
+
advanced=True,
|
64
|
+
),
|
65
|
+
]
|
66
|
+
|
67
|
+
@check_cached_vector_store
|
68
|
+
def build_vector_store(self) -> UpstashVectorStore:
|
69
|
+
use_upstash_embedding = self.embedding is None
|
70
|
+
|
71
|
+
# Convert DataFrame to Data if needed using parent's method
|
72
|
+
self.ingest_data = self._prepare_ingest_data()
|
73
|
+
|
74
|
+
documents = []
|
75
|
+
for _input in self.ingest_data or []:
|
76
|
+
if isinstance(_input, Data):
|
77
|
+
documents.append(_input.to_lc_document())
|
78
|
+
else:
|
79
|
+
documents.append(_input)
|
80
|
+
|
81
|
+
if documents:
|
82
|
+
if use_upstash_embedding:
|
83
|
+
upstash_vs = UpstashVectorStore(
|
84
|
+
embedding=use_upstash_embedding,
|
85
|
+
text_key=self.text_key,
|
86
|
+
index_url=self.index_url,
|
87
|
+
index_token=self.index_token,
|
88
|
+
namespace=self.namespace,
|
89
|
+
)
|
90
|
+
upstash_vs.add_documents(documents)
|
91
|
+
else:
|
92
|
+
upstash_vs = UpstashVectorStore.from_documents(
|
93
|
+
documents=documents,
|
94
|
+
embedding=self.embedding,
|
95
|
+
text_key=self.text_key,
|
96
|
+
index_url=self.index_url,
|
97
|
+
index_token=self.index_token,
|
98
|
+
namespace=self.namespace,
|
99
|
+
)
|
100
|
+
else:
|
101
|
+
upstash_vs = UpstashVectorStore(
|
102
|
+
embedding=self.embedding or use_upstash_embedding,
|
103
|
+
text_key=self.text_key,
|
104
|
+
index_url=self.index_url,
|
105
|
+
index_token=self.index_token,
|
106
|
+
namespace=self.namespace,
|
107
|
+
)
|
108
|
+
|
109
|
+
return upstash_vs
|
110
|
+
|
111
|
+
def search_documents(self) -> list[Data]:
|
112
|
+
vector_store = self.build_vector_store()
|
113
|
+
|
114
|
+
if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():
|
115
|
+
docs = vector_store.similarity_search(
|
116
|
+
query=self.search_query,
|
117
|
+
k=self.number_of_results,
|
118
|
+
filter=self.metadata_filter,
|
119
|
+
)
|
120
|
+
|
121
|
+
data = docs_to_data(docs)
|
122
|
+
self.status = data
|
123
|
+
return data
|
124
|
+
return []
|
@@ -0,0 +1,37 @@
|
|
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 .vectara import VectaraVectorStoreComponent
|
9
|
+
from .vectara_rag import VectaraRagComponent
|
10
|
+
|
11
|
+
_dynamic_imports = {
|
12
|
+
"VectaraVectorStoreComponent": "vectara",
|
13
|
+
"VectaraRagComponent": "vectara_rag",
|
14
|
+
}
|
15
|
+
|
16
|
+
__all__ = [
|
17
|
+
"VectaraRagComponent",
|
18
|
+
"VectaraVectorStoreComponent",
|
19
|
+
]
|
20
|
+
|
21
|
+
|
22
|
+
def __getattr__(attr_name: str) -> Any:
|
23
|
+
"""Lazily import Vectara components on attribute access."""
|
24
|
+
if attr_name not in _dynamic_imports:
|
25
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
26
|
+
raise AttributeError(msg)
|
27
|
+
try:
|
28
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
29
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
30
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
31
|
+
raise AttributeError(msg) from e
|
32
|
+
globals()[attr_name] = result
|
33
|
+
return result
|
34
|
+
|
35
|
+
|
36
|
+
def __dir__() -> list[str]:
|
37
|
+
return list(__all__)
|
@@ -0,0 +1,97 @@
|
|
1
|
+
from typing import TYPE_CHECKING
|
2
|
+
|
3
|
+
from langchain_community.vectorstores import Vectara
|
4
|
+
|
5
|
+
from lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
|
6
|
+
from lfx.helpers.data import docs_to_data
|
7
|
+
from lfx.io import HandleInput, IntInput, SecretStrInput, StrInput
|
8
|
+
from lfx.schema.data import Data
|
9
|
+
|
10
|
+
if TYPE_CHECKING:
|
11
|
+
from lfx.schema.dataframe import DataFrame
|
12
|
+
|
13
|
+
|
14
|
+
class VectaraVectorStoreComponent(LCVectorStoreComponent):
|
15
|
+
"""Vectara Vector Store with search capabilities."""
|
16
|
+
|
17
|
+
display_name: str = "Vectara"
|
18
|
+
description: str = "Vectara Vector Store with search capabilities"
|
19
|
+
name = "Vectara"
|
20
|
+
icon = "Vectara"
|
21
|
+
|
22
|
+
inputs = [
|
23
|
+
StrInput(name="vectara_customer_id", display_name="Vectara Customer ID", required=True),
|
24
|
+
StrInput(name="vectara_corpus_id", display_name="Vectara Corpus ID", required=True),
|
25
|
+
SecretStrInput(name="vectara_api_key", display_name="Vectara API Key", required=True),
|
26
|
+
HandleInput(
|
27
|
+
name="embedding",
|
28
|
+
display_name="Embedding",
|
29
|
+
input_types=["Embeddings"],
|
30
|
+
),
|
31
|
+
*LCVectorStoreComponent.inputs,
|
32
|
+
IntInput(
|
33
|
+
name="number_of_results",
|
34
|
+
display_name="Number of Results",
|
35
|
+
info="Number of results to return.",
|
36
|
+
value=4,
|
37
|
+
advanced=True,
|
38
|
+
),
|
39
|
+
]
|
40
|
+
|
41
|
+
@check_cached_vector_store
|
42
|
+
def build_vector_store(self) -> Vectara:
|
43
|
+
"""Builds the Vectara object."""
|
44
|
+
try:
|
45
|
+
from langchain_community.vectorstores import Vectara
|
46
|
+
except ImportError as e:
|
47
|
+
msg = "Could not import Vectara. Please install it with `pip install langchain-community`."
|
48
|
+
raise ImportError(msg) from e
|
49
|
+
|
50
|
+
vectara = Vectara(
|
51
|
+
vectara_customer_id=self.vectara_customer_id,
|
52
|
+
vectara_corpus_id=self.vectara_corpus_id,
|
53
|
+
vectara_api_key=self.vectara_api_key,
|
54
|
+
)
|
55
|
+
|
56
|
+
self._add_documents_to_vector_store(vectara)
|
57
|
+
return vectara
|
58
|
+
|
59
|
+
def _add_documents_to_vector_store(self, vector_store: Vectara) -> None:
|
60
|
+
"""Adds documents to the Vector Store."""
|
61
|
+
ingest_data: list | Data | DataFrame = self.ingest_data
|
62
|
+
if not ingest_data:
|
63
|
+
self.status = "No documents to add to Vectara"
|
64
|
+
return
|
65
|
+
|
66
|
+
# Convert DataFrame to Data if needed using parent's method
|
67
|
+
ingest_data = self._prepare_ingest_data()
|
68
|
+
|
69
|
+
documents = []
|
70
|
+
for _input in ingest_data or []:
|
71
|
+
if isinstance(_input, Data):
|
72
|
+
documents.append(_input.to_lc_document())
|
73
|
+
else:
|
74
|
+
documents.append(_input)
|
75
|
+
|
76
|
+
if documents:
|
77
|
+
self.log(f"Adding {len(documents)} documents to Vectara.")
|
78
|
+
vector_store.add_documents(documents)
|
79
|
+
self.status = f"Added {len(documents)} documents to Vectara"
|
80
|
+
else:
|
81
|
+
self.log("No documents to add to Vectara.")
|
82
|
+
self.status = "No valid documents to add to Vectara"
|
83
|
+
|
84
|
+
def search_documents(self) -> list[Data]:
|
85
|
+
vector_store = self.build_vector_store()
|
86
|
+
|
87
|
+
if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():
|
88
|
+
docs = vector_store.similarity_search(
|
89
|
+
query=self.search_query,
|
90
|
+
k=self.number_of_results,
|
91
|
+
)
|
92
|
+
|
93
|
+
data = docs_to_data(docs)
|
94
|
+
self.status = f"Found {len(data)} results for the query: {self.search_query}"
|
95
|
+
return data
|
96
|
+
self.status = "No search query provided"
|
97
|
+
return []
|
@@ -0,0 +1,164 @@
|
|
1
|
+
from lfx.custom.custom_component.component import Component
|
2
|
+
from lfx.field_typing.range_spec import RangeSpec
|
3
|
+
from lfx.io import DropdownInput, FloatInput, IntInput, MessageTextInput, Output, SecretStrInput, StrInput
|
4
|
+
from lfx.schema.message import Message
|
5
|
+
|
6
|
+
|
7
|
+
class VectaraRagComponent(Component):
|
8
|
+
display_name = "Vectara RAG"
|
9
|
+
description = "Vectara's full end to end RAG"
|
10
|
+
documentation = "https://docs.vectara.com/docs"
|
11
|
+
icon = "Vectara"
|
12
|
+
name = "VectaraRAG"
|
13
|
+
SUMMARIZER_PROMPTS = [
|
14
|
+
"vectara-summary-ext-24-05-sml",
|
15
|
+
"vectara-summary-ext-24-05-med-omni",
|
16
|
+
"vectara-summary-ext-24-05-large",
|
17
|
+
"vectara-summary-ext-24-05-med",
|
18
|
+
"vectara-summary-ext-v1.3.0",
|
19
|
+
]
|
20
|
+
|
21
|
+
RERANKER_TYPES = ["mmr", "rerank_multilingual_v1", "none"]
|
22
|
+
|
23
|
+
RESPONSE_LANGUAGES = [
|
24
|
+
"auto",
|
25
|
+
"eng",
|
26
|
+
"spa",
|
27
|
+
"fra",
|
28
|
+
"zho",
|
29
|
+
"deu",
|
30
|
+
"hin",
|
31
|
+
"ara",
|
32
|
+
"por",
|
33
|
+
"ita",
|
34
|
+
"jpn",
|
35
|
+
"kor",
|
36
|
+
"rus",
|
37
|
+
"tur",
|
38
|
+
"fas",
|
39
|
+
"vie",
|
40
|
+
"tha",
|
41
|
+
"heb",
|
42
|
+
"nld",
|
43
|
+
"ind",
|
44
|
+
"pol",
|
45
|
+
"ukr",
|
46
|
+
"ron",
|
47
|
+
"swe",
|
48
|
+
"ces",
|
49
|
+
"ell",
|
50
|
+
"ben",
|
51
|
+
"msa",
|
52
|
+
"urd",
|
53
|
+
]
|
54
|
+
|
55
|
+
field_order = ["vectara_customer_id", "vectara_corpus_id", "vectara_api_key", "search_query", "reranker"]
|
56
|
+
|
57
|
+
inputs = [
|
58
|
+
StrInput(name="vectara_customer_id", display_name="Vectara Customer ID", required=True),
|
59
|
+
StrInput(name="vectara_corpus_id", display_name="Vectara Corpus ID", required=True),
|
60
|
+
SecretStrInput(name="vectara_api_key", display_name="Vectara API Key", required=True),
|
61
|
+
MessageTextInput(
|
62
|
+
name="search_query",
|
63
|
+
display_name="Search Query",
|
64
|
+
info="The query to receive an answer on.",
|
65
|
+
tool_mode=True,
|
66
|
+
),
|
67
|
+
FloatInput(
|
68
|
+
name="lexical_interpolation",
|
69
|
+
display_name="Hybrid Search Factor",
|
70
|
+
range_spec=RangeSpec(min=0.005, max=0.1, step=0.005),
|
71
|
+
value=0.005,
|
72
|
+
advanced=True,
|
73
|
+
info="How much to weigh lexical scores compared to the embedding score. "
|
74
|
+
"0 means lexical search is not used at all, and 1 means only lexical search is used.",
|
75
|
+
),
|
76
|
+
MessageTextInput(
|
77
|
+
name="filter",
|
78
|
+
display_name="Metadata Filters",
|
79
|
+
value="",
|
80
|
+
advanced=True,
|
81
|
+
info="The filter string to narrow the search to according to metadata attributes.",
|
82
|
+
),
|
83
|
+
DropdownInput(
|
84
|
+
name="reranker",
|
85
|
+
display_name="Reranker Type",
|
86
|
+
options=RERANKER_TYPES,
|
87
|
+
value=RERANKER_TYPES[0],
|
88
|
+
info="How to rerank the retrieved search results.",
|
89
|
+
),
|
90
|
+
IntInput(
|
91
|
+
name="reranker_k",
|
92
|
+
display_name="Number of Results to Rerank",
|
93
|
+
value=50,
|
94
|
+
range_spec=RangeSpec(min=1, max=100, step=1),
|
95
|
+
advanced=True,
|
96
|
+
),
|
97
|
+
FloatInput(
|
98
|
+
name="diversity_bias",
|
99
|
+
display_name="Diversity Bias",
|
100
|
+
value=0.2,
|
101
|
+
range_spec=RangeSpec(min=0, max=1, step=0.01),
|
102
|
+
advanced=True,
|
103
|
+
info="Ranges from 0 to 1, with higher values indicating greater diversity (only applies to MMR reranker).",
|
104
|
+
),
|
105
|
+
IntInput(
|
106
|
+
name="max_results",
|
107
|
+
display_name="Max Results to Summarize",
|
108
|
+
value=7,
|
109
|
+
range_spec=RangeSpec(min=1, max=100, step=1),
|
110
|
+
advanced=True,
|
111
|
+
info="The maximum number of search results to be available to the prompt.",
|
112
|
+
),
|
113
|
+
DropdownInput(
|
114
|
+
name="response_lang",
|
115
|
+
display_name="Response Language",
|
116
|
+
options=RESPONSE_LANGUAGES,
|
117
|
+
value="eng",
|
118
|
+
advanced=True,
|
119
|
+
info="Use the ISO 639-1 or 639-3 language code or auto to automatically detect the language.",
|
120
|
+
),
|
121
|
+
DropdownInput(
|
122
|
+
name="prompt",
|
123
|
+
display_name="Prompt Name",
|
124
|
+
options=SUMMARIZER_PROMPTS,
|
125
|
+
value=SUMMARIZER_PROMPTS[0],
|
126
|
+
advanced=True,
|
127
|
+
info="Only vectara-summary-ext-24-05-sml is for Growth customers; "
|
128
|
+
"all other prompts are for Scale customers only.",
|
129
|
+
),
|
130
|
+
]
|
131
|
+
|
132
|
+
outputs = [
|
133
|
+
Output(name="answer", display_name="Answer", method="generate_response"),
|
134
|
+
]
|
135
|
+
|
136
|
+
def generate_response(
|
137
|
+
self,
|
138
|
+
) -> Message:
|
139
|
+
text_output = ""
|
140
|
+
|
141
|
+
try:
|
142
|
+
from langchain_community.vectorstores import Vectara
|
143
|
+
from langchain_community.vectorstores.vectara import RerankConfig, SummaryConfig, VectaraQueryConfig
|
144
|
+
except ImportError as e:
|
145
|
+
msg = "Could not import Vectara. Please install it with `pip install langchain-community`."
|
146
|
+
raise ImportError(msg) from e
|
147
|
+
|
148
|
+
vectara = Vectara(self.vectara_customer_id, self.vectara_corpus_id, self.vectara_api_key)
|
149
|
+
rerank_config = RerankConfig(self.reranker, self.reranker_k, self.diversity_bias)
|
150
|
+
summary_config = SummaryConfig(
|
151
|
+
is_enabled=True, max_results=self.max_results, response_lang=self.response_lang, prompt_name=self.prompt
|
152
|
+
)
|
153
|
+
config = VectaraQueryConfig(
|
154
|
+
lambda_val=self.lexical_interpolation,
|
155
|
+
filter=self.filter,
|
156
|
+
summary_config=summary_config,
|
157
|
+
rerank_config=rerank_config,
|
158
|
+
)
|
159
|
+
rag = vectara.as_rag(config)
|
160
|
+
response = rag.invoke(self.search_query, config={"callbacks": self.get_langchain_callbacks()})
|
161
|
+
|
162
|
+
text_output = response["answer"]
|
163
|
+
|
164
|
+
return Message(text=text_output)
|
@@ -0,0 +1,40 @@
|
|
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 .astradb import AstraDBVectorStoreComponent
|
9
|
+
from .local_db import LocalDBComponent
|
10
|
+
from .mongodb_atlas import MongoVectorStoreComponent
|
11
|
+
|
12
|
+
_dynamic_imports = {
|
13
|
+
"LocalDBComponent": "local_db",
|
14
|
+
"AstraDBVectorStoreComponent": "astradb",
|
15
|
+
"MongoVectorStoreComponent": "mongodb_atlas",
|
16
|
+
}
|
17
|
+
|
18
|
+
__all__ = [
|
19
|
+
"AstraDBVectorStoreComponent",
|
20
|
+
"LocalDBComponent",
|
21
|
+
"MongoVectorStoreComponent",
|
22
|
+
]
|
23
|
+
|
24
|
+
|
25
|
+
def __getattr__(attr_name: str) -> Any:
|
26
|
+
"""Lazily import vectorstore components on attribute access."""
|
27
|
+
if attr_name not in _dynamic_imports:
|
28
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
29
|
+
raise AttributeError(msg)
|
30
|
+
try:
|
31
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
32
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
33
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
34
|
+
raise AttributeError(msg) from e
|
35
|
+
globals()[attr_name] = result
|
36
|
+
return result
|
37
|
+
|
38
|
+
|
39
|
+
def __dir__() -> list[str]:
|
40
|
+
return list(__all__)
|