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,131 @@
|
|
1
|
+
from lfx.custom import Component
|
2
|
+
from lfx.field_typing.range_spec import RangeSpec
|
3
|
+
from lfx.io import BoolInput, FloatInput, HandleInput, MessageTextInput, Output, PromptInput
|
4
|
+
from lfx.schema.message import Message
|
5
|
+
|
6
|
+
|
7
|
+
class CleanlabRemediator(Component):
|
8
|
+
"""Remediates potentially untrustworthy LLM responses based on trust scores computed by the Cleanlab Evaluator.
|
9
|
+
|
10
|
+
This component takes a response and its associated trust score,
|
11
|
+
and applies remediation strategies based on configurable thresholds and settings.
|
12
|
+
|
13
|
+
Inputs:
|
14
|
+
- response (MessageTextInput): The original LLM-generated response to be evaluated and possibly remediated.
|
15
|
+
The CleanlabEvaluator passes this response through.
|
16
|
+
- score (HandleInput): The trust score output from CleanlabEvaluator (expected to be a float between 0 and 1).
|
17
|
+
- explanation (MessageTextInput): Optional textual explanation for the trust score, to be included in the
|
18
|
+
output.
|
19
|
+
- threshold (Input[float]): Minimum trust score required to accept the response. If the score is lower, the
|
20
|
+
response is remediated.
|
21
|
+
- show_untrustworthy_response (BoolInput): If true, returns the original response with a warning; if false,
|
22
|
+
returns fallback text.
|
23
|
+
- untrustworthy_warning_text (PromptInput): Text warning to append to responses deemed untrustworthy (when
|
24
|
+
showing them).
|
25
|
+
- fallback_text (PromptInput): Replacement message returned if the response is untrustworthy and should be
|
26
|
+
hidden.
|
27
|
+
|
28
|
+
Outputs:
|
29
|
+
- remediated_response (Message): Either:
|
30
|
+
• the original response,
|
31
|
+
• the original response with appended warning, or
|
32
|
+
• the fallback response,
|
33
|
+
depending on the trust score and configuration.
|
34
|
+
|
35
|
+
This component is typically used downstream of CleanlabEvaluator or CleanlabRagValidator
|
36
|
+
to take appropriate action on low-trust responses and inform users accordingly.
|
37
|
+
"""
|
38
|
+
|
39
|
+
display_name = "Cleanlab Remediator"
|
40
|
+
description = (
|
41
|
+
"Remediates an untrustworthy response based on trust score from the Cleanlab Evaluator, "
|
42
|
+
"score threshold, and message handling settings."
|
43
|
+
)
|
44
|
+
icon = "Cleanlab"
|
45
|
+
name = "CleanlabRemediator"
|
46
|
+
|
47
|
+
inputs = [
|
48
|
+
MessageTextInput(
|
49
|
+
name="response",
|
50
|
+
display_name="Response",
|
51
|
+
info="The response to the user's query.",
|
52
|
+
required=True,
|
53
|
+
),
|
54
|
+
HandleInput(
|
55
|
+
name="score",
|
56
|
+
display_name="Trust Score",
|
57
|
+
info="The trustworthiness score output from the Cleanlab Evaluator.",
|
58
|
+
input_types=["number"],
|
59
|
+
required=True,
|
60
|
+
),
|
61
|
+
MessageTextInput(
|
62
|
+
name="explanation",
|
63
|
+
display_name="Explanation",
|
64
|
+
info="The explanation from the Cleanlab Evaluator.",
|
65
|
+
required=False,
|
66
|
+
),
|
67
|
+
FloatInput(
|
68
|
+
name="threshold",
|
69
|
+
display_name="Threshold",
|
70
|
+
field_type="float",
|
71
|
+
value=0.7,
|
72
|
+
range_spec=RangeSpec(min=0.0, max=1.0, step=0.05),
|
73
|
+
info="Minimum score required to show the response unmodified. Reponses with scores above this threshold "
|
74
|
+
"are considered trustworthy. Reponses with scores below this threshold are considered untrustworthy and "
|
75
|
+
"will be remediated based on the settings below.",
|
76
|
+
required=True,
|
77
|
+
show=True,
|
78
|
+
),
|
79
|
+
BoolInput(
|
80
|
+
name="show_untrustworthy_response",
|
81
|
+
display_name="Show Untrustworthy Response",
|
82
|
+
info="If enabled, and the trust score is below the threshold, the original response is shown with the "
|
83
|
+
"added warning. If disabled, and the trust score is below the threshold, the fallback answer is returned.",
|
84
|
+
value=True,
|
85
|
+
),
|
86
|
+
PromptInput(
|
87
|
+
name="untrustworthy_warning_text",
|
88
|
+
display_name="Warning for Untrustworthy Response",
|
89
|
+
info="Warning to append to the response if Show Untrustworthy Response is enabled and trust score is "
|
90
|
+
"below the threshold.",
|
91
|
+
value="⚠️ WARNING: The following response is potentially untrustworthy.",
|
92
|
+
),
|
93
|
+
PromptInput(
|
94
|
+
name="fallback_text",
|
95
|
+
display_name="Fallback Answer",
|
96
|
+
info="Response returned if the trust score is below the threshold and 'Show Untrustworthy Response' is "
|
97
|
+
"disabled.",
|
98
|
+
value="Based on the available information, I cannot provide a complete answer to this question.",
|
99
|
+
),
|
100
|
+
]
|
101
|
+
|
102
|
+
outputs = [
|
103
|
+
Output(
|
104
|
+
display_name="Remediated Message",
|
105
|
+
name="remediated_response",
|
106
|
+
method="remediate_response",
|
107
|
+
types=["Message"],
|
108
|
+
),
|
109
|
+
]
|
110
|
+
|
111
|
+
def remediate_response(self) -> Message:
|
112
|
+
if self.score >= self.threshold:
|
113
|
+
self.status = f"Score {self.score:.2f} ≥ threshold {self.threshold:.2f} → accepted"
|
114
|
+
return Message(
|
115
|
+
text=f"{self.response}\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n**Trust Score:** {self.score:.2f}"
|
116
|
+
)
|
117
|
+
|
118
|
+
self.status = f"Score {self.score:.2f} < threshold {self.threshold:.2f} → flagged"
|
119
|
+
|
120
|
+
if self.show_untrustworthy_response:
|
121
|
+
parts = [
|
122
|
+
self.response,
|
123
|
+
"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
|
124
|
+
f"**{self.untrustworthy_warning_text.strip()}**",
|
125
|
+
f"**Trust Score:** {self.score:.2f}",
|
126
|
+
]
|
127
|
+
if self.explanation:
|
128
|
+
parts.append(f"**Explanation:** {self.explanation}")
|
129
|
+
return Message(text="\n\n".join(parts))
|
130
|
+
|
131
|
+
return Message(text=self.fallback_text)
|
@@ -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 .clickhouse import ClickhouseVectorStoreComponent
|
9
|
+
|
10
|
+
_dynamic_imports = {
|
11
|
+
"ClickhouseVectorStoreComponent": "clickhouse",
|
12
|
+
}
|
13
|
+
|
14
|
+
__all__ = [
|
15
|
+
"ClickhouseVectorStoreComponent",
|
16
|
+
]
|
17
|
+
|
18
|
+
|
19
|
+
def __getattr__(attr_name: str) -> Any:
|
20
|
+
"""Lazily import ClickHouse 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,135 @@
|
|
1
|
+
from langchain_community.vectorstores import Clickhouse, ClickhouseSettings
|
2
|
+
|
3
|
+
from lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
|
4
|
+
from lfx.helpers.data import docs_to_data
|
5
|
+
from lfx.inputs.inputs import BoolInput, FloatInput
|
6
|
+
from lfx.io import (
|
7
|
+
DictInput,
|
8
|
+
DropdownInput,
|
9
|
+
HandleInput,
|
10
|
+
IntInput,
|
11
|
+
SecretStrInput,
|
12
|
+
StrInput,
|
13
|
+
)
|
14
|
+
from lfx.schema.data import Data
|
15
|
+
|
16
|
+
|
17
|
+
class ClickhouseVectorStoreComponent(LCVectorStoreComponent):
|
18
|
+
display_name = "Clickhouse"
|
19
|
+
description = "Clickhouse Vector Store with search capabilities"
|
20
|
+
name = "Clickhouse"
|
21
|
+
icon = "Clickhouse"
|
22
|
+
|
23
|
+
inputs = [
|
24
|
+
StrInput(name="host", display_name="hostname", required=True, value="localhost"),
|
25
|
+
IntInput(name="port", display_name="port", required=True, value=8123),
|
26
|
+
StrInput(name="database", display_name="database", required=True),
|
27
|
+
StrInput(name="table", display_name="Table name", required=True),
|
28
|
+
StrInput(name="username", display_name="The ClickHouse user name.", required=True),
|
29
|
+
SecretStrInput(name="password", display_name="The password for username.", required=True),
|
30
|
+
DropdownInput(
|
31
|
+
name="index_type",
|
32
|
+
display_name="index_type",
|
33
|
+
options=["annoy", "vector_similarity"],
|
34
|
+
info="Type of the index.",
|
35
|
+
value="annoy",
|
36
|
+
advanced=True,
|
37
|
+
),
|
38
|
+
DropdownInput(
|
39
|
+
name="metric",
|
40
|
+
display_name="metric",
|
41
|
+
options=["angular", "euclidean", "manhattan", "hamming", "dot"],
|
42
|
+
info="Metric to compute distance.",
|
43
|
+
value="angular",
|
44
|
+
advanced=True,
|
45
|
+
),
|
46
|
+
BoolInput(
|
47
|
+
name="secure",
|
48
|
+
display_name="Use https/TLS. This overrides inferred values from the interface or port arguments.",
|
49
|
+
value=False,
|
50
|
+
advanced=True,
|
51
|
+
),
|
52
|
+
StrInput(name="index_param", display_name="Param of the index", value="100,'L2Distance'", advanced=True),
|
53
|
+
DictInput(name="index_query_params", display_name="index query params", advanced=True),
|
54
|
+
*LCVectorStoreComponent.inputs,
|
55
|
+
HandleInput(name="embedding", display_name="Embedding", input_types=["Embeddings"]),
|
56
|
+
IntInput(
|
57
|
+
name="number_of_results",
|
58
|
+
display_name="Number of Results",
|
59
|
+
info="Number of results to return.",
|
60
|
+
value=4,
|
61
|
+
advanced=True,
|
62
|
+
),
|
63
|
+
FloatInput(name="score_threshold", display_name="Score threshold", advanced=True),
|
64
|
+
]
|
65
|
+
|
66
|
+
@check_cached_vector_store
|
67
|
+
def build_vector_store(self) -> Clickhouse:
|
68
|
+
try:
|
69
|
+
import clickhouse_connect
|
70
|
+
except ImportError as e:
|
71
|
+
msg = (
|
72
|
+
"Failed to import Clickhouse dependencies. "
|
73
|
+
"Install it using `uv pip install langflow[clickhouse-connect] --pre`"
|
74
|
+
)
|
75
|
+
raise ImportError(msg) from e
|
76
|
+
|
77
|
+
try:
|
78
|
+
client = clickhouse_connect.get_client(
|
79
|
+
host=self.host, port=self.port, username=self.username, password=self.password
|
80
|
+
)
|
81
|
+
client.command("SELECT 1")
|
82
|
+
except Exception as e:
|
83
|
+
msg = f"Failed to connect to Clickhouse: {e}"
|
84
|
+
raise ValueError(msg) from e
|
85
|
+
|
86
|
+
# Convert DataFrame to Data if needed using parent's method
|
87
|
+
self.ingest_data = self._prepare_ingest_data()
|
88
|
+
|
89
|
+
documents = []
|
90
|
+
for _input in self.ingest_data or []:
|
91
|
+
if isinstance(_input, Data):
|
92
|
+
documents.append(_input.to_lc_document())
|
93
|
+
else:
|
94
|
+
documents.append(_input)
|
95
|
+
|
96
|
+
kwargs = {}
|
97
|
+
if self.index_param:
|
98
|
+
kwargs["index_param"] = self.index_param.split(",")
|
99
|
+
if self.index_query_params:
|
100
|
+
kwargs["index_query_params"] = self.index_query_params
|
101
|
+
|
102
|
+
settings = ClickhouseSettings(
|
103
|
+
table=self.table,
|
104
|
+
database=self.database,
|
105
|
+
host=self.host,
|
106
|
+
index_type=self.index_type,
|
107
|
+
metric=self.metric,
|
108
|
+
password=self.password,
|
109
|
+
port=self.port,
|
110
|
+
secure=self.secure,
|
111
|
+
username=self.username,
|
112
|
+
**kwargs,
|
113
|
+
)
|
114
|
+
if documents:
|
115
|
+
clickhouse_vs = Clickhouse.from_documents(documents=documents, embedding=self.embedding, config=settings)
|
116
|
+
|
117
|
+
else:
|
118
|
+
clickhouse_vs = Clickhouse(embedding=self.embedding, config=settings)
|
119
|
+
|
120
|
+
return clickhouse_vs
|
121
|
+
|
122
|
+
def search_documents(self) -> list[Data]:
|
123
|
+
vector_store = self.build_vector_store()
|
124
|
+
|
125
|
+
if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():
|
126
|
+
kwargs = {}
|
127
|
+
if self.score_threshold:
|
128
|
+
kwargs["score_threshold"] = self.score_threshold
|
129
|
+
|
130
|
+
docs = vector_store.similarity_search(query=self.search_query, k=self.number_of_results, **kwargs)
|
131
|
+
|
132
|
+
data = docs_to_data(docs)
|
133
|
+
self.status = data
|
134
|
+
return data
|
135
|
+
return []
|
@@ -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.cloudflare.cloudflare import CloudflareWorkersAIEmbeddingsComponent
|
9
|
+
|
10
|
+
_dynamic_imports = {
|
11
|
+
"CloudflareWorkersAIEmbeddingsComponent": "cloudflare",
|
12
|
+
}
|
13
|
+
|
14
|
+
__all__ = ["CloudflareWorkersAIEmbeddingsComponent"]
|
15
|
+
|
16
|
+
|
17
|
+
def __getattr__(attr_name: str) -> Any:
|
18
|
+
"""Lazily import cloudflare 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,81 @@
|
|
1
|
+
from langchain_community.embeddings.cloudflare_workersai import CloudflareWorkersAIEmbeddings
|
2
|
+
|
3
|
+
from lfx.base.models.model import LCModelComponent
|
4
|
+
from lfx.field_typing import Embeddings
|
5
|
+
from lfx.io import BoolInput, DictInput, IntInput, MessageTextInput, Output, SecretStrInput
|
6
|
+
|
7
|
+
|
8
|
+
class CloudflareWorkersAIEmbeddingsComponent(LCModelComponent):
|
9
|
+
display_name: str = "Cloudflare Workers AI Embeddings"
|
10
|
+
description: str = "Generate embeddings using Cloudflare Workers AI models."
|
11
|
+
documentation: str = "https://python.langchain.com/docs/integrations/text_embedding/cloudflare_workersai/"
|
12
|
+
icon = "Cloudflare"
|
13
|
+
name = "CloudflareWorkersAIEmbeddings"
|
14
|
+
|
15
|
+
inputs = [
|
16
|
+
MessageTextInput(
|
17
|
+
name="account_id",
|
18
|
+
display_name="Cloudflare account ID",
|
19
|
+
info="Find your account ID https://developers.cloudflare.com/fundamentals/setup/find-account-and-zone-ids/#find-account-id-workers-and-pages",
|
20
|
+
required=True,
|
21
|
+
),
|
22
|
+
SecretStrInput(
|
23
|
+
name="api_token",
|
24
|
+
display_name="Cloudflare API token",
|
25
|
+
info="Create an API token https://developers.cloudflare.com/fundamentals/api/get-started/create-token/",
|
26
|
+
required=True,
|
27
|
+
),
|
28
|
+
MessageTextInput(
|
29
|
+
name="model_name",
|
30
|
+
display_name="Model Name",
|
31
|
+
info="List of supported models https://developers.cloudflare.com/workers-ai/models/#text-embeddings",
|
32
|
+
required=True,
|
33
|
+
value="@cf/baai/bge-base-en-v1.5",
|
34
|
+
),
|
35
|
+
BoolInput(
|
36
|
+
name="strip_new_lines",
|
37
|
+
display_name="Strip New Lines",
|
38
|
+
advanced=True,
|
39
|
+
value=True,
|
40
|
+
),
|
41
|
+
IntInput(
|
42
|
+
name="batch_size",
|
43
|
+
display_name="Batch Size",
|
44
|
+
advanced=True,
|
45
|
+
value=50,
|
46
|
+
),
|
47
|
+
MessageTextInput(
|
48
|
+
name="api_base_url",
|
49
|
+
display_name="Cloudflare API base URL",
|
50
|
+
advanced=True,
|
51
|
+
value="https://api.cloudflare.com/client/v4/accounts",
|
52
|
+
),
|
53
|
+
DictInput(
|
54
|
+
name="headers",
|
55
|
+
display_name="Headers",
|
56
|
+
info="Additional request headers",
|
57
|
+
is_list=True,
|
58
|
+
advanced=True,
|
59
|
+
),
|
60
|
+
]
|
61
|
+
|
62
|
+
outputs = [
|
63
|
+
Output(display_name="Embeddings", name="embeddings", method="build_embeddings"),
|
64
|
+
]
|
65
|
+
|
66
|
+
def build_embeddings(self) -> Embeddings:
|
67
|
+
try:
|
68
|
+
embeddings = CloudflareWorkersAIEmbeddings(
|
69
|
+
account_id=self.account_id,
|
70
|
+
api_base_url=self.api_base_url,
|
71
|
+
api_token=self.api_token,
|
72
|
+
batch_size=self.batch_size,
|
73
|
+
headers=self.headers,
|
74
|
+
model_name=self.model_name,
|
75
|
+
strip_new_lines=self.strip_new_lines,
|
76
|
+
)
|
77
|
+
except Exception as e:
|
78
|
+
msg = f"Could not connect to CloudflareWorkersAIEmbeddings API: {e!s}"
|
79
|
+
raise ValueError(msg) from e
|
80
|
+
|
81
|
+
return embeddings
|
@@ -0,0 +1,40 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import TYPE_CHECKING, Any
|
4
|
+
|
5
|
+
from lfx.components._importing import import_mod
|
6
|
+
|
7
|
+
if TYPE_CHECKING:
|
8
|
+
from .cohere_embeddings import CohereEmbeddingsComponent
|
9
|
+
from .cohere_models import CohereComponent
|
10
|
+
from .cohere_rerank import CohereRerankComponent
|
11
|
+
|
12
|
+
_dynamic_imports = {
|
13
|
+
"CohereComponent": "cohere_models",
|
14
|
+
"CohereEmbeddingsComponent": "cohere_embeddings",
|
15
|
+
"CohereRerankComponent": "cohere_rerank",
|
16
|
+
}
|
17
|
+
|
18
|
+
__all__ = [
|
19
|
+
"CohereComponent",
|
20
|
+
"CohereEmbeddingsComponent",
|
21
|
+
"CohereRerankComponent",
|
22
|
+
]
|
23
|
+
|
24
|
+
|
25
|
+
def __getattr__(attr_name: str) -> Any:
|
26
|
+
"""Lazily import cohere components on attribute access."""
|
27
|
+
if attr_name not in _dynamic_imports:
|
28
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
29
|
+
raise AttributeError(msg)
|
30
|
+
try:
|
31
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
32
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
33
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
34
|
+
raise AttributeError(msg) from e
|
35
|
+
globals()[attr_name] = result
|
36
|
+
return result
|
37
|
+
|
38
|
+
|
39
|
+
def __dir__() -> list[str]:
|
40
|
+
return list(__all__)
|
@@ -0,0 +1,81 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
3
|
+
import cohere
|
4
|
+
from langchain_cohere import CohereEmbeddings
|
5
|
+
|
6
|
+
from lfx.base.models.model import LCModelComponent
|
7
|
+
from lfx.field_typing import Embeddings
|
8
|
+
from lfx.io import DropdownInput, FloatInput, IntInput, MessageTextInput, Output, SecretStrInput
|
9
|
+
|
10
|
+
HTTP_STATUS_OK = 200
|
11
|
+
|
12
|
+
|
13
|
+
class CohereEmbeddingsComponent(LCModelComponent):
|
14
|
+
display_name = "Cohere Embeddings"
|
15
|
+
description = "Generate embeddings using Cohere models."
|
16
|
+
icon = "Cohere"
|
17
|
+
name = "CohereEmbeddings"
|
18
|
+
|
19
|
+
inputs = [
|
20
|
+
SecretStrInput(name="api_key", display_name="Cohere API Key", required=True, real_time_refresh=True),
|
21
|
+
DropdownInput(
|
22
|
+
name="model_name",
|
23
|
+
display_name="Model",
|
24
|
+
advanced=False,
|
25
|
+
options=[
|
26
|
+
"embed-english-v2.0",
|
27
|
+
"embed-multilingual-v2.0",
|
28
|
+
"embed-english-light-v2.0",
|
29
|
+
"embed-multilingual-light-v2.0",
|
30
|
+
],
|
31
|
+
value="embed-english-v2.0",
|
32
|
+
refresh_button=True,
|
33
|
+
combobox=True,
|
34
|
+
),
|
35
|
+
MessageTextInput(name="truncate", display_name="Truncate", advanced=True),
|
36
|
+
IntInput(name="max_retries", display_name="Max Retries", value=3, advanced=True),
|
37
|
+
MessageTextInput(name="user_agent", display_name="User Agent", advanced=True, value="langchain"),
|
38
|
+
FloatInput(name="request_timeout", display_name="Request Timeout", advanced=True),
|
39
|
+
]
|
40
|
+
|
41
|
+
outputs = [
|
42
|
+
Output(display_name="Embeddings", name="embeddings", method="build_embeddings"),
|
43
|
+
]
|
44
|
+
|
45
|
+
def build_embeddings(self) -> Embeddings:
|
46
|
+
data = None
|
47
|
+
try:
|
48
|
+
data = CohereEmbeddings(
|
49
|
+
cohere_api_key=self.api_key,
|
50
|
+
model=self.model_name,
|
51
|
+
truncate=self.truncate,
|
52
|
+
max_retries=self.max_retries,
|
53
|
+
user_agent=self.user_agent,
|
54
|
+
request_timeout=self.request_timeout or None,
|
55
|
+
)
|
56
|
+
except Exception as e:
|
57
|
+
msg = (
|
58
|
+
"Unable to create Cohere Embeddings. ",
|
59
|
+
"Please verify the API key and model parameters, and try again.",
|
60
|
+
)
|
61
|
+
raise ValueError(msg) from e
|
62
|
+
# added status if not the return data would be serialised to create the status
|
63
|
+
return data
|
64
|
+
|
65
|
+
def get_model(self):
|
66
|
+
try:
|
67
|
+
co = cohere.ClientV2(self.api_key)
|
68
|
+
response = co.models.list(endpoint="embed")
|
69
|
+
models = response.models
|
70
|
+
return [model.name for model in models]
|
71
|
+
except Exception as e:
|
72
|
+
msg = f"Failed to fetch Cohere models. Error: {e}"
|
73
|
+
raise ValueError(msg) from e
|
74
|
+
|
75
|
+
async def update_build_config(self, build_config: dict, field_value: Any, field_name: str | None = None):
|
76
|
+
if field_name in {"model_name", "api_key"}:
|
77
|
+
if build_config.get("api_key", {}).get("value", None):
|
78
|
+
build_config["model_name"]["options"] = self.get_model()
|
79
|
+
else:
|
80
|
+
build_config["model_name"]["options"] = field_value
|
81
|
+
return build_config
|
@@ -0,0 +1,46 @@
|
|
1
|
+
from langchain_cohere import ChatCohere
|
2
|
+
from pydantic.v1 import SecretStr
|
3
|
+
|
4
|
+
from lfx.base.models.model import LCModelComponent
|
5
|
+
from lfx.field_typing import LanguageModel
|
6
|
+
from lfx.field_typing.range_spec import RangeSpec
|
7
|
+
from lfx.io import SecretStrInput, SliderInput
|
8
|
+
|
9
|
+
|
10
|
+
class CohereComponent(LCModelComponent):
|
11
|
+
display_name = "Cohere Language Models"
|
12
|
+
description = "Generate text using Cohere LLMs."
|
13
|
+
documentation = "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere"
|
14
|
+
icon = "Cohere"
|
15
|
+
name = "CohereModel"
|
16
|
+
|
17
|
+
inputs = [
|
18
|
+
*LCModelComponent.get_base_inputs(),
|
19
|
+
SecretStrInput(
|
20
|
+
name="cohere_api_key",
|
21
|
+
display_name="Cohere API Key",
|
22
|
+
info="The Cohere API Key to use for the Cohere model.",
|
23
|
+
advanced=False,
|
24
|
+
value="COHERE_API_KEY",
|
25
|
+
required=True,
|
26
|
+
),
|
27
|
+
SliderInput(
|
28
|
+
name="temperature",
|
29
|
+
display_name="Temperature",
|
30
|
+
value=0.75,
|
31
|
+
range_spec=RangeSpec(min=0, max=2, step=0.01),
|
32
|
+
info="Controls randomness. Lower values are more deterministic, higher values are more creative.",
|
33
|
+
advanced=True,
|
34
|
+
),
|
35
|
+
]
|
36
|
+
|
37
|
+
def build_model(self) -> LanguageModel: # type: ignore[type-var]
|
38
|
+
cohere_api_key = self.cohere_api_key
|
39
|
+
temperature = self.temperature
|
40
|
+
|
41
|
+
api_key = SecretStr(cohere_api_key).get_secret_value() if cohere_api_key else None
|
42
|
+
|
43
|
+
return ChatCohere(
|
44
|
+
temperature=temperature or 0.75,
|
45
|
+
cohere_api_key=api_key,
|
46
|
+
)
|
@@ -0,0 +1,51 @@
|
|
1
|
+
from lfx.base.compressors.model import LCCompressorComponent
|
2
|
+
from lfx.field_typing import BaseDocumentCompressor
|
3
|
+
from lfx.inputs.inputs import SecretStrInput
|
4
|
+
from lfx.io import DropdownInput
|
5
|
+
from lfx.template.field.base import Output
|
6
|
+
|
7
|
+
|
8
|
+
class CohereRerankComponent(LCCompressorComponent):
|
9
|
+
display_name = "Cohere Rerank"
|
10
|
+
description = "Rerank documents using the Cohere API."
|
11
|
+
name = "CohereRerank"
|
12
|
+
icon = "Cohere"
|
13
|
+
|
14
|
+
inputs = [
|
15
|
+
*LCCompressorComponent.inputs,
|
16
|
+
SecretStrInput(
|
17
|
+
name="api_key",
|
18
|
+
display_name="Cohere API Key",
|
19
|
+
),
|
20
|
+
DropdownInput(
|
21
|
+
name="model",
|
22
|
+
display_name="Model",
|
23
|
+
options=[
|
24
|
+
"rerank-english-v3.0",
|
25
|
+
"rerank-multilingual-v3.0",
|
26
|
+
"rerank-english-v2.0",
|
27
|
+
"rerank-multilingual-v2.0",
|
28
|
+
],
|
29
|
+
value="rerank-english-v3.0",
|
30
|
+
),
|
31
|
+
]
|
32
|
+
|
33
|
+
outputs = [
|
34
|
+
Output(
|
35
|
+
display_name="Reranked Documents",
|
36
|
+
name="reranked_documents",
|
37
|
+
method="compress_documents",
|
38
|
+
),
|
39
|
+
]
|
40
|
+
|
41
|
+
def build_compressor(self) -> BaseDocumentCompressor: # type: ignore[type-var]
|
42
|
+
try:
|
43
|
+
from langchain_cohere import CohereRerank
|
44
|
+
except ImportError as e:
|
45
|
+
msg = "Please install langchain-cohere to use the Cohere model."
|
46
|
+
raise ImportError(msg) from e
|
47
|
+
return CohereRerank(
|
48
|
+
cohere_api_key=self.api_key,
|
49
|
+
model=self.model,
|
50
|
+
top_n=self.top_n,
|
51
|
+
)
|