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,83 @@
|
|
|
1
|
+
from langchain_openai import AzureOpenAIEmbeddings
|
|
2
|
+
|
|
3
|
+
from lfx.base.models.model import LCModelComponent
|
|
4
|
+
from lfx.base.models.openai_constants import OPENAI_EMBEDDING_MODEL_NAMES
|
|
5
|
+
from lfx.field_typing import Embeddings
|
|
6
|
+
from lfx.io import DropdownInput, IntInput, MessageTextInput, Output, SecretStrInput
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class AzureOpenAIEmbeddingsComponent(LCModelComponent):
|
|
10
|
+
display_name: str = "Azure OpenAI Embeddings"
|
|
11
|
+
description: str = "Generate embeddings using Azure OpenAI models."
|
|
12
|
+
documentation: str = "https://python.langchain.com/docs/integrations/text_embedding/azureopenai"
|
|
13
|
+
icon = "Azure"
|
|
14
|
+
name = "AzureOpenAIEmbeddings"
|
|
15
|
+
|
|
16
|
+
API_VERSION_OPTIONS = [
|
|
17
|
+
"2022-12-01",
|
|
18
|
+
"2023-03-15-preview",
|
|
19
|
+
"2023-05-15",
|
|
20
|
+
"2023-06-01-preview",
|
|
21
|
+
"2023-07-01-preview",
|
|
22
|
+
"2023-08-01-preview",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
inputs = [
|
|
26
|
+
DropdownInput(
|
|
27
|
+
name="model",
|
|
28
|
+
display_name="Model",
|
|
29
|
+
advanced=False,
|
|
30
|
+
options=OPENAI_EMBEDDING_MODEL_NAMES,
|
|
31
|
+
value=OPENAI_EMBEDDING_MODEL_NAMES[0],
|
|
32
|
+
),
|
|
33
|
+
MessageTextInput(
|
|
34
|
+
name="azure_endpoint",
|
|
35
|
+
display_name="Azure Endpoint",
|
|
36
|
+
required=True,
|
|
37
|
+
info="Your Azure endpoint, including the resource. Example: `https://example-resource.azure.openai.com/`",
|
|
38
|
+
),
|
|
39
|
+
MessageTextInput(
|
|
40
|
+
name="azure_deployment",
|
|
41
|
+
display_name="Deployment Name",
|
|
42
|
+
required=True,
|
|
43
|
+
),
|
|
44
|
+
DropdownInput(
|
|
45
|
+
name="api_version",
|
|
46
|
+
display_name="API Version",
|
|
47
|
+
options=API_VERSION_OPTIONS,
|
|
48
|
+
value=API_VERSION_OPTIONS[-1],
|
|
49
|
+
advanced=True,
|
|
50
|
+
),
|
|
51
|
+
SecretStrInput(
|
|
52
|
+
name="api_key",
|
|
53
|
+
display_name="Azure OpenAI API Key",
|
|
54
|
+
required=True,
|
|
55
|
+
),
|
|
56
|
+
IntInput(
|
|
57
|
+
name="dimensions",
|
|
58
|
+
display_name="Dimensions",
|
|
59
|
+
info="The number of dimensions the resulting output embeddings should have. "
|
|
60
|
+
"Only supported by certain models.",
|
|
61
|
+
advanced=True,
|
|
62
|
+
),
|
|
63
|
+
]
|
|
64
|
+
|
|
65
|
+
outputs = [
|
|
66
|
+
Output(display_name="Embeddings", name="embeddings", method="build_embeddings"),
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
def build_embeddings(self) -> Embeddings:
|
|
70
|
+
try:
|
|
71
|
+
embeddings = AzureOpenAIEmbeddings(
|
|
72
|
+
model=self.model,
|
|
73
|
+
azure_endpoint=self.azure_endpoint,
|
|
74
|
+
azure_deployment=self.azure_deployment,
|
|
75
|
+
api_version=self.api_version,
|
|
76
|
+
api_key=self.api_key,
|
|
77
|
+
dimensions=self.dimensions or None,
|
|
78
|
+
)
|
|
79
|
+
except Exception as e:
|
|
80
|
+
msg = f"Could not connect to AzureOpenAIEmbeddings API: {e}"
|
|
81
|
+
raise ValueError(msg) from e
|
|
82
|
+
|
|
83
|
+
return embeddings
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any
|
|
4
|
+
|
|
5
|
+
from lfx.components._importing import import_mod
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from lfx.components.baidu.baidu_qianfan_chat import QianfanChatEndpoint
|
|
9
|
+
|
|
10
|
+
_dynamic_imports = {
|
|
11
|
+
"QianfanChatEndpoint": "baidu_qianfan_chat",
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
__all__ = ["QianfanChatEndpoint"]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def __getattr__(attr_name: str) -> Any:
|
|
18
|
+
"""Lazily import baidu components on attribute access."""
|
|
19
|
+
if attr_name not in _dynamic_imports:
|
|
20
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
|
21
|
+
raise AttributeError(msg)
|
|
22
|
+
try:
|
|
23
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
|
24
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
|
25
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
|
26
|
+
raise AttributeError(msg) from e
|
|
27
|
+
globals()[attr_name] = result
|
|
28
|
+
return result
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def __dir__() -> list[str]:
|
|
32
|
+
return list(__all__)
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
from langchain_community.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint
|
|
2
|
+
|
|
3
|
+
from lfx.base.models.model import LCModelComponent
|
|
4
|
+
from lfx.field_typing.constants import LanguageModel
|
|
5
|
+
from lfx.io import DropdownInput, FloatInput, MessageTextInput, SecretStrInput
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class QianfanChatEndpointComponent(LCModelComponent):
|
|
9
|
+
display_name: str = "Qianfan"
|
|
10
|
+
description: str = "Generate text using Baidu Qianfan LLMs."
|
|
11
|
+
documentation: str = "https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint"
|
|
12
|
+
icon = "BaiduQianfan"
|
|
13
|
+
name = "BaiduQianfanChatModel"
|
|
14
|
+
|
|
15
|
+
inputs = [
|
|
16
|
+
*LCModelComponent.get_base_inputs(),
|
|
17
|
+
DropdownInput(
|
|
18
|
+
name="model",
|
|
19
|
+
display_name="Model Name",
|
|
20
|
+
options=[
|
|
21
|
+
"EB-turbo-AppBuilder",
|
|
22
|
+
"Llama-2-70b-chat",
|
|
23
|
+
"ERNIE-Bot-turbo-AI",
|
|
24
|
+
"ERNIE-Lite-8K-0308",
|
|
25
|
+
"ERNIE-Speed",
|
|
26
|
+
"Qianfan-Chinese-Llama-2-13B",
|
|
27
|
+
"ERNIE-3.5-8K",
|
|
28
|
+
"BLOOMZ-7B",
|
|
29
|
+
"Qianfan-Chinese-Llama-2-7B",
|
|
30
|
+
"XuanYuan-70B-Chat-4bit",
|
|
31
|
+
"AquilaChat-7B",
|
|
32
|
+
"ERNIE-Bot-4",
|
|
33
|
+
"Llama-2-13b-chat",
|
|
34
|
+
"ChatGLM2-6B-32K",
|
|
35
|
+
"ERNIE-Bot",
|
|
36
|
+
"ERNIE-Speed-128k",
|
|
37
|
+
"ERNIE-4.0-8K",
|
|
38
|
+
"Qianfan-BLOOMZ-7B-compressed",
|
|
39
|
+
"ERNIE Speed",
|
|
40
|
+
"Llama-2-7b-chat",
|
|
41
|
+
"Mixtral-8x7B-Instruct",
|
|
42
|
+
"ERNIE 3.5",
|
|
43
|
+
"ERNIE Speed-AppBuilder",
|
|
44
|
+
"ERNIE-Speed-8K",
|
|
45
|
+
"Yi-34B-Chat",
|
|
46
|
+
],
|
|
47
|
+
info="https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint",
|
|
48
|
+
value="ERNIE-4.0-8K",
|
|
49
|
+
),
|
|
50
|
+
SecretStrInput(
|
|
51
|
+
name="qianfan_ak",
|
|
52
|
+
display_name="Qianfan Ak",
|
|
53
|
+
info="which you could get from https://cloud.baidu.com/product/wenxinworkshop",
|
|
54
|
+
),
|
|
55
|
+
SecretStrInput(
|
|
56
|
+
name="qianfan_sk",
|
|
57
|
+
display_name="Qianfan Sk",
|
|
58
|
+
info="which you could get from https://cloud.baidu.com/product/wenxinworkshop",
|
|
59
|
+
),
|
|
60
|
+
FloatInput(
|
|
61
|
+
name="top_p",
|
|
62
|
+
display_name="Top p",
|
|
63
|
+
info="Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo",
|
|
64
|
+
value=0.8,
|
|
65
|
+
advanced=True,
|
|
66
|
+
),
|
|
67
|
+
FloatInput(
|
|
68
|
+
name="temperature",
|
|
69
|
+
display_name="Temperature",
|
|
70
|
+
info="Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo",
|
|
71
|
+
value=0.95,
|
|
72
|
+
),
|
|
73
|
+
FloatInput(
|
|
74
|
+
name="penalty_score",
|
|
75
|
+
display_name="Penalty Score",
|
|
76
|
+
info="Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo",
|
|
77
|
+
value=1.0,
|
|
78
|
+
advanced=True,
|
|
79
|
+
),
|
|
80
|
+
MessageTextInput(
|
|
81
|
+
name="endpoint", display_name="Endpoint", info="Endpoint of the Qianfan LLM, required if custom model used."
|
|
82
|
+
),
|
|
83
|
+
]
|
|
84
|
+
|
|
85
|
+
def build_model(self) -> LanguageModel: # type: ignore[type-var]
|
|
86
|
+
model = self.model
|
|
87
|
+
qianfan_ak = self.qianfan_ak
|
|
88
|
+
qianfan_sk = self.qianfan_sk
|
|
89
|
+
top_p = self.top_p
|
|
90
|
+
temperature = self.temperature
|
|
91
|
+
penalty_score = self.penalty_score
|
|
92
|
+
endpoint = self.endpoint
|
|
93
|
+
|
|
94
|
+
try:
|
|
95
|
+
kwargs = {
|
|
96
|
+
"model": model,
|
|
97
|
+
"qianfan_ak": qianfan_ak or None,
|
|
98
|
+
"qianfan_sk": qianfan_sk or None,
|
|
99
|
+
"top_p": top_p,
|
|
100
|
+
"temperature": temperature,
|
|
101
|
+
"penalty_score": penalty_score,
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if endpoint: # Only add endpoint if it has a value
|
|
105
|
+
kwargs["endpoint"] = endpoint
|
|
106
|
+
|
|
107
|
+
output = QianfanChatEndpoint(**kwargs)
|
|
108
|
+
|
|
109
|
+
except Exception as e:
|
|
110
|
+
msg = "Could not connect to Baidu Qianfan API."
|
|
111
|
+
raise ValueError(msg) from e
|
|
112
|
+
|
|
113
|
+
return output
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
from typing import cast
|
|
2
|
+
|
|
3
|
+
from langchain_community.tools.bing_search import BingSearchResults
|
|
4
|
+
from langchain_community.utilities import BingSearchAPIWrapper
|
|
5
|
+
|
|
6
|
+
from lfx.base.langchain_utilities.model import LCToolComponent
|
|
7
|
+
from lfx.field_typing import Tool
|
|
8
|
+
from lfx.inputs.inputs import IntInput, MessageTextInput, MultilineInput, SecretStrInput
|
|
9
|
+
from lfx.schema.data import Data
|
|
10
|
+
from lfx.schema.dataframe import DataFrame
|
|
11
|
+
from lfx.template.field.base import Output
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class BingSearchAPIComponent(LCToolComponent):
|
|
15
|
+
display_name = "Bing Search API"
|
|
16
|
+
description = "Call the Bing Search API."
|
|
17
|
+
name = "BingSearchAPI"
|
|
18
|
+
icon = "Bing"
|
|
19
|
+
|
|
20
|
+
inputs = [
|
|
21
|
+
SecretStrInput(name="bing_subscription_key", display_name="Bing Subscription Key"),
|
|
22
|
+
MultilineInput(
|
|
23
|
+
name="input_value",
|
|
24
|
+
display_name="Input",
|
|
25
|
+
),
|
|
26
|
+
MessageTextInput(name="bing_search_url", display_name="Bing Search URL", advanced=True),
|
|
27
|
+
IntInput(name="k", display_name="Number of results", value=4, required=True),
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
outputs = [
|
|
31
|
+
Output(display_name="DataFrame", name="dataframe", method="fetch_content_dataframe"),
|
|
32
|
+
Output(display_name="Tool", name="tool", method="build_tool"),
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
def run_model(self) -> DataFrame:
|
|
36
|
+
return self.fetch_content_dataframe()
|
|
37
|
+
|
|
38
|
+
def fetch_content(self) -> list[Data]:
|
|
39
|
+
if self.bing_search_url:
|
|
40
|
+
wrapper = BingSearchAPIWrapper(
|
|
41
|
+
bing_search_url=self.bing_search_url, bing_subscription_key=self.bing_subscription_key
|
|
42
|
+
)
|
|
43
|
+
else:
|
|
44
|
+
wrapper = BingSearchAPIWrapper(bing_subscription_key=self.bing_subscription_key)
|
|
45
|
+
results = wrapper.results(query=self.input_value, num_results=self.k)
|
|
46
|
+
data = [Data(data=result, text=result["snippet"]) for result in results]
|
|
47
|
+
self.status = data
|
|
48
|
+
return data
|
|
49
|
+
|
|
50
|
+
def fetch_content_dataframe(self) -> DataFrame:
|
|
51
|
+
data = self.fetch_content()
|
|
52
|
+
return DataFrame(data)
|
|
53
|
+
|
|
54
|
+
def build_tool(self) -> Tool:
|
|
55
|
+
if self.bing_search_url:
|
|
56
|
+
wrapper = BingSearchAPIWrapper(
|
|
57
|
+
bing_search_url=self.bing_search_url, bing_subscription_key=self.bing_subscription_key
|
|
58
|
+
)
|
|
59
|
+
else:
|
|
60
|
+
wrapper = BingSearchAPIWrapper(bing_subscription_key=self.bing_subscription_key)
|
|
61
|
+
return cast("Tool", BingSearchResults(api_wrapper=wrapper, num_results=self.k))
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any
|
|
4
|
+
|
|
5
|
+
from lfx.components._importing import import_mod
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from .cassandra import CassandraVectorStoreComponent
|
|
9
|
+
from .cassandra_chat import CassandraChatMemory
|
|
10
|
+
from .cassandra_graph import CassandraGraphVectorStoreComponent
|
|
11
|
+
|
|
12
|
+
_dynamic_imports = {
|
|
13
|
+
"CassandraVectorStoreComponent": "cassandra",
|
|
14
|
+
"CassandraGraphVectorStoreComponent": "cassandra_graph",
|
|
15
|
+
"CassandraChatMemory": "cassandra_chat",
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
"CassandraChatMemory",
|
|
20
|
+
"CassandraGraphVectorStoreComponent",
|
|
21
|
+
"CassandraVectorStoreComponent",
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def __getattr__(attr_name: str) -> Any:
|
|
26
|
+
"""Lazily import Cassandra components on attribute access."""
|
|
27
|
+
if attr_name not in _dynamic_imports:
|
|
28
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
|
29
|
+
raise AttributeError(msg)
|
|
30
|
+
try:
|
|
31
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
|
32
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
|
33
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
|
34
|
+
raise AttributeError(msg) from e
|
|
35
|
+
globals()[attr_name] = result
|
|
36
|
+
return result
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def __dir__() -> list[str]:
|
|
40
|
+
return list(__all__)
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
from langchain_community.vectorstores import Cassandra
|
|
2
|
+
|
|
3
|
+
from lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
|
|
4
|
+
from lfx.helpers.data import docs_to_data
|
|
5
|
+
from lfx.inputs.inputs import BoolInput, DictInput, FloatInput
|
|
6
|
+
from lfx.io import (
|
|
7
|
+
DropdownInput,
|
|
8
|
+
HandleInput,
|
|
9
|
+
IntInput,
|
|
10
|
+
MessageTextInput,
|
|
11
|
+
SecretStrInput,
|
|
12
|
+
)
|
|
13
|
+
from lfx.schema.data import Data
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class CassandraVectorStoreComponent(LCVectorStoreComponent):
|
|
17
|
+
display_name = "Cassandra"
|
|
18
|
+
description = "Cassandra Vector Store with search capabilities"
|
|
19
|
+
documentation = "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/cassandra"
|
|
20
|
+
name = "Cassandra"
|
|
21
|
+
icon = "Cassandra"
|
|
22
|
+
|
|
23
|
+
inputs = [
|
|
24
|
+
MessageTextInput(
|
|
25
|
+
name="database_ref",
|
|
26
|
+
display_name="Contact Points / Astra Database ID",
|
|
27
|
+
info="Contact points for the database (or Astra DB database ID)",
|
|
28
|
+
required=True,
|
|
29
|
+
),
|
|
30
|
+
MessageTextInput(
|
|
31
|
+
name="username", display_name="Username", info="Username for the database (leave empty for Astra DB)."
|
|
32
|
+
),
|
|
33
|
+
SecretStrInput(
|
|
34
|
+
name="token",
|
|
35
|
+
display_name="Password / Astra DB Token",
|
|
36
|
+
info="User password for the database (or Astra DB token).",
|
|
37
|
+
required=True,
|
|
38
|
+
),
|
|
39
|
+
MessageTextInput(
|
|
40
|
+
name="keyspace",
|
|
41
|
+
display_name="Keyspace",
|
|
42
|
+
info="Table Keyspace (or Astra DB namespace).",
|
|
43
|
+
required=True,
|
|
44
|
+
),
|
|
45
|
+
MessageTextInput(
|
|
46
|
+
name="table_name",
|
|
47
|
+
display_name="Table Name",
|
|
48
|
+
info="The name of the table (or Astra DB collection) where vectors will be stored.",
|
|
49
|
+
required=True,
|
|
50
|
+
),
|
|
51
|
+
IntInput(
|
|
52
|
+
name="ttl_seconds",
|
|
53
|
+
display_name="TTL Seconds",
|
|
54
|
+
info="Optional time-to-live for the added texts.",
|
|
55
|
+
advanced=True,
|
|
56
|
+
),
|
|
57
|
+
IntInput(
|
|
58
|
+
name="batch_size",
|
|
59
|
+
display_name="Batch Size",
|
|
60
|
+
info="Optional number of data to process in a single batch.",
|
|
61
|
+
value=16,
|
|
62
|
+
advanced=True,
|
|
63
|
+
),
|
|
64
|
+
DropdownInput(
|
|
65
|
+
name="setup_mode",
|
|
66
|
+
display_name="Setup Mode",
|
|
67
|
+
info="Configuration mode for setting up the Cassandra table, with options like 'Sync', 'Async', or 'Off'.",
|
|
68
|
+
options=["Sync", "Async", "Off"],
|
|
69
|
+
value="Sync",
|
|
70
|
+
advanced=True,
|
|
71
|
+
),
|
|
72
|
+
DictInput(
|
|
73
|
+
name="cluster_kwargs",
|
|
74
|
+
display_name="Cluster arguments",
|
|
75
|
+
info="Optional dictionary of additional keyword arguments for the Cassandra cluster.",
|
|
76
|
+
advanced=True,
|
|
77
|
+
list=True,
|
|
78
|
+
),
|
|
79
|
+
*LCVectorStoreComponent.inputs,
|
|
80
|
+
HandleInput(name="embedding", display_name="Embedding", input_types=["Embeddings"]),
|
|
81
|
+
IntInput(
|
|
82
|
+
name="number_of_results",
|
|
83
|
+
display_name="Number of Results",
|
|
84
|
+
info="Number of results to return.",
|
|
85
|
+
value=4,
|
|
86
|
+
advanced=True,
|
|
87
|
+
),
|
|
88
|
+
DropdownInput(
|
|
89
|
+
name="search_type",
|
|
90
|
+
display_name="Search Type",
|
|
91
|
+
info="Search type to use",
|
|
92
|
+
options=["Similarity", "Similarity with score threshold", "MMR (Max Marginal Relevance)"],
|
|
93
|
+
value="Similarity",
|
|
94
|
+
advanced=True,
|
|
95
|
+
),
|
|
96
|
+
FloatInput(
|
|
97
|
+
name="search_score_threshold",
|
|
98
|
+
display_name="Search Score Threshold",
|
|
99
|
+
info="Minimum similarity score threshold for search results. "
|
|
100
|
+
"(when using 'Similarity with score threshold')",
|
|
101
|
+
value=0,
|
|
102
|
+
advanced=True,
|
|
103
|
+
),
|
|
104
|
+
DictInput(
|
|
105
|
+
name="search_filter",
|
|
106
|
+
display_name="Search Metadata Filter",
|
|
107
|
+
info="Optional dictionary of filters to apply to the search query.",
|
|
108
|
+
advanced=True,
|
|
109
|
+
list=True,
|
|
110
|
+
),
|
|
111
|
+
MessageTextInput(
|
|
112
|
+
name="body_search",
|
|
113
|
+
display_name="Search Body",
|
|
114
|
+
info="Document textual search terms to apply to the search query.",
|
|
115
|
+
advanced=True,
|
|
116
|
+
),
|
|
117
|
+
BoolInput(
|
|
118
|
+
name="enable_body_search",
|
|
119
|
+
display_name="Enable Body Search",
|
|
120
|
+
info="Flag to enable body search. This must be enabled BEFORE the table is created.",
|
|
121
|
+
value=False,
|
|
122
|
+
advanced=True,
|
|
123
|
+
),
|
|
124
|
+
]
|
|
125
|
+
|
|
126
|
+
@check_cached_vector_store
|
|
127
|
+
def build_vector_store(self) -> Cassandra:
|
|
128
|
+
try:
|
|
129
|
+
import cassio
|
|
130
|
+
from langchain_community.utilities.cassandra import SetupMode
|
|
131
|
+
except ImportError as e:
|
|
132
|
+
msg = "Could not import cassio integration package. Please install it with `pip install cassio`."
|
|
133
|
+
raise ImportError(msg) from e
|
|
134
|
+
|
|
135
|
+
from uuid import UUID
|
|
136
|
+
|
|
137
|
+
database_ref = self.database_ref
|
|
138
|
+
|
|
139
|
+
try:
|
|
140
|
+
UUID(self.database_ref)
|
|
141
|
+
is_astra = True
|
|
142
|
+
except ValueError:
|
|
143
|
+
is_astra = False
|
|
144
|
+
if "," in self.database_ref:
|
|
145
|
+
# use a copy because we can't change the type of the parameter
|
|
146
|
+
database_ref = self.database_ref.split(",")
|
|
147
|
+
|
|
148
|
+
if is_astra:
|
|
149
|
+
cassio.init(
|
|
150
|
+
database_id=database_ref,
|
|
151
|
+
token=self.token,
|
|
152
|
+
cluster_kwargs=self.cluster_kwargs,
|
|
153
|
+
)
|
|
154
|
+
else:
|
|
155
|
+
cassio.init(
|
|
156
|
+
contact_points=database_ref,
|
|
157
|
+
username=self.username,
|
|
158
|
+
password=self.token,
|
|
159
|
+
cluster_kwargs=self.cluster_kwargs,
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
# Convert DataFrame to Data if needed using parent's method
|
|
163
|
+
self.ingest_data = self._prepare_ingest_data()
|
|
164
|
+
|
|
165
|
+
documents = []
|
|
166
|
+
for _input in self.ingest_data or []:
|
|
167
|
+
if isinstance(_input, Data):
|
|
168
|
+
documents.append(_input.to_lc_document())
|
|
169
|
+
else:
|
|
170
|
+
documents.append(_input)
|
|
171
|
+
|
|
172
|
+
body_index_options = [("index_analyzer", "STANDARD")] if self.enable_body_search else None
|
|
173
|
+
|
|
174
|
+
if self.setup_mode == "Off":
|
|
175
|
+
setup_mode = SetupMode.OFF
|
|
176
|
+
elif self.setup_mode == "Sync":
|
|
177
|
+
setup_mode = SetupMode.SYNC
|
|
178
|
+
else:
|
|
179
|
+
setup_mode = SetupMode.ASYNC
|
|
180
|
+
|
|
181
|
+
if documents:
|
|
182
|
+
self.log(f"Adding {len(documents)} documents to the Vector Store.")
|
|
183
|
+
table = Cassandra.from_documents(
|
|
184
|
+
documents=documents,
|
|
185
|
+
embedding=self.embedding,
|
|
186
|
+
table_name=self.table_name,
|
|
187
|
+
keyspace=self.keyspace,
|
|
188
|
+
ttl_seconds=self.ttl_seconds or None,
|
|
189
|
+
batch_size=self.batch_size,
|
|
190
|
+
body_index_options=body_index_options,
|
|
191
|
+
)
|
|
192
|
+
else:
|
|
193
|
+
self.log("No documents to add to the Vector Store.")
|
|
194
|
+
table = Cassandra(
|
|
195
|
+
embedding=self.embedding,
|
|
196
|
+
table_name=self.table_name,
|
|
197
|
+
keyspace=self.keyspace,
|
|
198
|
+
ttl_seconds=self.ttl_seconds or None,
|
|
199
|
+
body_index_options=body_index_options,
|
|
200
|
+
setup_mode=setup_mode,
|
|
201
|
+
)
|
|
202
|
+
return table
|
|
203
|
+
|
|
204
|
+
def _map_search_type(self) -> str:
|
|
205
|
+
if self.search_type == "Similarity with score threshold":
|
|
206
|
+
return "similarity_score_threshold"
|
|
207
|
+
if self.search_type == "MMR (Max Marginal Relevance)":
|
|
208
|
+
return "mmr"
|
|
209
|
+
return "similarity"
|
|
210
|
+
|
|
211
|
+
def search_documents(self) -> list[Data]:
|
|
212
|
+
vector_store = self.build_vector_store()
|
|
213
|
+
|
|
214
|
+
self.log(f"Search input: {self.search_query}")
|
|
215
|
+
self.log(f"Search type: {self.search_type}")
|
|
216
|
+
self.log(f"Number of results: {self.number_of_results}")
|
|
217
|
+
|
|
218
|
+
if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():
|
|
219
|
+
try:
|
|
220
|
+
search_type = self._map_search_type()
|
|
221
|
+
search_args = self._build_search_args()
|
|
222
|
+
|
|
223
|
+
self.log(f"Search args: {search_args}")
|
|
224
|
+
|
|
225
|
+
docs = vector_store.search(query=self.search_query, search_type=search_type, **search_args)
|
|
226
|
+
except KeyError as e:
|
|
227
|
+
if "content" in str(e):
|
|
228
|
+
msg = (
|
|
229
|
+
"You should ingest data through Langflow (or LangChain) to query it in Langflow. "
|
|
230
|
+
"Your collection does not contain a field name 'content'."
|
|
231
|
+
)
|
|
232
|
+
raise ValueError(msg) from e
|
|
233
|
+
raise
|
|
234
|
+
|
|
235
|
+
self.log(f"Retrieved documents: {len(docs)}")
|
|
236
|
+
|
|
237
|
+
data = docs_to_data(docs)
|
|
238
|
+
self.status = data
|
|
239
|
+
return data
|
|
240
|
+
return []
|
|
241
|
+
|
|
242
|
+
def _build_search_args(self):
|
|
243
|
+
args = {
|
|
244
|
+
"k": self.number_of_results,
|
|
245
|
+
"score_threshold": self.search_score_threshold,
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if self.search_filter:
|
|
249
|
+
clean_filter = {k: v for k, v in self.search_filter.items() if k and v}
|
|
250
|
+
if len(clean_filter) > 0:
|
|
251
|
+
args["filter"] = clean_filter
|
|
252
|
+
if self.body_search:
|
|
253
|
+
if not self.enable_body_search:
|
|
254
|
+
msg = "You should enable body search when creating the table to search the body field."
|
|
255
|
+
raise ValueError(msg)
|
|
256
|
+
args["body_search"] = self.body_search
|
|
257
|
+
return args
|
|
258
|
+
|
|
259
|
+
def get_retriever_kwargs(self):
|
|
260
|
+
search_args = self._build_search_args()
|
|
261
|
+
return {
|
|
262
|
+
"search_type": self._map_search_type(),
|
|
263
|
+
"search_kwargs": search_args,
|
|
264
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
from lfx.base.memory.model import LCChatMemoryComponent
|
|
2
|
+
from lfx.field_typing.constants import Memory
|
|
3
|
+
from lfx.inputs.inputs import DictInput, MessageTextInput, SecretStrInput
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class CassandraChatMemory(LCChatMemoryComponent):
|
|
7
|
+
display_name = "Cassandra Chat Memory"
|
|
8
|
+
description = "Retrieves and store chat messages from Apache Cassandra."
|
|
9
|
+
name = "CassandraChatMemory"
|
|
10
|
+
icon = "Cassandra"
|
|
11
|
+
|
|
12
|
+
inputs = [
|
|
13
|
+
MessageTextInput(
|
|
14
|
+
name="database_ref",
|
|
15
|
+
display_name="Contact Points / Astra Database ID",
|
|
16
|
+
info="Contact points for the database (or Astra DB database ID)",
|
|
17
|
+
required=True,
|
|
18
|
+
),
|
|
19
|
+
MessageTextInput(
|
|
20
|
+
name="username", display_name="Username", info="Username for the database (leave empty for Astra DB)."
|
|
21
|
+
),
|
|
22
|
+
SecretStrInput(
|
|
23
|
+
name="token",
|
|
24
|
+
display_name="Password / Astra DB Token",
|
|
25
|
+
info="User password for the database (or Astra DB token).",
|
|
26
|
+
required=True,
|
|
27
|
+
),
|
|
28
|
+
MessageTextInput(
|
|
29
|
+
name="keyspace",
|
|
30
|
+
display_name="Keyspace",
|
|
31
|
+
info="Table Keyspace (or Astra DB namespace).",
|
|
32
|
+
required=True,
|
|
33
|
+
),
|
|
34
|
+
MessageTextInput(
|
|
35
|
+
name="table_name",
|
|
36
|
+
display_name="Table Name",
|
|
37
|
+
info="The name of the table (or Astra DB collection) where vectors will be stored.",
|
|
38
|
+
required=True,
|
|
39
|
+
),
|
|
40
|
+
MessageTextInput(
|
|
41
|
+
name="session_id", display_name="Session ID", info="Session ID for the message.", advanced=True
|
|
42
|
+
),
|
|
43
|
+
DictInput(
|
|
44
|
+
name="cluster_kwargs",
|
|
45
|
+
display_name="Cluster arguments",
|
|
46
|
+
info="Optional dictionary of additional keyword arguments for the Cassandra cluster.",
|
|
47
|
+
advanced=True,
|
|
48
|
+
is_list=True,
|
|
49
|
+
),
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
def build_message_history(self) -> Memory:
|
|
53
|
+
from langchain_community.chat_message_histories import CassandraChatMessageHistory
|
|
54
|
+
|
|
55
|
+
try:
|
|
56
|
+
import cassio
|
|
57
|
+
except ImportError as e:
|
|
58
|
+
msg = "Could not import cassio integration package. Please install it with `pip install cassio`."
|
|
59
|
+
raise ImportError(msg) from e
|
|
60
|
+
|
|
61
|
+
from uuid import UUID
|
|
62
|
+
|
|
63
|
+
database_ref = self.database_ref
|
|
64
|
+
|
|
65
|
+
try:
|
|
66
|
+
UUID(self.database_ref)
|
|
67
|
+
is_astra = True
|
|
68
|
+
except ValueError:
|
|
69
|
+
is_astra = False
|
|
70
|
+
if "," in self.database_ref:
|
|
71
|
+
# use a copy because we can't change the type of the parameter
|
|
72
|
+
database_ref = self.database_ref.split(",")
|
|
73
|
+
|
|
74
|
+
if is_astra:
|
|
75
|
+
cassio.init(
|
|
76
|
+
database_id=database_ref,
|
|
77
|
+
token=self.token,
|
|
78
|
+
cluster_kwargs=self.cluster_kwargs,
|
|
79
|
+
)
|
|
80
|
+
else:
|
|
81
|
+
cassio.init(
|
|
82
|
+
contact_points=database_ref,
|
|
83
|
+
username=self.username,
|
|
84
|
+
password=self.token,
|
|
85
|
+
cluster_kwargs=self.cluster_kwargs,
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
return CassandraChatMessageHistory(
|
|
89
|
+
session_id=self.session_id,
|
|
90
|
+
table_name=self.table_name,
|
|
91
|
+
keyspace=self.keyspace,
|
|
92
|
+
)
|