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,71 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
3
|
+
from lfx.base.tools.run_flow import RunFlowBaseComponent
|
4
|
+
from lfx.helpers.flow import run_flow
|
5
|
+
from lfx.log.logger import logger
|
6
|
+
from lfx.schema.dotdict import dotdict
|
7
|
+
|
8
|
+
|
9
|
+
class RunFlowComponent(RunFlowBaseComponent):
|
10
|
+
display_name = "Run Flow"
|
11
|
+
description = (
|
12
|
+
"Creates a tool component from a Flow that takes all its inputs and runs it. "
|
13
|
+
" \n **Select a Flow to use the tool mode**"
|
14
|
+
)
|
15
|
+
documentation: str = "https://docs.langflow.org/components-logic#run-flow"
|
16
|
+
beta = True
|
17
|
+
name = "RunFlow"
|
18
|
+
icon = "Workflow"
|
19
|
+
|
20
|
+
inputs = RunFlowBaseComponent.get_base_inputs()
|
21
|
+
outputs = RunFlowBaseComponent.get_base_outputs()
|
22
|
+
|
23
|
+
async def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):
|
24
|
+
if field_name == "flow_name_selected":
|
25
|
+
build_config["flow_name_selected"]["options"] = await self.get_flow_names()
|
26
|
+
missing_keys = [key for key in self.default_keys if key not in build_config]
|
27
|
+
if missing_keys:
|
28
|
+
msg = f"Missing required keys in build_config: {missing_keys}"
|
29
|
+
raise ValueError(msg)
|
30
|
+
if field_value is not None:
|
31
|
+
try:
|
32
|
+
graph = await self.get_graph(field_value)
|
33
|
+
build_config = self.update_build_config_from_graph(build_config, graph)
|
34
|
+
except Exception as e:
|
35
|
+
msg = f"Error building graph for flow {field_value}"
|
36
|
+
await logger.aexception(msg)
|
37
|
+
raise RuntimeError(msg) from e
|
38
|
+
return build_config
|
39
|
+
|
40
|
+
async def run_flow_with_tweaks(self):
|
41
|
+
tweaks: dict = {}
|
42
|
+
|
43
|
+
flow_name_selected = self._attributes.get("flow_name_selected")
|
44
|
+
parsed_flow_tweak_data = self._attributes.get("flow_tweak_data", {})
|
45
|
+
if not isinstance(parsed_flow_tweak_data, dict):
|
46
|
+
parsed_flow_tweak_data = parsed_flow_tweak_data.dict()
|
47
|
+
|
48
|
+
if parsed_flow_tweak_data != {}:
|
49
|
+
for field in parsed_flow_tweak_data:
|
50
|
+
if "~" in field:
|
51
|
+
[node, name] = field.split("~")
|
52
|
+
if node not in tweaks:
|
53
|
+
tweaks[node] = {}
|
54
|
+
tweaks[node][name] = parsed_flow_tweak_data[field]
|
55
|
+
else:
|
56
|
+
for field in self._attributes:
|
57
|
+
if field not in self.default_keys and "~" in field:
|
58
|
+
[node, name] = field.split("~")
|
59
|
+
if node not in tweaks:
|
60
|
+
tweaks[node] = {}
|
61
|
+
tweaks[node][name] = self._attributes[field]
|
62
|
+
|
63
|
+
return await run_flow(
|
64
|
+
inputs=None,
|
65
|
+
output_type="all",
|
66
|
+
flow_id=None,
|
67
|
+
flow_name=flow_name_selected,
|
68
|
+
tweaks=tweaks,
|
69
|
+
user_id=str(self.user_id),
|
70
|
+
session_id=self.graph.session_id or self.session_id,
|
71
|
+
)
|
@@ -0,0 +1,114 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
3
|
+
from lfx.base.flow_processing.utils import build_data_from_result_data
|
4
|
+
from lfx.custom.custom_component.component import Component
|
5
|
+
from lfx.graph.graph.base import Graph
|
6
|
+
from lfx.graph.vertex.base import Vertex
|
7
|
+
from lfx.helpers.flow import get_flow_inputs
|
8
|
+
from lfx.io import DropdownInput, Output
|
9
|
+
from lfx.log.logger import logger
|
10
|
+
from lfx.schema.data import Data
|
11
|
+
from lfx.schema.dotdict import dotdict
|
12
|
+
|
13
|
+
|
14
|
+
class SubFlowComponent(Component):
|
15
|
+
display_name = "Sub Flow [Deprecated]"
|
16
|
+
description = "Generates a Component from a Flow, with all of its inputs, and "
|
17
|
+
name = "SubFlow"
|
18
|
+
legacy: bool = True
|
19
|
+
icon = "Workflow"
|
20
|
+
|
21
|
+
async def get_flow_names(self) -> list[str]:
|
22
|
+
flow_data = await self.alist_flows()
|
23
|
+
return [flow_data.data["name"] for flow_data in flow_data]
|
24
|
+
|
25
|
+
async def get_flow(self, flow_name: str) -> Data | None:
|
26
|
+
flow_datas = await self.alist_flows()
|
27
|
+
for flow_data in flow_datas:
|
28
|
+
if flow_data.data["name"] == flow_name:
|
29
|
+
return flow_data
|
30
|
+
return None
|
31
|
+
|
32
|
+
async def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):
|
33
|
+
if field_name == "flow_name":
|
34
|
+
build_config["flow_name"]["options"] = await self.get_flow_names()
|
35
|
+
|
36
|
+
for key in list(build_config.keys()):
|
37
|
+
if key not in [x.name for x in self.inputs] + ["code", "_type", "get_final_results_only"]:
|
38
|
+
del build_config[key]
|
39
|
+
if field_value is not None and field_name == "flow_name":
|
40
|
+
try:
|
41
|
+
flow_data = await self.get_flow(field_value)
|
42
|
+
except Exception: # noqa: BLE001
|
43
|
+
await logger.aexception(f"Error getting flow {field_value}")
|
44
|
+
else:
|
45
|
+
if not flow_data:
|
46
|
+
msg = f"Flow {field_value} not found."
|
47
|
+
await logger.aerror(msg)
|
48
|
+
else:
|
49
|
+
try:
|
50
|
+
graph = Graph.from_payload(flow_data.data["data"])
|
51
|
+
# Get all inputs from the graph
|
52
|
+
inputs = get_flow_inputs(graph)
|
53
|
+
# Add inputs to the build config
|
54
|
+
build_config = self.add_inputs_to_build_config(inputs, build_config)
|
55
|
+
except Exception: # noqa: BLE001
|
56
|
+
await logger.aexception(f"Error building graph for flow {field_value}")
|
57
|
+
|
58
|
+
return build_config
|
59
|
+
|
60
|
+
def add_inputs_to_build_config(self, inputs_vertex: list[Vertex], build_config: dotdict):
|
61
|
+
new_fields: list[dotdict] = []
|
62
|
+
|
63
|
+
for vertex in inputs_vertex:
|
64
|
+
new_vertex_inputs = []
|
65
|
+
field_template = vertex.data["node"]["template"]
|
66
|
+
for inp in field_template:
|
67
|
+
if inp not in {"code", "_type"}:
|
68
|
+
field_template[inp]["display_name"] = (
|
69
|
+
vertex.display_name + " - " + field_template[inp]["display_name"]
|
70
|
+
)
|
71
|
+
field_template[inp]["name"] = vertex.id + "|" + inp
|
72
|
+
new_vertex_inputs.append(field_template[inp])
|
73
|
+
new_fields += new_vertex_inputs
|
74
|
+
for field in new_fields:
|
75
|
+
build_config[field["name"]] = field
|
76
|
+
return build_config
|
77
|
+
|
78
|
+
inputs = [
|
79
|
+
DropdownInput(
|
80
|
+
name="flow_name",
|
81
|
+
display_name="Flow Name",
|
82
|
+
info="The name of the flow to run.",
|
83
|
+
options=[],
|
84
|
+
refresh_button=True,
|
85
|
+
real_time_refresh=True,
|
86
|
+
),
|
87
|
+
]
|
88
|
+
|
89
|
+
outputs = [Output(name="flow_outputs", display_name="Flow Outputs", method="generate_results")]
|
90
|
+
|
91
|
+
async def generate_results(self) -> list[Data]:
|
92
|
+
tweaks: dict = {}
|
93
|
+
for field in self._attributes:
|
94
|
+
if field != "flow_name" and "|" in field:
|
95
|
+
[node, name] = field.split("|")
|
96
|
+
if node not in tweaks:
|
97
|
+
tweaks[node] = {}
|
98
|
+
tweaks[node][name] = self._attributes[field]
|
99
|
+
flow_name = self._attributes.get("flow_name")
|
100
|
+
run_outputs = await self.run_flow(
|
101
|
+
tweaks=tweaks,
|
102
|
+
flow_name=flow_name,
|
103
|
+
output_type="all",
|
104
|
+
)
|
105
|
+
data: list[Data] = []
|
106
|
+
if not run_outputs:
|
107
|
+
return data
|
108
|
+
run_output = run_outputs[0]
|
109
|
+
|
110
|
+
if run_output is not None:
|
111
|
+
for output in run_output.outputs:
|
112
|
+
if output:
|
113
|
+
data.extend(build_data_from_result_data(output))
|
114
|
+
return data
|
@@ -0,0 +1,32 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import TYPE_CHECKING, Any
|
4
|
+
|
5
|
+
from lfx.components._importing import import_mod
|
6
|
+
|
7
|
+
if TYPE_CHECKING:
|
8
|
+
from lfx.components.maritalk.maritalk import MaritalkModelComponent
|
9
|
+
|
10
|
+
_dynamic_imports = {
|
11
|
+
"MaritalkModelComponent": "maritalk",
|
12
|
+
}
|
13
|
+
|
14
|
+
__all__ = ["MaritalkModelComponent"]
|
15
|
+
|
16
|
+
|
17
|
+
def __getattr__(attr_name: str) -> Any:
|
18
|
+
"""Lazily import maritalk components on attribute access."""
|
19
|
+
if attr_name not in _dynamic_imports:
|
20
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
21
|
+
raise AttributeError(msg)
|
22
|
+
try:
|
23
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
24
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
25
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
26
|
+
raise AttributeError(msg) from e
|
27
|
+
globals()[attr_name] = result
|
28
|
+
return result
|
29
|
+
|
30
|
+
|
31
|
+
def __dir__() -> list[str]:
|
32
|
+
return list(__all__)
|
@@ -0,0 +1,52 @@
|
|
1
|
+
from langchain_community.chat_models import ChatMaritalk
|
2
|
+
|
3
|
+
from lfx.base.models.model import LCModelComponent
|
4
|
+
from lfx.field_typing import LanguageModel
|
5
|
+
from lfx.field_typing.range_spec import RangeSpec
|
6
|
+
from lfx.inputs.inputs import DropdownInput, FloatInput, IntInput, SecretStrInput
|
7
|
+
|
8
|
+
|
9
|
+
class MaritalkModelComponent(LCModelComponent):
|
10
|
+
display_name = "MariTalk"
|
11
|
+
description = "Generates text using MariTalk LLMs."
|
12
|
+
icon = "Maritalk"
|
13
|
+
name = "Maritalk"
|
14
|
+
inputs = [
|
15
|
+
*LCModelComponent.get_base_inputs(),
|
16
|
+
IntInput(
|
17
|
+
name="max_tokens",
|
18
|
+
display_name="Max Tokens",
|
19
|
+
advanced=True,
|
20
|
+
value=512,
|
21
|
+
info="The maximum number of tokens to generate. Set to 0 for unlimited tokens.",
|
22
|
+
),
|
23
|
+
DropdownInput(
|
24
|
+
name="model_name",
|
25
|
+
display_name="Model Name",
|
26
|
+
advanced=False,
|
27
|
+
options=["sabia-2-small", "sabia-2-medium"],
|
28
|
+
value=["sabia-2-small"],
|
29
|
+
),
|
30
|
+
SecretStrInput(
|
31
|
+
name="api_key",
|
32
|
+
display_name="MariTalk API Key",
|
33
|
+
info="The MariTalk API Key to use for authentication.",
|
34
|
+
advanced=False,
|
35
|
+
),
|
36
|
+
FloatInput(name="temperature", display_name="Temperature", value=0.1, range_spec=RangeSpec(min=0, max=1)),
|
37
|
+
]
|
38
|
+
|
39
|
+
def build_model(self) -> LanguageModel: # type: ignore[type-var]
|
40
|
+
# self.output_schea is a list of dictionarie s
|
41
|
+
# let's convert it to a dictionary
|
42
|
+
api_key = self.api_key
|
43
|
+
temperature = self.temperature
|
44
|
+
model_name: str = self.model_name
|
45
|
+
max_tokens = self.max_tokens
|
46
|
+
|
47
|
+
return ChatMaritalk(
|
48
|
+
max_tokens=max_tokens,
|
49
|
+
model=model_name,
|
50
|
+
api_key=api_key,
|
51
|
+
temperature=temperature or 0.1,
|
52
|
+
)
|
@@ -0,0 +1,136 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from mem0 import Memory, MemoryClient
|
4
|
+
|
5
|
+
from lfx.base.memory.model import LCChatMemoryComponent
|
6
|
+
from lfx.inputs.inputs import DictInput, HandleInput, MessageTextInput, NestedDictInput, SecretStrInput
|
7
|
+
from lfx.io import Output
|
8
|
+
from lfx.log.logger import logger
|
9
|
+
from lfx.schema.data import Data
|
10
|
+
|
11
|
+
|
12
|
+
class Mem0MemoryComponent(LCChatMemoryComponent):
|
13
|
+
display_name = "Mem0 Chat Memory"
|
14
|
+
description = "Retrieves and stores chat messages using Mem0 memory storage."
|
15
|
+
name = "mem0_chat_memory"
|
16
|
+
icon: str = "Mem0"
|
17
|
+
inputs = [
|
18
|
+
NestedDictInput(
|
19
|
+
name="mem0_config",
|
20
|
+
display_name="Mem0 Configuration",
|
21
|
+
info="""Configuration dictionary for initializing Mem0 memory instance.
|
22
|
+
Example:
|
23
|
+
{
|
24
|
+
"graph_store": {
|
25
|
+
"provider": "neo4j",
|
26
|
+
"config": {
|
27
|
+
"url": "neo4j+s://your-neo4j-url",
|
28
|
+
"username": "neo4j",
|
29
|
+
"password": "your-password"
|
30
|
+
}
|
31
|
+
},
|
32
|
+
"version": "v1.1"
|
33
|
+
}""",
|
34
|
+
input_types=["Data"],
|
35
|
+
),
|
36
|
+
MessageTextInput(
|
37
|
+
name="ingest_message",
|
38
|
+
display_name="Message to Ingest",
|
39
|
+
info="The message content to be ingested into Mem0 memory.",
|
40
|
+
),
|
41
|
+
HandleInput(
|
42
|
+
name="existing_memory",
|
43
|
+
display_name="Existing Memory Instance",
|
44
|
+
input_types=["Memory"],
|
45
|
+
info="Optional existing Mem0 memory instance. If not provided, a new instance will be created.",
|
46
|
+
),
|
47
|
+
MessageTextInput(
|
48
|
+
name="user_id", display_name="User ID", info="Identifier for the user associated with the messages."
|
49
|
+
),
|
50
|
+
MessageTextInput(
|
51
|
+
name="search_query", display_name="Search Query", info="Input text for searching related memories in Mem0."
|
52
|
+
),
|
53
|
+
SecretStrInput(
|
54
|
+
name="mem0_api_key",
|
55
|
+
display_name="Mem0 API Key",
|
56
|
+
info="API key for Mem0 platform. Leave empty to use the local version.",
|
57
|
+
),
|
58
|
+
DictInput(
|
59
|
+
name="metadata",
|
60
|
+
display_name="Metadata",
|
61
|
+
info="Additional metadata to associate with the ingested message.",
|
62
|
+
advanced=True,
|
63
|
+
),
|
64
|
+
SecretStrInput(
|
65
|
+
name="openai_api_key",
|
66
|
+
display_name="OpenAI API Key",
|
67
|
+
required=False,
|
68
|
+
info="API key for OpenAI. Required if using OpenAI Embeddings without a provided configuration.",
|
69
|
+
),
|
70
|
+
]
|
71
|
+
|
72
|
+
outputs = [
|
73
|
+
Output(name="memory", display_name="Mem0 Memory", method="ingest_data"),
|
74
|
+
Output(
|
75
|
+
name="search_results",
|
76
|
+
display_name="Search Results",
|
77
|
+
method="build_search_results",
|
78
|
+
),
|
79
|
+
]
|
80
|
+
|
81
|
+
def build_mem0(self) -> Memory:
|
82
|
+
"""Initializes a Mem0 memory instance based on provided configuration and API keys."""
|
83
|
+
if self.openai_api_key:
|
84
|
+
os.environ["OPENAI_API_KEY"] = self.openai_api_key
|
85
|
+
|
86
|
+
try:
|
87
|
+
if not self.mem0_api_key:
|
88
|
+
return Memory.from_config(config_dict=dict(self.mem0_config)) if self.mem0_config else Memory()
|
89
|
+
if self.mem0_config:
|
90
|
+
return MemoryClient.from_config(api_key=self.mem0_api_key, config_dict=dict(self.mem0_config))
|
91
|
+
return MemoryClient(api_key=self.mem0_api_key)
|
92
|
+
except ImportError as e:
|
93
|
+
msg = "Mem0 is not properly installed. Please install it with 'pip install -U mem0ai'."
|
94
|
+
raise ImportError(msg) from e
|
95
|
+
|
96
|
+
def ingest_data(self) -> Memory:
|
97
|
+
"""Ingests a new message into Mem0 memory and returns the updated memory instance."""
|
98
|
+
mem0_memory = self.existing_memory or self.build_mem0()
|
99
|
+
|
100
|
+
if not self.ingest_message or not self.user_id:
|
101
|
+
logger.warning("Missing 'ingest_message' or 'user_id'; cannot ingest data.")
|
102
|
+
return mem0_memory
|
103
|
+
|
104
|
+
metadata = self.metadata or {}
|
105
|
+
|
106
|
+
logger.info("Ingesting message for user_id: %s", self.user_id)
|
107
|
+
|
108
|
+
try:
|
109
|
+
mem0_memory.add(self.ingest_message, user_id=self.user_id, metadata=metadata)
|
110
|
+
except Exception:
|
111
|
+
logger.exception("Failed to add message to Mem0 memory.")
|
112
|
+
raise
|
113
|
+
|
114
|
+
return mem0_memory
|
115
|
+
|
116
|
+
def build_search_results(self) -> Data:
|
117
|
+
"""Searches the Mem0 memory for related messages based on the search query and returns the results."""
|
118
|
+
mem0_memory = self.ingest_data()
|
119
|
+
search_query = self.search_query
|
120
|
+
user_id = self.user_id
|
121
|
+
|
122
|
+
logger.info("Search query: %s", search_query)
|
123
|
+
|
124
|
+
try:
|
125
|
+
if search_query:
|
126
|
+
logger.info("Performing search with query.")
|
127
|
+
related_memories = mem0_memory.search(query=search_query, user_id=user_id)
|
128
|
+
else:
|
129
|
+
logger.info("Retrieving all memories for user_id: %s", user_id)
|
130
|
+
related_memories = mem0_memory.get_all(user_id=user_id)
|
131
|
+
except Exception:
|
132
|
+
logger.exception("Failed to retrieve related memories from Mem0.")
|
133
|
+
raise
|
134
|
+
|
135
|
+
logger.info("Related memories retrieved: %s", related_memories)
|
136
|
+
return related_memories
|
@@ -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 .milvus import MilvusVectorStoreComponent
|
9
|
+
|
10
|
+
_dynamic_imports = {
|
11
|
+
"MilvusVectorStoreComponent": "milvus",
|
12
|
+
}
|
13
|
+
|
14
|
+
__all__ = [
|
15
|
+
"MilvusVectorStoreComponent",
|
16
|
+
]
|
17
|
+
|
18
|
+
|
19
|
+
def __getattr__(attr_name: str) -> Any:
|
20
|
+
"""Lazily import Milvus 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,115 @@
|
|
1
|
+
from lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
|
2
|
+
from lfx.helpers.data import docs_to_data
|
3
|
+
from lfx.io import (
|
4
|
+
BoolInput,
|
5
|
+
DictInput,
|
6
|
+
DropdownInput,
|
7
|
+
FloatInput,
|
8
|
+
HandleInput,
|
9
|
+
IntInput,
|
10
|
+
SecretStrInput,
|
11
|
+
StrInput,
|
12
|
+
)
|
13
|
+
from lfx.schema.data import Data
|
14
|
+
|
15
|
+
|
16
|
+
class MilvusVectorStoreComponent(LCVectorStoreComponent):
|
17
|
+
"""Milvus vector store with search capabilities."""
|
18
|
+
|
19
|
+
display_name: str = "Milvus"
|
20
|
+
description: str = "Milvus vector store with search capabilities"
|
21
|
+
name = "Milvus"
|
22
|
+
icon = "Milvus"
|
23
|
+
|
24
|
+
inputs = [
|
25
|
+
StrInput(name="collection_name", display_name="Collection Name", value="langflow"),
|
26
|
+
StrInput(name="collection_description", display_name="Collection Description", value=""),
|
27
|
+
StrInput(
|
28
|
+
name="uri",
|
29
|
+
display_name="Connection URI",
|
30
|
+
value="http://localhost:19530",
|
31
|
+
),
|
32
|
+
SecretStrInput(
|
33
|
+
name="password",
|
34
|
+
display_name="Token",
|
35
|
+
value="",
|
36
|
+
info="Ignore this field if no token is required to make connection.",
|
37
|
+
),
|
38
|
+
DictInput(name="connection_args", display_name="Other Connection Arguments", advanced=True),
|
39
|
+
StrInput(name="primary_field", display_name="Primary Field Name", value="pk"),
|
40
|
+
StrInput(name="text_field", display_name="Text Field Name", value="text"),
|
41
|
+
StrInput(name="vector_field", display_name="Vector Field Name", value="vector"),
|
42
|
+
DropdownInput(
|
43
|
+
name="consistency_level",
|
44
|
+
display_name="Consistencey Level",
|
45
|
+
options=["Bounded", "Session", "Strong", "Eventual"],
|
46
|
+
value="Session",
|
47
|
+
advanced=True,
|
48
|
+
),
|
49
|
+
DictInput(name="index_params", display_name="Index Parameters", advanced=True),
|
50
|
+
DictInput(name="search_params", display_name="Search Parameters", advanced=True),
|
51
|
+
BoolInput(name="drop_old", display_name="Drop Old Collection", value=False, advanced=True),
|
52
|
+
FloatInput(name="timeout", display_name="Timeout", advanced=True),
|
53
|
+
*LCVectorStoreComponent.inputs,
|
54
|
+
HandleInput(name="embedding", display_name="Embedding", input_types=["Embeddings"]),
|
55
|
+
IntInput(
|
56
|
+
name="number_of_results",
|
57
|
+
display_name="Number of Results",
|
58
|
+
info="Number of results to return.",
|
59
|
+
value=4,
|
60
|
+
advanced=True,
|
61
|
+
),
|
62
|
+
]
|
63
|
+
|
64
|
+
@check_cached_vector_store
|
65
|
+
def build_vector_store(self):
|
66
|
+
try:
|
67
|
+
from langchain_milvus.vectorstores import Milvus as LangchainMilvus
|
68
|
+
except ImportError as e:
|
69
|
+
msg = "Could not import Milvus integration package. Please install it with `pip install langchain-milvus`."
|
70
|
+
raise ImportError(msg) from e
|
71
|
+
self.connection_args.update(uri=self.uri, token=self.password)
|
72
|
+
milvus_store = LangchainMilvus(
|
73
|
+
embedding_function=self.embedding,
|
74
|
+
collection_name=self.collection_name,
|
75
|
+
collection_description=self.collection_description,
|
76
|
+
connection_args=self.connection_args,
|
77
|
+
consistency_level=self.consistency_level,
|
78
|
+
index_params=self.index_params,
|
79
|
+
search_params=self.search_params,
|
80
|
+
drop_old=self.drop_old,
|
81
|
+
auto_id=True,
|
82
|
+
primary_field=self.primary_field,
|
83
|
+
text_field=self.text_field,
|
84
|
+
vector_field=self.vector_field,
|
85
|
+
timeout=self.timeout,
|
86
|
+
)
|
87
|
+
|
88
|
+
# Convert DataFrame to Data if needed using parent's method
|
89
|
+
self.ingest_data = self._prepare_ingest_data()
|
90
|
+
|
91
|
+
documents = []
|
92
|
+
for _input in self.ingest_data or []:
|
93
|
+
if isinstance(_input, Data):
|
94
|
+
documents.append(_input.to_lc_document())
|
95
|
+
else:
|
96
|
+
documents.append(_input)
|
97
|
+
|
98
|
+
if documents:
|
99
|
+
milvus_store.add_documents(documents)
|
100
|
+
|
101
|
+
return milvus_store
|
102
|
+
|
103
|
+
def search_documents(self) -> list[Data]:
|
104
|
+
vector_store = self.build_vector_store()
|
105
|
+
|
106
|
+
if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():
|
107
|
+
docs = vector_store.similarity_search(
|
108
|
+
query=self.search_query,
|
109
|
+
k=self.number_of_results,
|
110
|
+
)
|
111
|
+
|
112
|
+
data = docs_to_data(docs)
|
113
|
+
self.status = data
|
114
|
+
return data
|
115
|
+
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 .mistral import MistralAIModelComponent
|
9
|
+
from .mistral_embeddings import MistralAIEmbeddingsComponent
|
10
|
+
|
11
|
+
_dynamic_imports = {
|
12
|
+
"MistralAIModelComponent": "mistral",
|
13
|
+
"MistralAIEmbeddingsComponent": "mistral_embeddings",
|
14
|
+
}
|
15
|
+
|
16
|
+
__all__ = [
|
17
|
+
"MistralAIEmbeddingsComponent",
|
18
|
+
"MistralAIModelComponent",
|
19
|
+
]
|
20
|
+
|
21
|
+
|
22
|
+
def __getattr__(attr_name: str) -> Any:
|
23
|
+
"""Lazily import mistral 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__)
|