lfx-nightly 0.2.0.dev25__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.
Potentially problematic release.
This version of lfx-nightly might be problematic. Click here for more details.
- lfx/__init__.py +0 -0
- lfx/__main__.py +25 -0
- lfx/_assets/component_index.json +1 -0
- lfx/base/__init__.py +0 -0
- lfx/base/agents/__init__.py +0 -0
- lfx/base/agents/agent.py +375 -0
- lfx/base/agents/altk_base_agent.py +380 -0
- lfx/base/agents/altk_tool_wrappers.py +565 -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 +430 -0
- lfx/base/agents/utils.py +237 -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 +2584 -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 +810 -0
- lfx/base/data/docling_utils.py +338 -0
- lfx/base/data/storage_utils.py +192 -0
- lfx/base/data/utils.py +362 -0
- lfx/base/datastax/__init__.py +5 -0
- lfx/base/datastax/astradb_base.py +896 -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/embeddings_class.py +113 -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 +21 -0
- lfx/base/io/text.py +22 -0
- lfx/base/knowledge_bases/__init__.py +3 -0
- lfx/base/knowledge_bases/knowledge_base_utils.py +137 -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 +1659 -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 +51 -0
- lfx/base/models/aws_constants.py +151 -0
- lfx/base/models/chat_result.py +76 -0
- lfx/base/models/cometapi_constants.py +54 -0
- lfx/base/models/google_generative_ai_constants.py +70 -0
- lfx/base/models/google_generative_ai_model.py +38 -0
- lfx/base/models/groq_constants.py +150 -0
- lfx/base/models/groq_model_discovery.py +265 -0
- lfx/base/models/model.py +375 -0
- lfx/base/models/model_input_constants.py +378 -0
- lfx/base/models/model_metadata.py +41 -0
- lfx/base/models/model_utils.py +108 -0
- lfx/base/models/novita_constants.py +35 -0
- lfx/base/models/ollama_constants.py +52 -0
- lfx/base/models/openai_constants.py +129 -0
- lfx/base/models/sambanova_constants.py +18 -0
- lfx/base/models/watsonx_constants.py +36 -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 +698 -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 +327 -0
- lfx/cli/common.py +650 -0
- lfx/cli/run.py +506 -0
- lfx/cli/script_loader.py +289 -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 +428 -0
- lfx/components/_importing.py +42 -0
- lfx/components/agentql/__init__.py +3 -0
- lfx/components/agentql/agentql_api.py +151 -0
- lfx/components/aiml/__init__.py +37 -0
- lfx/components/aiml/aiml.py +115 -0
- lfx/components/aiml/aiml_embeddings.py +37 -0
- lfx/components/altk/__init__.py +34 -0
- lfx/components/altk/altk_agent.py +193 -0
- lfx/components/amazon/__init__.py +36 -0
- lfx/components/amazon/amazon_bedrock_converse.py +195 -0
- lfx/components/amazon/amazon_bedrock_embedding.py +109 -0
- lfx/components/amazon/amazon_bedrock_model.py +130 -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 +169 -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 +169 -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/cometapi/__init__.py +32 -0
- lfx/components/cometapi/cometapi.py +166 -0
- lfx/components/composio/__init__.py +222 -0
- lfx/components/composio/agentql_composio.py +11 -0
- lfx/components/composio/agiled_composio.py +11 -0
- lfx/components/composio/airtable_composio.py +11 -0
- lfx/components/composio/apollo_composio.py +11 -0
- lfx/components/composio/asana_composio.py +11 -0
- lfx/components/composio/attio_composio.py +11 -0
- lfx/components/composio/bitbucket_composio.py +11 -0
- lfx/components/composio/bolna_composio.py +11 -0
- lfx/components/composio/brightdata_composio.py +11 -0
- lfx/components/composio/calendly_composio.py +11 -0
- lfx/components/composio/canva_composio.py +11 -0
- lfx/components/composio/canvas_composio.py +11 -0
- lfx/components/composio/coda_composio.py +11 -0
- lfx/components/composio/composio_api.py +278 -0
- lfx/components/composio/contentful_composio.py +11 -0
- lfx/components/composio/digicert_composio.py +11 -0
- lfx/components/composio/discord_composio.py +11 -0
- lfx/components/composio/dropbox_compnent.py +11 -0
- lfx/components/composio/elevenlabs_composio.py +11 -0
- lfx/components/composio/exa_composio.py +11 -0
- lfx/components/composio/figma_composio.py +11 -0
- lfx/components/composio/finage_composio.py +11 -0
- lfx/components/composio/firecrawl_composio.py +11 -0
- lfx/components/composio/fireflies_composio.py +11 -0
- lfx/components/composio/fixer_composio.py +11 -0
- lfx/components/composio/flexisign_composio.py +11 -0
- lfx/components/composio/freshdesk_composio.py +11 -0
- lfx/components/composio/github_composio.py +11 -0
- lfx/components/composio/gmail_composio.py +38 -0
- lfx/components/composio/googlebigquery_composio.py +11 -0
- lfx/components/composio/googlecalendar_composio.py +11 -0
- lfx/components/composio/googleclassroom_composio.py +11 -0
- lfx/components/composio/googledocs_composio.py +11 -0
- lfx/components/composio/googlemeet_composio.py +11 -0
- lfx/components/composio/googlesheets_composio.py +11 -0
- lfx/components/composio/googletasks_composio.py +8 -0
- lfx/components/composio/heygen_composio.py +11 -0
- lfx/components/composio/instagram_composio.py +11 -0
- lfx/components/composio/jira_composio.py +11 -0
- lfx/components/composio/jotform_composio.py +11 -0
- lfx/components/composio/klaviyo_composio.py +11 -0
- lfx/components/composio/linear_composio.py +11 -0
- lfx/components/composio/listennotes_composio.py +11 -0
- lfx/components/composio/mem0_composio.py +11 -0
- lfx/components/composio/miro_composio.py +11 -0
- lfx/components/composio/missive_composio.py +11 -0
- lfx/components/composio/notion_composio.py +11 -0
- lfx/components/composio/onedrive_composio.py +11 -0
- lfx/components/composio/outlook_composio.py +11 -0
- lfx/components/composio/pandadoc_composio.py +11 -0
- lfx/components/composio/peopledatalabs_composio.py +11 -0
- lfx/components/composio/perplexityai_composio.py +11 -0
- lfx/components/composio/reddit_composio.py +11 -0
- lfx/components/composio/serpapi_composio.py +11 -0
- lfx/components/composio/slack_composio.py +11 -0
- lfx/components/composio/slackbot_composio.py +11 -0
- lfx/components/composio/snowflake_composio.py +11 -0
- lfx/components/composio/supabase_composio.py +11 -0
- lfx/components/composio/tavily_composio.py +11 -0
- lfx/components/composio/timelinesai_composio.py +11 -0
- lfx/components/composio/todoist_composio.py +11 -0
- lfx/components/composio/wrike_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 +108 -0
- lfx/components/crewai/hierarchical_crew.py +47 -0
- lfx/components/crewai/hierarchical_task.py +45 -0
- lfx/components/crewai/sequential_crew.py +53 -0
- lfx/components/crewai/sequential_task.py +74 -0
- lfx/components/crewai/sequential_task_agent.py +144 -0
- lfx/components/cuga/__init__.py +34 -0
- lfx/components/cuga/cuga_agent.py +730 -0
- lfx/components/custom_component/__init__.py +34 -0
- lfx/components/custom_component/custom_component.py +31 -0
- lfx/components/data/__init__.py +114 -0
- lfx/components/data_source/__init__.py +58 -0
- lfx/components/data_source/api_request.py +577 -0
- lfx/components/data_source/csv_to_data.py +101 -0
- lfx/components/data_source/json_to_data.py +106 -0
- lfx/components/data_source/mock_data.py +398 -0
- lfx/components/data_source/news_search.py +166 -0
- lfx/components/data_source/rss.py +71 -0
- lfx/components/data_source/sql_executor.py +101 -0
- lfx/components/data_source/url.py +311 -0
- lfx/components/data_source/web_search.py +326 -0
- lfx/components/datastax/__init__.py +76 -0
- lfx/components/datastax/astradb_assistant_manager.py +307 -0
- lfx/components/datastax/astradb_chatmemory.py +40 -0
- lfx/components/datastax/astradb_cql.py +288 -0
- lfx/components/datastax/astradb_graph.py +217 -0
- lfx/components/datastax/astradb_tool.py +378 -0
- lfx/components/datastax/astradb_vectorize.py +122 -0
- lfx/components/datastax/astradb_vectorstore.py +449 -0
- lfx/components/datastax/create_assistant.py +59 -0
- lfx/components/datastax/create_thread.py +33 -0
- lfx/components/datastax/dotenv.py +36 -0
- lfx/components/datastax/get_assistant.py +38 -0
- lfx/components/datastax/getenvvar.py +31 -0
- lfx/components/datastax/graph_rag.py +141 -0
- lfx/components/datastax/hcd.py +315 -0
- lfx/components/datastax/list_assistants.py +26 -0
- lfx/components/datastax/run.py +90 -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 +238 -0
- lfx/components/docling/docling_remote.py +195 -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 +789 -0
- lfx/components/elastic/opensearch_multimodal.py +1575 -0
- lfx/components/embeddings/__init__.py +37 -0
- lfx/components/embeddings/similarity.py +77 -0
- lfx/components/embeddings/text_embedder.py +65 -0
- lfx/components/exa/__init__.py +3 -0
- lfx/components/exa/exa_search.py +68 -0
- lfx/components/files_and_knowledge/__init__.py +47 -0
- lfx/components/files_and_knowledge/directory.py +113 -0
- lfx/components/files_and_knowledge/file.py +841 -0
- lfx/components/files_and_knowledge/ingestion.py +694 -0
- lfx/components/files_and_knowledge/retrieval.py +264 -0
- lfx/components/files_and_knowledge/save_file.py +746 -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/flow_controls/__init__.py +58 -0
- lfx/components/flow_controls/conditional_router.py +208 -0
- lfx/components/flow_controls/data_conditional_router.py +126 -0
- lfx/components/flow_controls/flow_tool.py +111 -0
- lfx/components/flow_controls/listen.py +29 -0
- lfx/components/flow_controls/loop.py +163 -0
- lfx/components/flow_controls/notify.py +88 -0
- lfx/components/flow_controls/pass_message.py +36 -0
- lfx/components/flow_controls/run_flow.py +108 -0
- lfx/components/flow_controls/sub_flow.py +115 -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 +193 -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 +144 -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 +143 -0
- lfx/components/helpers/__init__.py +154 -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 +199 -0
- lfx/components/huggingface/huggingface_inference_api.py +106 -0
- lfx/components/ibm/__init__.py +34 -0
- lfx/components/ibm/watsonx.py +207 -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 +40 -0
- lfx/components/input_output/chat.py +109 -0
- lfx/components/input_output/chat_output.py +184 -0
- lfx/components/input_output/text.py +27 -0
- lfx/components/input_output/text_output.py +29 -0
- lfx/components/input_output/webhook.py +56 -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/knowledge_bases/__init__.py +89 -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 +175 -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 +100 -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/llm_operations/__init__.py +46 -0
- lfx/components/llm_operations/batch_run.py +205 -0
- lfx/components/llm_operations/lambda_filter.py +218 -0
- lfx/components/llm_operations/llm_conditional_router.py +421 -0
- lfx/components/llm_operations/llm_selector.py +499 -0
- lfx/components/llm_operations/structured_output.py +244 -0
- lfx/components/lmstudio/__init__.py +34 -0
- lfx/components/lmstudio/lmstudioembeddings.py +89 -0
- lfx/components/lmstudio/lmstudiomodel.py +133 -0
- lfx/components/logic/__init__.py +181 -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 +147 -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 +89 -0
- lfx/components/models_and_agents/__init__.py +49 -0
- lfx/components/models_and_agents/agent.py +644 -0
- lfx/components/models_and_agents/embedding_model.py +423 -0
- lfx/components/models_and_agents/language_model.py +398 -0
- lfx/components/models_and_agents/mcp_component.py +594 -0
- lfx/components/models_and_agents/memory.py +268 -0
- lfx/components/models_and_agents/prompt.py +67 -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 +151 -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 +548 -0
- lfx/components/ollama/ollama_embeddings.py +103 -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 +104 -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 +72 -0
- lfx/components/processing/alter_metadata.py +109 -0
- lfx/components/processing/combine_text.py +40 -0
- lfx/components/processing/converter.py +248 -0
- lfx/components/processing/create_data.py +111 -0
- lfx/components/processing/create_list.py +40 -0
- lfx/components/processing/data_operations.py +528 -0
- lfx/components/processing/data_to_dataframe.py +71 -0
- lfx/components/processing/dataframe_operations.py +313 -0
- lfx/components/processing/dataframe_to_toolset.py +259 -0
- lfx/components/processing/dynamic_create_data.py +357 -0
- lfx/components/processing/extract_key.py +54 -0
- lfx/components/processing/filter_data.py +43 -0
- lfx/components/processing/filter_data_values.py +89 -0
- lfx/components/processing/json_cleaner.py +104 -0
- lfx/components/processing/merge_data.py +91 -0
- lfx/components/processing/message_to_data.py +37 -0
- lfx/components/processing/output_parser.py +46 -0
- lfx/components/processing/parse_data.py +71 -0
- lfx/components/processing/parse_dataframe.py +69 -0
- lfx/components/processing/parse_json_data.py +91 -0
- lfx/components/processing/parser.py +148 -0
- lfx/components/processing/regex.py +83 -0
- lfx/components/processing/select_data.py +49 -0
- lfx/components/processing/split_text.py +141 -0
- lfx/components/processing/store_message.py +91 -0
- lfx/components/processing/update_data.py +161 -0
- lfx/components/prototypes/__init__.py +35 -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 +66 -0
- lfx/components/tools/calculator.py +109 -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 +328 -0
- lfx/components/tools/python_repl.py +98 -0
- lfx/components/tools/search_api.py +88 -0
- lfx/components/tools/searxng.py +145 -0
- lfx/components/tools/serp_api.py +120 -0
- lfx/components/tools/tavily_search_tool.py +345 -0
- lfx/components/tools/wikidata_api.py +103 -0
- lfx/components/tools/wikipedia_api.py +50 -0
- lfx/components/tools/yahoo_finance.py +130 -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 +301 -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 +191 -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/utilities/__init__.py +43 -0
- lfx/components/utilities/calculator_core.py +89 -0
- lfx/components/utilities/current_date.py +42 -0
- lfx/components/utilities/id_generator.py +42 -0
- lfx/components/utilities/python_repl_core.py +98 -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 +34 -0
- lfx/components/vectorstores/local_db.py +270 -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/vlmrun/__init__.py +34 -0
- lfx/components/vlmrun/vlmrun_transcription.py +224 -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 +206 -0
- lfx/components/zep/__init__.py +3 -0
- lfx/components/zep/zep.py +45 -0
- lfx/constants.py +6 -0
- lfx/custom/__init__.py +7 -0
- lfx/custom/attributes.py +87 -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 +1890 -0
- lfx/custom/custom_component/component_with_cache.py +8 -0
- lfx/custom/custom_component/custom_component.py +650 -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 +523 -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 +216 -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 +300 -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 +2298 -0
- lfx/graph/graph/constants.py +63 -0
- lfx/graph/graph/runnable_vertices_manager.py +133 -0
- lfx/graph/graph/schema.py +53 -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 +250 -0
- lfx/graph/utils.py +206 -0
- lfx/graph/vertex/__init__.py +0 -0
- lfx/graph/vertex/base.py +826 -0
- lfx/graph/vertex/constants.py +0 -0
- lfx/graph/vertex/exceptions.py +4 -0
- lfx/graph/vertex/param_handler.py +316 -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 +141 -0
- lfx/helpers/base_model.py +71 -0
- lfx/helpers/custom.py +13 -0
- lfx/helpers/data.py +167 -0
- lfx/helpers/flow.py +308 -0
- lfx/inputs/__init__.py +68 -0
- lfx/inputs/constants.py +2 -0
- lfx/inputs/input_mixin.py +352 -0
- lfx/inputs/inputs.py +718 -0
- lfx/inputs/validators.py +19 -0
- lfx/interface/__init__.py +6 -0
- lfx/interface/components.py +897 -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 +317 -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 +295 -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 +411 -0
- lfx/logging/__init__.py +11 -0
- lfx/logging/logger.py +24 -0
- lfx/memory/__init__.py +70 -0
- lfx/memory/stubs.py +302 -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/cross_module.py +80 -0
- lfx/schema/data.py +309 -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 +184 -0
- lfx/schema/json_schema.py +186 -0
- lfx/schema/log.py +62 -0
- lfx/schema/message.py +493 -0
- lfx/schema/openai_responses_schemas.py +74 -0
- lfx/schema/properties.py +41 -0
- lfx/schema/schema.py +180 -0
- lfx/schema/serialize.py +13 -0
- lfx/schema/table.py +142 -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 +26 -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/database/__init__.py +5 -0
- lfx/services/database/service.py +25 -0
- lfx/services/deps.py +194 -0
- lfx/services/factory.py +19 -0
- lfx/services/initialize.py +19 -0
- lfx/services/interfaces.py +103 -0
- lfx/services/manager.py +185 -0
- lfx/services/mcp_composer/__init__.py +6 -0
- lfx/services/mcp_composer/factory.py +16 -0
- lfx/services/mcp_composer/service.py +1441 -0
- lfx/services/schema.py +21 -0
- lfx/services/session.py +87 -0
- lfx/services/settings/__init__.py +3 -0
- lfx/services/settings/auth.py +133 -0
- lfx/services/settings/base.py +668 -0
- lfx/services/settings/constants.py +43 -0
- lfx/services/settings/factory.py +23 -0
- lfx/services/settings/feature_flags.py +11 -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 +185 -0
- lfx/services/storage/service.py +177 -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 +260 -0
- lfx/template/field/prompt.py +15 -0
- lfx/template/frontend_node/__init__.py +6 -0
- lfx/template/frontend_node/base.py +214 -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 +233 -0
- lfx/utils/data_structure.py +212 -0
- lfx/utils/exceptions.py +22 -0
- lfx/utils/helpers.py +34 -0
- lfx/utils/image.py +79 -0
- lfx/utils/langflow_utils.py +52 -0
- lfx/utils/lazy_load.py +15 -0
- lfx/utils/request_utils.py +18 -0
- lfx/utils/schemas.py +139 -0
- lfx/utils/ssrf_protection.py +384 -0
- lfx/utils/util.py +626 -0
- lfx/utils/util_strings.py +56 -0
- lfx/utils/validate_cloud.py +26 -0
- lfx/utils/version.py +24 -0
- lfx_nightly-0.2.0.dev25.dist-info/METADATA +312 -0
- lfx_nightly-0.2.0.dev25.dist-info/RECORD +769 -0
- lfx_nightly-0.2.0.dev25.dist-info/WHEEL +4 -0
- lfx_nightly-0.2.0.dev25.dist-info/entry_points.txt +2 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
from collections.abc import Callable
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from typing import ( # type: ignore[attr-defined]
|
|
4
|
+
Any,
|
|
5
|
+
GenericAlias, # type: ignore[attr-defined]
|
|
6
|
+
_GenericAlias, # type: ignore[attr-defined]
|
|
7
|
+
_UnionGenericAlias, # type: ignore[attr-defined]
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
from pydantic import (
|
|
11
|
+
BaseModel,
|
|
12
|
+
ConfigDict,
|
|
13
|
+
Field,
|
|
14
|
+
field_serializer,
|
|
15
|
+
field_validator,
|
|
16
|
+
model_serializer,
|
|
17
|
+
model_validator,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
from lfx.field_typing import Text
|
|
21
|
+
from lfx.field_typing.range_spec import RangeSpec
|
|
22
|
+
from lfx.helpers.custom import format_type
|
|
23
|
+
from lfx.schema.data import Data
|
|
24
|
+
from lfx.type_extraction import post_process_type
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class UndefinedType(Enum):
|
|
28
|
+
undefined = "__UNDEFINED__"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
UNDEFINED = UndefinedType.undefined
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class Input(BaseModel):
|
|
35
|
+
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
36
|
+
|
|
37
|
+
field_type: str | type | None = Field(default=str, serialization_alias="type")
|
|
38
|
+
"""The type of field this is. Default is a string."""
|
|
39
|
+
|
|
40
|
+
required: bool = False
|
|
41
|
+
"""Specifies if the field is required. Defaults to False."""
|
|
42
|
+
|
|
43
|
+
placeholder: str = ""
|
|
44
|
+
"""A placeholder string for the field. Default is an empty string."""
|
|
45
|
+
|
|
46
|
+
is_list: bool = Field(default=False, serialization_alias="list")
|
|
47
|
+
"""Defines if the field is a list. Default is False."""
|
|
48
|
+
|
|
49
|
+
show: bool = True
|
|
50
|
+
"""Should the field be shown. Defaults to True."""
|
|
51
|
+
|
|
52
|
+
multiline: bool = False
|
|
53
|
+
"""Defines if the field will allow the user to open a text editor. Default is False."""
|
|
54
|
+
|
|
55
|
+
value: Any = None
|
|
56
|
+
"""The value of the field. Default is None."""
|
|
57
|
+
|
|
58
|
+
file_types: list[str] = Field(default=[], serialization_alias="fileTypes")
|
|
59
|
+
"""List of file types associated with the field . Default is an empty list."""
|
|
60
|
+
|
|
61
|
+
file_path: str | None = ""
|
|
62
|
+
"""The file path of the field if it is a file. Defaults to None."""
|
|
63
|
+
|
|
64
|
+
password: bool | None = None
|
|
65
|
+
"""Specifies if the field is a password. Defaults to None."""
|
|
66
|
+
|
|
67
|
+
options: list[str] | Callable | None = None
|
|
68
|
+
"""List of options for the field. Only used when is_list=True. Default is an empty list."""
|
|
69
|
+
|
|
70
|
+
name: str | None = None
|
|
71
|
+
"""Name of the field. Default is an empty string."""
|
|
72
|
+
|
|
73
|
+
display_name: str | None = None
|
|
74
|
+
"""Display name of the field. Defaults to None."""
|
|
75
|
+
|
|
76
|
+
advanced: bool = False
|
|
77
|
+
"""Specifies if the field will an advanced parameter (hidden). Defaults to False."""
|
|
78
|
+
|
|
79
|
+
input_types: list[str] | None = None
|
|
80
|
+
"""List of input types for the handle when the field has more than one type. Default is an empty list."""
|
|
81
|
+
|
|
82
|
+
dynamic: bool = False
|
|
83
|
+
"""Specifies if the field is dynamic. Defaults to False."""
|
|
84
|
+
|
|
85
|
+
info: str | None = ""
|
|
86
|
+
"""Additional information about the field to be shown in the tooltip. Defaults to an empty string."""
|
|
87
|
+
|
|
88
|
+
real_time_refresh: bool | None = None
|
|
89
|
+
"""Specifies if the field should have real time refresh. `refresh_button` must be False. Defaults to None."""
|
|
90
|
+
|
|
91
|
+
refresh_button: bool | None = None
|
|
92
|
+
"""Specifies if the field should have a refresh button. Defaults to False."""
|
|
93
|
+
|
|
94
|
+
refresh_button_text: str | None = None
|
|
95
|
+
"""Specifies the text for the refresh button. Defaults to None."""
|
|
96
|
+
|
|
97
|
+
range_spec: RangeSpec | None = Field(default=None, serialization_alias="rangeSpec")
|
|
98
|
+
"""Range specification for the field. Defaults to None."""
|
|
99
|
+
|
|
100
|
+
load_from_db: bool = False
|
|
101
|
+
"""Specifies if the field should be loaded from the database. Defaults to False."""
|
|
102
|
+
|
|
103
|
+
title_case: bool = False
|
|
104
|
+
"""Specifies if the field should be displayed in title case. Defaults to True."""
|
|
105
|
+
|
|
106
|
+
def to_dict(self):
|
|
107
|
+
return self.model_dump(by_alias=True, exclude_none=True)
|
|
108
|
+
|
|
109
|
+
@model_serializer(mode="wrap")
|
|
110
|
+
def serialize_model(self, handler):
|
|
111
|
+
result = handler(self)
|
|
112
|
+
# If the field is str, we add the Text input type
|
|
113
|
+
if self.field_type in {"str", "Text"} and "input_types" not in result:
|
|
114
|
+
result["input_types"] = ["Text"]
|
|
115
|
+
if self.field_type == Text:
|
|
116
|
+
result["type"] = "str"
|
|
117
|
+
else:
|
|
118
|
+
result["type"] = self.field_type
|
|
119
|
+
return result
|
|
120
|
+
|
|
121
|
+
@model_validator(mode="after")
|
|
122
|
+
def validate_model(self):
|
|
123
|
+
# if field_type is int, we need to set the range_spec
|
|
124
|
+
if self.field_type == "int" and self.range_spec is not None:
|
|
125
|
+
self.range_spec = RangeSpec.set_step_type("int", self.range_spec)
|
|
126
|
+
return self
|
|
127
|
+
|
|
128
|
+
@field_serializer("file_path")
|
|
129
|
+
def serialize_file_path(self, value):
|
|
130
|
+
return value if self.field_type == "file" else ""
|
|
131
|
+
|
|
132
|
+
@field_serializer("field_type")
|
|
133
|
+
def serialize_field_type(self, value, _info):
|
|
134
|
+
if value is float and self.range_spec is None:
|
|
135
|
+
self.range_spec = RangeSpec()
|
|
136
|
+
return value
|
|
137
|
+
|
|
138
|
+
@field_serializer("display_name")
|
|
139
|
+
def serialize_display_name(self, value, _info):
|
|
140
|
+
# If display_name is not set, use name and convert to title case
|
|
141
|
+
# if title_case is True
|
|
142
|
+
if value is None:
|
|
143
|
+
# name is probably a snake_case string
|
|
144
|
+
# Ex: "file_path" -> "File Path"
|
|
145
|
+
value = self.name.replace("_", " ")
|
|
146
|
+
if self.title_case:
|
|
147
|
+
value = value.title()
|
|
148
|
+
return value
|
|
149
|
+
|
|
150
|
+
@field_validator("file_types")
|
|
151
|
+
@classmethod
|
|
152
|
+
def validate_file_types(cls, value):
|
|
153
|
+
if not isinstance(value, list):
|
|
154
|
+
msg = "file_types must be a list"
|
|
155
|
+
raise ValueError(msg) # noqa: TRY004
|
|
156
|
+
return [
|
|
157
|
+
(f".{file_type}" if isinstance(file_type, str) and not file_type.startswith(".") else file_type)
|
|
158
|
+
for file_type in value
|
|
159
|
+
]
|
|
160
|
+
|
|
161
|
+
@field_validator("field_type", mode="before")
|
|
162
|
+
@classmethod
|
|
163
|
+
def validate_type(cls, v):
|
|
164
|
+
# If the user passes CustomComponent as a type insteado of "CustomComponent" we need to convert it to a string
|
|
165
|
+
# this should be done for all types
|
|
166
|
+
# How to check if v is a type?
|
|
167
|
+
if isinstance(v, type | _GenericAlias | GenericAlias | _UnionGenericAlias):
|
|
168
|
+
v = post_process_type(v)[0]
|
|
169
|
+
v = format_type(v)
|
|
170
|
+
elif not isinstance(v, str):
|
|
171
|
+
msg = f"type must be a string or a type, not {type(v)}"
|
|
172
|
+
raise ValueError(msg) # noqa: TRY004
|
|
173
|
+
return v
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
class OutputOptions(BaseModel):
|
|
177
|
+
filter: str | None = None
|
|
178
|
+
"""Filter to be applied to the output data."""
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
class Output(BaseModel):
|
|
182
|
+
types: list[str] = Field(default=[])
|
|
183
|
+
"""List of output types for the field."""
|
|
184
|
+
|
|
185
|
+
selected: str | None = Field(default=None)
|
|
186
|
+
"""The selected output type for the field."""
|
|
187
|
+
|
|
188
|
+
name: str = Field(description="The name of the field.")
|
|
189
|
+
"""The name of the field."""
|
|
190
|
+
|
|
191
|
+
hidden: bool | None = Field(default=None)
|
|
192
|
+
"""Dictates if the field is hidden."""
|
|
193
|
+
|
|
194
|
+
display_name: str | None = Field(default=None)
|
|
195
|
+
"""The display name of the field."""
|
|
196
|
+
|
|
197
|
+
method: str | None = Field(default=None)
|
|
198
|
+
"""The method to use for the output."""
|
|
199
|
+
|
|
200
|
+
value: Any | None = Field(default=UNDEFINED)
|
|
201
|
+
"""The result of the Output. Dynamically updated as execution occurs."""
|
|
202
|
+
|
|
203
|
+
cache: bool = Field(default=True)
|
|
204
|
+
|
|
205
|
+
required_inputs: list[str] | None = Field(default=None)
|
|
206
|
+
"""List of required inputs for this output."""
|
|
207
|
+
|
|
208
|
+
allows_loop: bool = Field(default=False)
|
|
209
|
+
"""Specifies if the output allows looping."""
|
|
210
|
+
|
|
211
|
+
loop_types: list[str] | None = Field(default=None)
|
|
212
|
+
"""List of additional types to include for loop inputs when allows_loop is True."""
|
|
213
|
+
|
|
214
|
+
group_outputs: bool = Field(default=False)
|
|
215
|
+
"""Specifies if all outputs should be grouped and shown without dropdowns."""
|
|
216
|
+
|
|
217
|
+
options: OutputOptions | None = Field(default=None)
|
|
218
|
+
"""Options for the output."""
|
|
219
|
+
|
|
220
|
+
tool_mode: bool = Field(default=True)
|
|
221
|
+
"""Specifies if the output should be used as a tool"""
|
|
222
|
+
|
|
223
|
+
def to_dict(self):
|
|
224
|
+
return self.model_dump(by_alias=True, exclude_none=True)
|
|
225
|
+
|
|
226
|
+
def add_types(self, type_: list[Any]) -> None:
|
|
227
|
+
if self.types is None:
|
|
228
|
+
self.types = []
|
|
229
|
+
self.types.extend([t for t in type_ if t not in self.types])
|
|
230
|
+
# If no type is selected and we have types, select the first one
|
|
231
|
+
if self.selected is None and self.types:
|
|
232
|
+
self.selected = self.types[0]
|
|
233
|
+
|
|
234
|
+
@model_serializer(mode="wrap")
|
|
235
|
+
def serialize_model(self, handler):
|
|
236
|
+
result = handler(self)
|
|
237
|
+
if self.value == UNDEFINED:
|
|
238
|
+
result["value"] = UNDEFINED.value
|
|
239
|
+
return result
|
|
240
|
+
|
|
241
|
+
@model_validator(mode="after")
|
|
242
|
+
def validate_model(self):
|
|
243
|
+
if self.value == UNDEFINED.value:
|
|
244
|
+
self.value = UNDEFINED
|
|
245
|
+
if self.name is None:
|
|
246
|
+
msg = "name must be set"
|
|
247
|
+
raise ValueError(msg)
|
|
248
|
+
if self.display_name is None:
|
|
249
|
+
self.display_name = self.name
|
|
250
|
+
# Convert dict options to OutputOptions model
|
|
251
|
+
if isinstance(self.options, dict):
|
|
252
|
+
self.options = OutputOptions(**self.options)
|
|
253
|
+
return self
|
|
254
|
+
|
|
255
|
+
def apply_options(self, result):
|
|
256
|
+
if not self.options:
|
|
257
|
+
return result
|
|
258
|
+
if self.options.filter and isinstance(result, Data):
|
|
259
|
+
return result.filter_data(self.options.filter)
|
|
260
|
+
return result
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# This file provides backwards compatibility for prompt field constants
|
|
2
|
+
from lfx.template.field.base import Input
|
|
3
|
+
|
|
4
|
+
# Default input types for prompt fields
|
|
5
|
+
DEFAULT_PROMPT_INTUT_TYPES = ["Message"]
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class DefaultPromptField(Input):
|
|
9
|
+
"""Default prompt field for backwards compatibility."""
|
|
10
|
+
|
|
11
|
+
field_type: str = "str"
|
|
12
|
+
advanced: bool = False
|
|
13
|
+
multiline: bool = True
|
|
14
|
+
input_types: list[str] = DEFAULT_PROMPT_INTUT_TYPES
|
|
15
|
+
value: str = "" # Set the value to empty string
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
from collections import defaultdict
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, field_serializer, model_serializer
|
|
4
|
+
|
|
5
|
+
from lfx.template.field.base import Output
|
|
6
|
+
from lfx.template.template.base import Template
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class FrontendNode(BaseModel):
|
|
10
|
+
_format_template: bool = True
|
|
11
|
+
template: Template
|
|
12
|
+
"""Template for the frontend node."""
|
|
13
|
+
description: str | None = None
|
|
14
|
+
"""Description of the frontend node."""
|
|
15
|
+
icon: str | None = None
|
|
16
|
+
"""Icon of the frontend node."""
|
|
17
|
+
is_input: bool | None = None
|
|
18
|
+
"""Whether the frontend node is used as an input when processing the Graph.
|
|
19
|
+
If True, there should be a field named 'input_value'."""
|
|
20
|
+
is_output: bool | None = None
|
|
21
|
+
"""Whether the frontend node is used as an output when processing the Graph.
|
|
22
|
+
If True, there should be a field named 'input_value'."""
|
|
23
|
+
is_composition: bool | None = None
|
|
24
|
+
"""Whether the frontend node is used for composition."""
|
|
25
|
+
base_classes: list[str]
|
|
26
|
+
"""List of base classes for the frontend node."""
|
|
27
|
+
name: str = ""
|
|
28
|
+
"""Name of the frontend node."""
|
|
29
|
+
display_name: str | None = ""
|
|
30
|
+
"""Display name of the frontend node."""
|
|
31
|
+
priority: int | None = None
|
|
32
|
+
"""Priority of the frontend node."""
|
|
33
|
+
documentation: str = ""
|
|
34
|
+
"""Documentation of the frontend node."""
|
|
35
|
+
minimized: bool = False
|
|
36
|
+
"""Whether the frontend node is minimized."""
|
|
37
|
+
custom_fields: dict | None = defaultdict(list)
|
|
38
|
+
"""Custom fields of the frontend node."""
|
|
39
|
+
output_types: list[str] = []
|
|
40
|
+
"""List of output types for the frontend node."""
|
|
41
|
+
full_path: str | None = None
|
|
42
|
+
"""Full path of the frontend node."""
|
|
43
|
+
pinned: bool = False
|
|
44
|
+
"""Whether the frontend node is pinned."""
|
|
45
|
+
conditional_paths: list[str] = []
|
|
46
|
+
"""List of conditional paths for the frontend node."""
|
|
47
|
+
frozen: bool = False
|
|
48
|
+
"""Whether the frontend node is frozen."""
|
|
49
|
+
outputs: list[Output] = []
|
|
50
|
+
"""List of output fields for the frontend node."""
|
|
51
|
+
|
|
52
|
+
field_order: list[str] = []
|
|
53
|
+
"""Order of the fields in the frontend node."""
|
|
54
|
+
beta: bool = False
|
|
55
|
+
"""Whether the frontend node is in beta."""
|
|
56
|
+
legacy: bool = False
|
|
57
|
+
"""Whether the frontend node is legacy."""
|
|
58
|
+
replacement: list[str] | None = None
|
|
59
|
+
"""Replacement for the frontend node when it is deprecated."""
|
|
60
|
+
error: str | None = None
|
|
61
|
+
"""Error message for the frontend node."""
|
|
62
|
+
edited: bool = False
|
|
63
|
+
"""Whether the frontend node has been edited."""
|
|
64
|
+
metadata: dict = {}
|
|
65
|
+
"""Metadata for the component node."""
|
|
66
|
+
tool_mode: bool = False
|
|
67
|
+
"""Whether the frontend node is in tool mode."""
|
|
68
|
+
|
|
69
|
+
def set_documentation(self, documentation: str) -> None:
|
|
70
|
+
"""Sets the documentation of the frontend node."""
|
|
71
|
+
self.documentation = documentation
|
|
72
|
+
|
|
73
|
+
@field_serializer("base_classes")
|
|
74
|
+
def process_base_classes(self, base_classes: list[str]) -> list[str]:
|
|
75
|
+
"""Removes unwanted base classes from the list of base classes."""
|
|
76
|
+
return sorted(set(base_classes), key=lambda x: x.lower())
|
|
77
|
+
|
|
78
|
+
@field_serializer("display_name")
|
|
79
|
+
def process_display_name(self, display_name: str) -> str:
|
|
80
|
+
"""Sets the display name of the frontend node."""
|
|
81
|
+
return display_name or self.name
|
|
82
|
+
|
|
83
|
+
@model_serializer(mode="wrap")
|
|
84
|
+
def serialize_model(self, handler):
|
|
85
|
+
result = handler(self)
|
|
86
|
+
if hasattr(self, "template") and hasattr(self.template, "to_dict"):
|
|
87
|
+
result["template"] = self.template.to_dict()
|
|
88
|
+
name = result.pop("name")
|
|
89
|
+
|
|
90
|
+
# Migrate base classes to outputs
|
|
91
|
+
if "output_types" in result and not result.get("outputs"):
|
|
92
|
+
for base_class in result["output_types"]:
|
|
93
|
+
output = Output(
|
|
94
|
+
display_name=base_class,
|
|
95
|
+
name=base_class.lower(),
|
|
96
|
+
types=[base_class],
|
|
97
|
+
selected=base_class,
|
|
98
|
+
)
|
|
99
|
+
result["outputs"].append(output.model_dump())
|
|
100
|
+
|
|
101
|
+
return {name: result}
|
|
102
|
+
|
|
103
|
+
@classmethod
|
|
104
|
+
def from_dict(cls, data: dict) -> "FrontendNode":
|
|
105
|
+
if "template" in data:
|
|
106
|
+
data["template"] = Template.from_dict(data["template"])
|
|
107
|
+
return cls(**data)
|
|
108
|
+
|
|
109
|
+
# For backwards compatibility
|
|
110
|
+
def to_dict(self, *, keep_name=True) -> dict:
|
|
111
|
+
"""Returns a dict representation of the frontend node."""
|
|
112
|
+
dump = self.model_dump(by_alias=True, exclude_none=True)
|
|
113
|
+
if not keep_name:
|
|
114
|
+
return dump.pop(self.name)
|
|
115
|
+
return dump
|
|
116
|
+
|
|
117
|
+
def add_extra_fields(self) -> None:
|
|
118
|
+
pass
|
|
119
|
+
|
|
120
|
+
def add_extra_base_classes(self) -> None:
|
|
121
|
+
pass
|
|
122
|
+
|
|
123
|
+
def set_base_classes_from_outputs(self) -> None:
|
|
124
|
+
self.base_classes = [output_type for output in self.outputs for output_type in output.types]
|
|
125
|
+
|
|
126
|
+
def validate_component(self) -> None:
|
|
127
|
+
self.validate_name_overlap()
|
|
128
|
+
self.validate_attributes()
|
|
129
|
+
|
|
130
|
+
def validate_name_overlap(self) -> None:
|
|
131
|
+
# Check if any of the output names overlap with the any of the inputs
|
|
132
|
+
output_names = [output.name for output in self.outputs if not output.allows_loop]
|
|
133
|
+
input_names = [input_.name for input_ in self.template.fields]
|
|
134
|
+
overlap = set(output_names).intersection(input_names)
|
|
135
|
+
if overlap:
|
|
136
|
+
overlap_str = ", ".join(f"'{x}'" for x in overlap)
|
|
137
|
+
msg = (
|
|
138
|
+
"There should be no overlap between input and output names. "
|
|
139
|
+
f"Names {overlap_str} are duplicated in component {self.display_name}. "
|
|
140
|
+
f"Inputs are {input_names} and outputs are {output_names}."
|
|
141
|
+
)
|
|
142
|
+
raise ValueError(msg)
|
|
143
|
+
|
|
144
|
+
def validate_attributes(self) -> None:
|
|
145
|
+
# None of inputs, outputs, _artifacts, _results, logs, status, vertex, graph, display_name, description,
|
|
146
|
+
# documentation, icon should be present in outputs or input names
|
|
147
|
+
output_names = [output.name for output in self.outputs]
|
|
148
|
+
input_names = [input_.name for input_ in self.template.fields]
|
|
149
|
+
attributes = [
|
|
150
|
+
"inputs",
|
|
151
|
+
"outputs",
|
|
152
|
+
"_artifacts",
|
|
153
|
+
"_results",
|
|
154
|
+
"logs",
|
|
155
|
+
"status",
|
|
156
|
+
"vertex",
|
|
157
|
+
"graph",
|
|
158
|
+
"display_name",
|
|
159
|
+
"description",
|
|
160
|
+
"documentation",
|
|
161
|
+
"icon",
|
|
162
|
+
]
|
|
163
|
+
output_overlap = set(output_names).intersection(attributes)
|
|
164
|
+
input_overlap = set(input_names).intersection(attributes)
|
|
165
|
+
error_message = ""
|
|
166
|
+
if output_overlap:
|
|
167
|
+
output_overlap_str = ", ".join(f"'{x}'" for x in output_overlap)
|
|
168
|
+
error_message += f"Output names {output_overlap_str} are reserved attributes.\n"
|
|
169
|
+
if input_overlap:
|
|
170
|
+
input_overlap_str = ", ".join(f"'{x}'" for x in input_overlap)
|
|
171
|
+
error_message += f"Input names {input_overlap_str} are reserved attributes."
|
|
172
|
+
|
|
173
|
+
def add_base_class(self, base_class: str | list[str]) -> None:
|
|
174
|
+
"""Adds a base class to the frontend node."""
|
|
175
|
+
if isinstance(base_class, str):
|
|
176
|
+
self.base_classes.append(base_class)
|
|
177
|
+
elif isinstance(base_class, list):
|
|
178
|
+
self.base_classes.extend(base_class)
|
|
179
|
+
|
|
180
|
+
def add_output_type(self, output_type: str | list[str]) -> None:
|
|
181
|
+
"""Adds an output type to the frontend node."""
|
|
182
|
+
if isinstance(output_type, str):
|
|
183
|
+
self.output_types.append(output_type)
|
|
184
|
+
elif isinstance(output_type, list):
|
|
185
|
+
self.output_types.extend(output_type)
|
|
186
|
+
|
|
187
|
+
@classmethod
|
|
188
|
+
def from_inputs(cls, **kwargs):
|
|
189
|
+
"""Create a frontend node from inputs."""
|
|
190
|
+
if "inputs" not in kwargs:
|
|
191
|
+
msg = "Missing 'inputs' argument."
|
|
192
|
+
raise ValueError(msg)
|
|
193
|
+
if "_outputs_map" in kwargs:
|
|
194
|
+
kwargs["outputs"] = kwargs.pop("_outputs_map")
|
|
195
|
+
inputs = kwargs.pop("inputs")
|
|
196
|
+
template = Template(type_name="Component", fields=inputs)
|
|
197
|
+
kwargs["template"] = template
|
|
198
|
+
return cls(**kwargs)
|
|
199
|
+
|
|
200
|
+
def set_field_value_in_template(self, field_name, value) -> None:
|
|
201
|
+
for idx, field in enumerate(self.template.fields):
|
|
202
|
+
if field.name == field_name:
|
|
203
|
+
new_field = field.model_copy()
|
|
204
|
+
new_field.value = value
|
|
205
|
+
self.template.fields[idx] = new_field
|
|
206
|
+
break
|
|
207
|
+
|
|
208
|
+
def set_field_load_from_db_in_template(self, field_name, value) -> None:
|
|
209
|
+
for idx, field in enumerate(self.template.fields):
|
|
210
|
+
if field.name == field_name and hasattr(field, "load_from_db"):
|
|
211
|
+
new_field = field.model_copy()
|
|
212
|
+
new_field.load_from_db = value
|
|
213
|
+
self.template.fields[idx] = new_field
|
|
214
|
+
break
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
FORCE_SHOW_FIELDS = [
|
|
2
|
+
"allowed_tools",
|
|
3
|
+
"memory",
|
|
4
|
+
"prefix",
|
|
5
|
+
"examples",
|
|
6
|
+
"temperature",
|
|
7
|
+
"model_name",
|
|
8
|
+
"headers",
|
|
9
|
+
"max_value_length",
|
|
10
|
+
"max_tokens",
|
|
11
|
+
"google_cse_id",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
DEFAULT_PROMPT = """
|
|
15
|
+
I want you to act as a naming consultant for new companies.
|
|
16
|
+
|
|
17
|
+
Here are some examples of good company names:
|
|
18
|
+
|
|
19
|
+
- search engine, Google
|
|
20
|
+
- social media, Facebook
|
|
21
|
+
- video sharing, YouTube
|
|
22
|
+
|
|
23
|
+
The name should be short, catchy and easy to remember.
|
|
24
|
+
|
|
25
|
+
What is a good name for a company that makes {product}?
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
SYSTEM_PROMPT = """
|
|
29
|
+
You are a helpful assistant that talks casually about life in general.
|
|
30
|
+
You are a good listener and you can talk about anything.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
HUMAN_PROMPT = "{input}"
|
|
34
|
+
|
|
35
|
+
QA_CHAIN_TYPES = ["stuff", "map_reduce", "map_rerank", "refine"]
|
|
36
|
+
|
|
37
|
+
CTRANSFORMERS_DEFAULT_CONFIG = {
|
|
38
|
+
"top_k": 40,
|
|
39
|
+
"top_p": 0.95,
|
|
40
|
+
"temperature": 0.8,
|
|
41
|
+
"repetition_penalty": 1.1,
|
|
42
|
+
"last_n_tokens": 64,
|
|
43
|
+
"seed": -1,
|
|
44
|
+
"max_new_tokens": 256,
|
|
45
|
+
"stop": None,
|
|
46
|
+
"stream": False,
|
|
47
|
+
"reset": True,
|
|
48
|
+
"batch_size": 8,
|
|
49
|
+
"threads": -1,
|
|
50
|
+
"context_length": -1,
|
|
51
|
+
"gpu_layers": 0,
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
# This variable is used to tell the user
|
|
55
|
+
# that it can be changed to use other APIs
|
|
56
|
+
# like Prem and LocalAI
|
|
57
|
+
OPENAI_API_BASE_INFO = """
|
|
58
|
+
The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.
|
|
59
|
+
|
|
60
|
+
You can change this to use other APIs like JinaChat, LocalAI and Prem.
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
INPUT_KEY_INFO = """The variable to be used as Chat Input when more than one variable is available."""
|
|
65
|
+
OUTPUT_KEY_INFO = """The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)"""
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
from lfx.template.field.base import Input
|
|
2
|
+
from lfx.template.frontend_node.base import FrontendNode
|
|
3
|
+
from lfx.template.template.base import Template
|
|
4
|
+
|
|
5
|
+
DEFAULT_CUSTOM_COMPONENT_CODE = """from lfx.custom import CustomComponent
|
|
6
|
+
|
|
7
|
+
from typing import Optional, List, Dict, Union
|
|
8
|
+
from lfx.field_typing import (
|
|
9
|
+
Tool,
|
|
10
|
+
)
|
|
11
|
+
from lfx.schema.data import Data
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Component(CustomComponent):
|
|
15
|
+
display_name: str = "Custom Component"
|
|
16
|
+
description: str = "Create any custom component you want!"
|
|
17
|
+
|
|
18
|
+
def build_config(self):
|
|
19
|
+
return {"param": {"display_name": "Parameter"}}
|
|
20
|
+
|
|
21
|
+
def build(self, param: Data) -> Data:
|
|
22
|
+
return param
|
|
23
|
+
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class CustomComponentFrontendNode(FrontendNode):
|
|
28
|
+
_format_template: bool = False
|
|
29
|
+
name: str = "CustomComponent"
|
|
30
|
+
display_name: str | None = "CustomComponent"
|
|
31
|
+
beta: bool = False
|
|
32
|
+
legacy: bool = False
|
|
33
|
+
minimized: bool = False
|
|
34
|
+
template: Template = Template(
|
|
35
|
+
type_name="CustomComponent",
|
|
36
|
+
fields=[
|
|
37
|
+
Input(
|
|
38
|
+
field_type="code",
|
|
39
|
+
required=True,
|
|
40
|
+
placeholder="",
|
|
41
|
+
is_list=False,
|
|
42
|
+
show=True,
|
|
43
|
+
value=DEFAULT_CUSTOM_COMPONENT_CODE,
|
|
44
|
+
name="code",
|
|
45
|
+
advanced=False,
|
|
46
|
+
dynamic=True,
|
|
47
|
+
)
|
|
48
|
+
],
|
|
49
|
+
)
|
|
50
|
+
description: str | None = None
|
|
51
|
+
base_classes: list[str] = []
|
|
52
|
+
last_updated: str | None = None
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class ComponentFrontendNode(FrontendNode):
|
|
56
|
+
_format_template: bool = False
|
|
57
|
+
name: str = "Component"
|
|
58
|
+
display_name: str | None = "Component"
|
|
59
|
+
beta: bool = False
|
|
60
|
+
minimized: bool = False
|
|
61
|
+
legacy: bool = False
|
|
62
|
+
template: Template = Template(
|
|
63
|
+
type_name="Component",
|
|
64
|
+
fields=[
|
|
65
|
+
Input(
|
|
66
|
+
field_type="code",
|
|
67
|
+
required=True,
|
|
68
|
+
placeholder="",
|
|
69
|
+
is_list=False,
|
|
70
|
+
show=True,
|
|
71
|
+
value=DEFAULT_CUSTOM_COMPONENT_CODE,
|
|
72
|
+
name="code",
|
|
73
|
+
advanced=False,
|
|
74
|
+
dynamic=True,
|
|
75
|
+
)
|
|
76
|
+
],
|
|
77
|
+
)
|
|
78
|
+
description: str | None = None
|
|
79
|
+
base_classes: list[str] = []
|
|
File without changes
|