lfx-nightly 0.1.11.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lfx/__init__.py +0 -0
- lfx/__main__.py +25 -0
- lfx/base/__init__.py +0 -0
- lfx/base/agents/__init__.py +0 -0
- lfx/base/agents/agent.py +268 -0
- lfx/base/agents/callback.py +130 -0
- lfx/base/agents/context.py +109 -0
- lfx/base/agents/crewai/__init__.py +0 -0
- lfx/base/agents/crewai/crew.py +231 -0
- lfx/base/agents/crewai/tasks.py +12 -0
- lfx/base/agents/default_prompts.py +23 -0
- lfx/base/agents/errors.py +15 -0
- lfx/base/agents/events.py +346 -0
- lfx/base/agents/utils.py +205 -0
- lfx/base/astra_assistants/__init__.py +0 -0
- lfx/base/astra_assistants/util.py +171 -0
- lfx/base/chains/__init__.py +0 -0
- lfx/base/chains/model.py +19 -0
- lfx/base/composio/__init__.py +0 -0
- lfx/base/composio/composio_base.py +1291 -0
- lfx/base/compressors/__init__.py +0 -0
- lfx/base/compressors/model.py +60 -0
- lfx/base/constants.py +46 -0
- lfx/base/curl/__init__.py +0 -0
- lfx/base/curl/parse.py +188 -0
- lfx/base/data/__init__.py +5 -0
- lfx/base/data/base_file.py +685 -0
- lfx/base/data/docling_utils.py +245 -0
- lfx/base/data/utils.py +198 -0
- lfx/base/document_transformers/__init__.py +0 -0
- lfx/base/document_transformers/model.py +43 -0
- lfx/base/embeddings/__init__.py +0 -0
- lfx/base/embeddings/aiml_embeddings.py +62 -0
- lfx/base/embeddings/model.py +26 -0
- lfx/base/flow_processing/__init__.py +0 -0
- lfx/base/flow_processing/utils.py +86 -0
- lfx/base/huggingface/__init__.py +0 -0
- lfx/base/huggingface/model_bridge.py +133 -0
- lfx/base/io/__init__.py +0 -0
- lfx/base/io/chat.py +20 -0
- lfx/base/io/text.py +22 -0
- lfx/base/langchain_utilities/__init__.py +0 -0
- lfx/base/langchain_utilities/model.py +35 -0
- lfx/base/langchain_utilities/spider_constants.py +1 -0
- lfx/base/langwatch/__init__.py +0 -0
- lfx/base/langwatch/utils.py +18 -0
- lfx/base/mcp/__init__.py +0 -0
- lfx/base/mcp/constants.py +2 -0
- lfx/base/mcp/util.py +1398 -0
- lfx/base/memory/__init__.py +0 -0
- lfx/base/memory/memory.py +49 -0
- lfx/base/memory/model.py +38 -0
- lfx/base/models/__init__.py +3 -0
- lfx/base/models/aiml_constants.py +51 -0
- lfx/base/models/anthropic_constants.py +47 -0
- lfx/base/models/aws_constants.py +151 -0
- lfx/base/models/chat_result.py +76 -0
- lfx/base/models/google_generative_ai_constants.py +70 -0
- lfx/base/models/groq_constants.py +134 -0
- lfx/base/models/model.py +375 -0
- lfx/base/models/model_input_constants.py +307 -0
- lfx/base/models/model_metadata.py +41 -0
- lfx/base/models/model_utils.py +8 -0
- lfx/base/models/novita_constants.py +35 -0
- lfx/base/models/ollama_constants.py +49 -0
- lfx/base/models/openai_constants.py +122 -0
- lfx/base/models/sambanova_constants.py +18 -0
- lfx/base/processing/__init__.py +0 -0
- lfx/base/prompts/__init__.py +0 -0
- lfx/base/prompts/api_utils.py +224 -0
- lfx/base/prompts/utils.py +61 -0
- lfx/base/textsplitters/__init__.py +0 -0
- lfx/base/textsplitters/model.py +28 -0
- lfx/base/tools/__init__.py +0 -0
- lfx/base/tools/base.py +26 -0
- lfx/base/tools/component_tool.py +325 -0
- lfx/base/tools/constants.py +49 -0
- lfx/base/tools/flow_tool.py +132 -0
- lfx/base/tools/run_flow.py +224 -0
- lfx/base/vectorstores/__init__.py +0 -0
- lfx/base/vectorstores/model.py +193 -0
- lfx/base/vectorstores/utils.py +22 -0
- lfx/base/vectorstores/vector_store_connection_decorator.py +52 -0
- lfx/cli/__init__.py +5 -0
- lfx/cli/commands.py +319 -0
- lfx/cli/common.py +650 -0
- lfx/cli/run.py +441 -0
- lfx/cli/script_loader.py +247 -0
- lfx/cli/serve_app.py +546 -0
- lfx/cli/validation.py +69 -0
- lfx/components/FAISS/__init__.py +34 -0
- lfx/components/FAISS/faiss.py +111 -0
- lfx/components/Notion/__init__.py +19 -0
- lfx/components/Notion/add_content_to_page.py +269 -0
- lfx/components/Notion/create_page.py +94 -0
- lfx/components/Notion/list_database_properties.py +68 -0
- lfx/components/Notion/list_pages.py +122 -0
- lfx/components/Notion/list_users.py +77 -0
- lfx/components/Notion/page_content_viewer.py +93 -0
- lfx/components/Notion/search.py +111 -0
- lfx/components/Notion/update_page_property.py +114 -0
- lfx/components/__init__.py +411 -0
- lfx/components/_importing.py +42 -0
- lfx/components/agentql/__init__.py +3 -0
- lfx/components/agentql/agentql_api.py +151 -0
- lfx/components/agents/__init__.py +34 -0
- lfx/components/agents/agent.py +558 -0
- lfx/components/agents/mcp_component.py +501 -0
- lfx/components/aiml/__init__.py +37 -0
- lfx/components/aiml/aiml.py +112 -0
- lfx/components/aiml/aiml_embeddings.py +37 -0
- lfx/components/amazon/__init__.py +36 -0
- lfx/components/amazon/amazon_bedrock_embedding.py +109 -0
- lfx/components/amazon/amazon_bedrock_model.py +124 -0
- lfx/components/amazon/s3_bucket_uploader.py +211 -0
- lfx/components/anthropic/__init__.py +34 -0
- lfx/components/anthropic/anthropic.py +187 -0
- lfx/components/apify/__init__.py +5 -0
- lfx/components/apify/apify_actor.py +325 -0
- lfx/components/arxiv/__init__.py +3 -0
- lfx/components/arxiv/arxiv.py +163 -0
- lfx/components/assemblyai/__init__.py +46 -0
- lfx/components/assemblyai/assemblyai_get_subtitles.py +83 -0
- lfx/components/assemblyai/assemblyai_lemur.py +183 -0
- lfx/components/assemblyai/assemblyai_list_transcripts.py +95 -0
- lfx/components/assemblyai/assemblyai_poll_transcript.py +72 -0
- lfx/components/assemblyai/assemblyai_start_transcript.py +188 -0
- lfx/components/azure/__init__.py +37 -0
- lfx/components/azure/azure_openai.py +95 -0
- lfx/components/azure/azure_openai_embeddings.py +83 -0
- lfx/components/baidu/__init__.py +32 -0
- lfx/components/baidu/baidu_qianfan_chat.py +113 -0
- lfx/components/bing/__init__.py +3 -0
- lfx/components/bing/bing_search_api.py +61 -0
- lfx/components/cassandra/__init__.py +40 -0
- lfx/components/cassandra/cassandra.py +264 -0
- lfx/components/cassandra/cassandra_chat.py +92 -0
- lfx/components/cassandra/cassandra_graph.py +238 -0
- lfx/components/chains/__init__.py +3 -0
- lfx/components/chroma/__init__.py +34 -0
- lfx/components/chroma/chroma.py +167 -0
- lfx/components/cleanlab/__init__.py +40 -0
- lfx/components/cleanlab/cleanlab_evaluator.py +155 -0
- lfx/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
- lfx/components/cleanlab/cleanlab_remediator.py +131 -0
- lfx/components/clickhouse/__init__.py +34 -0
- lfx/components/clickhouse/clickhouse.py +135 -0
- lfx/components/cloudflare/__init__.py +32 -0
- lfx/components/cloudflare/cloudflare.py +81 -0
- lfx/components/cohere/__init__.py +40 -0
- lfx/components/cohere/cohere_embeddings.py +81 -0
- lfx/components/cohere/cohere_models.py +46 -0
- lfx/components/cohere/cohere_rerank.py +51 -0
- lfx/components/composio/__init__.py +74 -0
- lfx/components/composio/composio_api.py +268 -0
- lfx/components/composio/dropbox_compnent.py +11 -0
- lfx/components/composio/github_composio.py +11 -0
- lfx/components/composio/gmail_composio.py +38 -0
- lfx/components/composio/googlecalendar_composio.py +11 -0
- lfx/components/composio/googlemeet_composio.py +11 -0
- lfx/components/composio/googletasks_composio.py +8 -0
- lfx/components/composio/linear_composio.py +11 -0
- lfx/components/composio/outlook_composio.py +11 -0
- lfx/components/composio/reddit_composio.py +11 -0
- lfx/components/composio/slack_composio.py +582 -0
- lfx/components/composio/slackbot_composio.py +11 -0
- lfx/components/composio/supabase_composio.py +11 -0
- lfx/components/composio/todoist_composio.py +11 -0
- lfx/components/composio/youtube_composio.py +11 -0
- lfx/components/confluence/__init__.py +3 -0
- lfx/components/confluence/confluence.py +84 -0
- lfx/components/couchbase/__init__.py +34 -0
- lfx/components/couchbase/couchbase.py +102 -0
- lfx/components/crewai/__init__.py +49 -0
- lfx/components/crewai/crewai.py +107 -0
- lfx/components/crewai/hierarchical_crew.py +46 -0
- lfx/components/crewai/hierarchical_task.py +44 -0
- lfx/components/crewai/sequential_crew.py +52 -0
- lfx/components/crewai/sequential_task.py +73 -0
- lfx/components/crewai/sequential_task_agent.py +143 -0
- lfx/components/custom_component/__init__.py +34 -0
- lfx/components/custom_component/custom_component.py +31 -0
- lfx/components/data/__init__.py +64 -0
- lfx/components/data/api_request.py +544 -0
- lfx/components/data/csv_to_data.py +95 -0
- lfx/components/data/directory.py +113 -0
- lfx/components/data/file.py +577 -0
- lfx/components/data/json_to_data.py +98 -0
- lfx/components/data/news_search.py +164 -0
- lfx/components/data/rss.py +69 -0
- lfx/components/data/sql_executor.py +101 -0
- lfx/components/data/url.py +311 -0
- lfx/components/data/web_search.py +112 -0
- lfx/components/data/webhook.py +56 -0
- lfx/components/datastax/__init__.py +70 -0
- lfx/components/datastax/astra_assistant_manager.py +306 -0
- lfx/components/datastax/astra_db.py +75 -0
- lfx/components/datastax/astra_vectorize.py +124 -0
- lfx/components/datastax/astradb.py +1285 -0
- lfx/components/datastax/astradb_cql.py +314 -0
- lfx/components/datastax/astradb_graph.py +330 -0
- lfx/components/datastax/astradb_tool.py +414 -0
- lfx/components/datastax/astradb_vectorstore.py +1285 -0
- lfx/components/datastax/cassandra.py +92 -0
- lfx/components/datastax/create_assistant.py +58 -0
- lfx/components/datastax/create_thread.py +32 -0
- lfx/components/datastax/dotenv.py +35 -0
- lfx/components/datastax/get_assistant.py +37 -0
- lfx/components/datastax/getenvvar.py +30 -0
- lfx/components/datastax/graph_rag.py +141 -0
- lfx/components/datastax/hcd.py +314 -0
- lfx/components/datastax/list_assistants.py +25 -0
- lfx/components/datastax/run.py +89 -0
- lfx/components/deactivated/__init__.py +15 -0
- lfx/components/deactivated/amazon_kendra.py +66 -0
- lfx/components/deactivated/chat_litellm_model.py +158 -0
- lfx/components/deactivated/code_block_extractor.py +26 -0
- lfx/components/deactivated/documents_to_data.py +22 -0
- lfx/components/deactivated/embed.py +16 -0
- lfx/components/deactivated/extract_key_from_data.py +46 -0
- lfx/components/deactivated/json_document_builder.py +57 -0
- lfx/components/deactivated/list_flows.py +20 -0
- lfx/components/deactivated/mcp_sse.py +61 -0
- lfx/components/deactivated/mcp_stdio.py +62 -0
- lfx/components/deactivated/merge_data.py +93 -0
- lfx/components/deactivated/message.py +37 -0
- lfx/components/deactivated/metal.py +54 -0
- lfx/components/deactivated/multi_query.py +59 -0
- lfx/components/deactivated/retriever.py +43 -0
- lfx/components/deactivated/selective_passthrough.py +77 -0
- lfx/components/deactivated/should_run_next.py +40 -0
- lfx/components/deactivated/split_text.py +63 -0
- lfx/components/deactivated/store_message.py +24 -0
- lfx/components/deactivated/sub_flow.py +124 -0
- lfx/components/deactivated/vectara_self_query.py +76 -0
- lfx/components/deactivated/vector_store.py +24 -0
- lfx/components/deepseek/__init__.py +34 -0
- lfx/components/deepseek/deepseek.py +136 -0
- lfx/components/docling/__init__.py +43 -0
- lfx/components/docling/chunk_docling_document.py +186 -0
- lfx/components/docling/docling_inline.py +231 -0
- lfx/components/docling/docling_remote.py +193 -0
- lfx/components/docling/export_docling_document.py +117 -0
- lfx/components/documentloaders/__init__.py +3 -0
- lfx/components/duckduckgo/__init__.py +3 -0
- lfx/components/duckduckgo/duck_duck_go_search_run.py +92 -0
- lfx/components/elastic/__init__.py +37 -0
- lfx/components/elastic/elasticsearch.py +267 -0
- lfx/components/elastic/opensearch.py +243 -0
- lfx/components/embeddings/__init__.py +37 -0
- lfx/components/embeddings/similarity.py +76 -0
- lfx/components/embeddings/text_embedder.py +64 -0
- lfx/components/exa/__init__.py +3 -0
- lfx/components/exa/exa_search.py +68 -0
- lfx/components/firecrawl/__init__.py +43 -0
- lfx/components/firecrawl/firecrawl_crawl_api.py +88 -0
- lfx/components/firecrawl/firecrawl_extract_api.py +136 -0
- lfx/components/firecrawl/firecrawl_map_api.py +89 -0
- lfx/components/firecrawl/firecrawl_scrape_api.py +73 -0
- lfx/components/git/__init__.py +4 -0
- lfx/components/git/git.py +262 -0
- lfx/components/git/gitextractor.py +196 -0
- lfx/components/glean/__init__.py +3 -0
- lfx/components/glean/glean_search_api.py +173 -0
- lfx/components/google/__init__.py +17 -0
- lfx/components/google/gmail.py +192 -0
- lfx/components/google/google_bq_sql_executor.py +157 -0
- lfx/components/google/google_drive.py +92 -0
- lfx/components/google/google_drive_search.py +152 -0
- lfx/components/google/google_generative_ai.py +147 -0
- lfx/components/google/google_generative_ai_embeddings.py +141 -0
- lfx/components/google/google_oauth_token.py +89 -0
- lfx/components/google/google_search_api_core.py +68 -0
- lfx/components/google/google_serper_api_core.py +74 -0
- lfx/components/groq/__init__.py +34 -0
- lfx/components/groq/groq.py +136 -0
- lfx/components/helpers/__init__.py +52 -0
- lfx/components/helpers/calculator_core.py +89 -0
- lfx/components/helpers/create_list.py +40 -0
- lfx/components/helpers/current_date.py +42 -0
- lfx/components/helpers/id_generator.py +42 -0
- lfx/components/helpers/memory.py +251 -0
- lfx/components/helpers/output_parser.py +45 -0
- lfx/components/helpers/store_message.py +90 -0
- lfx/components/homeassistant/__init__.py +7 -0
- lfx/components/homeassistant/home_assistant_control.py +152 -0
- lfx/components/homeassistant/list_home_assistant_states.py +137 -0
- lfx/components/huggingface/__init__.py +37 -0
- lfx/components/huggingface/huggingface.py +197 -0
- lfx/components/huggingface/huggingface_inference_api.py +106 -0
- lfx/components/ibm/__init__.py +34 -0
- lfx/components/ibm/watsonx.py +203 -0
- lfx/components/ibm/watsonx_embeddings.py +135 -0
- lfx/components/icosacomputing/__init__.py +5 -0
- lfx/components/icosacomputing/combinatorial_reasoner.py +84 -0
- lfx/components/input_output/__init__.py +38 -0
- lfx/components/input_output/chat.py +120 -0
- lfx/components/input_output/chat_output.py +200 -0
- lfx/components/input_output/text.py +27 -0
- lfx/components/input_output/text_output.py +29 -0
- lfx/components/jigsawstack/__init__.py +23 -0
- lfx/components/jigsawstack/ai_scrape.py +126 -0
- lfx/components/jigsawstack/ai_web_search.py +136 -0
- lfx/components/jigsawstack/file_read.py +115 -0
- lfx/components/jigsawstack/file_upload.py +94 -0
- lfx/components/jigsawstack/image_generation.py +205 -0
- lfx/components/jigsawstack/nsfw.py +60 -0
- lfx/components/jigsawstack/object_detection.py +124 -0
- lfx/components/jigsawstack/sentiment.py +112 -0
- lfx/components/jigsawstack/text_to_sql.py +90 -0
- lfx/components/jigsawstack/text_translate.py +77 -0
- lfx/components/jigsawstack/vocr.py +107 -0
- lfx/components/langchain_utilities/__init__.py +109 -0
- lfx/components/langchain_utilities/character.py +53 -0
- lfx/components/langchain_utilities/conversation.py +59 -0
- lfx/components/langchain_utilities/csv_agent.py +107 -0
- lfx/components/langchain_utilities/fake_embeddings.py +26 -0
- lfx/components/langchain_utilities/html_link_extractor.py +35 -0
- lfx/components/langchain_utilities/json_agent.py +45 -0
- lfx/components/langchain_utilities/langchain_hub.py +126 -0
- lfx/components/langchain_utilities/language_recursive.py +49 -0
- lfx/components/langchain_utilities/language_semantic.py +138 -0
- lfx/components/langchain_utilities/llm_checker.py +39 -0
- lfx/components/langchain_utilities/llm_math.py +42 -0
- lfx/components/langchain_utilities/natural_language.py +61 -0
- lfx/components/langchain_utilities/openai_tools.py +53 -0
- lfx/components/langchain_utilities/openapi.py +48 -0
- lfx/components/langchain_utilities/recursive_character.py +60 -0
- lfx/components/langchain_utilities/retrieval_qa.py +83 -0
- lfx/components/langchain_utilities/runnable_executor.py +137 -0
- lfx/components/langchain_utilities/self_query.py +80 -0
- lfx/components/langchain_utilities/spider.py +142 -0
- lfx/components/langchain_utilities/sql.py +40 -0
- lfx/components/langchain_utilities/sql_database.py +35 -0
- lfx/components/langchain_utilities/sql_generator.py +78 -0
- lfx/components/langchain_utilities/tool_calling.py +59 -0
- lfx/components/langchain_utilities/vector_store_info.py +49 -0
- lfx/components/langchain_utilities/vector_store_router.py +33 -0
- lfx/components/langchain_utilities/xml_agent.py +71 -0
- lfx/components/langwatch/__init__.py +3 -0
- lfx/components/langwatch/langwatch.py +278 -0
- lfx/components/link_extractors/__init__.py +3 -0
- lfx/components/lmstudio/__init__.py +34 -0
- lfx/components/lmstudio/lmstudioembeddings.py +89 -0
- lfx/components/lmstudio/lmstudiomodel.py +129 -0
- lfx/components/logic/__init__.py +52 -0
- lfx/components/logic/conditional_router.py +171 -0
- lfx/components/logic/data_conditional_router.py +125 -0
- lfx/components/logic/flow_tool.py +110 -0
- lfx/components/logic/listen.py +29 -0
- lfx/components/logic/loop.py +125 -0
- lfx/components/logic/notify.py +88 -0
- lfx/components/logic/pass_message.py +35 -0
- lfx/components/logic/run_flow.py +71 -0
- lfx/components/logic/sub_flow.py +114 -0
- lfx/components/maritalk/__init__.py +32 -0
- lfx/components/maritalk/maritalk.py +52 -0
- lfx/components/mem0/__init__.py +3 -0
- lfx/components/mem0/mem0_chat_memory.py +136 -0
- lfx/components/milvus/__init__.py +34 -0
- lfx/components/milvus/milvus.py +115 -0
- lfx/components/mistral/__init__.py +37 -0
- lfx/components/mistral/mistral.py +114 -0
- lfx/components/mistral/mistral_embeddings.py +58 -0
- lfx/components/models/__init__.py +34 -0
- lfx/components/models/embedding_model.py +114 -0
- lfx/components/models/language_model.py +144 -0
- lfx/components/mongodb/__init__.py +34 -0
- lfx/components/mongodb/mongodb_atlas.py +213 -0
- lfx/components/needle/__init__.py +3 -0
- lfx/components/needle/needle.py +104 -0
- lfx/components/notdiamond/__init__.py +34 -0
- lfx/components/notdiamond/notdiamond.py +228 -0
- lfx/components/novita/__init__.py +32 -0
- lfx/components/novita/novita.py +130 -0
- lfx/components/nvidia/__init__.py +57 -0
- lfx/components/nvidia/nvidia.py +157 -0
- lfx/components/nvidia/nvidia_embedding.py +77 -0
- lfx/components/nvidia/nvidia_ingest.py +317 -0
- lfx/components/nvidia/nvidia_rerank.py +63 -0
- lfx/components/nvidia/system_assist.py +65 -0
- lfx/components/olivya/__init__.py +3 -0
- lfx/components/olivya/olivya.py +116 -0
- lfx/components/ollama/__init__.py +37 -0
- lfx/components/ollama/ollama.py +330 -0
- lfx/components/ollama/ollama_embeddings.py +106 -0
- lfx/components/openai/__init__.py +37 -0
- lfx/components/openai/openai.py +100 -0
- lfx/components/openai/openai_chat_model.py +176 -0
- lfx/components/openrouter/__init__.py +32 -0
- lfx/components/openrouter/openrouter.py +202 -0
- lfx/components/output_parsers/__init__.py +3 -0
- lfx/components/perplexity/__init__.py +34 -0
- lfx/components/perplexity/perplexity.py +75 -0
- lfx/components/pgvector/__init__.py +34 -0
- lfx/components/pgvector/pgvector.py +72 -0
- lfx/components/pinecone/__init__.py +34 -0
- lfx/components/pinecone/pinecone.py +134 -0
- lfx/components/processing/__init__.py +117 -0
- lfx/components/processing/alter_metadata.py +108 -0
- lfx/components/processing/batch_run.py +205 -0
- lfx/components/processing/combine_text.py +39 -0
- lfx/components/processing/converter.py +159 -0
- lfx/components/processing/create_data.py +110 -0
- lfx/components/processing/data_operations.py +438 -0
- lfx/components/processing/data_to_dataframe.py +70 -0
- lfx/components/processing/dataframe_operations.py +313 -0
- lfx/components/processing/extract_key.py +53 -0
- lfx/components/processing/filter_data.py +42 -0
- lfx/components/processing/filter_data_values.py +88 -0
- lfx/components/processing/json_cleaner.py +103 -0
- lfx/components/processing/lambda_filter.py +154 -0
- lfx/components/processing/llm_router.py +499 -0
- lfx/components/processing/merge_data.py +90 -0
- lfx/components/processing/message_to_data.py +36 -0
- lfx/components/processing/parse_data.py +70 -0
- lfx/components/processing/parse_dataframe.py +68 -0
- lfx/components/processing/parse_json_data.py +90 -0
- lfx/components/processing/parser.py +143 -0
- lfx/components/processing/prompt.py +67 -0
- lfx/components/processing/python_repl_core.py +98 -0
- lfx/components/processing/regex.py +82 -0
- lfx/components/processing/save_file.py +225 -0
- lfx/components/processing/select_data.py +48 -0
- lfx/components/processing/split_text.py +141 -0
- lfx/components/processing/structured_output.py +202 -0
- lfx/components/processing/update_data.py +160 -0
- lfx/components/prototypes/__init__.py +34 -0
- lfx/components/prototypes/python_function.py +73 -0
- lfx/components/qdrant/__init__.py +34 -0
- lfx/components/qdrant/qdrant.py +109 -0
- lfx/components/redis/__init__.py +37 -0
- lfx/components/redis/redis.py +89 -0
- lfx/components/redis/redis_chat.py +43 -0
- lfx/components/sambanova/__init__.py +32 -0
- lfx/components/sambanova/sambanova.py +84 -0
- lfx/components/scrapegraph/__init__.py +40 -0
- lfx/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
- lfx/components/scrapegraph/scrapegraph_search_api.py +64 -0
- lfx/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
- lfx/components/searchapi/__init__.py +34 -0
- lfx/components/searchapi/search.py +79 -0
- lfx/components/serpapi/__init__.py +3 -0
- lfx/components/serpapi/serp.py +115 -0
- lfx/components/supabase/__init__.py +34 -0
- lfx/components/supabase/supabase.py +76 -0
- lfx/components/tavily/__init__.py +4 -0
- lfx/components/tavily/tavily_extract.py +117 -0
- lfx/components/tavily/tavily_search.py +212 -0
- lfx/components/textsplitters/__init__.py +3 -0
- lfx/components/toolkits/__init__.py +3 -0
- lfx/components/tools/__init__.py +72 -0
- lfx/components/tools/calculator.py +108 -0
- lfx/components/tools/google_search_api.py +45 -0
- lfx/components/tools/google_serper_api.py +115 -0
- lfx/components/tools/python_code_structured_tool.py +327 -0
- lfx/components/tools/python_repl.py +97 -0
- lfx/components/tools/search_api.py +87 -0
- lfx/components/tools/searxng.py +145 -0
- lfx/components/tools/serp_api.py +119 -0
- lfx/components/tools/tavily_search_tool.py +344 -0
- lfx/components/tools/wikidata_api.py +102 -0
- lfx/components/tools/wikipedia_api.py +49 -0
- lfx/components/tools/yahoo_finance.py +129 -0
- lfx/components/twelvelabs/__init__.py +52 -0
- lfx/components/twelvelabs/convert_astra_results.py +84 -0
- lfx/components/twelvelabs/pegasus_index.py +311 -0
- lfx/components/twelvelabs/split_video.py +291 -0
- lfx/components/twelvelabs/text_embeddings.py +57 -0
- lfx/components/twelvelabs/twelvelabs_pegasus.py +408 -0
- lfx/components/twelvelabs/video_embeddings.py +100 -0
- lfx/components/twelvelabs/video_file.py +179 -0
- lfx/components/unstructured/__init__.py +3 -0
- lfx/components/unstructured/unstructured.py +121 -0
- lfx/components/upstash/__init__.py +34 -0
- lfx/components/upstash/upstash.py +124 -0
- lfx/components/vectara/__init__.py +37 -0
- lfx/components/vectara/vectara.py +97 -0
- lfx/components/vectara/vectara_rag.py +164 -0
- lfx/components/vectorstores/__init__.py +40 -0
- lfx/components/vectorstores/astradb.py +1285 -0
- lfx/components/vectorstores/astradb_graph.py +319 -0
- lfx/components/vectorstores/cassandra.py +264 -0
- lfx/components/vectorstores/cassandra_graph.py +238 -0
- lfx/components/vectorstores/chroma.py +167 -0
- lfx/components/vectorstores/clickhouse.py +135 -0
- lfx/components/vectorstores/couchbase.py +102 -0
- lfx/components/vectorstores/elasticsearch.py +267 -0
- lfx/components/vectorstores/faiss.py +111 -0
- lfx/components/vectorstores/graph_rag.py +141 -0
- lfx/components/vectorstores/hcd.py +314 -0
- lfx/components/vectorstores/local_db.py +261 -0
- lfx/components/vectorstores/milvus.py +115 -0
- lfx/components/vectorstores/mongodb_atlas.py +213 -0
- lfx/components/vectorstores/opensearch.py +243 -0
- lfx/components/vectorstores/pgvector.py +72 -0
- lfx/components/vectorstores/pinecone.py +134 -0
- lfx/components/vectorstores/qdrant.py +109 -0
- lfx/components/vectorstores/supabase.py +76 -0
- lfx/components/vectorstores/upstash.py +124 -0
- lfx/components/vectorstores/vectara.py +97 -0
- lfx/components/vectorstores/vectara_rag.py +164 -0
- lfx/components/vectorstores/weaviate.py +89 -0
- lfx/components/vertexai/__init__.py +37 -0
- lfx/components/vertexai/vertexai.py +71 -0
- lfx/components/vertexai/vertexai_embeddings.py +67 -0
- lfx/components/weaviate/__init__.py +34 -0
- lfx/components/weaviate/weaviate.py +89 -0
- lfx/components/wikipedia/__init__.py +4 -0
- lfx/components/wikipedia/wikidata.py +86 -0
- lfx/components/wikipedia/wikipedia.py +53 -0
- lfx/components/wolframalpha/__init__.py +3 -0
- lfx/components/wolframalpha/wolfram_alpha_api.py +54 -0
- lfx/components/xai/__init__.py +32 -0
- lfx/components/xai/xai.py +167 -0
- lfx/components/yahoosearch/__init__.py +3 -0
- lfx/components/yahoosearch/yahoo.py +137 -0
- lfx/components/youtube/__init__.py +52 -0
- lfx/components/youtube/channel.py +227 -0
- lfx/components/youtube/comments.py +231 -0
- lfx/components/youtube/playlist.py +33 -0
- lfx/components/youtube/search.py +120 -0
- lfx/components/youtube/trending.py +285 -0
- lfx/components/youtube/video_details.py +263 -0
- lfx/components/youtube/youtube_transcripts.py +118 -0
- lfx/components/zep/__init__.py +3 -0
- lfx/components/zep/zep.py +44 -0
- lfx/constants.py +6 -0
- lfx/custom/__init__.py +7 -0
- lfx/custom/attributes.py +86 -0
- lfx/custom/code_parser/__init__.py +3 -0
- lfx/custom/code_parser/code_parser.py +361 -0
- lfx/custom/custom_component/__init__.py +0 -0
- lfx/custom/custom_component/base_component.py +128 -0
- lfx/custom/custom_component/component.py +1808 -0
- lfx/custom/custom_component/component_with_cache.py +8 -0
- lfx/custom/custom_component/custom_component.py +588 -0
- lfx/custom/dependency_analyzer.py +165 -0
- lfx/custom/directory_reader/__init__.py +3 -0
- lfx/custom/directory_reader/directory_reader.py +359 -0
- lfx/custom/directory_reader/utils.py +171 -0
- lfx/custom/eval.py +12 -0
- lfx/custom/schema.py +32 -0
- lfx/custom/tree_visitor.py +21 -0
- lfx/custom/utils.py +877 -0
- lfx/custom/validate.py +488 -0
- lfx/events/__init__.py +1 -0
- lfx/events/event_manager.py +110 -0
- lfx/exceptions/__init__.py +0 -0
- lfx/exceptions/component.py +15 -0
- lfx/field_typing/__init__.py +91 -0
- lfx/field_typing/constants.py +215 -0
- lfx/field_typing/range_spec.py +35 -0
- lfx/graph/__init__.py +6 -0
- lfx/graph/edge/__init__.py +0 -0
- lfx/graph/edge/base.py +277 -0
- lfx/graph/edge/schema.py +119 -0
- lfx/graph/edge/utils.py +0 -0
- lfx/graph/graph/__init__.py +0 -0
- lfx/graph/graph/ascii.py +202 -0
- lfx/graph/graph/base.py +2238 -0
- lfx/graph/graph/constants.py +63 -0
- lfx/graph/graph/runnable_vertices_manager.py +133 -0
- lfx/graph/graph/schema.py +52 -0
- lfx/graph/graph/state_model.py +66 -0
- lfx/graph/graph/utils.py +1024 -0
- lfx/graph/schema.py +75 -0
- lfx/graph/state/__init__.py +0 -0
- lfx/graph/state/model.py +237 -0
- lfx/graph/utils.py +200 -0
- lfx/graph/vertex/__init__.py +0 -0
- lfx/graph/vertex/base.py +823 -0
- lfx/graph/vertex/constants.py +0 -0
- lfx/graph/vertex/exceptions.py +4 -0
- lfx/graph/vertex/param_handler.py +264 -0
- lfx/graph/vertex/schema.py +26 -0
- lfx/graph/vertex/utils.py +19 -0
- lfx/graph/vertex/vertex_types.py +489 -0
- lfx/helpers/__init__.py +1 -0
- lfx/helpers/base_model.py +71 -0
- lfx/helpers/custom.py +13 -0
- lfx/helpers/data.py +167 -0
- lfx/helpers/flow.py +194 -0
- lfx/inputs/__init__.py +68 -0
- lfx/inputs/constants.py +2 -0
- lfx/inputs/input_mixin.py +328 -0
- lfx/inputs/inputs.py +714 -0
- lfx/inputs/validators.py +19 -0
- lfx/interface/__init__.py +6 -0
- lfx/interface/components.py +489 -0
- lfx/interface/importing/__init__.py +5 -0
- lfx/interface/importing/utils.py +39 -0
- lfx/interface/initialize/__init__.py +3 -0
- lfx/interface/initialize/loading.py +224 -0
- lfx/interface/listing.py +26 -0
- lfx/interface/run.py +16 -0
- lfx/interface/utils.py +111 -0
- lfx/io/__init__.py +63 -0
- lfx/io/schema.py +289 -0
- lfx/load/__init__.py +8 -0
- lfx/load/load.py +256 -0
- lfx/load/utils.py +99 -0
- lfx/log/__init__.py +5 -0
- lfx/log/logger.py +385 -0
- lfx/memory/__init__.py +90 -0
- lfx/memory/stubs.py +283 -0
- lfx/processing/__init__.py +1 -0
- lfx/processing/process.py +238 -0
- lfx/processing/utils.py +25 -0
- lfx/py.typed +0 -0
- lfx/schema/__init__.py +66 -0
- lfx/schema/artifact.py +83 -0
- lfx/schema/content_block.py +62 -0
- lfx/schema/content_types.py +91 -0
- lfx/schema/data.py +308 -0
- lfx/schema/dataframe.py +210 -0
- lfx/schema/dotdict.py +74 -0
- lfx/schema/encoders.py +13 -0
- lfx/schema/graph.py +47 -0
- lfx/schema/image.py +131 -0
- lfx/schema/json_schema.py +141 -0
- lfx/schema/log.py +61 -0
- lfx/schema/message.py +473 -0
- lfx/schema/openai_responses_schemas.py +74 -0
- lfx/schema/properties.py +41 -0
- lfx/schema/schema.py +171 -0
- lfx/schema/serialize.py +13 -0
- lfx/schema/table.py +140 -0
- lfx/schema/validators.py +114 -0
- lfx/serialization/__init__.py +5 -0
- lfx/serialization/constants.py +2 -0
- lfx/serialization/serialization.py +314 -0
- lfx/services/__init__.py +23 -0
- lfx/services/base.py +28 -0
- lfx/services/cache/__init__.py +6 -0
- lfx/services/cache/base.py +183 -0
- lfx/services/cache/service.py +166 -0
- lfx/services/cache/utils.py +169 -0
- lfx/services/chat/__init__.py +1 -0
- lfx/services/chat/config.py +2 -0
- lfx/services/chat/schema.py +10 -0
- lfx/services/deps.py +129 -0
- lfx/services/factory.py +19 -0
- lfx/services/initialize.py +19 -0
- lfx/services/interfaces.py +103 -0
- lfx/services/manager.py +172 -0
- lfx/services/schema.py +20 -0
- lfx/services/session.py +82 -0
- lfx/services/settings/__init__.py +3 -0
- lfx/services/settings/auth.py +130 -0
- lfx/services/settings/base.py +539 -0
- lfx/services/settings/constants.py +31 -0
- lfx/services/settings/factory.py +23 -0
- lfx/services/settings/feature_flags.py +12 -0
- lfx/services/settings/service.py +35 -0
- lfx/services/settings/utils.py +40 -0
- lfx/services/shared_component_cache/__init__.py +1 -0
- lfx/services/shared_component_cache/factory.py +30 -0
- lfx/services/shared_component_cache/service.py +9 -0
- lfx/services/storage/__init__.py +5 -0
- lfx/services/storage/local.py +155 -0
- lfx/services/storage/service.py +54 -0
- lfx/services/tracing/__init__.py +1 -0
- lfx/services/tracing/service.py +21 -0
- lfx/settings.py +6 -0
- lfx/template/__init__.py +6 -0
- lfx/template/field/__init__.py +0 -0
- lfx/template/field/base.py +257 -0
- lfx/template/field/prompt.py +15 -0
- lfx/template/frontend_node/__init__.py +6 -0
- lfx/template/frontend_node/base.py +212 -0
- lfx/template/frontend_node/constants.py +65 -0
- lfx/template/frontend_node/custom_components.py +79 -0
- lfx/template/template/__init__.py +0 -0
- lfx/template/template/base.py +100 -0
- lfx/template/utils.py +217 -0
- lfx/type_extraction/__init__.py +19 -0
- lfx/type_extraction/type_extraction.py +75 -0
- lfx/type_extraction.py +80 -0
- lfx/utils/__init__.py +1 -0
- lfx/utils/async_helpers.py +42 -0
- lfx/utils/component_utils.py +154 -0
- lfx/utils/concurrency.py +60 -0
- lfx/utils/connection_string_parser.py +11 -0
- lfx/utils/constants.py +205 -0
- lfx/utils/data_structure.py +212 -0
- lfx/utils/exceptions.py +22 -0
- lfx/utils/helpers.py +28 -0
- lfx/utils/image.py +73 -0
- lfx/utils/lazy_load.py +15 -0
- lfx/utils/request_utils.py +18 -0
- lfx/utils/schemas.py +139 -0
- lfx/utils/util.py +481 -0
- lfx/utils/util_strings.py +56 -0
- lfx/utils/version.py +24 -0
- lfx_nightly-0.1.11.dev0.dist-info/METADATA +293 -0
- lfx_nightly-0.1.11.dev0.dist-info/RECORD +699 -0
- lfx_nightly-0.1.11.dev0.dist-info/WHEEL +4 -0
- lfx_nightly-0.1.11.dev0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
from pathlib import Path
|
2
|
+
|
3
|
+
from langchain.text_splitter import CharacterTextSplitter
|
4
|
+
from langchain_community.vectorstores.redis import Redis
|
5
|
+
|
6
|
+
from lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
|
7
|
+
from lfx.helpers.data import docs_to_data
|
8
|
+
from lfx.io import HandleInput, IntInput, SecretStrInput, StrInput
|
9
|
+
from lfx.schema.data import Data
|
10
|
+
|
11
|
+
|
12
|
+
class RedisVectorStoreComponent(LCVectorStoreComponent):
|
13
|
+
"""A custom component for implementing a Vector Store using Redis."""
|
14
|
+
|
15
|
+
display_name: str = "Redis"
|
16
|
+
description: str = "Implementation of Vector Store using Redis"
|
17
|
+
name = "Redis"
|
18
|
+
icon = "Redis"
|
19
|
+
|
20
|
+
inputs = [
|
21
|
+
SecretStrInput(name="redis_server_url", display_name="Redis Server Connection String", required=True),
|
22
|
+
StrInput(
|
23
|
+
name="redis_index_name",
|
24
|
+
display_name="Redis Index",
|
25
|
+
),
|
26
|
+
StrInput(name="code", display_name="Code", advanced=True),
|
27
|
+
StrInput(
|
28
|
+
name="schema",
|
29
|
+
display_name="Schema",
|
30
|
+
),
|
31
|
+
*LCVectorStoreComponent.inputs,
|
32
|
+
IntInput(
|
33
|
+
name="number_of_results",
|
34
|
+
display_name="Number of Results",
|
35
|
+
info="Number of results to return.",
|
36
|
+
value=4,
|
37
|
+
advanced=True,
|
38
|
+
),
|
39
|
+
HandleInput(name="embedding", display_name="Embedding", input_types=["Embeddings"]),
|
40
|
+
]
|
41
|
+
|
42
|
+
@check_cached_vector_store
|
43
|
+
def build_vector_store(self) -> Redis:
|
44
|
+
# Convert DataFrame to Data if needed using parent's method
|
45
|
+
self.ingest_data = self._prepare_ingest_data()
|
46
|
+
|
47
|
+
documents = []
|
48
|
+
for _input in self.ingest_data or []:
|
49
|
+
if isinstance(_input, Data):
|
50
|
+
documents.append(_input.to_lc_document())
|
51
|
+
else:
|
52
|
+
documents.append(_input)
|
53
|
+
Path("docuemnts.txt").write_text(str(documents), encoding="utf-8")
|
54
|
+
|
55
|
+
if not documents:
|
56
|
+
if self.schema is None:
|
57
|
+
msg = "If no documents are provided, a schema must be provided."
|
58
|
+
raise ValueError(msg)
|
59
|
+
redis_vs = Redis.from_existing_index(
|
60
|
+
embedding=self.embedding,
|
61
|
+
index_name=self.redis_index_name,
|
62
|
+
schema=self.schema,
|
63
|
+
key_prefix=None,
|
64
|
+
redis_url=self.redis_server_url,
|
65
|
+
)
|
66
|
+
else:
|
67
|
+
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
|
68
|
+
docs = text_splitter.split_documents(documents)
|
69
|
+
redis_vs = Redis.from_documents(
|
70
|
+
documents=docs,
|
71
|
+
embedding=self.embedding,
|
72
|
+
redis_url=self.redis_server_url,
|
73
|
+
index_name=self.redis_index_name,
|
74
|
+
)
|
75
|
+
return redis_vs
|
76
|
+
|
77
|
+
def search_documents(self) -> list[Data]:
|
78
|
+
vector_store = self.build_vector_store()
|
79
|
+
|
80
|
+
if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():
|
81
|
+
docs = vector_store.similarity_search(
|
82
|
+
query=self.search_query,
|
83
|
+
k=self.number_of_results,
|
84
|
+
)
|
85
|
+
|
86
|
+
data = docs_to_data(docs)
|
87
|
+
self.status = data
|
88
|
+
return data
|
89
|
+
return []
|
@@ -0,0 +1,43 @@
|
|
1
|
+
from urllib import parse
|
2
|
+
|
3
|
+
from langchain_community.chat_message_histories.redis import RedisChatMessageHistory
|
4
|
+
|
5
|
+
from lfx.base.memory.model import LCChatMemoryComponent
|
6
|
+
from lfx.field_typing.constants import Memory
|
7
|
+
from lfx.inputs.inputs import IntInput, MessageTextInput, SecretStrInput, StrInput
|
8
|
+
|
9
|
+
|
10
|
+
class RedisIndexChatMemory(LCChatMemoryComponent):
|
11
|
+
display_name = "Redis Chat Memory"
|
12
|
+
description = "Retrieves and store chat messages from Redis."
|
13
|
+
name = "RedisChatMemory"
|
14
|
+
icon = "Redis"
|
15
|
+
|
16
|
+
inputs = [
|
17
|
+
StrInput(
|
18
|
+
name="host", display_name="hostname", required=True, value="localhost", info="IP address or hostname."
|
19
|
+
),
|
20
|
+
IntInput(name="port", display_name="port", required=True, value=6379, info="Redis Port Number."),
|
21
|
+
StrInput(name="database", display_name="database", required=True, value="0", info="Redis database."),
|
22
|
+
MessageTextInput(
|
23
|
+
name="username", display_name="Username", value="", info="The Redis user name.", advanced=True
|
24
|
+
),
|
25
|
+
SecretStrInput(
|
26
|
+
name="password", display_name="Password", value="", info="The password for username.", advanced=True
|
27
|
+
),
|
28
|
+
StrInput(name="key_prefix", display_name="Key prefix", info="Key prefix.", advanced=True),
|
29
|
+
MessageTextInput(
|
30
|
+
name="session_id", display_name="Session ID", info="Session ID for the message.", advanced=True
|
31
|
+
),
|
32
|
+
]
|
33
|
+
|
34
|
+
def build_message_history(self) -> Memory:
|
35
|
+
kwargs = {}
|
36
|
+
password: str | None = self.password
|
37
|
+
if self.key_prefix:
|
38
|
+
kwargs["key_prefix"] = self.key_prefix
|
39
|
+
if password:
|
40
|
+
password = parse.quote_plus(password)
|
41
|
+
|
42
|
+
url = f"redis://{self.username}:{self.password}@{self.host}:{self.port}/{self.database}"
|
43
|
+
return RedisChatMessageHistory(session_id=self.session_id, url=url, **kwargs)
|
@@ -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.sambanova.sambanova import SambaNovaComponent
|
9
|
+
|
10
|
+
_dynamic_imports = {
|
11
|
+
"SambaNovaComponent": "sambanova",
|
12
|
+
}
|
13
|
+
|
14
|
+
__all__ = ["SambaNovaComponent"]
|
15
|
+
|
16
|
+
|
17
|
+
def __getattr__(attr_name: str) -> Any:
|
18
|
+
"""Lazily import sambanova 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,84 @@
|
|
1
|
+
from langchain_sambanova import ChatSambaNovaCloud
|
2
|
+
from pydantic.v1 import SecretStr
|
3
|
+
|
4
|
+
from lfx.base.models.model import LCModelComponent
|
5
|
+
from lfx.base.models.sambanova_constants import SAMBANOVA_MODEL_NAMES
|
6
|
+
from lfx.field_typing import LanguageModel
|
7
|
+
from lfx.field_typing.range_spec import RangeSpec
|
8
|
+
from lfx.io import DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput
|
9
|
+
|
10
|
+
|
11
|
+
class SambaNovaComponent(LCModelComponent):
|
12
|
+
display_name = "SambaNova"
|
13
|
+
description = "Generate text using Sambanova LLMs."
|
14
|
+
documentation = "https://cloud.sambanova.ai/"
|
15
|
+
icon = "SambaNova"
|
16
|
+
name = "SambaNovaModel"
|
17
|
+
|
18
|
+
inputs = [
|
19
|
+
*LCModelComponent.get_base_inputs(),
|
20
|
+
StrInput(
|
21
|
+
name="base_url",
|
22
|
+
display_name="SambaNova Cloud Base Url",
|
23
|
+
advanced=True,
|
24
|
+
info="The base URL of the Sambanova Cloud API. "
|
25
|
+
"Defaults to https://api.sambanova.ai/v1/chat/completions. "
|
26
|
+
"You can change this to use other urls like Sambastudio",
|
27
|
+
),
|
28
|
+
DropdownInput(
|
29
|
+
name="model_name",
|
30
|
+
display_name="Model Name",
|
31
|
+
advanced=False,
|
32
|
+
options=SAMBANOVA_MODEL_NAMES,
|
33
|
+
value=SAMBANOVA_MODEL_NAMES[0],
|
34
|
+
),
|
35
|
+
SecretStrInput(
|
36
|
+
name="api_key",
|
37
|
+
display_name="Sambanova API Key",
|
38
|
+
info="The Sambanova API Key to use for the Sambanova model.",
|
39
|
+
advanced=False,
|
40
|
+
value="SAMBANOVA_API_KEY",
|
41
|
+
required=True,
|
42
|
+
),
|
43
|
+
IntInput(
|
44
|
+
name="max_tokens",
|
45
|
+
display_name="Max Tokens",
|
46
|
+
advanced=True,
|
47
|
+
value=2048,
|
48
|
+
info="The maximum number of tokens to generate.",
|
49
|
+
),
|
50
|
+
SliderInput(
|
51
|
+
name="top_p",
|
52
|
+
display_name="top_p",
|
53
|
+
advanced=True,
|
54
|
+
value=1.0,
|
55
|
+
range_spec=RangeSpec(min=0, max=1, step=0.01),
|
56
|
+
info="Model top_p",
|
57
|
+
),
|
58
|
+
SliderInput(
|
59
|
+
name="temperature",
|
60
|
+
display_name="Temperature",
|
61
|
+
value=0.1,
|
62
|
+
range_spec=RangeSpec(min=0, max=2, step=0.01),
|
63
|
+
advanced=True,
|
64
|
+
),
|
65
|
+
]
|
66
|
+
|
67
|
+
def build_model(self) -> LanguageModel: # type: ignore[type-var]
|
68
|
+
sambanova_url = self.base_url
|
69
|
+
sambanova_api_key = self.api_key
|
70
|
+
model_name = self.model_name
|
71
|
+
max_tokens = self.max_tokens
|
72
|
+
top_p = self.top_p
|
73
|
+
temperature = self.temperature
|
74
|
+
|
75
|
+
api_key = SecretStr(sambanova_api_key).get_secret_value() if sambanova_api_key else None
|
76
|
+
|
77
|
+
return ChatSambaNovaCloud(
|
78
|
+
model=model_name,
|
79
|
+
max_tokens=max_tokens or 1024,
|
80
|
+
temperature=temperature or 0.07,
|
81
|
+
top_p=top_p,
|
82
|
+
sambanova_url=sambanova_url,
|
83
|
+
sambanova_api_key=api_key,
|
84
|
+
)
|
@@ -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 .scrapegraph_markdownify_api import ScrapeGraphMarkdownifyApi
|
9
|
+
from .scrapegraph_search_api import ScrapeGraphSearchApi
|
10
|
+
from .scrapegraph_smart_scraper_api import ScrapeGraphSmartScraperApi
|
11
|
+
|
12
|
+
_dynamic_imports = {
|
13
|
+
"ScrapeGraphMarkdownifyApi": "scrapegraph_markdownify_api",
|
14
|
+
"ScrapeGraphSearchApi": "scrapegraph_search_api",
|
15
|
+
"ScrapeGraphSmartScraperApi": "scrapegraph_smart_scraper_api",
|
16
|
+
}
|
17
|
+
|
18
|
+
__all__ = [
|
19
|
+
"ScrapeGraphMarkdownifyApi",
|
20
|
+
"ScrapeGraphSearchApi",
|
21
|
+
"ScrapeGraphSmartScraperApi",
|
22
|
+
]
|
23
|
+
|
24
|
+
|
25
|
+
def __getattr__(attr_name: str) -> Any:
|
26
|
+
"""Lazily import scrapegraph 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,64 @@
|
|
1
|
+
from lfx.custom.custom_component.component import Component
|
2
|
+
from lfx.io import (
|
3
|
+
MessageTextInput,
|
4
|
+
Output,
|
5
|
+
SecretStrInput,
|
6
|
+
)
|
7
|
+
from lfx.schema.data import Data
|
8
|
+
|
9
|
+
|
10
|
+
class ScrapeGraphMarkdownifyApi(Component):
|
11
|
+
display_name: str = "ScrapeGraph Markdownify API"
|
12
|
+
description: str = "Given a URL, it will return the markdownified content of the website."
|
13
|
+
name = "ScrapeGraphMarkdownifyApi"
|
14
|
+
|
15
|
+
output_types: list[str] = ["Document"]
|
16
|
+
documentation: str = "https://docs.scrapegraphai.com/services/markdownify"
|
17
|
+
|
18
|
+
inputs = [
|
19
|
+
SecretStrInput(
|
20
|
+
name="api_key",
|
21
|
+
display_name="ScrapeGraph API Key",
|
22
|
+
required=True,
|
23
|
+
password=True,
|
24
|
+
info="The API key to use ScrapeGraph API.",
|
25
|
+
),
|
26
|
+
MessageTextInput(
|
27
|
+
name="url",
|
28
|
+
display_name="URL",
|
29
|
+
tool_mode=True,
|
30
|
+
info="The URL to markdownify.",
|
31
|
+
),
|
32
|
+
]
|
33
|
+
|
34
|
+
outputs = [
|
35
|
+
Output(display_name="Data", name="data", method="scrape"),
|
36
|
+
]
|
37
|
+
|
38
|
+
def scrape(self) -> list[Data]:
|
39
|
+
try:
|
40
|
+
from scrapegraph_py import Client
|
41
|
+
from scrapegraph_py.logger import sgai_logger
|
42
|
+
except ImportError as e:
|
43
|
+
msg = "Could not import scrapegraph-py package. Please install it with `pip install scrapegraph-py`."
|
44
|
+
raise ImportError(msg) from e
|
45
|
+
|
46
|
+
# Set logging level
|
47
|
+
sgai_logger.set_logging(level="INFO")
|
48
|
+
|
49
|
+
# Initialize the client with API key
|
50
|
+
sgai_client = Client(api_key=self.api_key)
|
51
|
+
|
52
|
+
try:
|
53
|
+
# Markdownify request
|
54
|
+
response = sgai_client.markdownify(
|
55
|
+
website_url=self.url,
|
56
|
+
)
|
57
|
+
|
58
|
+
# Close the client
|
59
|
+
sgai_client.close()
|
60
|
+
|
61
|
+
return Data(data=response)
|
62
|
+
except Exception:
|
63
|
+
sgai_client.close()
|
64
|
+
raise
|
@@ -0,0 +1,64 @@
|
|
1
|
+
from lfx.custom.custom_component.component import Component
|
2
|
+
from lfx.io import (
|
3
|
+
MessageTextInput,
|
4
|
+
Output,
|
5
|
+
SecretStrInput,
|
6
|
+
)
|
7
|
+
from lfx.schema.data import Data
|
8
|
+
|
9
|
+
|
10
|
+
class ScrapeGraphSearchApi(Component):
|
11
|
+
display_name: str = "ScrapeGraph Search API"
|
12
|
+
description: str = "Given a search prompt, it will return search results using ScrapeGraph's search functionality."
|
13
|
+
name = "ScrapeGraphSearchApi"
|
14
|
+
|
15
|
+
documentation: str = "https://docs.scrapegraphai.com/services/searchscraper"
|
16
|
+
icon = "ScrapeGraph"
|
17
|
+
|
18
|
+
inputs = [
|
19
|
+
SecretStrInput(
|
20
|
+
name="api_key",
|
21
|
+
display_name="ScrapeGraph API Key",
|
22
|
+
required=True,
|
23
|
+
password=True,
|
24
|
+
info="The API key to use ScrapeGraph API.",
|
25
|
+
),
|
26
|
+
MessageTextInput(
|
27
|
+
name="user_prompt",
|
28
|
+
display_name="Search Prompt",
|
29
|
+
tool_mode=True,
|
30
|
+
info="The search prompt to use.",
|
31
|
+
),
|
32
|
+
]
|
33
|
+
|
34
|
+
outputs = [
|
35
|
+
Output(display_name="Data", name="data", method="search"),
|
36
|
+
]
|
37
|
+
|
38
|
+
def search(self) -> list[Data]:
|
39
|
+
try:
|
40
|
+
from scrapegraph_py import Client
|
41
|
+
from scrapegraph_py.logger import sgai_logger
|
42
|
+
except ImportError as e:
|
43
|
+
msg = "Could not import scrapegraph-py package. Please install it with `pip install scrapegraph-py`."
|
44
|
+
raise ImportError(msg) from e
|
45
|
+
|
46
|
+
# Set logging level
|
47
|
+
sgai_logger.set_logging(level="INFO")
|
48
|
+
|
49
|
+
# Initialize the client with API key
|
50
|
+
sgai_client = Client(api_key=self.api_key)
|
51
|
+
|
52
|
+
try:
|
53
|
+
# SearchScraper request
|
54
|
+
response = sgai_client.searchscraper(
|
55
|
+
user_prompt=self.user_prompt,
|
56
|
+
)
|
57
|
+
|
58
|
+
# Close the client
|
59
|
+
sgai_client.close()
|
60
|
+
|
61
|
+
return Data(data=response)
|
62
|
+
except Exception:
|
63
|
+
sgai_client.close()
|
64
|
+
raise
|
@@ -0,0 +1,71 @@
|
|
1
|
+
from lfx.custom.custom_component.component import Component
|
2
|
+
from lfx.io import (
|
3
|
+
MessageTextInput,
|
4
|
+
Output,
|
5
|
+
SecretStrInput,
|
6
|
+
)
|
7
|
+
from lfx.schema.data import Data
|
8
|
+
|
9
|
+
|
10
|
+
class ScrapeGraphSmartScraperApi(Component):
|
11
|
+
display_name: str = "ScrapeGraph Smart Scraper API"
|
12
|
+
description: str = "Given a URL, it will return the structured data of the website."
|
13
|
+
name = "ScrapeGraphSmartScraperApi"
|
14
|
+
|
15
|
+
output_types: list[str] = ["Document"]
|
16
|
+
documentation: str = "https://docs.scrapegraphai.com/services/smartscraper"
|
17
|
+
|
18
|
+
inputs = [
|
19
|
+
SecretStrInput(
|
20
|
+
name="api_key",
|
21
|
+
display_name="ScrapeGraph API Key",
|
22
|
+
required=True,
|
23
|
+
password=True,
|
24
|
+
info="The API key to use ScrapeGraph API.",
|
25
|
+
),
|
26
|
+
MessageTextInput(
|
27
|
+
name="url",
|
28
|
+
display_name="URL",
|
29
|
+
tool_mode=True,
|
30
|
+
info="The URL to scrape.",
|
31
|
+
),
|
32
|
+
MessageTextInput(
|
33
|
+
name="prompt",
|
34
|
+
display_name="Prompt",
|
35
|
+
tool_mode=True,
|
36
|
+
info="The prompt to use for the smart scraper.",
|
37
|
+
),
|
38
|
+
]
|
39
|
+
|
40
|
+
outputs = [
|
41
|
+
Output(display_name="Data", name="data", method="scrape"),
|
42
|
+
]
|
43
|
+
|
44
|
+
def scrape(self) -> list[Data]:
|
45
|
+
try:
|
46
|
+
from scrapegraph_py import Client
|
47
|
+
from scrapegraph_py.logger import sgai_logger
|
48
|
+
except ImportError as e:
|
49
|
+
msg = "Could not import scrapegraph-py package. Please install it with `pip install scrapegraph-py`."
|
50
|
+
raise ImportError(msg) from e
|
51
|
+
|
52
|
+
# Set logging level
|
53
|
+
sgai_logger.set_logging(level="INFO")
|
54
|
+
|
55
|
+
# Initialize the client with API key
|
56
|
+
sgai_client = Client(api_key=self.api_key)
|
57
|
+
|
58
|
+
try:
|
59
|
+
# SmartScraper request
|
60
|
+
response = sgai_client.smartscraper(
|
61
|
+
website_url=self.url,
|
62
|
+
user_prompt=self.prompt,
|
63
|
+
)
|
64
|
+
|
65
|
+
# Close the client
|
66
|
+
sgai_client.close()
|
67
|
+
|
68
|
+
return Data(data=response)
|
69
|
+
except Exception:
|
70
|
+
sgai_client.close()
|
71
|
+
raise
|
@@ -0,0 +1,34 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import TYPE_CHECKING, Any
|
4
|
+
|
5
|
+
from lfx.components._importing import import_mod
|
6
|
+
|
7
|
+
if TYPE_CHECKING:
|
8
|
+
from lfx.components.searchapi.search import SearchComponent
|
9
|
+
|
10
|
+
_dynamic_imports = {
|
11
|
+
"SearchComponent": "search",
|
12
|
+
}
|
13
|
+
|
14
|
+
__all__ = [
|
15
|
+
"SearchComponent",
|
16
|
+
]
|
17
|
+
|
18
|
+
|
19
|
+
def __getattr__(attr_name: str) -> Any:
|
20
|
+
"""Lazily import searchapi components on attribute access."""
|
21
|
+
if attr_name not in _dynamic_imports:
|
22
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
23
|
+
raise AttributeError(msg)
|
24
|
+
try:
|
25
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
26
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
27
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
28
|
+
raise AttributeError(msg) from e
|
29
|
+
globals()[attr_name] = result
|
30
|
+
return result
|
31
|
+
|
32
|
+
|
33
|
+
def __dir__() -> list[str]:
|
34
|
+
return list(__all__)
|
@@ -0,0 +1,79 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
3
|
+
from langchain_community.utilities.searchapi import SearchApiAPIWrapper
|
4
|
+
|
5
|
+
from lfx.custom.custom_component.component import Component
|
6
|
+
from lfx.inputs.inputs import DictInput, DropdownInput, IntInput, MultilineInput, SecretStrInput
|
7
|
+
from lfx.io import Output
|
8
|
+
from lfx.schema.data import Data
|
9
|
+
from lfx.schema.dataframe import DataFrame
|
10
|
+
|
11
|
+
|
12
|
+
class SearchComponent(Component):
|
13
|
+
display_name: str = "SearchApi"
|
14
|
+
description: str = "Calls the SearchApi API with result limiting. Supports Google, Bing and DuckDuckGo."
|
15
|
+
documentation: str = "https://www.searchapi.io/docs/google"
|
16
|
+
icon = "SearchAPI"
|
17
|
+
|
18
|
+
inputs = [
|
19
|
+
DropdownInput(name="engine", display_name="Engine", value="google", options=["google", "bing", "duckduckgo"]),
|
20
|
+
SecretStrInput(name="api_key", display_name="SearchAPI API Key", required=True),
|
21
|
+
MultilineInput(
|
22
|
+
name="input_value",
|
23
|
+
display_name="Input",
|
24
|
+
tool_mode=True,
|
25
|
+
),
|
26
|
+
DictInput(name="search_params", display_name="Search parameters", advanced=True, is_list=True),
|
27
|
+
IntInput(name="max_results", display_name="Max Results", value=5, advanced=True),
|
28
|
+
IntInput(name="max_snippet_length", display_name="Max Snippet Length", value=100, advanced=True),
|
29
|
+
]
|
30
|
+
|
31
|
+
outputs = [
|
32
|
+
Output(display_name="DataFrame", name="dataframe", method="fetch_content_dataframe"),
|
33
|
+
]
|
34
|
+
|
35
|
+
def _build_wrapper(self):
|
36
|
+
return SearchApiAPIWrapper(engine=self.engine, searchapi_api_key=self.api_key)
|
37
|
+
|
38
|
+
def run_model(self) -> DataFrame:
|
39
|
+
return self.fetch_content_dataframe()
|
40
|
+
|
41
|
+
def fetch_content(self) -> list[Data]:
|
42
|
+
wrapper = self._build_wrapper()
|
43
|
+
|
44
|
+
def search_func(
|
45
|
+
query: str, params: dict[str, Any] | None = None, max_results: int = 5, max_snippet_length: int = 100
|
46
|
+
) -> list[Data]:
|
47
|
+
params = params or {}
|
48
|
+
full_results = wrapper.results(query=query, **params)
|
49
|
+
organic_results = full_results.get("organic_results", [])[:max_results]
|
50
|
+
|
51
|
+
return [
|
52
|
+
Data(
|
53
|
+
text=result.get("snippet", ""),
|
54
|
+
data={
|
55
|
+
"title": result.get("title", "")[:max_snippet_length],
|
56
|
+
"link": result.get("link", ""),
|
57
|
+
"snippet": result.get("snippet", "")[:max_snippet_length],
|
58
|
+
},
|
59
|
+
)
|
60
|
+
for result in organic_results
|
61
|
+
]
|
62
|
+
|
63
|
+
results = search_func(
|
64
|
+
self.input_value,
|
65
|
+
self.search_params or {},
|
66
|
+
self.max_results,
|
67
|
+
self.max_snippet_length,
|
68
|
+
)
|
69
|
+
self.status = results
|
70
|
+
return results
|
71
|
+
|
72
|
+
def fetch_content_dataframe(self) -> DataFrame:
|
73
|
+
"""Convert the search results to a DataFrame.
|
74
|
+
|
75
|
+
Returns:
|
76
|
+
DataFrame: A DataFrame containing the search results.
|
77
|
+
"""
|
78
|
+
data = self.fetch_content()
|
79
|
+
return DataFrame(data)
|