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,112 @@
|
|
|
1
|
+
from lfx.custom.custom_component.component import Component
|
|
2
|
+
from lfx.io import MessageTextInput, Output, SecretStrInput
|
|
3
|
+
from lfx.schema.data import Data
|
|
4
|
+
from lfx.schema.message import Message
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class JigsawStackSentimentComponent(Component):
|
|
8
|
+
display_name = "Sentiment Analysis"
|
|
9
|
+
description = "Analyze sentiment of text using JigsawStack AI"
|
|
10
|
+
documentation = "https://jigsawstack.com/docs/api-reference/ai/sentiment"
|
|
11
|
+
icon = "JigsawStack"
|
|
12
|
+
name = "JigsawStackSentiment"
|
|
13
|
+
|
|
14
|
+
inputs = [
|
|
15
|
+
SecretStrInput(
|
|
16
|
+
name="api_key",
|
|
17
|
+
display_name="JigsawStack API Key",
|
|
18
|
+
info="Your JigsawStack API key for authentication",
|
|
19
|
+
required=True,
|
|
20
|
+
),
|
|
21
|
+
MessageTextInput(
|
|
22
|
+
name="text",
|
|
23
|
+
display_name="Text",
|
|
24
|
+
info="Text to analyze for sentiment",
|
|
25
|
+
required=True,
|
|
26
|
+
tool_mode=True,
|
|
27
|
+
),
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
outputs = [
|
|
31
|
+
Output(display_name="Sentiment Data", name="sentiment_data", method="analyze_sentiment"),
|
|
32
|
+
Output(display_name="Sentiment Text", name="sentiment_text", method="get_sentiment_text"),
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
def analyze_sentiment(self) -> Data:
|
|
36
|
+
try:
|
|
37
|
+
from jigsawstack import JigsawStack, JigsawStackError
|
|
38
|
+
except ImportError as e:
|
|
39
|
+
jigsawstack_import_error = (
|
|
40
|
+
"JigsawStack package not found. Please install it using: pip install jigsawstack>=0.2.7"
|
|
41
|
+
)
|
|
42
|
+
raise ImportError(jigsawstack_import_error) from e
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
client = JigsawStack(api_key=self.api_key)
|
|
46
|
+
response = client.sentiment({"text": self.text})
|
|
47
|
+
|
|
48
|
+
api_error_msg = "JigsawStack API returned unsuccessful response"
|
|
49
|
+
if not response.get("success", False):
|
|
50
|
+
raise ValueError(api_error_msg)
|
|
51
|
+
|
|
52
|
+
sentiment_data = response.get("sentiment", {})
|
|
53
|
+
|
|
54
|
+
result_data = {
|
|
55
|
+
"text_analyzed": self.text,
|
|
56
|
+
"sentiment": sentiment_data.get("sentiment", "Unknown"),
|
|
57
|
+
"emotion": sentiment_data.get("emotion", "Unknown"),
|
|
58
|
+
"score": sentiment_data.get("score", 0.0),
|
|
59
|
+
"sentences": response.get("sentences", []),
|
|
60
|
+
"success": True,
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
self.status = (
|
|
64
|
+
f"Sentiment: {sentiment_data.get('sentiment', 'Unknown')} | "
|
|
65
|
+
f"Emotion: {sentiment_data.get('emotion', 'Unknown')} | "
|
|
66
|
+
f"Score: {sentiment_data.get('score', 0.0):.3f}"
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
return Data(data=result_data)
|
|
70
|
+
|
|
71
|
+
except JigsawStackError as e:
|
|
72
|
+
error_data = {"error": str(e), "text_analyzed": self.text, "success": False}
|
|
73
|
+
self.status = f"Error: {e!s}"
|
|
74
|
+
return Data(data=error_data)
|
|
75
|
+
|
|
76
|
+
def get_sentiment_text(self) -> Message:
|
|
77
|
+
try:
|
|
78
|
+
from jigsawstack import JigsawStack, JigsawStackError
|
|
79
|
+
except ImportError:
|
|
80
|
+
return Message(text="Error: JigsawStack package not found. Please install it with: pip install jigsawstack")
|
|
81
|
+
|
|
82
|
+
try:
|
|
83
|
+
client = JigsawStack(api_key=self.api_key)
|
|
84
|
+
response = client.sentiment({"text": self.text})
|
|
85
|
+
|
|
86
|
+
sentiment_data = response.get("sentiment", {})
|
|
87
|
+
sentences = response.get("sentences", [])
|
|
88
|
+
|
|
89
|
+
# Format the output
|
|
90
|
+
formatted_output = f"""Sentiment Analysis Results:
|
|
91
|
+
|
|
92
|
+
Text: {self.text}
|
|
93
|
+
|
|
94
|
+
Overall Sentiment: {sentiment_data.get("sentiment", "Unknown")}
|
|
95
|
+
Emotion: {sentiment_data.get("emotion", "Unknown")}
|
|
96
|
+
Score: {sentiment_data.get("score", 0.0):.3f}
|
|
97
|
+
|
|
98
|
+
Sentence-by-sentence Analysis:
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
for i, sentence in enumerate(sentences, 1):
|
|
102
|
+
formatted_output += (
|
|
103
|
+
f"{i}. {sentence.get('text', '')}\n"
|
|
104
|
+
f" Sentiment: {sentence.get('sentiment', 'Unknown')} | "
|
|
105
|
+
f"Emotion: {sentence.get('emotion', 'Unknown')} | "
|
|
106
|
+
f"Score: {sentence.get('score', 0.0):.3f}\n"
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
return Message(text=formatted_output)
|
|
110
|
+
|
|
111
|
+
except JigsawStackError as e:
|
|
112
|
+
return Message(text=f"Error analyzing sentiment: {e!s}")
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
from lfx.custom.custom_component.component import Component
|
|
2
|
+
from lfx.io import MessageTextInput, Output, QueryInput, SecretStrInput, StrInput
|
|
3
|
+
from lfx.schema.data import Data
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class JigsawStackTextToSQLComponent(Component):
|
|
7
|
+
display_name = "Text to SQL"
|
|
8
|
+
description = "Convert natural language to SQL queries using JigsawStack AI"
|
|
9
|
+
documentation = "https://jigsawstack.com/docs/api-reference/ai/text-to-sql"
|
|
10
|
+
icon = "JigsawStack"
|
|
11
|
+
name = "JigsawStackTextToSQL"
|
|
12
|
+
|
|
13
|
+
inputs = [
|
|
14
|
+
SecretStrInput(
|
|
15
|
+
name="api_key",
|
|
16
|
+
display_name="JigsawStack API Key",
|
|
17
|
+
info="Your JigsawStack API key for authentication",
|
|
18
|
+
required=True,
|
|
19
|
+
),
|
|
20
|
+
QueryInput(
|
|
21
|
+
name="prompt",
|
|
22
|
+
display_name="Prompt",
|
|
23
|
+
info="Natural language description of the SQL query you want to generate",
|
|
24
|
+
required=True,
|
|
25
|
+
tool_mode=True,
|
|
26
|
+
),
|
|
27
|
+
MessageTextInput(
|
|
28
|
+
name="sql_schema",
|
|
29
|
+
display_name="SQL Schema",
|
|
30
|
+
info=(
|
|
31
|
+
"The database schema information. Can be a CREATE TABLE statement or schema description. "
|
|
32
|
+
"Specifying this parameter improves SQL generation accuracy by applying "
|
|
33
|
+
"database-specific syntax and optimizations."
|
|
34
|
+
),
|
|
35
|
+
required=False,
|
|
36
|
+
tool_mode=True,
|
|
37
|
+
),
|
|
38
|
+
StrInput(
|
|
39
|
+
name="file_store_key",
|
|
40
|
+
display_name="File Store Key",
|
|
41
|
+
info=(
|
|
42
|
+
"The key used to store the database schema on Jigsawstack file Storage. "
|
|
43
|
+
"Not required if sql_schema is specified."
|
|
44
|
+
),
|
|
45
|
+
required=False,
|
|
46
|
+
tool_mode=True,
|
|
47
|
+
),
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
outputs = [
|
|
51
|
+
Output(display_name="SQL Query", name="sql_query", method="generate_sql"),
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
def generate_sql(self) -> Data:
|
|
55
|
+
try:
|
|
56
|
+
from jigsawstack import JigsawStack, JigsawStackError
|
|
57
|
+
except ImportError as e:
|
|
58
|
+
jigsawstack_import_error = (
|
|
59
|
+
"JigsawStack package not found. Please install it using: pip install jigsawstack>=0.2.7"
|
|
60
|
+
)
|
|
61
|
+
raise ImportError(jigsawstack_import_error) from e
|
|
62
|
+
|
|
63
|
+
try:
|
|
64
|
+
schema_error = "Either 'sql_schema' or 'file_store_key' must be provided"
|
|
65
|
+
if not self.sql_schema and not self.file_store_key:
|
|
66
|
+
raise ValueError(schema_error)
|
|
67
|
+
|
|
68
|
+
# build request object
|
|
69
|
+
params = {"prompt": self.prompt}
|
|
70
|
+
|
|
71
|
+
if self.sql_schema:
|
|
72
|
+
params["sql_schema"] = self.sql_schema
|
|
73
|
+
if self.file_store_key:
|
|
74
|
+
params["file_store_key"] = self.file_store_key
|
|
75
|
+
|
|
76
|
+
client = JigsawStack(api_key=self.api_key)
|
|
77
|
+
response = client.text_to_sql(params)
|
|
78
|
+
|
|
79
|
+
api_error_msg = "JigsawStack API returned unsuccessful response"
|
|
80
|
+
if not response.get("success", False):
|
|
81
|
+
raise ValueError(api_error_msg)
|
|
82
|
+
|
|
83
|
+
return Data(data=response)
|
|
84
|
+
|
|
85
|
+
except ValueError:
|
|
86
|
+
raise
|
|
87
|
+
except JigsawStackError as e:
|
|
88
|
+
error_data = {"error": str(e), "success": False}
|
|
89
|
+
self.status = f"Error: {e!s}"
|
|
90
|
+
return Data(data=error_data)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
from lfx.custom.custom_component.component import Component
|
|
2
|
+
from lfx.io import MessageTextInput, Output, SecretStrInput, StrInput
|
|
3
|
+
from lfx.schema.data import Data
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class JigsawStackTextTranslateComponent(Component):
|
|
7
|
+
display_name = "Text Translate"
|
|
8
|
+
description = "Translate text from one language to another with support for multiple text formats."
|
|
9
|
+
documentation = "https://jigsawstack.com/docs/api-reference/ai/translate"
|
|
10
|
+
icon = "JigsawStack"
|
|
11
|
+
name = "JigsawStackTextTranslate"
|
|
12
|
+
inputs = [
|
|
13
|
+
SecretStrInput(
|
|
14
|
+
name="api_key",
|
|
15
|
+
display_name="JigsawStack API Key",
|
|
16
|
+
info="Your JigsawStack API key for authentication",
|
|
17
|
+
required=True,
|
|
18
|
+
),
|
|
19
|
+
StrInput(
|
|
20
|
+
name="target_language",
|
|
21
|
+
display_name="Target Language",
|
|
22
|
+
info="The language code of the target language to translate to. \
|
|
23
|
+
Language code is identified by a unique ISO 639-1 two-letter code",
|
|
24
|
+
required=True,
|
|
25
|
+
tool_mode=True,
|
|
26
|
+
),
|
|
27
|
+
MessageTextInput(
|
|
28
|
+
name="text",
|
|
29
|
+
display_name="Text",
|
|
30
|
+
info="The text to translate. This can be a single string or a list of strings. \
|
|
31
|
+
If a list is provided, each string will be translated separately.",
|
|
32
|
+
required=True,
|
|
33
|
+
is_list=True,
|
|
34
|
+
tool_mode=True,
|
|
35
|
+
),
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
outputs = [
|
|
39
|
+
Output(display_name="Translation Results", name="translation_results", method="translation"),
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
def translation(self) -> Data:
|
|
43
|
+
try:
|
|
44
|
+
from jigsawstack import JigsawStack, JigsawStackError
|
|
45
|
+
except ImportError as e:
|
|
46
|
+
jigsawstack_import_error = (
|
|
47
|
+
"JigsawStack package not found. Please install it using: pip install jigsawstack>=0.2.7"
|
|
48
|
+
)
|
|
49
|
+
raise ImportError(jigsawstack_import_error) from e
|
|
50
|
+
|
|
51
|
+
try:
|
|
52
|
+
client = JigsawStack(api_key=self.api_key)
|
|
53
|
+
|
|
54
|
+
# build request object
|
|
55
|
+
params = {}
|
|
56
|
+
if self.target_language:
|
|
57
|
+
params["target_language"] = self.target_language
|
|
58
|
+
|
|
59
|
+
if self.text:
|
|
60
|
+
if isinstance(self.text, list):
|
|
61
|
+
params["text"] = self.text
|
|
62
|
+
else:
|
|
63
|
+
params["text"] = [self.text]
|
|
64
|
+
|
|
65
|
+
# Call web scraping
|
|
66
|
+
response = client.translate.text(params)
|
|
67
|
+
|
|
68
|
+
if not response.get("success", False):
|
|
69
|
+
failed_response_error = "JigsawStack API returned unsuccessful response"
|
|
70
|
+
raise ValueError(failed_response_error)
|
|
71
|
+
|
|
72
|
+
return Data(data=response)
|
|
73
|
+
|
|
74
|
+
except JigsawStackError as e:
|
|
75
|
+
error_data = {"error": str(e), "success": False}
|
|
76
|
+
self.status = f"Error: {e!s}"
|
|
77
|
+
return Data(data=error_data)
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
from lfx.custom.custom_component.component import Component
|
|
2
|
+
from lfx.io import IntInput, MessageTextInput, Output, SecretStrInput, StrInput
|
|
3
|
+
from lfx.schema.data import Data
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class JigsawStackVOCRComponent(Component):
|
|
7
|
+
display_name = "VOCR"
|
|
8
|
+
description = "Extract data from any document type in a consistent structure with fine-tuned \
|
|
9
|
+
vLLMs for the highest accuracy"
|
|
10
|
+
documentation = "https://jigsawstack.com/docs/api-reference/ai/vocr"
|
|
11
|
+
icon = "JigsawStack"
|
|
12
|
+
name = "JigsawStackVOCR"
|
|
13
|
+
|
|
14
|
+
inputs = [
|
|
15
|
+
SecretStrInput(
|
|
16
|
+
name="api_key",
|
|
17
|
+
display_name="JigsawStack API Key",
|
|
18
|
+
info="Your JigsawStack API key for authentication",
|
|
19
|
+
required=True,
|
|
20
|
+
),
|
|
21
|
+
MessageTextInput(
|
|
22
|
+
name="prompts",
|
|
23
|
+
display_name="Prompts",
|
|
24
|
+
info="The prompts used to describe the image. Default prompt is Describe the image in detail. \
|
|
25
|
+
You can pass a list of comma-separated prompts to extract different information from the image.",
|
|
26
|
+
required=False,
|
|
27
|
+
tool_mode=True,
|
|
28
|
+
),
|
|
29
|
+
StrInput(
|
|
30
|
+
name="url",
|
|
31
|
+
display_name="URL",
|
|
32
|
+
info="The image or document url. Not required if file_store_key is specified.",
|
|
33
|
+
required=False,
|
|
34
|
+
tool_mode=True,
|
|
35
|
+
),
|
|
36
|
+
StrInput(
|
|
37
|
+
name="file_store_key",
|
|
38
|
+
display_name="File Store Key",
|
|
39
|
+
info="The key used to store the image on Jigsawstack File Storage. Not required if url is specified.",
|
|
40
|
+
required=False,
|
|
41
|
+
tool_mode=True,
|
|
42
|
+
),
|
|
43
|
+
IntInput(
|
|
44
|
+
name="page_range_start",
|
|
45
|
+
display_name="Page Range",
|
|
46
|
+
info="Page range start limit for the document. If not specified, all pages will be processed.",
|
|
47
|
+
required=False,
|
|
48
|
+
),
|
|
49
|
+
IntInput(
|
|
50
|
+
name="page_range_end",
|
|
51
|
+
display_name="Page Range End",
|
|
52
|
+
info="Page range end limit for the document. If not specified, all pages will be processed.",
|
|
53
|
+
required=False,
|
|
54
|
+
),
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
outputs = [
|
|
58
|
+
Output(display_name="VOCR results", name="vocr_results", method="vocr"),
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
def vocr(self) -> Data:
|
|
62
|
+
try:
|
|
63
|
+
from jigsawstack import JigsawStack, JigsawStackError
|
|
64
|
+
except ImportError as e:
|
|
65
|
+
jigsawstack_import_error = (
|
|
66
|
+
"JigsawStack package not found. Please install it using: pip install jigsawstack>=0.2.7"
|
|
67
|
+
)
|
|
68
|
+
raise ImportError(jigsawstack_import_error) from e
|
|
69
|
+
|
|
70
|
+
try:
|
|
71
|
+
client = JigsawStack(api_key=self.api_key)
|
|
72
|
+
|
|
73
|
+
# build request object
|
|
74
|
+
params = {}
|
|
75
|
+
if self.prompts:
|
|
76
|
+
if isinstance(self.prompts, list):
|
|
77
|
+
params["prompt"] = self.prompts
|
|
78
|
+
elif isinstance(self.prompts, str):
|
|
79
|
+
if "," in self.prompts:
|
|
80
|
+
# Split by comma and strip whitespace
|
|
81
|
+
params["prompt"] = [p.strip() for p in self.prompts.split(",")]
|
|
82
|
+
else:
|
|
83
|
+
params["prompt"] = [self.prompts.strip()]
|
|
84
|
+
else:
|
|
85
|
+
invalid_prompt_error = "Prompt must be a list of strings or a single string"
|
|
86
|
+
raise ValueError(invalid_prompt_error)
|
|
87
|
+
if self.url:
|
|
88
|
+
params["url"] = self.url
|
|
89
|
+
if self.file_store_key:
|
|
90
|
+
params["file_store_key"] = self.file_store_key
|
|
91
|
+
|
|
92
|
+
if self.page_range_start and self.page_range_end:
|
|
93
|
+
params["page_range"] = [self.page_range_start, self.page_range_end]
|
|
94
|
+
|
|
95
|
+
# Call VOCR
|
|
96
|
+
response = client.vision.vocr(params)
|
|
97
|
+
|
|
98
|
+
if not response.get("success", False):
|
|
99
|
+
failed_response_error = "JigsawStack API returned unsuccessful response"
|
|
100
|
+
raise ValueError(failed_response_error)
|
|
101
|
+
|
|
102
|
+
return Data(data=response)
|
|
103
|
+
|
|
104
|
+
except JigsawStackError as e:
|
|
105
|
+
error_data = {"error": str(e), "success": False}
|
|
106
|
+
self.status = f"Error: {e!s}"
|
|
107
|
+
return Data(data=error_data)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"""Knowledge bases module - backwards compatibility alias for files_and_knowledge.
|
|
2
|
+
|
|
3
|
+
This module provides backwards compatibility by forwarding all imports
|
|
4
|
+
to files_and_knowledge where the actual knowledge base components are located.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import sys
|
|
10
|
+
from typing import TYPE_CHECKING, Any
|
|
11
|
+
|
|
12
|
+
from lfx.components._importing import import_mod
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from lfx.components.files_and_knowledge.ingestion import KnowledgeIngestionComponent
|
|
16
|
+
from lfx.components.files_and_knowledge.retrieval import KnowledgeRetrievalComponent
|
|
17
|
+
|
|
18
|
+
_dynamic_imports = {
|
|
19
|
+
"KnowledgeIngestionComponent": "ingestion",
|
|
20
|
+
"KnowledgeRetrievalComponent": "retrieval",
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
__all__ = ["KnowledgeIngestionComponent", "KnowledgeRetrievalComponent"]
|
|
24
|
+
|
|
25
|
+
# Register redirected submodules in sys.modules for direct importlib.import_module() calls
|
|
26
|
+
# This allows imports like: import lfx.components.knowledge_bases.ingestion
|
|
27
|
+
_redirected_submodules = {
|
|
28
|
+
"lfx.components.knowledge_bases.ingestion": "lfx.components.files_and_knowledge.ingestion",
|
|
29
|
+
"lfx.components.knowledge_bases.retrieval": "lfx.components.files_and_knowledge.retrieval",
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
for old_path, new_path in _redirected_submodules.items():
|
|
33
|
+
if old_path not in sys.modules:
|
|
34
|
+
# Use a lazy loader that imports the actual module when accessed
|
|
35
|
+
class _RedirectedModule:
|
|
36
|
+
def __init__(self, target_path: str, original_path: str):
|
|
37
|
+
self._target_path = target_path
|
|
38
|
+
self._original_path = original_path
|
|
39
|
+
self._module = None
|
|
40
|
+
|
|
41
|
+
def __getattr__(self, name: str) -> Any:
|
|
42
|
+
if self._module is None:
|
|
43
|
+
from importlib import import_module
|
|
44
|
+
|
|
45
|
+
self._module = import_module(self._target_path)
|
|
46
|
+
# Also register under the original path for future imports
|
|
47
|
+
sys.modules[self._original_path] = self._module
|
|
48
|
+
return getattr(self._module, name)
|
|
49
|
+
|
|
50
|
+
def __repr__(self) -> str:
|
|
51
|
+
return f"<redirected module '{self._original_path}' -> '{self._target_path}'>"
|
|
52
|
+
|
|
53
|
+
sys.modules[old_path] = _RedirectedModule(new_path, old_path)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def __getattr__(attr_name: str) -> Any:
|
|
57
|
+
"""Forward attribute access to files_and_knowledge components."""
|
|
58
|
+
# Handle submodule access for backwards compatibility
|
|
59
|
+
if attr_name == "ingestion":
|
|
60
|
+
from importlib import import_module
|
|
61
|
+
|
|
62
|
+
result = import_module("lfx.components.files_and_knowledge.ingestion")
|
|
63
|
+
globals()[attr_name] = result
|
|
64
|
+
return result
|
|
65
|
+
if attr_name == "retrieval":
|
|
66
|
+
from importlib import import_module
|
|
67
|
+
|
|
68
|
+
result = import_module("lfx.components.files_and_knowledge.retrieval")
|
|
69
|
+
globals()[attr_name] = result
|
|
70
|
+
return result
|
|
71
|
+
|
|
72
|
+
if attr_name not in _dynamic_imports:
|
|
73
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
|
74
|
+
raise AttributeError(msg)
|
|
75
|
+
|
|
76
|
+
# Import from files_and_knowledge using the correct package path
|
|
77
|
+
package = "lfx.components.files_and_knowledge"
|
|
78
|
+
try:
|
|
79
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], package)
|
|
80
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
|
81
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
|
82
|
+
raise AttributeError(msg) from e
|
|
83
|
+
globals()[attr_name] = result
|
|
84
|
+
return result
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def __dir__() -> list[str]:
|
|
88
|
+
"""Return directory of available components."""
|
|
89
|
+
return list(__all__)
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any
|
|
4
|
+
|
|
5
|
+
from lfx.components._importing import import_mod
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from .character import CharacterTextSplitterComponent
|
|
9
|
+
from .conversation import ConversationChainComponent
|
|
10
|
+
from .csv_agent import CSVAgentComponent
|
|
11
|
+
from .fake_embeddings import FakeEmbeddingsComponent
|
|
12
|
+
from .html_link_extractor import HtmlLinkExtractorComponent
|
|
13
|
+
from .json_agent import JsonAgentComponent
|
|
14
|
+
from .langchain_hub import LangChainHubPromptComponent
|
|
15
|
+
from .language_recursive import LanguageRecursiveTextSplitterComponent
|
|
16
|
+
from .language_semantic import SemanticTextSplitterComponent
|
|
17
|
+
from .llm_checker import LLMCheckerChainComponent
|
|
18
|
+
from .llm_math import LLMMathChainComponent
|
|
19
|
+
from .natural_language import NaturalLanguageTextSplitterComponent
|
|
20
|
+
from .openai_tools import OpenAIToolsAgentComponent
|
|
21
|
+
from .openapi import OpenAPIAgentComponent
|
|
22
|
+
from .recursive_character import RecursiveCharacterTextSplitterComponent
|
|
23
|
+
from .retrieval_qa import RetrievalQAComponent
|
|
24
|
+
from .runnable_executor import RunnableExecComponent
|
|
25
|
+
from .self_query import SelfQueryRetrieverComponent
|
|
26
|
+
from .spider import SpiderTool
|
|
27
|
+
from .sql import SQLAgentComponent
|
|
28
|
+
from .sql_database import SQLDatabaseComponent
|
|
29
|
+
from .sql_generator import SQLGeneratorComponent
|
|
30
|
+
from .tool_calling import ToolCallingAgentComponent
|
|
31
|
+
from .vector_store_info import VectorStoreInfoComponent
|
|
32
|
+
from .vector_store_router import VectorStoreRouterAgentComponent
|
|
33
|
+
from .xml_agent import XMLAgentComponent
|
|
34
|
+
|
|
35
|
+
_dynamic_imports = {
|
|
36
|
+
"CharacterTextSplitterComponent": "character",
|
|
37
|
+
"ConversationChainComponent": "conversation",
|
|
38
|
+
"CSVAgentComponent": "csv_agent",
|
|
39
|
+
"FakeEmbeddingsComponent": "fake_embeddings",
|
|
40
|
+
"HtmlLinkExtractorComponent": "html_link_extractor",
|
|
41
|
+
"JsonAgentComponent": "json_agent",
|
|
42
|
+
"LangChainHubPromptComponent": "langchain_hub",
|
|
43
|
+
"LanguageRecursiveTextSplitterComponent": "language_recursive",
|
|
44
|
+
"LLMCheckerChainComponent": "llm_checker",
|
|
45
|
+
"LLMMathChainComponent": "llm_math",
|
|
46
|
+
"NaturalLanguageTextSplitterComponent": "natural_language",
|
|
47
|
+
"OpenAIToolsAgentComponent": "openai_tools",
|
|
48
|
+
"OpenAPIAgentComponent": "openapi",
|
|
49
|
+
"RecursiveCharacterTextSplitterComponent": "recursive_character",
|
|
50
|
+
"RetrievalQAComponent": "retrieval_qa",
|
|
51
|
+
"RunnableExecComponent": "runnable_executor",
|
|
52
|
+
"SelfQueryRetrieverComponent": "self_query",
|
|
53
|
+
"SemanticTextSplitterComponent": "language_semantic",
|
|
54
|
+
"SpiderTool": "spider",
|
|
55
|
+
"SQLAgentComponent": "sql",
|
|
56
|
+
"SQLDatabaseComponent": "sql_database",
|
|
57
|
+
"SQLGeneratorComponent": "sql_generator",
|
|
58
|
+
"ToolCallingAgentComponent": "tool_calling",
|
|
59
|
+
"VectorStoreInfoComponent": "vector_store_info",
|
|
60
|
+
"VectorStoreRouterAgentComponent": "vector_store_router",
|
|
61
|
+
"XMLAgentComponent": "xml_agent",
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
__all__ = [
|
|
65
|
+
"CSVAgentComponent",
|
|
66
|
+
"CharacterTextSplitterComponent",
|
|
67
|
+
"ConversationChainComponent",
|
|
68
|
+
"FakeEmbeddingsComponent",
|
|
69
|
+
"HtmlLinkExtractorComponent",
|
|
70
|
+
"JsonAgentComponent",
|
|
71
|
+
"LLMCheckerChainComponent",
|
|
72
|
+
"LLMMathChainComponent",
|
|
73
|
+
"LangChainHubPromptComponent",
|
|
74
|
+
"LanguageRecursiveTextSplitterComponent",
|
|
75
|
+
"NaturalLanguageTextSplitterComponent",
|
|
76
|
+
"OpenAIToolsAgentComponent",
|
|
77
|
+
"OpenAPIAgentComponent",
|
|
78
|
+
"RecursiveCharacterTextSplitterComponent",
|
|
79
|
+
"RetrievalQAComponent",
|
|
80
|
+
"RunnableExecComponent",
|
|
81
|
+
"SQLAgentComponent",
|
|
82
|
+
"SQLDatabaseComponent",
|
|
83
|
+
"SQLGeneratorComponent",
|
|
84
|
+
"SelfQueryRetrieverComponent",
|
|
85
|
+
"SemanticTextSplitterComponent",
|
|
86
|
+
"SpiderTool",
|
|
87
|
+
"ToolCallingAgentComponent",
|
|
88
|
+
"VectorStoreInfoComponent",
|
|
89
|
+
"VectorStoreRouterAgentComponent",
|
|
90
|
+
"XMLAgentComponent",
|
|
91
|
+
]
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def __getattr__(attr_name: str) -> Any:
|
|
95
|
+
"""Lazily import langchain utility components on attribute access."""
|
|
96
|
+
if attr_name not in _dynamic_imports:
|
|
97
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
|
98
|
+
raise AttributeError(msg)
|
|
99
|
+
try:
|
|
100
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
|
101
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
|
102
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
|
103
|
+
raise AttributeError(msg) from e
|
|
104
|
+
globals()[attr_name] = result
|
|
105
|
+
return result
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def __dir__() -> list[str]:
|
|
109
|
+
return list(__all__)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from langchain_text_splitters import CharacterTextSplitter, TextSplitter
|
|
4
|
+
|
|
5
|
+
from lfx.base.textsplitters.model import LCTextSplitterComponent
|
|
6
|
+
from lfx.inputs.inputs import DataInput, IntInput, MessageTextInput
|
|
7
|
+
from lfx.utils.util import unescape_string
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class CharacterTextSplitterComponent(LCTextSplitterComponent):
|
|
11
|
+
display_name = "Character Text Splitter"
|
|
12
|
+
description = "Split text by number of characters."
|
|
13
|
+
documentation = "https://docs.langflow.org/bundles-langchain"
|
|
14
|
+
name = "CharacterTextSplitter"
|
|
15
|
+
icon = "LangChain"
|
|
16
|
+
|
|
17
|
+
inputs = [
|
|
18
|
+
IntInput(
|
|
19
|
+
name="chunk_size",
|
|
20
|
+
display_name="Chunk Size",
|
|
21
|
+
info="The maximum length of each chunk.",
|
|
22
|
+
value=1000,
|
|
23
|
+
),
|
|
24
|
+
IntInput(
|
|
25
|
+
name="chunk_overlap",
|
|
26
|
+
display_name="Chunk Overlap",
|
|
27
|
+
info="The amount of overlap between chunks.",
|
|
28
|
+
value=200,
|
|
29
|
+
),
|
|
30
|
+
DataInput(
|
|
31
|
+
name="data_input",
|
|
32
|
+
display_name="Input",
|
|
33
|
+
info="The texts to split.",
|
|
34
|
+
input_types=["Document", "Data"],
|
|
35
|
+
required=True,
|
|
36
|
+
),
|
|
37
|
+
MessageTextInput(
|
|
38
|
+
name="separator",
|
|
39
|
+
display_name="Separator",
|
|
40
|
+
info='The characters to split on.\nIf left empty defaults to "\\n\\n".',
|
|
41
|
+
),
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
def get_data_input(self) -> Any:
|
|
45
|
+
return self.data_input
|
|
46
|
+
|
|
47
|
+
def build_text_splitter(self) -> TextSplitter:
|
|
48
|
+
separator = unescape_string(self.separator) if self.separator else "\n\n"
|
|
49
|
+
return CharacterTextSplitter(
|
|
50
|
+
chunk_overlap=self.chunk_overlap,
|
|
51
|
+
chunk_size=self.chunk_size,
|
|
52
|
+
separator=separator,
|
|
53
|
+
)
|