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,114 @@
|
|
1
|
+
from langchain_mistralai import ChatMistralAI
|
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.io import BoolInput, DropdownInput, FloatInput, IntInput, SecretStrInput, StrInput
|
7
|
+
|
8
|
+
|
9
|
+
class MistralAIModelComponent(LCModelComponent):
|
10
|
+
display_name = "MistralAI"
|
11
|
+
description = "Generates text using MistralAI LLMs."
|
12
|
+
icon = "MistralAI"
|
13
|
+
name = "MistralModel"
|
14
|
+
|
15
|
+
inputs = [
|
16
|
+
*LCModelComponent.get_base_inputs(),
|
17
|
+
IntInput(
|
18
|
+
name="max_tokens",
|
19
|
+
display_name="Max Tokens",
|
20
|
+
advanced=True,
|
21
|
+
info="The maximum number of tokens to generate. Set to 0 for unlimited tokens.",
|
22
|
+
),
|
23
|
+
DropdownInput(
|
24
|
+
name="model_name",
|
25
|
+
display_name="Model Name",
|
26
|
+
advanced=False,
|
27
|
+
options=[
|
28
|
+
"open-mixtral-8x7b",
|
29
|
+
"open-mixtral-8x22b",
|
30
|
+
"mistral-small-latest",
|
31
|
+
"mistral-medium-latest",
|
32
|
+
"mistral-large-latest",
|
33
|
+
"codestral-latest",
|
34
|
+
],
|
35
|
+
value="codestral-latest",
|
36
|
+
),
|
37
|
+
StrInput(
|
38
|
+
name="mistral_api_base",
|
39
|
+
display_name="Mistral API Base",
|
40
|
+
advanced=True,
|
41
|
+
info="The base URL of the Mistral API. Defaults to https://api.mistral.ai/v1. "
|
42
|
+
"You can change this to use other APIs like JinaChat, LocalAI and Prem.",
|
43
|
+
),
|
44
|
+
SecretStrInput(
|
45
|
+
name="api_key",
|
46
|
+
display_name="Mistral API Key",
|
47
|
+
info="The Mistral API Key to use for the Mistral model.",
|
48
|
+
advanced=False,
|
49
|
+
required=True,
|
50
|
+
value="MISTRAL_API_KEY",
|
51
|
+
),
|
52
|
+
FloatInput(
|
53
|
+
name="temperature",
|
54
|
+
display_name="Temperature",
|
55
|
+
value=0.1,
|
56
|
+
advanced=True,
|
57
|
+
),
|
58
|
+
IntInput(
|
59
|
+
name="max_retries",
|
60
|
+
display_name="Max Retries",
|
61
|
+
advanced=True,
|
62
|
+
value=5,
|
63
|
+
),
|
64
|
+
IntInput(
|
65
|
+
name="timeout",
|
66
|
+
display_name="Timeout",
|
67
|
+
advanced=True,
|
68
|
+
value=60,
|
69
|
+
),
|
70
|
+
IntInput(
|
71
|
+
name="max_concurrent_requests",
|
72
|
+
display_name="Max Concurrent Requests",
|
73
|
+
advanced=True,
|
74
|
+
value=3,
|
75
|
+
),
|
76
|
+
FloatInput(
|
77
|
+
name="top_p",
|
78
|
+
display_name="Top P",
|
79
|
+
advanced=True,
|
80
|
+
value=1,
|
81
|
+
),
|
82
|
+
IntInput(
|
83
|
+
name="random_seed",
|
84
|
+
display_name="Random Seed",
|
85
|
+
value=1,
|
86
|
+
advanced=True,
|
87
|
+
),
|
88
|
+
BoolInput(
|
89
|
+
name="safe_mode",
|
90
|
+
display_name="Safe Mode",
|
91
|
+
advanced=True,
|
92
|
+
value=False,
|
93
|
+
),
|
94
|
+
]
|
95
|
+
|
96
|
+
def build_model(self) -> LanguageModel: # type: ignore[type-var]
|
97
|
+
try:
|
98
|
+
return ChatMistralAI(
|
99
|
+
model_name=self.model_name,
|
100
|
+
mistral_api_key=SecretStr(self.api_key).get_secret_value() if self.api_key else None,
|
101
|
+
endpoint=self.mistral_api_base or "https://api.mistral.ai/v1",
|
102
|
+
max_tokens=self.max_tokens or None,
|
103
|
+
temperature=self.temperature,
|
104
|
+
max_retries=self.max_retries,
|
105
|
+
timeout=self.timeout,
|
106
|
+
max_concurrent_requests=self.max_concurrent_requests,
|
107
|
+
top_p=self.top_p,
|
108
|
+
random_seed=self.random_seed,
|
109
|
+
safe_mode=self.safe_mode,
|
110
|
+
streaming=self.stream,
|
111
|
+
)
|
112
|
+
except Exception as e:
|
113
|
+
msg = "Could not connect to MistralAI API."
|
114
|
+
raise ValueError(msg) from e
|
@@ -0,0 +1,58 @@
|
|
1
|
+
from langchain_mistralai.embeddings import MistralAIEmbeddings
|
2
|
+
from pydantic.v1 import SecretStr
|
3
|
+
|
4
|
+
from lfx.base.models.model import LCModelComponent
|
5
|
+
from lfx.field_typing import Embeddings
|
6
|
+
from lfx.io import DropdownInput, IntInput, MessageTextInput, Output, SecretStrInput
|
7
|
+
|
8
|
+
|
9
|
+
class MistralAIEmbeddingsComponent(LCModelComponent):
|
10
|
+
display_name = "MistralAI Embeddings"
|
11
|
+
description = "Generate embeddings using MistralAI models."
|
12
|
+
icon = "MistralAI"
|
13
|
+
name = "MistalAIEmbeddings"
|
14
|
+
|
15
|
+
inputs = [
|
16
|
+
DropdownInput(
|
17
|
+
name="model",
|
18
|
+
display_name="Model",
|
19
|
+
advanced=False,
|
20
|
+
options=["mistral-embed"],
|
21
|
+
value="mistral-embed",
|
22
|
+
),
|
23
|
+
SecretStrInput(name="mistral_api_key", display_name="Mistral API Key", required=True),
|
24
|
+
IntInput(
|
25
|
+
name="max_concurrent_requests",
|
26
|
+
display_name="Max Concurrent Requests",
|
27
|
+
advanced=True,
|
28
|
+
value=64,
|
29
|
+
),
|
30
|
+
IntInput(name="max_retries", display_name="Max Retries", advanced=True, value=5),
|
31
|
+
IntInput(name="timeout", display_name="Request Timeout", advanced=True, value=120),
|
32
|
+
MessageTextInput(
|
33
|
+
name="endpoint",
|
34
|
+
display_name="API Endpoint",
|
35
|
+
advanced=True,
|
36
|
+
value="https://api.mistral.ai/v1/",
|
37
|
+
),
|
38
|
+
]
|
39
|
+
|
40
|
+
outputs = [
|
41
|
+
Output(display_name="Embeddings", name="embeddings", method="build_embeddings"),
|
42
|
+
]
|
43
|
+
|
44
|
+
def build_embeddings(self) -> Embeddings:
|
45
|
+
if not self.mistral_api_key:
|
46
|
+
msg = "Mistral API Key is required"
|
47
|
+
raise ValueError(msg)
|
48
|
+
|
49
|
+
api_key = SecretStr(self.mistral_api_key).get_secret_value()
|
50
|
+
|
51
|
+
return MistralAIEmbeddings(
|
52
|
+
api_key=api_key,
|
53
|
+
model=self.model,
|
54
|
+
endpoint=self.endpoint,
|
55
|
+
max_concurrent_requests=self.max_concurrent_requests,
|
56
|
+
max_retries=self.max_retries,
|
57
|
+
timeout=self.timeout,
|
58
|
+
)
|
@@ -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 lfx.components.models.embedding_model import EmbeddingModelComponent
|
9
|
+
from lfx.components.models.language_model import LanguageModelComponent
|
10
|
+
|
11
|
+
_dynamic_imports = {
|
12
|
+
"EmbeddingModelComponent": "embedding_model",
|
13
|
+
"LanguageModelComponent": "language_model",
|
14
|
+
}
|
15
|
+
|
16
|
+
__all__ = ["EmbeddingModelComponent", "LanguageModelComponent"]
|
17
|
+
|
18
|
+
|
19
|
+
def __getattr__(attr_name: str) -> Any:
|
20
|
+
"""Lazily import model 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,114 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
3
|
+
from langchain_openai import OpenAIEmbeddings
|
4
|
+
|
5
|
+
from lfx.base.embeddings.model import LCEmbeddingsModel
|
6
|
+
from lfx.base.models.openai_constants import OPENAI_EMBEDDING_MODEL_NAMES
|
7
|
+
from lfx.field_typing import Embeddings
|
8
|
+
from lfx.io import (
|
9
|
+
BoolInput,
|
10
|
+
DictInput,
|
11
|
+
DropdownInput,
|
12
|
+
FloatInput,
|
13
|
+
IntInput,
|
14
|
+
MessageTextInput,
|
15
|
+
SecretStrInput,
|
16
|
+
)
|
17
|
+
from lfx.schema.dotdict import dotdict
|
18
|
+
|
19
|
+
|
20
|
+
class EmbeddingModelComponent(LCEmbeddingsModel):
|
21
|
+
display_name = "Embedding Model"
|
22
|
+
description = "Generate embeddings using a specified provider."
|
23
|
+
documentation: str = "https://docs.langflow.org/components-embedding-models"
|
24
|
+
icon = "binary"
|
25
|
+
name = "EmbeddingModel"
|
26
|
+
category = "models"
|
27
|
+
|
28
|
+
inputs = [
|
29
|
+
DropdownInput(
|
30
|
+
name="provider",
|
31
|
+
display_name="Model Provider",
|
32
|
+
options=["OpenAI"],
|
33
|
+
value="OpenAI",
|
34
|
+
info="Select the embedding model provider",
|
35
|
+
real_time_refresh=True,
|
36
|
+
options_metadata=[{"icon": "OpenAI"}],
|
37
|
+
),
|
38
|
+
DropdownInput(
|
39
|
+
name="model",
|
40
|
+
display_name="Model Name",
|
41
|
+
options=OPENAI_EMBEDDING_MODEL_NAMES,
|
42
|
+
value=OPENAI_EMBEDDING_MODEL_NAMES[0],
|
43
|
+
info="Select the embedding model to use",
|
44
|
+
),
|
45
|
+
SecretStrInput(
|
46
|
+
name="api_key",
|
47
|
+
display_name="OpenAI API Key",
|
48
|
+
info="Model Provider API key",
|
49
|
+
required=True,
|
50
|
+
show=True,
|
51
|
+
real_time_refresh=True,
|
52
|
+
),
|
53
|
+
MessageTextInput(
|
54
|
+
name="api_base",
|
55
|
+
display_name="API Base URL",
|
56
|
+
info="Base URL for the API. Leave empty for default.",
|
57
|
+
advanced=True,
|
58
|
+
),
|
59
|
+
IntInput(
|
60
|
+
name="dimensions",
|
61
|
+
display_name="Dimensions",
|
62
|
+
info="The number of dimensions the resulting output embeddings should have. "
|
63
|
+
"Only supported by certain models.",
|
64
|
+
advanced=True,
|
65
|
+
),
|
66
|
+
IntInput(name="chunk_size", display_name="Chunk Size", advanced=True, value=1000),
|
67
|
+
FloatInput(name="request_timeout", display_name="Request Timeout", advanced=True),
|
68
|
+
IntInput(name="max_retries", display_name="Max Retries", advanced=True, value=3),
|
69
|
+
BoolInput(name="show_progress_bar", display_name="Show Progress Bar", advanced=True),
|
70
|
+
DictInput(
|
71
|
+
name="model_kwargs",
|
72
|
+
display_name="Model Kwargs",
|
73
|
+
advanced=True,
|
74
|
+
info="Additional keyword arguments to pass to the model.",
|
75
|
+
),
|
76
|
+
]
|
77
|
+
|
78
|
+
def build_embeddings(self) -> Embeddings:
|
79
|
+
provider = self.provider
|
80
|
+
model = self.model
|
81
|
+
api_key = self.api_key
|
82
|
+
api_base = self.api_base
|
83
|
+
dimensions = self.dimensions
|
84
|
+
chunk_size = self.chunk_size
|
85
|
+
request_timeout = self.request_timeout
|
86
|
+
max_retries = self.max_retries
|
87
|
+
show_progress_bar = self.show_progress_bar
|
88
|
+
model_kwargs = self.model_kwargs or {}
|
89
|
+
|
90
|
+
if provider == "OpenAI":
|
91
|
+
if not api_key:
|
92
|
+
msg = "OpenAI API key is required when using OpenAI provider"
|
93
|
+
raise ValueError(msg)
|
94
|
+
return OpenAIEmbeddings(
|
95
|
+
model=model,
|
96
|
+
dimensions=dimensions or None,
|
97
|
+
base_url=api_base or None,
|
98
|
+
api_key=api_key,
|
99
|
+
chunk_size=chunk_size,
|
100
|
+
max_retries=max_retries,
|
101
|
+
timeout=request_timeout or None,
|
102
|
+
show_progress_bar=show_progress_bar,
|
103
|
+
model_kwargs=model_kwargs,
|
104
|
+
)
|
105
|
+
msg = f"Unknown provider: {provider}"
|
106
|
+
raise ValueError(msg)
|
107
|
+
|
108
|
+
def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:
|
109
|
+
if field_name == "provider" and field_value == "OpenAI":
|
110
|
+
build_config["model"]["options"] = OPENAI_EMBEDDING_MODEL_NAMES
|
111
|
+
build_config["model"]["value"] = OPENAI_EMBEDDING_MODEL_NAMES[0]
|
112
|
+
build_config["api_key"]["display_name"] = "OpenAI API Key"
|
113
|
+
build_config["api_base"]["display_name"] = "OpenAI API Base URL"
|
114
|
+
return build_config
|
@@ -0,0 +1,144 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
3
|
+
from langchain_anthropic import ChatAnthropic
|
4
|
+
from langchain_google_genai import ChatGoogleGenerativeAI
|
5
|
+
from langchain_openai import ChatOpenAI
|
6
|
+
|
7
|
+
from lfx.base.models.anthropic_constants import ANTHROPIC_MODELS
|
8
|
+
from lfx.base.models.google_generative_ai_constants import GOOGLE_GENERATIVE_AI_MODELS
|
9
|
+
from lfx.base.models.model import LCModelComponent
|
10
|
+
from lfx.base.models.openai_constants import OPENAI_CHAT_MODEL_NAMES, OPENAI_REASONING_MODEL_NAMES
|
11
|
+
from lfx.field_typing import LanguageModel
|
12
|
+
from lfx.field_typing.range_spec import RangeSpec
|
13
|
+
from lfx.inputs.inputs import BoolInput
|
14
|
+
from lfx.io import DropdownInput, MessageInput, MultilineInput, SecretStrInput, SliderInput
|
15
|
+
from lfx.schema.dotdict import dotdict
|
16
|
+
|
17
|
+
|
18
|
+
class LanguageModelComponent(LCModelComponent):
|
19
|
+
display_name = "Language Model"
|
20
|
+
description = "Runs a language model given a specified provider."
|
21
|
+
documentation: str = "https://docs.langflow.org/components-models"
|
22
|
+
icon = "brain-circuit"
|
23
|
+
category = "models"
|
24
|
+
priority = 0 # Set priority to 0 to make it appear first
|
25
|
+
|
26
|
+
inputs = [
|
27
|
+
DropdownInput(
|
28
|
+
name="provider",
|
29
|
+
display_name="Model Provider",
|
30
|
+
options=["OpenAI", "Anthropic", "Google"],
|
31
|
+
value="OpenAI",
|
32
|
+
info="Select the model provider",
|
33
|
+
real_time_refresh=True,
|
34
|
+
options_metadata=[{"icon": "OpenAI"}, {"icon": "Anthropic"}, {"icon": "GoogleGenerativeAI"}],
|
35
|
+
),
|
36
|
+
DropdownInput(
|
37
|
+
name="model_name",
|
38
|
+
display_name="Model Name",
|
39
|
+
options=OPENAI_CHAT_MODEL_NAMES + OPENAI_REASONING_MODEL_NAMES,
|
40
|
+
value=OPENAI_CHAT_MODEL_NAMES[0],
|
41
|
+
info="Select the model to use",
|
42
|
+
real_time_refresh=True,
|
43
|
+
),
|
44
|
+
SecretStrInput(
|
45
|
+
name="api_key",
|
46
|
+
display_name="OpenAI API Key",
|
47
|
+
info="Model Provider API key",
|
48
|
+
required=False,
|
49
|
+
show=True,
|
50
|
+
real_time_refresh=True,
|
51
|
+
),
|
52
|
+
MessageInput(
|
53
|
+
name="input_value",
|
54
|
+
display_name="Input",
|
55
|
+
info="The input text to send to the model",
|
56
|
+
),
|
57
|
+
MultilineInput(
|
58
|
+
name="system_message",
|
59
|
+
display_name="System Message",
|
60
|
+
info="A system message that helps set the behavior of the assistant",
|
61
|
+
advanced=False,
|
62
|
+
),
|
63
|
+
BoolInput(
|
64
|
+
name="stream",
|
65
|
+
display_name="Stream",
|
66
|
+
info="Whether to stream the response",
|
67
|
+
value=False,
|
68
|
+
advanced=True,
|
69
|
+
),
|
70
|
+
SliderInput(
|
71
|
+
name="temperature",
|
72
|
+
display_name="Temperature",
|
73
|
+
value=0.1,
|
74
|
+
info="Controls randomness in responses",
|
75
|
+
range_spec=RangeSpec(min=0, max=1, step=0.01),
|
76
|
+
advanced=True,
|
77
|
+
),
|
78
|
+
]
|
79
|
+
|
80
|
+
def build_model(self) -> LanguageModel:
|
81
|
+
provider = self.provider
|
82
|
+
model_name = self.model_name
|
83
|
+
temperature = self.temperature
|
84
|
+
stream = self.stream
|
85
|
+
|
86
|
+
if provider == "OpenAI":
|
87
|
+
if not self.api_key:
|
88
|
+
msg = "OpenAI API key is required when using OpenAI provider"
|
89
|
+
raise ValueError(msg)
|
90
|
+
|
91
|
+
if model_name in OPENAI_REASONING_MODEL_NAMES:
|
92
|
+
# reasoning models do not support temperature (yet)
|
93
|
+
temperature = None
|
94
|
+
|
95
|
+
return ChatOpenAI(
|
96
|
+
model_name=model_name,
|
97
|
+
temperature=temperature,
|
98
|
+
streaming=stream,
|
99
|
+
openai_api_key=self.api_key,
|
100
|
+
)
|
101
|
+
if provider == "Anthropic":
|
102
|
+
if not self.api_key:
|
103
|
+
msg = "Anthropic API key is required when using Anthropic provider"
|
104
|
+
raise ValueError(msg)
|
105
|
+
return ChatAnthropic(
|
106
|
+
model=model_name,
|
107
|
+
temperature=temperature,
|
108
|
+
streaming=stream,
|
109
|
+
anthropic_api_key=self.api_key,
|
110
|
+
)
|
111
|
+
if provider == "Google":
|
112
|
+
if not self.api_key:
|
113
|
+
msg = "Google API key is required when using Google provider"
|
114
|
+
raise ValueError(msg)
|
115
|
+
return ChatGoogleGenerativeAI(
|
116
|
+
model=model_name,
|
117
|
+
temperature=temperature,
|
118
|
+
streaming=stream,
|
119
|
+
google_api_key=self.api_key,
|
120
|
+
)
|
121
|
+
msg = f"Unknown provider: {provider}"
|
122
|
+
raise ValueError(msg)
|
123
|
+
|
124
|
+
def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:
|
125
|
+
if field_name == "provider":
|
126
|
+
if field_value == "OpenAI":
|
127
|
+
build_config["model_name"]["options"] = OPENAI_CHAT_MODEL_NAMES + OPENAI_REASONING_MODEL_NAMES
|
128
|
+
build_config["model_name"]["value"] = OPENAI_CHAT_MODEL_NAMES[0]
|
129
|
+
build_config["api_key"]["display_name"] = "OpenAI API Key"
|
130
|
+
elif field_value == "Anthropic":
|
131
|
+
build_config["model_name"]["options"] = ANTHROPIC_MODELS
|
132
|
+
build_config["model_name"]["value"] = ANTHROPIC_MODELS[0]
|
133
|
+
build_config["api_key"]["display_name"] = "Anthropic API Key"
|
134
|
+
elif field_value == "Google":
|
135
|
+
build_config["model_name"]["options"] = GOOGLE_GENERATIVE_AI_MODELS
|
136
|
+
build_config["model_name"]["value"] = GOOGLE_GENERATIVE_AI_MODELS[0]
|
137
|
+
build_config["api_key"]["display_name"] = "Google API Key"
|
138
|
+
elif field_name == "model_name" and field_value.startswith("o1") and self.provider == "OpenAI":
|
139
|
+
# Hide system_message for o1 models - currently unsupported
|
140
|
+
if "system_message" in build_config:
|
141
|
+
build_config["system_message"]["show"] = False
|
142
|
+
elif field_name == "model_name" and not field_value.startswith("o1") and "system_message" in build_config:
|
143
|
+
build_config["system_message"]["show"] = True
|
144
|
+
return build_config
|
@@ -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 .mongodb_atlas import MongoVectorStoreComponent
|
9
|
+
|
10
|
+
_dynamic_imports = {
|
11
|
+
"MongoVectorStoreComponent": "mongodb_atlas",
|
12
|
+
}
|
13
|
+
|
14
|
+
__all__ = [
|
15
|
+
"MongoVectorStoreComponent",
|
16
|
+
]
|
17
|
+
|
18
|
+
|
19
|
+
def __getattr__(attr_name: str) -> Any:
|
20
|
+
"""Lazily import MongoDB 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__)
|