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,314 @@
|
|
1
|
+
from lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
|
2
|
+
from lfx.helpers.data import docs_to_data
|
3
|
+
from lfx.inputs.inputs import DictInput, FloatInput
|
4
|
+
from lfx.io import (
|
5
|
+
BoolInput,
|
6
|
+
DropdownInput,
|
7
|
+
HandleInput,
|
8
|
+
IntInput,
|
9
|
+
MultilineInput,
|
10
|
+
SecretStrInput,
|
11
|
+
StrInput,
|
12
|
+
)
|
13
|
+
from lfx.schema.data import Data
|
14
|
+
|
15
|
+
|
16
|
+
class HCDVectorStoreComponent(LCVectorStoreComponent):
|
17
|
+
display_name: str = "Hyper-Converged Database"
|
18
|
+
description: str = "Implementation of Vector Store using Hyper-Converged Database (HCD) with search capabilities"
|
19
|
+
name = "HCD"
|
20
|
+
icon: str = "HCD"
|
21
|
+
|
22
|
+
inputs = [
|
23
|
+
StrInput(
|
24
|
+
name="collection_name",
|
25
|
+
display_name="Collection Name",
|
26
|
+
info="The name of the collection within HCD where the vectors will be stored.",
|
27
|
+
required=True,
|
28
|
+
),
|
29
|
+
StrInput(
|
30
|
+
name="username",
|
31
|
+
display_name="HCD Username",
|
32
|
+
info="Authentication username for accessing HCD.",
|
33
|
+
value="hcd-superuser",
|
34
|
+
required=True,
|
35
|
+
),
|
36
|
+
SecretStrInput(
|
37
|
+
name="password",
|
38
|
+
display_name="HCD Password",
|
39
|
+
info="Authentication password for accessing HCD.",
|
40
|
+
value="HCD_PASSWORD",
|
41
|
+
required=True,
|
42
|
+
),
|
43
|
+
SecretStrInput(
|
44
|
+
name="api_endpoint",
|
45
|
+
display_name="HCD API Endpoint",
|
46
|
+
info="API endpoint URL for the HCD service.",
|
47
|
+
value="HCD_API_ENDPOINT",
|
48
|
+
required=True,
|
49
|
+
),
|
50
|
+
*LCVectorStoreComponent.inputs,
|
51
|
+
StrInput(
|
52
|
+
name="namespace",
|
53
|
+
display_name="Namespace",
|
54
|
+
info="Optional namespace within HCD to use for the collection.",
|
55
|
+
value="default_namespace",
|
56
|
+
advanced=True,
|
57
|
+
),
|
58
|
+
MultilineInput(
|
59
|
+
name="ca_certificate",
|
60
|
+
display_name="CA Certificate",
|
61
|
+
info="Optional CA certificate for TLS connections to HCD.",
|
62
|
+
advanced=True,
|
63
|
+
),
|
64
|
+
DropdownInput(
|
65
|
+
name="metric",
|
66
|
+
display_name="Metric",
|
67
|
+
info="Optional distance metric for vector comparisons in the vector store.",
|
68
|
+
options=["cosine", "dot_product", "euclidean"],
|
69
|
+
advanced=True,
|
70
|
+
),
|
71
|
+
IntInput(
|
72
|
+
name="batch_size",
|
73
|
+
display_name="Batch Size",
|
74
|
+
info="Optional number of data to process in a single batch.",
|
75
|
+
advanced=True,
|
76
|
+
),
|
77
|
+
IntInput(
|
78
|
+
name="bulk_insert_batch_concurrency",
|
79
|
+
display_name="Bulk Insert Batch Concurrency",
|
80
|
+
info="Optional concurrency level for bulk insert operations.",
|
81
|
+
advanced=True,
|
82
|
+
),
|
83
|
+
IntInput(
|
84
|
+
name="bulk_insert_overwrite_concurrency",
|
85
|
+
display_name="Bulk Insert Overwrite Concurrency",
|
86
|
+
info="Optional concurrency level for bulk insert operations that overwrite existing data.",
|
87
|
+
advanced=True,
|
88
|
+
),
|
89
|
+
IntInput(
|
90
|
+
name="bulk_delete_concurrency",
|
91
|
+
display_name="Bulk Delete Concurrency",
|
92
|
+
info="Optional concurrency level for bulk delete operations.",
|
93
|
+
advanced=True,
|
94
|
+
),
|
95
|
+
DropdownInput(
|
96
|
+
name="setup_mode",
|
97
|
+
display_name="Setup Mode",
|
98
|
+
info="Configuration mode for setting up the vector store, with options like 'Sync', 'Async', or 'Off'.",
|
99
|
+
options=["Sync", "Async", "Off"],
|
100
|
+
advanced=True,
|
101
|
+
value="Sync",
|
102
|
+
),
|
103
|
+
BoolInput(
|
104
|
+
name="pre_delete_collection",
|
105
|
+
display_name="Pre Delete Collection",
|
106
|
+
info="Boolean flag to determine whether to delete the collection before creating a new one.",
|
107
|
+
advanced=True,
|
108
|
+
),
|
109
|
+
StrInput(
|
110
|
+
name="metadata_indexing_include",
|
111
|
+
display_name="Metadata Indexing Include",
|
112
|
+
info="Optional list of metadata fields to include in the indexing.",
|
113
|
+
advanced=True,
|
114
|
+
),
|
115
|
+
HandleInput(
|
116
|
+
name="embedding",
|
117
|
+
display_name="Embedding or Astra Vectorize",
|
118
|
+
input_types=["Embeddings", "dict"],
|
119
|
+
# TODO: This should be optional, but need to refactor langchain-astradb first.
|
120
|
+
info="Allows either an embedding model or an Astra Vectorize configuration.",
|
121
|
+
),
|
122
|
+
StrInput(
|
123
|
+
name="metadata_indexing_exclude",
|
124
|
+
display_name="Metadata Indexing Exclude",
|
125
|
+
info="Optional list of metadata fields to exclude from the indexing.",
|
126
|
+
advanced=True,
|
127
|
+
),
|
128
|
+
StrInput(
|
129
|
+
name="collection_indexing_policy",
|
130
|
+
display_name="Collection Indexing Policy",
|
131
|
+
info="Optional dictionary defining the indexing policy for the collection.",
|
132
|
+
advanced=True,
|
133
|
+
),
|
134
|
+
IntInput(
|
135
|
+
name="number_of_results",
|
136
|
+
display_name="Number of Results",
|
137
|
+
info="Number of results to return.",
|
138
|
+
advanced=True,
|
139
|
+
value=4,
|
140
|
+
),
|
141
|
+
DropdownInput(
|
142
|
+
name="search_type",
|
143
|
+
display_name="Search Type",
|
144
|
+
info="Search type to use",
|
145
|
+
options=["Similarity", "Similarity with score threshold", "MMR (Max Marginal Relevance)"],
|
146
|
+
value="Similarity",
|
147
|
+
advanced=True,
|
148
|
+
),
|
149
|
+
FloatInput(
|
150
|
+
name="search_score_threshold",
|
151
|
+
display_name="Search Score Threshold",
|
152
|
+
info="Minimum similarity score threshold for search results. "
|
153
|
+
"(when using 'Similarity with score threshold')",
|
154
|
+
value=0,
|
155
|
+
advanced=True,
|
156
|
+
),
|
157
|
+
DictInput(
|
158
|
+
name="search_filter",
|
159
|
+
display_name="Search Metadata Filter",
|
160
|
+
info="Optional dictionary of filters to apply to the search query.",
|
161
|
+
advanced=True,
|
162
|
+
is_list=True,
|
163
|
+
),
|
164
|
+
]
|
165
|
+
|
166
|
+
@check_cached_vector_store
|
167
|
+
def build_vector_store(self):
|
168
|
+
try:
|
169
|
+
from langchain_astradb import AstraDBVectorStore
|
170
|
+
from langchain_astradb.utils.astradb import SetupMode
|
171
|
+
except ImportError as e:
|
172
|
+
msg = (
|
173
|
+
"Could not import langchain Astra DB integration package. "
|
174
|
+
"Please install it with `pip install langchain-astradb`."
|
175
|
+
)
|
176
|
+
raise ImportError(msg) from e
|
177
|
+
|
178
|
+
try:
|
179
|
+
from astrapy.authentication import UsernamePasswordTokenProvider
|
180
|
+
from astrapy.constants import Environment
|
181
|
+
except ImportError as e:
|
182
|
+
msg = "Could not import astrapy integration package. Please install it with `pip install astrapy`."
|
183
|
+
raise ImportError(msg) from e
|
184
|
+
|
185
|
+
try:
|
186
|
+
if not self.setup_mode:
|
187
|
+
self.setup_mode = self._inputs["setup_mode"].options[0]
|
188
|
+
|
189
|
+
setup_mode_value = SetupMode[self.setup_mode.upper()]
|
190
|
+
except KeyError as e:
|
191
|
+
msg = f"Invalid setup mode: {self.setup_mode}"
|
192
|
+
raise ValueError(msg) from e
|
193
|
+
|
194
|
+
if not isinstance(self.embedding, dict):
|
195
|
+
embedding_dict = {"embedding": self.embedding}
|
196
|
+
else:
|
197
|
+
from astrapy.info import VectorServiceOptions
|
198
|
+
|
199
|
+
dict_options = self.embedding.get("collection_vector_service_options", {})
|
200
|
+
dict_options["authentication"] = {
|
201
|
+
k: v for k, v in dict_options.get("authentication", {}).items() if k and v
|
202
|
+
}
|
203
|
+
dict_options["parameters"] = {k: v for k, v in dict_options.get("parameters", {}).items() if k and v}
|
204
|
+
embedding_dict = {"collection_vector_service_options": VectorServiceOptions.from_dict(dict_options)}
|
205
|
+
collection_embedding_api_key = self.embedding.get("collection_embedding_api_key")
|
206
|
+
if collection_embedding_api_key:
|
207
|
+
embedding_dict["collection_embedding_api_key"] = collection_embedding_api_key
|
208
|
+
|
209
|
+
token_provider = UsernamePasswordTokenProvider(self.username, self.password)
|
210
|
+
vector_store_kwargs = {
|
211
|
+
**embedding_dict,
|
212
|
+
"collection_name": self.collection_name,
|
213
|
+
"token": token_provider,
|
214
|
+
"api_endpoint": self.api_endpoint,
|
215
|
+
"namespace": self.namespace,
|
216
|
+
"metric": self.metric or None,
|
217
|
+
"batch_size": self.batch_size or None,
|
218
|
+
"bulk_insert_batch_concurrency": self.bulk_insert_batch_concurrency or None,
|
219
|
+
"bulk_insert_overwrite_concurrency": self.bulk_insert_overwrite_concurrency or None,
|
220
|
+
"bulk_delete_concurrency": self.bulk_delete_concurrency or None,
|
221
|
+
"setup_mode": setup_mode_value,
|
222
|
+
"pre_delete_collection": self.pre_delete_collection or False,
|
223
|
+
"environment": Environment.HCD,
|
224
|
+
}
|
225
|
+
|
226
|
+
if self.metadata_indexing_include:
|
227
|
+
vector_store_kwargs["metadata_indexing_include"] = self.metadata_indexing_include
|
228
|
+
elif self.metadata_indexing_exclude:
|
229
|
+
vector_store_kwargs["metadata_indexing_exclude"] = self.metadata_indexing_exclude
|
230
|
+
elif self.collection_indexing_policy:
|
231
|
+
vector_store_kwargs["collection_indexing_policy"] = self.collection_indexing_policy
|
232
|
+
|
233
|
+
try:
|
234
|
+
vector_store = AstraDBVectorStore(**vector_store_kwargs)
|
235
|
+
except Exception as e:
|
236
|
+
msg = f"Error initializing AstraDBVectorStore: {e}"
|
237
|
+
raise ValueError(msg) from e
|
238
|
+
|
239
|
+
self._add_documents_to_vector_store(vector_store)
|
240
|
+
return vector_store
|
241
|
+
|
242
|
+
def _add_documents_to_vector_store(self, vector_store) -> None:
|
243
|
+
# Convert DataFrame to Data if needed using parent's method
|
244
|
+
self.ingest_data = self._prepare_ingest_data()
|
245
|
+
|
246
|
+
documents = []
|
247
|
+
for _input in self.ingest_data or []:
|
248
|
+
if isinstance(_input, Data):
|
249
|
+
documents.append(_input.to_lc_document())
|
250
|
+
else:
|
251
|
+
msg = "Vector Store Inputs must be Data objects."
|
252
|
+
raise TypeError(msg)
|
253
|
+
|
254
|
+
if documents:
|
255
|
+
self.log(f"Adding {len(documents)} documents to the Vector Store.")
|
256
|
+
try:
|
257
|
+
vector_store.add_documents(documents)
|
258
|
+
except Exception as e:
|
259
|
+
msg = f"Error adding documents to AstraDBVectorStore: {e}"
|
260
|
+
raise ValueError(msg) from e
|
261
|
+
else:
|
262
|
+
self.log("No documents to add to the Vector Store.")
|
263
|
+
|
264
|
+
def _map_search_type(self) -> str:
|
265
|
+
if self.search_type == "Similarity with score threshold":
|
266
|
+
return "similarity_score_threshold"
|
267
|
+
if self.search_type == "MMR (Max Marginal Relevance)":
|
268
|
+
return "mmr"
|
269
|
+
return "similarity"
|
270
|
+
|
271
|
+
def _build_search_args(self):
|
272
|
+
args = {
|
273
|
+
"k": self.number_of_results,
|
274
|
+
"score_threshold": self.search_score_threshold,
|
275
|
+
}
|
276
|
+
|
277
|
+
if self.search_filter:
|
278
|
+
clean_filter = {k: v for k, v in self.search_filter.items() if k and v}
|
279
|
+
if len(clean_filter) > 0:
|
280
|
+
args["filter"] = clean_filter
|
281
|
+
return args
|
282
|
+
|
283
|
+
def search_documents(self) -> list[Data]:
|
284
|
+
vector_store = self.build_vector_store()
|
285
|
+
|
286
|
+
self.log(f"Search query: {self.search_query}")
|
287
|
+
self.log(f"Search type: {self.search_type}")
|
288
|
+
self.log(f"Number of results: {self.number_of_results}")
|
289
|
+
|
290
|
+
if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():
|
291
|
+
try:
|
292
|
+
search_type = self._map_search_type()
|
293
|
+
search_args = self._build_search_args()
|
294
|
+
|
295
|
+
docs = vector_store.search(query=self.search_query, search_type=search_type, **search_args)
|
296
|
+
except Exception as e:
|
297
|
+
msg = f"Error performing search in AstraDBVectorStore: {e}"
|
298
|
+
raise ValueError(msg) from e
|
299
|
+
|
300
|
+
self.log(f"Retrieved documents: {len(docs)}")
|
301
|
+
|
302
|
+
data = docs_to_data(docs)
|
303
|
+
self.log(f"Converted documents to data: {len(data)}")
|
304
|
+
self.status = data
|
305
|
+
return data
|
306
|
+
self.log("No search input provided. Skipping search.")
|
307
|
+
return []
|
308
|
+
|
309
|
+
def get_retriever_kwargs(self):
|
310
|
+
search_args = self._build_search_args()
|
311
|
+
return {
|
312
|
+
"search_type": self._map_search_type(),
|
313
|
+
"search_kwargs": search_args,
|
314
|
+
}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
from lfx.base.astra_assistants.util import get_patched_openai_client
|
2
|
+
from lfx.custom.custom_component.component_with_cache import ComponentWithCache
|
3
|
+
from lfx.schema.message import Message
|
4
|
+
from lfx.template.field.base import Output
|
5
|
+
|
6
|
+
|
7
|
+
class AssistantsListAssistants(ComponentWithCache):
|
8
|
+
display_name = "List Assistants"
|
9
|
+
description = "Returns a list of assistant id's"
|
10
|
+
icon = "AstraDB"
|
11
|
+
outputs = [
|
12
|
+
Output(display_name="Assistants", name="assistants", method="process_inputs"),
|
13
|
+
]
|
14
|
+
|
15
|
+
def __init__(self, **kwargs) -> None:
|
16
|
+
super().__init__(**kwargs)
|
17
|
+
self.client = get_patched_openai_client(self._shared_component_cache)
|
18
|
+
|
19
|
+
def process_inputs(self) -> Message:
|
20
|
+
assistants = self.client.beta.assistants.list().data
|
21
|
+
id_list = [assistant.id for assistant in assistants]
|
22
|
+
return Message(
|
23
|
+
# get text from list
|
24
|
+
text="\n".join(id_list)
|
25
|
+
)
|
@@ -0,0 +1,89 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
3
|
+
from openai.lib.streaming import AssistantEventHandler
|
4
|
+
|
5
|
+
from lfx.base.astra_assistants.util import get_patched_openai_client
|
6
|
+
from lfx.custom.custom_component.component_with_cache import ComponentWithCache
|
7
|
+
from lfx.inputs.inputs import MultilineInput
|
8
|
+
from lfx.schema.dotdict import dotdict
|
9
|
+
from lfx.schema.message import Message
|
10
|
+
from lfx.template.field.base import Output
|
11
|
+
|
12
|
+
|
13
|
+
class AssistantsRun(ComponentWithCache):
|
14
|
+
display_name = "Run Assistant"
|
15
|
+
description = "Executes an Assistant Run against a thread"
|
16
|
+
icon = "AstraDB"
|
17
|
+
|
18
|
+
def __init__(self, **kwargs) -> None:
|
19
|
+
super().__init__(**kwargs)
|
20
|
+
self.client = get_patched_openai_client(self._shared_component_cache)
|
21
|
+
self.thread_id = None
|
22
|
+
|
23
|
+
def update_build_config(
|
24
|
+
self,
|
25
|
+
build_config: dotdict,
|
26
|
+
field_value: Any,
|
27
|
+
field_name: str | None = None,
|
28
|
+
) -> None:
|
29
|
+
if field_name == "thread_id":
|
30
|
+
if field_value is None:
|
31
|
+
thread = self.client.beta.threads.create()
|
32
|
+
self.thread_id = thread.id
|
33
|
+
build_config["thread_id"] = field_value
|
34
|
+
|
35
|
+
inputs = [
|
36
|
+
MultilineInput(
|
37
|
+
name="assistant_id",
|
38
|
+
display_name="Assistant ID",
|
39
|
+
info=(
|
40
|
+
"The ID of the assistant to run. \n\n"
|
41
|
+
"Can be retrieved using the List Assistants component or created with the Create Assistant component."
|
42
|
+
),
|
43
|
+
),
|
44
|
+
MultilineInput(
|
45
|
+
name="user_message",
|
46
|
+
display_name="User Message",
|
47
|
+
info="User message to pass to the run.",
|
48
|
+
),
|
49
|
+
MultilineInput(
|
50
|
+
name="thread_id",
|
51
|
+
display_name="Thread ID",
|
52
|
+
required=False,
|
53
|
+
info="Thread ID to use with the run. If not provided, a new thread will be created.",
|
54
|
+
),
|
55
|
+
MultilineInput(
|
56
|
+
name="env_set",
|
57
|
+
display_name="Environment Set",
|
58
|
+
info="Dummy input to allow chaining with Dotenv Component.",
|
59
|
+
),
|
60
|
+
]
|
61
|
+
|
62
|
+
outputs = [Output(display_name="Assistant Response", name="assistant_response", method="process_inputs")]
|
63
|
+
|
64
|
+
def process_inputs(self) -> Message:
|
65
|
+
text = ""
|
66
|
+
|
67
|
+
if self.thread_id is None:
|
68
|
+
thread = self.client.beta.threads.create()
|
69
|
+
self.thread_id = thread.id
|
70
|
+
|
71
|
+
# add the user message
|
72
|
+
self.client.beta.threads.messages.create(thread_id=self.thread_id, role="user", content=self.user_message)
|
73
|
+
|
74
|
+
class EventHandler(AssistantEventHandler):
|
75
|
+
def __init__(self) -> None:
|
76
|
+
super().__init__()
|
77
|
+
|
78
|
+
def on_exception(self, exception: Exception) -> None:
|
79
|
+
raise exception
|
80
|
+
|
81
|
+
event_handler = EventHandler()
|
82
|
+
with self.client.beta.threads.runs.create_and_stream(
|
83
|
+
thread_id=self.thread_id,
|
84
|
+
assistant_id=self.assistant_id,
|
85
|
+
event_handler=event_handler,
|
86
|
+
) as stream:
|
87
|
+
for part in stream.text_deltas:
|
88
|
+
text += part
|
89
|
+
return Message(text=text)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
from .extract_key_from_data import ExtractKeyFromDataComponent
|
2
|
+
from .list_flows import ListFlowsComponent
|
3
|
+
from .merge_data import MergeDataComponent
|
4
|
+
from .selective_passthrough import SelectivePassThroughComponent
|
5
|
+
from .split_text import SplitTextComponent
|
6
|
+
from .sub_flow import SubFlowComponent
|
7
|
+
|
8
|
+
__all__ = [
|
9
|
+
"ExtractKeyFromDataComponent",
|
10
|
+
"ListFlowsComponent",
|
11
|
+
"MergeDataComponent",
|
12
|
+
"SelectivePassThroughComponent",
|
13
|
+
"SplitTextComponent",
|
14
|
+
"SubFlowComponent",
|
15
|
+
]
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# mypy: disable-error-code="attr-defined"
|
2
|
+
from langchain_community.retrievers import AmazonKendraRetriever
|
3
|
+
|
4
|
+
from lfx.base.vectorstores.model import check_cached_vector_store
|
5
|
+
from lfx.custom.custom_component.custom_component import CustomComponent
|
6
|
+
from lfx.io import DictInput, IntInput, StrInput
|
7
|
+
|
8
|
+
|
9
|
+
class AmazonKendraRetrieverComponent(CustomComponent):
|
10
|
+
display_name: str = "Amazon Kendra Retriever"
|
11
|
+
description: str = "Retriever that uses the Amazon Kendra API."
|
12
|
+
name = "AmazonKendra"
|
13
|
+
icon = "Amazon"
|
14
|
+
legacy = True
|
15
|
+
|
16
|
+
inputs = [
|
17
|
+
StrInput(
|
18
|
+
name="index_id",
|
19
|
+
display_name="Index ID",
|
20
|
+
),
|
21
|
+
StrInput(
|
22
|
+
name="region_name",
|
23
|
+
display_name="Region Name",
|
24
|
+
),
|
25
|
+
StrInput(
|
26
|
+
name="credentials_profile_name",
|
27
|
+
display_name="Credentials Profile Name",
|
28
|
+
),
|
29
|
+
DictInput(
|
30
|
+
name="attribute_filter",
|
31
|
+
display_name="Attribute Filter",
|
32
|
+
),
|
33
|
+
IntInput(
|
34
|
+
name="top_k",
|
35
|
+
display_name="Top K",
|
36
|
+
value=3,
|
37
|
+
),
|
38
|
+
DictInput(
|
39
|
+
name="user_context",
|
40
|
+
display_name="User Context",
|
41
|
+
),
|
42
|
+
]
|
43
|
+
|
44
|
+
@check_cached_vector_store
|
45
|
+
def build_vector_store(self) -> AmazonKendraRetriever:
|
46
|
+
"""Builds the Amazon Kendra Retriever."""
|
47
|
+
try:
|
48
|
+
from langchain_community.retrievers import AmazonKendraRetriever
|
49
|
+
except ImportError as e:
|
50
|
+
msg = "Could not import AmazonKendraRetriever. Please install it with `pip install langchain-community`."
|
51
|
+
raise ImportError(msg) from e
|
52
|
+
|
53
|
+
try:
|
54
|
+
output = AmazonKendraRetriever(
|
55
|
+
index_id=self.index_id,
|
56
|
+
top_k=self.top_k,
|
57
|
+
region_name=self.region_name,
|
58
|
+
credentials_profile_name=self.credentials_profile_name,
|
59
|
+
attribute_filter=self.attribute_filter,
|
60
|
+
user_context=self.user_context,
|
61
|
+
)
|
62
|
+
except Exception as e:
|
63
|
+
msg = "Could not connect to AmazonKendra API."
|
64
|
+
raise ValueError(msg) from e
|
65
|
+
|
66
|
+
return output
|
@@ -0,0 +1,158 @@
|
|
1
|
+
from langchain_community.chat_models.litellm import ChatLiteLLM, ChatLiteLLMException
|
2
|
+
|
3
|
+
from lfx.base.constants import STREAM_INFO_TEXT
|
4
|
+
from lfx.base.models.model import LCModelComponent
|
5
|
+
from lfx.field_typing import LanguageModel
|
6
|
+
from lfx.io import (
|
7
|
+
BoolInput,
|
8
|
+
DictInput,
|
9
|
+
DropdownInput,
|
10
|
+
FloatInput,
|
11
|
+
IntInput,
|
12
|
+
MessageInput,
|
13
|
+
SecretStrInput,
|
14
|
+
StrInput,
|
15
|
+
)
|
16
|
+
|
17
|
+
|
18
|
+
class ChatLiteLLMModelComponent(LCModelComponent):
|
19
|
+
display_name = "LiteLLM"
|
20
|
+
description = "`LiteLLM` collection of large language models."
|
21
|
+
documentation = "https://python.langchain.com/docs/integrations/chat/litellm"
|
22
|
+
icon = "🚄"
|
23
|
+
|
24
|
+
inputs = [
|
25
|
+
MessageInput(name="input_value", display_name="Input"),
|
26
|
+
StrInput(
|
27
|
+
name="model",
|
28
|
+
display_name="Model name",
|
29
|
+
advanced=False,
|
30
|
+
required=True,
|
31
|
+
info="The name of the model to use. For example, `gpt-3.5-turbo`.",
|
32
|
+
),
|
33
|
+
SecretStrInput(
|
34
|
+
name="api_key",
|
35
|
+
display_name="API Key",
|
36
|
+
advanced=False,
|
37
|
+
required=False,
|
38
|
+
),
|
39
|
+
DropdownInput(
|
40
|
+
name="provider",
|
41
|
+
display_name="Provider",
|
42
|
+
info="The provider of the API key.",
|
43
|
+
options=[
|
44
|
+
"OpenAI",
|
45
|
+
"Azure",
|
46
|
+
"Anthropic",
|
47
|
+
"Replicate",
|
48
|
+
"Cohere",
|
49
|
+
"OpenRouter",
|
50
|
+
],
|
51
|
+
),
|
52
|
+
FloatInput(
|
53
|
+
name="temperature",
|
54
|
+
display_name="Temperature",
|
55
|
+
advanced=False,
|
56
|
+
required=False,
|
57
|
+
value=0.7,
|
58
|
+
),
|
59
|
+
DictInput(
|
60
|
+
name="kwargs",
|
61
|
+
display_name="Kwargs",
|
62
|
+
advanced=True,
|
63
|
+
required=False,
|
64
|
+
is_list=True,
|
65
|
+
value={},
|
66
|
+
),
|
67
|
+
DictInput(
|
68
|
+
name="model_kwargs",
|
69
|
+
display_name="Model kwargs",
|
70
|
+
advanced=True,
|
71
|
+
required=False,
|
72
|
+
is_list=True,
|
73
|
+
value={},
|
74
|
+
),
|
75
|
+
FloatInput(name="top_p", display_name="Top p", advanced=True, required=False, value=0.5),
|
76
|
+
IntInput(name="top_k", display_name="Top k", advanced=True, required=False, value=35),
|
77
|
+
IntInput(
|
78
|
+
name="n",
|
79
|
+
display_name="N",
|
80
|
+
advanced=True,
|
81
|
+
required=False,
|
82
|
+
info="Number of chat completions to generate for each prompt. "
|
83
|
+
"Note that the API may not return the full n completions if duplicates are generated.",
|
84
|
+
value=1,
|
85
|
+
),
|
86
|
+
IntInput(
|
87
|
+
name="max_tokens",
|
88
|
+
display_name="Max tokens",
|
89
|
+
advanced=False,
|
90
|
+
value=256,
|
91
|
+
info="The maximum number of tokens to generate for each chat completion.",
|
92
|
+
),
|
93
|
+
IntInput(
|
94
|
+
name="max_retries",
|
95
|
+
display_name="Max retries",
|
96
|
+
advanced=True,
|
97
|
+
required=False,
|
98
|
+
value=6,
|
99
|
+
),
|
100
|
+
BoolInput(
|
101
|
+
name="verbose",
|
102
|
+
display_name="Verbose",
|
103
|
+
advanced=True,
|
104
|
+
required=False,
|
105
|
+
value=False,
|
106
|
+
),
|
107
|
+
BoolInput(
|
108
|
+
name="stream",
|
109
|
+
display_name="Stream",
|
110
|
+
info=STREAM_INFO_TEXT,
|
111
|
+
advanced=True,
|
112
|
+
),
|
113
|
+
StrInput(
|
114
|
+
name="system_message",
|
115
|
+
display_name="System Message",
|
116
|
+
info="System message to pass to the model.",
|
117
|
+
advanced=True,
|
118
|
+
),
|
119
|
+
]
|
120
|
+
|
121
|
+
def build_model(self) -> LanguageModel: # type: ignore[type-var]
|
122
|
+
try:
|
123
|
+
import litellm
|
124
|
+
|
125
|
+
litellm.drop_params = True
|
126
|
+
litellm.set_verbose = self.verbose
|
127
|
+
except ImportError as e:
|
128
|
+
msg = "Could not import litellm python package. Please install it with `pip install litellm`"
|
129
|
+
raise ChatLiteLLMException(msg) from e
|
130
|
+
# Remove empty keys
|
131
|
+
if "" in self.kwargs:
|
132
|
+
del self.kwargs[""]
|
133
|
+
if "" in self.model_kwargs:
|
134
|
+
del self.model_kwargs[""]
|
135
|
+
# Report missing fields for Azure provider
|
136
|
+
if self.provider == "Azure":
|
137
|
+
if "api_base" not in self.kwargs:
|
138
|
+
msg = "Missing api_base on kwargs"
|
139
|
+
raise ValueError(msg)
|
140
|
+
if "api_version" not in self.model_kwargs:
|
141
|
+
msg = "Missing api_version on model_kwargs"
|
142
|
+
raise ValueError(msg)
|
143
|
+
output = ChatLiteLLM(
|
144
|
+
model=f"{self.provider.lower()}/{self.model}",
|
145
|
+
client=None,
|
146
|
+
streaming=self.stream,
|
147
|
+
temperature=self.temperature,
|
148
|
+
model_kwargs=self.model_kwargs if self.model_kwargs is not None else {},
|
149
|
+
top_p=self.top_p,
|
150
|
+
top_k=self.top_k,
|
151
|
+
n=self.n,
|
152
|
+
max_tokens=self.max_tokens,
|
153
|
+
max_retries=self.max_retries,
|
154
|
+
**self.kwargs,
|
155
|
+
)
|
156
|
+
output.client.api_key = self.api_key
|
157
|
+
|
158
|
+
return output
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import re
|
2
|
+
|
3
|
+
from lfx.custom.custom_component.component import Component
|
4
|
+
from lfx.field_typing import Input, Output, Text
|
5
|
+
|
6
|
+
|
7
|
+
class CodeBlockExtractor(Component):
|
8
|
+
display_name = "Code Block Extractor"
|
9
|
+
description = "Extracts code block from text."
|
10
|
+
name = "CodeBlockExtractor"
|
11
|
+
|
12
|
+
inputs = [Input(name="text", field_type=Text, description="Text to extract code blocks from.")]
|
13
|
+
|
14
|
+
outputs = [Output(name="code_block", display_name="Code Block", method="get_code_block")]
|
15
|
+
|
16
|
+
def get_code_block(self) -> Text:
|
17
|
+
text = self.text.strip()
|
18
|
+
# Extract code block
|
19
|
+
# It may start with ``` or ```language
|
20
|
+
# It may end with ```
|
21
|
+
pattern = r"^```(?:\w+)?\s*\n(.*?)(?=^```)```"
|
22
|
+
match = re.search(pattern, text, re.MULTILINE)
|
23
|
+
code_block = ""
|
24
|
+
if match:
|
25
|
+
code_block = match.group(1)
|
26
|
+
return code_block
|