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,41 @@
|
|
1
|
+
from typing import TypedDict
|
2
|
+
|
3
|
+
|
4
|
+
class ModelMetadata(TypedDict, total=False):
|
5
|
+
"""Simple model metadata structure."""
|
6
|
+
|
7
|
+
provider: str # Provider name (e.g., "anthropic", "groq", "openai")
|
8
|
+
name: str # Model name/ID
|
9
|
+
icon: str # Icon name for UI
|
10
|
+
tool_calling: bool # Whether model supports tool calling (defaults to False)
|
11
|
+
reasoning: bool # Reasoning models (defaults to False)
|
12
|
+
search: bool # Search models (defaults to False)
|
13
|
+
preview: bool # Whether model is in preview/beta (defaults to False)
|
14
|
+
not_supported: bool # Whether model is not supported or deprecated (defaults to False)
|
15
|
+
deprecated: bool # Whether model is deprecated (defaults to False)
|
16
|
+
|
17
|
+
|
18
|
+
def create_model_metadata(
|
19
|
+
provider: str,
|
20
|
+
name: str,
|
21
|
+
icon: str,
|
22
|
+
*,
|
23
|
+
tool_calling: bool = False,
|
24
|
+
reasoning: bool = False,
|
25
|
+
search: bool = False,
|
26
|
+
preview: bool = False,
|
27
|
+
not_supported: bool = False,
|
28
|
+
deprecated: bool = False,
|
29
|
+
) -> ModelMetadata:
|
30
|
+
"""Helper function to create ModelMetadata with explicit defaults."""
|
31
|
+
return ModelMetadata(
|
32
|
+
provider=provider,
|
33
|
+
name=name,
|
34
|
+
icon=icon,
|
35
|
+
tool_calling=tool_calling,
|
36
|
+
reasoning=reasoning,
|
37
|
+
search=search,
|
38
|
+
preview=preview,
|
39
|
+
not_supported=not_supported,
|
40
|
+
deprecated=deprecated,
|
41
|
+
)
|
@@ -0,0 +1,8 @@
|
|
1
|
+
def get_model_name(llm, display_name: str | None = "Custom"):
|
2
|
+
attributes_to_check = ["model_name", "model", "model_id", "deployment_name"]
|
3
|
+
|
4
|
+
# Use a generator expression with next() to find the first matching attribute
|
5
|
+
model_name = next((getattr(llm, attr) for attr in attributes_to_check if hasattr(llm, attr)), None)
|
6
|
+
|
7
|
+
# If no matching attribute is found, return the class name as a fallback
|
8
|
+
return model_name if model_name is not None else display_name
|
@@ -0,0 +1,35 @@
|
|
1
|
+
NOVITA_MODELS = [
|
2
|
+
"deepseek/deepseek-r1",
|
3
|
+
"deepseek/deepseek_v3",
|
4
|
+
"meta-llama/llama-3.3-70b-instruct",
|
5
|
+
"meta-llama/llama-3.1-8b-instruct",
|
6
|
+
"meta-llama/llama-3.1-70b-instruct",
|
7
|
+
"mistralai/mistral-nemo",
|
8
|
+
"Sao10K/L3-8B-Stheno-v3.2",
|
9
|
+
"gryphe/mythomax-l2-13b",
|
10
|
+
"qwen/qwen-2.5-72b-instruct",
|
11
|
+
"meta-llama/llama-3-8b-instruct",
|
12
|
+
"microsoft/wizardlm-2-8x22b",
|
13
|
+
"google/gemma-2-9b-it",
|
14
|
+
"mistralai/mistral-7b-instruct",
|
15
|
+
"meta-llama/llama-3-70b-instruct",
|
16
|
+
"openchat/openchat-7b",
|
17
|
+
"nousresearch/hermes-2-pro-llama-3-8b",
|
18
|
+
"sao10k/l3-70b-euryale-v2.1",
|
19
|
+
"cognitivecomputations/dolphin-mixtral-8x22b",
|
20
|
+
"jondurbin/airoboros-l2-70b",
|
21
|
+
"nousresearch/nous-hermes-llama2-13b",
|
22
|
+
"teknium/openhermes-2.5-mistral-7b",
|
23
|
+
"sophosympatheia/midnight-rose-70b",
|
24
|
+
"meta-llama/llama-3.1-8b-instruct-max",
|
25
|
+
"sao10k/l3-8b-lunaris",
|
26
|
+
"qwen/qwen-2-vl-72b-instruct",
|
27
|
+
"meta-llama/llama-3.2-1b-instruct",
|
28
|
+
"meta-llama/llama-3.2-11b-vision-instruct",
|
29
|
+
"meta-llama/llama-3.2-3b-instruct",
|
30
|
+
"meta-llama/llama-3.1-8b-instruct-bf16",
|
31
|
+
"sao10k/l31-70b-euryale-v2.2",
|
32
|
+
"qwen/qwen-2-7b-instruct",
|
33
|
+
"qwen/qwen-2-72b-instruct",
|
34
|
+
]
|
35
|
+
MODEL_NAMES = NOVITA_MODELS # reverse compatibility
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# https://ollama.com/search?c=embedding
|
2
|
+
OLLAMA_EMBEDDING_MODELS = [
|
3
|
+
"nomic-embed-text",
|
4
|
+
"mxbai-embed-large",
|
5
|
+
"snowflake-arctic-embed",
|
6
|
+
"all-minilm",
|
7
|
+
"bge-m3",
|
8
|
+
"bge-large",
|
9
|
+
"paraphrase-multilingual",
|
10
|
+
"granite-embedding",
|
11
|
+
"jina-embeddings-v2-base-en",
|
12
|
+
]
|
13
|
+
# https://ollama.com/search?c=tools
|
14
|
+
OLLAMA_TOOL_MODELS_BASE = [
|
15
|
+
"llama3.3",
|
16
|
+
"qwq",
|
17
|
+
"llama3.2",
|
18
|
+
"llama3.1",
|
19
|
+
"mistral",
|
20
|
+
"qwen2",
|
21
|
+
"qwen2.5",
|
22
|
+
"qwen2.5-coder",
|
23
|
+
"mistral-nemo",
|
24
|
+
"mixtral",
|
25
|
+
"command-r",
|
26
|
+
"command-r-plus",
|
27
|
+
"mistral-large",
|
28
|
+
"smollm2",
|
29
|
+
"hermes3",
|
30
|
+
"athene-v2",
|
31
|
+
"mistral-small",
|
32
|
+
"nemotron-mini",
|
33
|
+
"nemotron",
|
34
|
+
"llama3-groq-tool-use",
|
35
|
+
"granite3-dense",
|
36
|
+
"granite3.1-dense",
|
37
|
+
"aya-expanse",
|
38
|
+
"granite3-moe",
|
39
|
+
"firefunction-v2",
|
40
|
+
"cogito",
|
41
|
+
]
|
42
|
+
|
43
|
+
|
44
|
+
URL_LIST = [
|
45
|
+
"http://localhost:11434",
|
46
|
+
"http://host.docker.internal:11434",
|
47
|
+
"http://127.0.0.1:11434",
|
48
|
+
"http://0.0.0.0:11434",
|
49
|
+
]
|
@@ -0,0 +1,122 @@
|
|
1
|
+
from .model_metadata import create_model_metadata
|
2
|
+
|
3
|
+
# Unified model metadata - single source of truth
|
4
|
+
OPENAI_MODELS_DETAILED = [
|
5
|
+
# GPT-5 Series
|
6
|
+
create_model_metadata(
|
7
|
+
provider="OpenAI",
|
8
|
+
name="gpt-5",
|
9
|
+
icon="OpenAI",
|
10
|
+
tool_calling=True,
|
11
|
+
reasoning=True,
|
12
|
+
),
|
13
|
+
create_model_metadata(
|
14
|
+
provider="OpenAI",
|
15
|
+
name="gpt-5-mini",
|
16
|
+
icon="OpenAI",
|
17
|
+
tool_calling=True,
|
18
|
+
reasoning=True,
|
19
|
+
),
|
20
|
+
create_model_metadata(
|
21
|
+
provider="OpenAI",
|
22
|
+
name="gpt-5-nano",
|
23
|
+
icon="OpenAI",
|
24
|
+
tool_calling=True,
|
25
|
+
reasoning=True,
|
26
|
+
),
|
27
|
+
create_model_metadata(
|
28
|
+
provider="OpenAI",
|
29
|
+
name="gpt-5-chat-latest",
|
30
|
+
icon="OpenAI",
|
31
|
+
tool_calling=False,
|
32
|
+
reasoning=True,
|
33
|
+
),
|
34
|
+
# Regular OpenAI Models
|
35
|
+
create_model_metadata(provider="OpenAI", name="gpt-4o-mini", icon="OpenAI", tool_calling=True),
|
36
|
+
create_model_metadata(provider="OpenAI", name="gpt-4o", icon="OpenAI", tool_calling=True),
|
37
|
+
create_model_metadata(provider="OpenAI", name="gpt-4.1", icon="OpenAI", tool_calling=True),
|
38
|
+
create_model_metadata(provider="OpenAI", name="gpt-4.1-mini", icon="OpenAI", tool_calling=True),
|
39
|
+
create_model_metadata(provider="OpenAI", name="gpt-4.1-nano", icon="OpenAI", tool_calling=True),
|
40
|
+
create_model_metadata(
|
41
|
+
provider="OpenAI", name="gpt-4.5-preview", icon="OpenAI", tool_calling=True, preview=True, not_supported=True
|
42
|
+
),
|
43
|
+
create_model_metadata(provider="OpenAI", name="gpt-4-turbo", icon="OpenAI", tool_calling=True),
|
44
|
+
create_model_metadata(
|
45
|
+
provider="OpenAI", name="gpt-4-turbo-preview", icon="OpenAI", tool_calling=True, preview=True
|
46
|
+
),
|
47
|
+
create_model_metadata(provider="OpenAI", name="gpt-4", icon="OpenAI", tool_calling=True),
|
48
|
+
create_model_metadata(provider="OpenAI", name="gpt-3.5-turbo", icon="OpenAI", tool_calling=True),
|
49
|
+
# Reasoning Models
|
50
|
+
create_model_metadata(provider="OpenAI", name="o1", icon="OpenAI", reasoning=True),
|
51
|
+
create_model_metadata(provider="OpenAI", name="o1-mini", icon="OpenAI", reasoning=True, not_supported=True),
|
52
|
+
create_model_metadata(provider="OpenAI", name="o1-pro", icon="OpenAI", reasoning=True, not_supported=True),
|
53
|
+
create_model_metadata(provider="OpenAI", name="o3-mini", icon="OpenAI", reasoning=True),
|
54
|
+
create_model_metadata(provider="OpenAI", name="o3", icon="OpenAI", reasoning=True),
|
55
|
+
create_model_metadata(provider="OpenAI", name="o3-pro", icon="OpenAI", reasoning=True),
|
56
|
+
create_model_metadata(provider="OpenAI", name="o4-mini", icon="OpenAI", reasoning=True),
|
57
|
+
create_model_metadata(provider="OpenAI", name="o4-mini-high", icon="OpenAI", reasoning=True),
|
58
|
+
# Search Models
|
59
|
+
create_model_metadata(
|
60
|
+
provider="OpenAI",
|
61
|
+
name="gpt-4o-mini-search-preview",
|
62
|
+
icon="OpenAI",
|
63
|
+
tool_calling=True,
|
64
|
+
search=True,
|
65
|
+
preview=True,
|
66
|
+
),
|
67
|
+
create_model_metadata(
|
68
|
+
provider="OpenAI",
|
69
|
+
name="gpt-4o-search-preview",
|
70
|
+
icon="OpenAI",
|
71
|
+
tool_calling=True,
|
72
|
+
search=True,
|
73
|
+
preview=True,
|
74
|
+
),
|
75
|
+
# Not Supported Models
|
76
|
+
create_model_metadata(
|
77
|
+
provider="OpenAI", name="computer-use-preview", icon="OpenAI", not_supported=True, preview=True
|
78
|
+
),
|
79
|
+
create_model_metadata(
|
80
|
+
provider="OpenAI", name="gpt-4o-audio-preview", icon="OpenAI", not_supported=True, preview=True
|
81
|
+
),
|
82
|
+
create_model_metadata(
|
83
|
+
provider="OpenAI", name="gpt-4o-realtime-preview", icon="OpenAI", not_supported=True, preview=True
|
84
|
+
),
|
85
|
+
create_model_metadata(
|
86
|
+
provider="OpenAI", name="gpt-4o-mini-audio-preview", icon="OpenAI", not_supported=True, preview=True
|
87
|
+
),
|
88
|
+
create_model_metadata(
|
89
|
+
provider="OpenAI", name="gpt-4o-mini-realtime-preview", icon="OpenAI", not_supported=True, preview=True
|
90
|
+
),
|
91
|
+
]
|
92
|
+
OPENAI_CHAT_MODEL_NAMES = [
|
93
|
+
metadata["name"]
|
94
|
+
for metadata in OPENAI_MODELS_DETAILED
|
95
|
+
if not metadata.get("not_supported", False)
|
96
|
+
and not metadata.get("reasoning", False)
|
97
|
+
and not metadata.get("search", False)
|
98
|
+
]
|
99
|
+
|
100
|
+
OPENAI_REASONING_MODEL_NAMES = [
|
101
|
+
metadata["name"]
|
102
|
+
for metadata in OPENAI_MODELS_DETAILED
|
103
|
+
if metadata.get("reasoning", False) and not metadata.get("not_supported", False)
|
104
|
+
]
|
105
|
+
|
106
|
+
OPENAI_SEARCH_MODEL_NAMES = [
|
107
|
+
metadata["name"]
|
108
|
+
for metadata in OPENAI_MODELS_DETAILED
|
109
|
+
if metadata.get("search", False) and not metadata.get("not_supported", False)
|
110
|
+
]
|
111
|
+
|
112
|
+
NOT_SUPPORTED_MODELS = [metadata["name"] for metadata in OPENAI_MODELS_DETAILED if metadata.get("not_supported", False)]
|
113
|
+
|
114
|
+
OPENAI_EMBEDDING_MODEL_NAMES = [
|
115
|
+
"text-embedding-3-small",
|
116
|
+
"text-embedding-3-large",
|
117
|
+
"text-embedding-ada-002",
|
118
|
+
]
|
119
|
+
|
120
|
+
# Backwards compatibility
|
121
|
+
MODEL_NAMES = OPENAI_CHAT_MODEL_NAMES
|
122
|
+
OPENAI_MODEL_NAMES = OPENAI_CHAT_MODEL_NAMES
|
@@ -0,0 +1,18 @@
|
|
1
|
+
SAMBANOVA_MODEL_NAMES = [
|
2
|
+
"Meta-Llama-3.3-70B-Instruct",
|
3
|
+
"Meta-Llama-3.1-8B-Instruct",
|
4
|
+
"Meta-Llama-3.1-70B-Instruct",
|
5
|
+
"Meta-Llama-3.1-405B-Instruct",
|
6
|
+
"DeepSeek-R1-Distill-Llama-70B",
|
7
|
+
"DeepSeek-R1",
|
8
|
+
"Meta-Llama-3.2-1B-Instruct",
|
9
|
+
"Meta-Llama-3.2-3B-Instruct",
|
10
|
+
"Llama-3.2-11B-Vision-Instruct",
|
11
|
+
"Llama-3.2-90B-Vision-Instruct",
|
12
|
+
"Qwen2.5-Coder-32B-Instruct",
|
13
|
+
"Qwen2.5-72B-Instruct",
|
14
|
+
"QwQ-32B-Preview",
|
15
|
+
"Qwen2-Audio-7B-Instruct",
|
16
|
+
]
|
17
|
+
|
18
|
+
MODEL_NAMES = SAMBANOVA_MODEL_NAMES
|
File without changes
|
File without changes
|
@@ -0,0 +1,224 @@
|
|
1
|
+
from collections import defaultdict
|
2
|
+
from typing import Any
|
3
|
+
|
4
|
+
from fastapi import HTTPException
|
5
|
+
from langchain_core.prompts import PromptTemplate
|
6
|
+
|
7
|
+
from lfx.inputs.inputs import DefaultPromptField
|
8
|
+
from lfx.interface.utils import extract_input_variables_from_prompt
|
9
|
+
from lfx.log.logger import logger
|
10
|
+
|
11
|
+
_INVALID_CHARACTERS = {
|
12
|
+
" ",
|
13
|
+
",",
|
14
|
+
".",
|
15
|
+
":",
|
16
|
+
";",
|
17
|
+
"!",
|
18
|
+
"?",
|
19
|
+
"/",
|
20
|
+
"\\",
|
21
|
+
"(",
|
22
|
+
")",
|
23
|
+
"[",
|
24
|
+
"]",
|
25
|
+
}
|
26
|
+
|
27
|
+
_INVALID_NAMES = {
|
28
|
+
"code",
|
29
|
+
"input_variables",
|
30
|
+
"output_parser",
|
31
|
+
"partial_variables",
|
32
|
+
"template",
|
33
|
+
"template_format",
|
34
|
+
"validate_template",
|
35
|
+
}
|
36
|
+
|
37
|
+
|
38
|
+
def _is_json_like(var):
|
39
|
+
if var.startswith("{{") and var.endswith("}}"):
|
40
|
+
# If it is a double brance variable
|
41
|
+
# we don't want to validate any of its content
|
42
|
+
return True
|
43
|
+
# the above doesn't work on all cases because the json string can be multiline
|
44
|
+
# or indented which can add \n or spaces at the start or end of the string
|
45
|
+
# test_case_3 new_var == '\n{{\n "test": "hello",\n "text": "world"\n}}\n'
|
46
|
+
# what we can do is to remove the \n and spaces from the start and end of the string
|
47
|
+
# and then check if the string starts with {{ and ends with }}
|
48
|
+
var = var.strip()
|
49
|
+
var = var.replace("\n", "")
|
50
|
+
var = var.replace(" ", "")
|
51
|
+
# Now it should be a valid json string
|
52
|
+
return var.startswith("{{") and var.endswith("}}")
|
53
|
+
|
54
|
+
|
55
|
+
def _fix_variable(var, invalid_chars, wrong_variables):
|
56
|
+
if not var:
|
57
|
+
return var, invalid_chars, wrong_variables
|
58
|
+
new_var = var
|
59
|
+
|
60
|
+
# Handle variables starting with a number
|
61
|
+
if var[0].isdigit():
|
62
|
+
invalid_chars.append(var[0])
|
63
|
+
new_var, invalid_chars, wrong_variables = _fix_variable(var[1:], invalid_chars, wrong_variables)
|
64
|
+
|
65
|
+
# Temporarily replace {{ and }} to avoid treating them as invalid
|
66
|
+
new_var = new_var.replace("{{", "ᴛᴇᴍᴘᴏᴘᴇɴ").replace("}}", "ᴛᴇᴍᴘᴄʟᴏsᴇ") # noqa: RUF001
|
67
|
+
|
68
|
+
# Remove invalid characters
|
69
|
+
for char in new_var:
|
70
|
+
if char in _INVALID_CHARACTERS:
|
71
|
+
invalid_chars.append(char)
|
72
|
+
new_var = new_var.replace(char, "")
|
73
|
+
if var not in wrong_variables: # Avoid duplicating entries
|
74
|
+
wrong_variables.append(var)
|
75
|
+
|
76
|
+
# Restore {{ and }}
|
77
|
+
new_var = new_var.replace("ᴛᴇᴍᴘᴏᴘᴇɴ", "{{").replace("ᴛᴇᴍᴘᴄʟᴏsᴇ", "}}") # noqa: RUF001
|
78
|
+
|
79
|
+
return new_var, invalid_chars, wrong_variables
|
80
|
+
|
81
|
+
|
82
|
+
def _check_variable(var, invalid_chars, wrong_variables, empty_variables):
|
83
|
+
if any(char in invalid_chars for char in var):
|
84
|
+
wrong_variables.append(var)
|
85
|
+
elif var == "":
|
86
|
+
empty_variables.append(var)
|
87
|
+
return wrong_variables, empty_variables
|
88
|
+
|
89
|
+
|
90
|
+
def _check_for_errors(input_variables, fixed_variables, wrong_variables, empty_variables) -> None:
|
91
|
+
if any(var for var in input_variables if var not in fixed_variables):
|
92
|
+
error_message = (
|
93
|
+
f"Error: Input variables contain invalid characters or formats. \n"
|
94
|
+
f"Invalid variables: {', '.join(wrong_variables)}.\n"
|
95
|
+
f"Empty variables: {', '.join(empty_variables)}. \n"
|
96
|
+
f"Fixed variables: {', '.join(fixed_variables)}."
|
97
|
+
)
|
98
|
+
raise ValueError(error_message)
|
99
|
+
|
100
|
+
|
101
|
+
def _check_input_variables(input_variables):
|
102
|
+
invalid_chars = []
|
103
|
+
fixed_variables = []
|
104
|
+
wrong_variables = []
|
105
|
+
empty_variables = []
|
106
|
+
variables_to_check = []
|
107
|
+
|
108
|
+
for var in input_variables:
|
109
|
+
# First, let's check if the variable is a JSON string
|
110
|
+
# because if it is, it won't be considered a variable
|
111
|
+
# and we don't need to validate it
|
112
|
+
if _is_json_like(var):
|
113
|
+
continue
|
114
|
+
|
115
|
+
new_var, wrong_variables, empty_variables = _fix_variable(var, invalid_chars, wrong_variables)
|
116
|
+
wrong_variables, empty_variables = _check_variable(var, _INVALID_CHARACTERS, wrong_variables, empty_variables)
|
117
|
+
fixed_variables.append(new_var)
|
118
|
+
variables_to_check.append(var)
|
119
|
+
|
120
|
+
_check_for_errors(variables_to_check, fixed_variables, wrong_variables, empty_variables)
|
121
|
+
|
122
|
+
return fixed_variables
|
123
|
+
|
124
|
+
|
125
|
+
def validate_prompt(prompt_template: str, *, silent_errors: bool = False) -> list[str]:
|
126
|
+
input_variables = extract_input_variables_from_prompt(prompt_template)
|
127
|
+
|
128
|
+
# Check if there are invalid characters in the input_variables
|
129
|
+
input_variables = _check_input_variables(input_variables)
|
130
|
+
if any(var in _INVALID_NAMES for var in input_variables):
|
131
|
+
msg = f"Invalid input variables. None of the variables can be named {', '.join(input_variables)}. "
|
132
|
+
raise ValueError(msg)
|
133
|
+
|
134
|
+
try:
|
135
|
+
PromptTemplate(template=prompt_template, input_variables=input_variables)
|
136
|
+
except Exception as exc:
|
137
|
+
msg = f"Invalid prompt: {exc}"
|
138
|
+
logger.exception(msg)
|
139
|
+
if not silent_errors:
|
140
|
+
raise ValueError(msg) from exc
|
141
|
+
|
142
|
+
return input_variables
|
143
|
+
|
144
|
+
|
145
|
+
def get_old_custom_fields(custom_fields, name):
|
146
|
+
try:
|
147
|
+
if len(custom_fields) == 1 and name == "":
|
148
|
+
# If there is only one custom field and the name is empty string
|
149
|
+
# then we are dealing with the first prompt request after the node was created
|
150
|
+
name = next(iter(custom_fields.keys()))
|
151
|
+
|
152
|
+
old_custom_fields = custom_fields[name]
|
153
|
+
if not old_custom_fields:
|
154
|
+
old_custom_fields = []
|
155
|
+
|
156
|
+
old_custom_fields = old_custom_fields.copy()
|
157
|
+
except KeyError:
|
158
|
+
old_custom_fields = []
|
159
|
+
custom_fields[name] = []
|
160
|
+
return old_custom_fields
|
161
|
+
|
162
|
+
|
163
|
+
def add_new_variables_to_template(input_variables, custom_fields, template, name) -> None:
|
164
|
+
for variable in input_variables:
|
165
|
+
try:
|
166
|
+
template_field = DefaultPromptField(name=variable, display_name=variable)
|
167
|
+
if variable in template:
|
168
|
+
# Set the new field with the old value
|
169
|
+
template_field.value = template[variable]["value"]
|
170
|
+
|
171
|
+
template[variable] = template_field.to_dict()
|
172
|
+
|
173
|
+
# Check if variable is not already in the list before appending
|
174
|
+
if variable not in custom_fields[name]:
|
175
|
+
custom_fields[name].append(variable)
|
176
|
+
|
177
|
+
except Exception as exc:
|
178
|
+
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
179
|
+
|
180
|
+
|
181
|
+
def remove_old_variables_from_template(old_custom_fields, input_variables, custom_fields, template, name) -> None:
|
182
|
+
for variable in old_custom_fields:
|
183
|
+
if variable not in input_variables:
|
184
|
+
try:
|
185
|
+
# Remove the variable from custom_fields associated with the given name
|
186
|
+
if variable in custom_fields[name]:
|
187
|
+
custom_fields[name].remove(variable)
|
188
|
+
|
189
|
+
# Remove the variable from the template
|
190
|
+
template.pop(variable, None)
|
191
|
+
|
192
|
+
except Exception as exc:
|
193
|
+
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
194
|
+
|
195
|
+
|
196
|
+
def update_input_variables_field(input_variables, template) -> None:
|
197
|
+
if "input_variables" in template:
|
198
|
+
template["input_variables"]["value"] = input_variables
|
199
|
+
|
200
|
+
|
201
|
+
def process_prompt_template(
|
202
|
+
template: str, name: str, custom_fields: dict[str, list[str]] | None, frontend_node_template: dict[str, Any]
|
203
|
+
):
|
204
|
+
"""Process and validate prompt template, update template and custom fields."""
|
205
|
+
# Validate the prompt template and extract input variables
|
206
|
+
input_variables = validate_prompt(template)
|
207
|
+
|
208
|
+
# Initialize custom_fields if None
|
209
|
+
if custom_fields is None:
|
210
|
+
custom_fields = defaultdict(list)
|
211
|
+
|
212
|
+
# Retrieve old custom fields
|
213
|
+
old_custom_fields = get_old_custom_fields(custom_fields, name)
|
214
|
+
|
215
|
+
# Add new variables to the template
|
216
|
+
add_new_variables_to_template(input_variables, custom_fields, frontend_node_template, name)
|
217
|
+
|
218
|
+
# Remove old variables from the template
|
219
|
+
remove_old_variables_from_template(old_custom_fields, input_variables, custom_fields, frontend_node_template, name)
|
220
|
+
|
221
|
+
# Update the input variables field in the template
|
222
|
+
update_input_variables_field(input_variables, frontend_node_template)
|
223
|
+
|
224
|
+
return input_variables
|
@@ -0,0 +1,61 @@
|
|
1
|
+
from copy import deepcopy
|
2
|
+
|
3
|
+
from langchain_core.documents import Document
|
4
|
+
|
5
|
+
from lfx.schema.data import Data
|
6
|
+
|
7
|
+
|
8
|
+
def data_to_string(record: Data) -> str:
|
9
|
+
"""Convert a record to a string.
|
10
|
+
|
11
|
+
Args:
|
12
|
+
record (Data): The record to convert.
|
13
|
+
|
14
|
+
Returns:
|
15
|
+
str: The record as a string.
|
16
|
+
"""
|
17
|
+
return record.get_text()
|
18
|
+
|
19
|
+
|
20
|
+
def dict_values_to_string(d: dict) -> dict:
|
21
|
+
"""Converts the values of a dictionary to strings.
|
22
|
+
|
23
|
+
Args:
|
24
|
+
d (dict): The dictionary whose values need to be converted.
|
25
|
+
|
26
|
+
Returns:
|
27
|
+
dict: The dictionary with values converted to strings.
|
28
|
+
"""
|
29
|
+
from lfx.schema.message import Message
|
30
|
+
|
31
|
+
# Do something similar to the above
|
32
|
+
d_copy = deepcopy(d)
|
33
|
+
for key, value in d_copy.items():
|
34
|
+
# it could be a list of data or documents or strings
|
35
|
+
if isinstance(value, list):
|
36
|
+
for i, item in enumerate(value):
|
37
|
+
if isinstance(item, Message):
|
38
|
+
d_copy[key][i] = item.text
|
39
|
+
elif isinstance(item, Data):
|
40
|
+
d_copy[key][i] = data_to_string(item)
|
41
|
+
elif isinstance(item, Document):
|
42
|
+
d_copy[key][i] = document_to_string(item)
|
43
|
+
elif isinstance(value, Message):
|
44
|
+
d_copy[key] = value.text
|
45
|
+
elif isinstance(value, Data):
|
46
|
+
d_copy[key] = data_to_string(value)
|
47
|
+
elif isinstance(value, Document):
|
48
|
+
d_copy[key] = document_to_string(value)
|
49
|
+
return d_copy
|
50
|
+
|
51
|
+
|
52
|
+
def document_to_string(document: Document) -> str:
|
53
|
+
"""Convert a document to a string.
|
54
|
+
|
55
|
+
Args:
|
56
|
+
document (Document): The document to convert.
|
57
|
+
|
58
|
+
Returns:
|
59
|
+
str: The document as a string.
|
60
|
+
"""
|
61
|
+
return document.page_content
|
File without changes
|
@@ -0,0 +1,28 @@
|
|
1
|
+
from abc import abstractmethod
|
2
|
+
|
3
|
+
from langchain_core.documents import BaseDocumentTransformer
|
4
|
+
from langchain_text_splitters import TextSplitter
|
5
|
+
|
6
|
+
from lfx.base.document_transformers.model import LCDocumentTransformerComponent
|
7
|
+
|
8
|
+
|
9
|
+
class LCTextSplitterComponent(LCDocumentTransformerComponent):
|
10
|
+
trace_type = "text_splitter"
|
11
|
+
|
12
|
+
def _validate_outputs(self) -> None:
|
13
|
+
required_output_methods = ["text_splitter"]
|
14
|
+
output_names = [output.name for output in self.outputs]
|
15
|
+
for method_name in required_output_methods:
|
16
|
+
if method_name not in output_names:
|
17
|
+
msg = f"Output with name '{method_name}' must be defined."
|
18
|
+
raise ValueError(msg)
|
19
|
+
if not hasattr(self, method_name):
|
20
|
+
msg = f"Method '{method_name}' must be defined."
|
21
|
+
raise ValueError(msg)
|
22
|
+
|
23
|
+
def build_document_transformer(self) -> BaseDocumentTransformer:
|
24
|
+
return self.build_text_splitter()
|
25
|
+
|
26
|
+
@abstractmethod
|
27
|
+
def build_text_splitter(self) -> TextSplitter:
|
28
|
+
"""Build the text splitter."""
|
File without changes
|
lfx/base/tools/base.py
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
from lfx.field_typing import Tool
|
2
|
+
|
3
|
+
|
4
|
+
def build_status_from_tool(tool: Tool):
|
5
|
+
"""Builds a status string representation of a tool.
|
6
|
+
|
7
|
+
Args:
|
8
|
+
tool (Tool): The tool object to build the status for.
|
9
|
+
|
10
|
+
Returns:
|
11
|
+
str: The status string representation of the tool, including its name, description, arguments (if any),
|
12
|
+
and args_schema (if any).
|
13
|
+
"""
|
14
|
+
description_repr = repr(tool.description).strip("'")
|
15
|
+
args_str = "\n".join(
|
16
|
+
[
|
17
|
+
f"- {arg_name}: {arg_data['description']}"
|
18
|
+
for arg_name, arg_data in tool.args.items()
|
19
|
+
if "description" in arg_data
|
20
|
+
]
|
21
|
+
)
|
22
|
+
# Include args_schema information
|
23
|
+
args_schema_str = repr(tool.args_schema) if tool.args_schema else "None"
|
24
|
+
status = f"Name: {tool.name}\nDescription: {description_repr}"
|
25
|
+
status += f"\nArgs Schema: {args_schema_str}"
|
26
|
+
return status + (f"\nArguments:\n{args_str}" if args_str else "")
|