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
lfx/helpers/data.py
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
import re
|
2
|
+
from collections import defaultdict
|
3
|
+
from typing import Any
|
4
|
+
|
5
|
+
import orjson
|
6
|
+
from fastapi.encoders import jsonable_encoder
|
7
|
+
from langchain_core.documents import Document
|
8
|
+
|
9
|
+
from lfx.schema.data import Data
|
10
|
+
from lfx.schema.dataframe import DataFrame
|
11
|
+
from lfx.schema.message import Message
|
12
|
+
|
13
|
+
|
14
|
+
def docs_to_data(documents: list[Document]) -> list[Data]:
|
15
|
+
"""Converts a list of Documents to a list of Data.
|
16
|
+
|
17
|
+
Args:
|
18
|
+
documents (list[Document]): The list of Documents to convert.
|
19
|
+
|
20
|
+
Returns:
|
21
|
+
list[Data]: The converted list of Data.
|
22
|
+
"""
|
23
|
+
return [Data.from_document(document) for document in documents]
|
24
|
+
|
25
|
+
|
26
|
+
def clean_string(s):
|
27
|
+
# Remove empty lines
|
28
|
+
s = re.sub(r"^\s*$", "", s, flags=re.MULTILINE)
|
29
|
+
# Replace three or more newlines with a double newline
|
30
|
+
return re.sub(r"\n{3,}", "\n\n", s)
|
31
|
+
|
32
|
+
|
33
|
+
def _serialize_data(data: Data) -> str:
|
34
|
+
"""Serialize Data object to JSON string."""
|
35
|
+
# Convert data.data to JSON-serializable format
|
36
|
+
serializable_data = jsonable_encoder(data.data)
|
37
|
+
# Serialize with orjson, enabling pretty printing with indentation
|
38
|
+
json_bytes = orjson.dumps(serializable_data, option=orjson.OPT_INDENT_2)
|
39
|
+
# Convert bytes to string and wrap in Markdown code blocks
|
40
|
+
return "```json\n" + json_bytes.decode("utf-8") + "\n```"
|
41
|
+
|
42
|
+
|
43
|
+
def safe_convert(data: Any, *, clean_data: bool = False) -> str:
|
44
|
+
"""Safely convert input data to string."""
|
45
|
+
try:
|
46
|
+
if isinstance(data, str):
|
47
|
+
return clean_string(data)
|
48
|
+
if isinstance(data, Message):
|
49
|
+
return data.get_text()
|
50
|
+
if isinstance(data, Data):
|
51
|
+
return clean_string(_serialize_data(data))
|
52
|
+
if isinstance(data, DataFrame):
|
53
|
+
if clean_data:
|
54
|
+
# Remove empty rows
|
55
|
+
data = data.dropna(how="all")
|
56
|
+
# Remove empty lines in each cell
|
57
|
+
data = data.replace(r"^\s*$", "", regex=True)
|
58
|
+
# Replace multiple newlines with a single newline
|
59
|
+
data = data.replace(r"\n+", "\n", regex=True)
|
60
|
+
|
61
|
+
# Replace pipe characters to avoid markdown table issues
|
62
|
+
processed_data = data.replace(r"\|", r"\\|", regex=True)
|
63
|
+
|
64
|
+
return processed_data.to_markdown(index=False)
|
65
|
+
|
66
|
+
return clean_string(str(data))
|
67
|
+
except (ValueError, TypeError, AttributeError) as e:
|
68
|
+
msg = f"Error converting data: {e!s}"
|
69
|
+
raise ValueError(msg) from e
|
70
|
+
|
71
|
+
|
72
|
+
def data_to_text_list(template: str, data: Data | list[Data]) -> tuple[list[str], list[Data]]:
|
73
|
+
"""Format text from Data objects using a template string.
|
74
|
+
|
75
|
+
This function processes Data objects and formats their content using a template string.
|
76
|
+
It handles various data structures and ensures consistent text formatting across different
|
77
|
+
input types.
|
78
|
+
|
79
|
+
Key Features:
|
80
|
+
- Supports single Data object or list of Data objects
|
81
|
+
- Handles nested dictionaries and extracts text from various locations
|
82
|
+
- Uses safe string formatting with fallback for missing keys
|
83
|
+
- Preserves original Data objects in output
|
84
|
+
|
85
|
+
Args:
|
86
|
+
template: Format string with placeholders (e.g., "Hello {text}")
|
87
|
+
Placeholders are replaced with values from Data objects
|
88
|
+
data: Either a single Data object or a list of Data objects to format
|
89
|
+
Each object can contain text, dictionaries, or nested data
|
90
|
+
|
91
|
+
Returns:
|
92
|
+
A tuple containing:
|
93
|
+
- List[str]: Formatted strings based on the template
|
94
|
+
- List[Data]: Original Data objects in the same order
|
95
|
+
|
96
|
+
Raises:
|
97
|
+
ValueError: If template is None
|
98
|
+
TypeError: If template is not a string
|
99
|
+
|
100
|
+
Examples:
|
101
|
+
>>> result = data_to_text_list("Hello {text}", Data(text="world"))
|
102
|
+
>>> assert result == (["Hello world"], [Data(text="world")])
|
103
|
+
|
104
|
+
>>> result = data_to_text_list(
|
105
|
+
... "{name} is {age}",
|
106
|
+
... Data(data={"name": "Alice", "age": 25})
|
107
|
+
... )
|
108
|
+
>>> assert result == (["Alice is 25"], [Data(data={"name": "Alice", "age": 25})])
|
109
|
+
"""
|
110
|
+
if data is None:
|
111
|
+
return [], []
|
112
|
+
|
113
|
+
if template is None:
|
114
|
+
msg = "Template must be a string, but got None."
|
115
|
+
raise ValueError(msg)
|
116
|
+
|
117
|
+
if not isinstance(template, str):
|
118
|
+
msg = f"Template must be a string, but got {type(template)}"
|
119
|
+
raise TypeError(msg)
|
120
|
+
|
121
|
+
formatted_text: list[str] = []
|
122
|
+
processed_data: list[Data] = []
|
123
|
+
|
124
|
+
data_list = [data] if isinstance(data, Data) else data
|
125
|
+
|
126
|
+
data_objects = [item if isinstance(item, Data) else Data(text=str(item)) for item in data_list]
|
127
|
+
|
128
|
+
for data_obj in data_objects:
|
129
|
+
format_dict = {}
|
130
|
+
|
131
|
+
if isinstance(data_obj.data, dict):
|
132
|
+
format_dict.update(data_obj.data)
|
133
|
+
|
134
|
+
if isinstance(data_obj.data.get("data"), dict):
|
135
|
+
format_dict.update(data_obj.data["data"])
|
136
|
+
|
137
|
+
elif format_dict.get("error"):
|
138
|
+
format_dict["text"] = format_dict["error"]
|
139
|
+
|
140
|
+
format_dict["data"] = data_obj.data
|
141
|
+
|
142
|
+
safe_dict = defaultdict(str, format_dict)
|
143
|
+
|
144
|
+
try:
|
145
|
+
formatted_text.append(template.format_map(safe_dict))
|
146
|
+
processed_data.append(data_obj)
|
147
|
+
except ValueError as e:
|
148
|
+
msg = f"Error formatting template: {e!s}"
|
149
|
+
raise ValueError(msg) from e
|
150
|
+
|
151
|
+
return formatted_text, processed_data
|
152
|
+
|
153
|
+
|
154
|
+
def data_to_text(template: str, data: Data | list[Data], sep: str = "\n") -> str:
|
155
|
+
r"""Converts data into a formatted text string based on a given template.
|
156
|
+
|
157
|
+
Args:
|
158
|
+
template (str): The template string used to format each data item.
|
159
|
+
data (Data | list[Data]): A single data item or a list of data items to be formatted.
|
160
|
+
sep (str, optional): The separator to use between formatted data items. Defaults to "\n".
|
161
|
+
|
162
|
+
Returns:
|
163
|
+
str: A string containing the formatted data items separated by the specified separator.
|
164
|
+
"""
|
165
|
+
formatted_text, _ = data_to_text_list(template, data)
|
166
|
+
sep = "\n" if sep is None else sep
|
167
|
+
return sep.join(formatted_text)
|
lfx/helpers/flow.py
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
"""Flow helper functions for lfx package."""
|
2
|
+
|
3
|
+
from __future__ import annotations
|
4
|
+
|
5
|
+
from typing import TYPE_CHECKING
|
6
|
+
from uuid import UUID
|
7
|
+
|
8
|
+
from pydantic import BaseModel, Field, create_model
|
9
|
+
|
10
|
+
from lfx.log.logger import logger
|
11
|
+
from lfx.schema.schema import INPUT_FIELD_NAME
|
12
|
+
|
13
|
+
if TYPE_CHECKING:
|
14
|
+
from lfx.graph.graph.base import Graph
|
15
|
+
from lfx.graph.schema import RunOutputs
|
16
|
+
from lfx.graph.vertex.base import Vertex
|
17
|
+
from lfx.schema.data import Data
|
18
|
+
|
19
|
+
|
20
|
+
def get_flow_inputs(graph: Graph) -> list[Vertex]:
|
21
|
+
"""Retrieves the flow inputs from the given graph.
|
22
|
+
|
23
|
+
Args:
|
24
|
+
graph (Graph): The graph object representing the flow.
|
25
|
+
|
26
|
+
Returns:
|
27
|
+
List[Vertex]: A list of input vertices.
|
28
|
+
"""
|
29
|
+
return [vertex for vertex in graph.vertices if vertex.is_input]
|
30
|
+
|
31
|
+
|
32
|
+
def build_schema_from_inputs(name: str, inputs: list[Vertex]) -> type[BaseModel]:
|
33
|
+
"""Builds a schema from the given inputs.
|
34
|
+
|
35
|
+
Args:
|
36
|
+
name (str): The name of the schema.
|
37
|
+
inputs (List[Vertex]): A list of Vertex objects representing the inputs.
|
38
|
+
|
39
|
+
Returns:
|
40
|
+
BaseModel: The schema model.
|
41
|
+
"""
|
42
|
+
fields = {}
|
43
|
+
for input_ in inputs:
|
44
|
+
field_name = input_.display_name.lower().replace(" ", "_")
|
45
|
+
description = input_.description
|
46
|
+
fields[field_name] = (str, Field(default="", description=description))
|
47
|
+
return create_model(name, **fields)
|
48
|
+
|
49
|
+
|
50
|
+
def get_arg_names(inputs: list[Vertex]) -> list[dict[str, str]]:
|
51
|
+
"""Returns a list of dictionaries containing the component name and its corresponding argument name.
|
52
|
+
|
53
|
+
Args:
|
54
|
+
inputs (List[Vertex]): A list of Vertex objects representing the inputs.
|
55
|
+
|
56
|
+
Returns:
|
57
|
+
List[dict[str, str]]: A list of dictionaries, where each dictionary contains the component name and its
|
58
|
+
argument name.
|
59
|
+
"""
|
60
|
+
return [
|
61
|
+
{"component_name": input_.display_name, "arg_name": input_.display_name.lower().replace(" ", "_")}
|
62
|
+
for input_ in inputs
|
63
|
+
]
|
64
|
+
|
65
|
+
|
66
|
+
async def list_flows(*, user_id: str | None = None) -> list[Data]:
|
67
|
+
"""List flows for a user.
|
68
|
+
|
69
|
+
In lfx, this is a stub that returns an empty list since we don't have
|
70
|
+
a database backend by default.
|
71
|
+
|
72
|
+
Args:
|
73
|
+
user_id: The user ID to list flows for.
|
74
|
+
|
75
|
+
Returns:
|
76
|
+
List of flow data objects.
|
77
|
+
"""
|
78
|
+
if not user_id:
|
79
|
+
msg = "Session is invalid"
|
80
|
+
raise ValueError(msg)
|
81
|
+
|
82
|
+
# In lfx, we don't have a database backend by default
|
83
|
+
# This is a stub implementation
|
84
|
+
logger.warning("list_flows called but lfx doesn't have database backend by default")
|
85
|
+
return []
|
86
|
+
|
87
|
+
|
88
|
+
async def load_flow(
|
89
|
+
user_id: str, # noqa: ARG001
|
90
|
+
flow_id: str | None = None,
|
91
|
+
flow_name: str | None = None,
|
92
|
+
tweaks: dict | None = None, # noqa: ARG001
|
93
|
+
) -> Graph:
|
94
|
+
"""Load a flow by ID or name.
|
95
|
+
|
96
|
+
In lfx, this is a stub that raises an error since we don't have
|
97
|
+
a database backend by default.
|
98
|
+
|
99
|
+
Args:
|
100
|
+
user_id: The user ID.
|
101
|
+
flow_id: The flow ID to load.
|
102
|
+
flow_name: The flow name to load.
|
103
|
+
tweaks: Optional tweaks to apply to the flow.
|
104
|
+
|
105
|
+
Returns:
|
106
|
+
The loaded flow graph.
|
107
|
+
"""
|
108
|
+
if not flow_id and not flow_name:
|
109
|
+
msg = "Flow ID or Flow Name is required"
|
110
|
+
raise ValueError(msg)
|
111
|
+
|
112
|
+
# In lfx, we don't have a database backend by default
|
113
|
+
# This is a stub implementation
|
114
|
+
msg = f"load_flow not implemented in lfx - cannot load flow {flow_id or flow_name}"
|
115
|
+
raise NotImplementedError(msg)
|
116
|
+
|
117
|
+
|
118
|
+
async def run_flow(
|
119
|
+
inputs: dict | list[dict] | None = None,
|
120
|
+
tweaks: dict | None = None, # noqa: ARG001
|
121
|
+
flow_id: str | None = None, # noqa: ARG001
|
122
|
+
flow_name: str | None = None, # noqa: ARG001
|
123
|
+
output_type: str | None = "chat",
|
124
|
+
user_id: str | None = None,
|
125
|
+
run_id: str | None = None,
|
126
|
+
session_id: str | None = None,
|
127
|
+
graph: Graph | None = None,
|
128
|
+
) -> list[RunOutputs]:
|
129
|
+
"""Run a flow with given inputs.
|
130
|
+
|
131
|
+
Args:
|
132
|
+
inputs: Input values for the flow.
|
133
|
+
tweaks: Optional tweaks to apply.
|
134
|
+
flow_id: The flow ID to run.
|
135
|
+
flow_name: The flow name to run.
|
136
|
+
output_type: The type of output to return.
|
137
|
+
user_id: The user ID.
|
138
|
+
run_id: Optional run ID.
|
139
|
+
session_id: Optional session ID.
|
140
|
+
graph: Optional pre-loaded graph.
|
141
|
+
|
142
|
+
Returns:
|
143
|
+
List of run outputs.
|
144
|
+
"""
|
145
|
+
if user_id is None:
|
146
|
+
msg = "Session is invalid"
|
147
|
+
raise ValueError(msg)
|
148
|
+
|
149
|
+
if graph is None:
|
150
|
+
# In lfx, we can't load flows from database
|
151
|
+
msg = "run_flow requires a graph parameter in lfx"
|
152
|
+
raise ValueError(msg)
|
153
|
+
|
154
|
+
if run_id:
|
155
|
+
graph.set_run_id(UUID(run_id))
|
156
|
+
if session_id:
|
157
|
+
graph.session_id = session_id
|
158
|
+
if user_id:
|
159
|
+
graph.user_id = user_id
|
160
|
+
|
161
|
+
if inputs is None:
|
162
|
+
inputs = []
|
163
|
+
if isinstance(inputs, dict):
|
164
|
+
inputs = [inputs]
|
165
|
+
|
166
|
+
inputs_list = []
|
167
|
+
inputs_components = []
|
168
|
+
types = []
|
169
|
+
|
170
|
+
for input_dict in inputs:
|
171
|
+
inputs_list.append({INPUT_FIELD_NAME: input_dict.get("input_value", "")})
|
172
|
+
inputs_components.append(input_dict.get("components", []))
|
173
|
+
types.append(input_dict.get("type", "chat"))
|
174
|
+
|
175
|
+
outputs = [
|
176
|
+
vertex.id
|
177
|
+
for vertex in graph.vertices
|
178
|
+
if output_type == "debug"
|
179
|
+
or (vertex.is_output and (output_type == "any" or (output_type and output_type in str(vertex.id).lower())))
|
180
|
+
]
|
181
|
+
|
182
|
+
# In lfx, we don't have settings service, so use False as default
|
183
|
+
fallback_to_env_vars = False
|
184
|
+
|
185
|
+
return await graph.arun(
|
186
|
+
inputs_list,
|
187
|
+
outputs=outputs,
|
188
|
+
inputs_components=inputs_components,
|
189
|
+
types=types,
|
190
|
+
fallback_to_env_vars=fallback_to_env_vars,
|
191
|
+
)
|
192
|
+
|
193
|
+
|
194
|
+
__all__ = ["build_schema_from_inputs", "get_arg_names", "get_flow_inputs", "list_flows", "load_flow", "run_flow"]
|
lfx/inputs/__init__.py
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
from .inputs import (
|
2
|
+
AuthInput,
|
3
|
+
BoolInput,
|
4
|
+
CodeInput,
|
5
|
+
ConnectionInput,
|
6
|
+
DataFrameInput,
|
7
|
+
DataInput,
|
8
|
+
DefaultPromptField,
|
9
|
+
DictInput,
|
10
|
+
DropdownInput,
|
11
|
+
FileInput,
|
12
|
+
FloatInput,
|
13
|
+
HandleInput,
|
14
|
+
Input,
|
15
|
+
IntInput,
|
16
|
+
LinkInput,
|
17
|
+
McpInput,
|
18
|
+
MessageInput,
|
19
|
+
MessageTextInput,
|
20
|
+
MultilineInput,
|
21
|
+
MultilineSecretInput,
|
22
|
+
MultiselectInput,
|
23
|
+
NestedDictInput,
|
24
|
+
PromptInput,
|
25
|
+
QueryInput,
|
26
|
+
SecretStrInput,
|
27
|
+
SliderInput,
|
28
|
+
SortableListInput,
|
29
|
+
StrInput,
|
30
|
+
TabInput,
|
31
|
+
TableInput,
|
32
|
+
ToolsInput,
|
33
|
+
)
|
34
|
+
|
35
|
+
__all__ = [
|
36
|
+
"AuthInput",
|
37
|
+
"BoolInput",
|
38
|
+
"CodeInput",
|
39
|
+
"ConnectionInput",
|
40
|
+
"DataFrameInput",
|
41
|
+
"DataInput",
|
42
|
+
"DefaultPromptField",
|
43
|
+
"DefaultPromptField",
|
44
|
+
"DictInput",
|
45
|
+
"DropdownInput",
|
46
|
+
"FileInput",
|
47
|
+
"FloatInput",
|
48
|
+
"HandleInput",
|
49
|
+
"Input",
|
50
|
+
"IntInput",
|
51
|
+
"LinkInput",
|
52
|
+
"McpInput",
|
53
|
+
"MessageInput",
|
54
|
+
"MessageTextInput",
|
55
|
+
"MultilineInput",
|
56
|
+
"MultilineSecretInput",
|
57
|
+
"MultiselectInput",
|
58
|
+
"NestedDictInput",
|
59
|
+
"PromptInput",
|
60
|
+
"QueryInput",
|
61
|
+
"SecretStrInput",
|
62
|
+
"SliderInput",
|
63
|
+
"SortableListInput",
|
64
|
+
"StrInput",
|
65
|
+
"TabInput",
|
66
|
+
"TableInput",
|
67
|
+
"ToolsInput",
|
68
|
+
]
|
lfx/inputs/constants.py
ADDED