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.
Files changed (699) hide show
  1. lfx/__init__.py +0 -0
  2. lfx/__main__.py +25 -0
  3. lfx/base/__init__.py +0 -0
  4. lfx/base/agents/__init__.py +0 -0
  5. lfx/base/agents/agent.py +268 -0
  6. lfx/base/agents/callback.py +130 -0
  7. lfx/base/agents/context.py +109 -0
  8. lfx/base/agents/crewai/__init__.py +0 -0
  9. lfx/base/agents/crewai/crew.py +231 -0
  10. lfx/base/agents/crewai/tasks.py +12 -0
  11. lfx/base/agents/default_prompts.py +23 -0
  12. lfx/base/agents/errors.py +15 -0
  13. lfx/base/agents/events.py +346 -0
  14. lfx/base/agents/utils.py +205 -0
  15. lfx/base/astra_assistants/__init__.py +0 -0
  16. lfx/base/astra_assistants/util.py +171 -0
  17. lfx/base/chains/__init__.py +0 -0
  18. lfx/base/chains/model.py +19 -0
  19. lfx/base/composio/__init__.py +0 -0
  20. lfx/base/composio/composio_base.py +1291 -0
  21. lfx/base/compressors/__init__.py +0 -0
  22. lfx/base/compressors/model.py +60 -0
  23. lfx/base/constants.py +46 -0
  24. lfx/base/curl/__init__.py +0 -0
  25. lfx/base/curl/parse.py +188 -0
  26. lfx/base/data/__init__.py +5 -0
  27. lfx/base/data/base_file.py +685 -0
  28. lfx/base/data/docling_utils.py +245 -0
  29. lfx/base/data/utils.py +198 -0
  30. lfx/base/document_transformers/__init__.py +0 -0
  31. lfx/base/document_transformers/model.py +43 -0
  32. lfx/base/embeddings/__init__.py +0 -0
  33. lfx/base/embeddings/aiml_embeddings.py +62 -0
  34. lfx/base/embeddings/model.py +26 -0
  35. lfx/base/flow_processing/__init__.py +0 -0
  36. lfx/base/flow_processing/utils.py +86 -0
  37. lfx/base/huggingface/__init__.py +0 -0
  38. lfx/base/huggingface/model_bridge.py +133 -0
  39. lfx/base/io/__init__.py +0 -0
  40. lfx/base/io/chat.py +20 -0
  41. lfx/base/io/text.py +22 -0
  42. lfx/base/langchain_utilities/__init__.py +0 -0
  43. lfx/base/langchain_utilities/model.py +35 -0
  44. lfx/base/langchain_utilities/spider_constants.py +1 -0
  45. lfx/base/langwatch/__init__.py +0 -0
  46. lfx/base/langwatch/utils.py +18 -0
  47. lfx/base/mcp/__init__.py +0 -0
  48. lfx/base/mcp/constants.py +2 -0
  49. lfx/base/mcp/util.py +1398 -0
  50. lfx/base/memory/__init__.py +0 -0
  51. lfx/base/memory/memory.py +49 -0
  52. lfx/base/memory/model.py +38 -0
  53. lfx/base/models/__init__.py +3 -0
  54. lfx/base/models/aiml_constants.py +51 -0
  55. lfx/base/models/anthropic_constants.py +47 -0
  56. lfx/base/models/aws_constants.py +151 -0
  57. lfx/base/models/chat_result.py +76 -0
  58. lfx/base/models/google_generative_ai_constants.py +70 -0
  59. lfx/base/models/groq_constants.py +134 -0
  60. lfx/base/models/model.py +375 -0
  61. lfx/base/models/model_input_constants.py +307 -0
  62. lfx/base/models/model_metadata.py +41 -0
  63. lfx/base/models/model_utils.py +8 -0
  64. lfx/base/models/novita_constants.py +35 -0
  65. lfx/base/models/ollama_constants.py +49 -0
  66. lfx/base/models/openai_constants.py +122 -0
  67. lfx/base/models/sambanova_constants.py +18 -0
  68. lfx/base/processing/__init__.py +0 -0
  69. lfx/base/prompts/__init__.py +0 -0
  70. lfx/base/prompts/api_utils.py +224 -0
  71. lfx/base/prompts/utils.py +61 -0
  72. lfx/base/textsplitters/__init__.py +0 -0
  73. lfx/base/textsplitters/model.py +28 -0
  74. lfx/base/tools/__init__.py +0 -0
  75. lfx/base/tools/base.py +26 -0
  76. lfx/base/tools/component_tool.py +325 -0
  77. lfx/base/tools/constants.py +49 -0
  78. lfx/base/tools/flow_tool.py +132 -0
  79. lfx/base/tools/run_flow.py +224 -0
  80. lfx/base/vectorstores/__init__.py +0 -0
  81. lfx/base/vectorstores/model.py +193 -0
  82. lfx/base/vectorstores/utils.py +22 -0
  83. lfx/base/vectorstores/vector_store_connection_decorator.py +52 -0
  84. lfx/cli/__init__.py +5 -0
  85. lfx/cli/commands.py +319 -0
  86. lfx/cli/common.py +650 -0
  87. lfx/cli/run.py +441 -0
  88. lfx/cli/script_loader.py +247 -0
  89. lfx/cli/serve_app.py +546 -0
  90. lfx/cli/validation.py +69 -0
  91. lfx/components/FAISS/__init__.py +34 -0
  92. lfx/components/FAISS/faiss.py +111 -0
  93. lfx/components/Notion/__init__.py +19 -0
  94. lfx/components/Notion/add_content_to_page.py +269 -0
  95. lfx/components/Notion/create_page.py +94 -0
  96. lfx/components/Notion/list_database_properties.py +68 -0
  97. lfx/components/Notion/list_pages.py +122 -0
  98. lfx/components/Notion/list_users.py +77 -0
  99. lfx/components/Notion/page_content_viewer.py +93 -0
  100. lfx/components/Notion/search.py +111 -0
  101. lfx/components/Notion/update_page_property.py +114 -0
  102. lfx/components/__init__.py +411 -0
  103. lfx/components/_importing.py +42 -0
  104. lfx/components/agentql/__init__.py +3 -0
  105. lfx/components/agentql/agentql_api.py +151 -0
  106. lfx/components/agents/__init__.py +34 -0
  107. lfx/components/agents/agent.py +558 -0
  108. lfx/components/agents/mcp_component.py +501 -0
  109. lfx/components/aiml/__init__.py +37 -0
  110. lfx/components/aiml/aiml.py +112 -0
  111. lfx/components/aiml/aiml_embeddings.py +37 -0
  112. lfx/components/amazon/__init__.py +36 -0
  113. lfx/components/amazon/amazon_bedrock_embedding.py +109 -0
  114. lfx/components/amazon/amazon_bedrock_model.py +124 -0
  115. lfx/components/amazon/s3_bucket_uploader.py +211 -0
  116. lfx/components/anthropic/__init__.py +34 -0
  117. lfx/components/anthropic/anthropic.py +187 -0
  118. lfx/components/apify/__init__.py +5 -0
  119. lfx/components/apify/apify_actor.py +325 -0
  120. lfx/components/arxiv/__init__.py +3 -0
  121. lfx/components/arxiv/arxiv.py +163 -0
  122. lfx/components/assemblyai/__init__.py +46 -0
  123. lfx/components/assemblyai/assemblyai_get_subtitles.py +83 -0
  124. lfx/components/assemblyai/assemblyai_lemur.py +183 -0
  125. lfx/components/assemblyai/assemblyai_list_transcripts.py +95 -0
  126. lfx/components/assemblyai/assemblyai_poll_transcript.py +72 -0
  127. lfx/components/assemblyai/assemblyai_start_transcript.py +188 -0
  128. lfx/components/azure/__init__.py +37 -0
  129. lfx/components/azure/azure_openai.py +95 -0
  130. lfx/components/azure/azure_openai_embeddings.py +83 -0
  131. lfx/components/baidu/__init__.py +32 -0
  132. lfx/components/baidu/baidu_qianfan_chat.py +113 -0
  133. lfx/components/bing/__init__.py +3 -0
  134. lfx/components/bing/bing_search_api.py +61 -0
  135. lfx/components/cassandra/__init__.py +40 -0
  136. lfx/components/cassandra/cassandra.py +264 -0
  137. lfx/components/cassandra/cassandra_chat.py +92 -0
  138. lfx/components/cassandra/cassandra_graph.py +238 -0
  139. lfx/components/chains/__init__.py +3 -0
  140. lfx/components/chroma/__init__.py +34 -0
  141. lfx/components/chroma/chroma.py +167 -0
  142. lfx/components/cleanlab/__init__.py +40 -0
  143. lfx/components/cleanlab/cleanlab_evaluator.py +155 -0
  144. lfx/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
  145. lfx/components/cleanlab/cleanlab_remediator.py +131 -0
  146. lfx/components/clickhouse/__init__.py +34 -0
  147. lfx/components/clickhouse/clickhouse.py +135 -0
  148. lfx/components/cloudflare/__init__.py +32 -0
  149. lfx/components/cloudflare/cloudflare.py +81 -0
  150. lfx/components/cohere/__init__.py +40 -0
  151. lfx/components/cohere/cohere_embeddings.py +81 -0
  152. lfx/components/cohere/cohere_models.py +46 -0
  153. lfx/components/cohere/cohere_rerank.py +51 -0
  154. lfx/components/composio/__init__.py +74 -0
  155. lfx/components/composio/composio_api.py +268 -0
  156. lfx/components/composio/dropbox_compnent.py +11 -0
  157. lfx/components/composio/github_composio.py +11 -0
  158. lfx/components/composio/gmail_composio.py +38 -0
  159. lfx/components/composio/googlecalendar_composio.py +11 -0
  160. lfx/components/composio/googlemeet_composio.py +11 -0
  161. lfx/components/composio/googletasks_composio.py +8 -0
  162. lfx/components/composio/linear_composio.py +11 -0
  163. lfx/components/composio/outlook_composio.py +11 -0
  164. lfx/components/composio/reddit_composio.py +11 -0
  165. lfx/components/composio/slack_composio.py +582 -0
  166. lfx/components/composio/slackbot_composio.py +11 -0
  167. lfx/components/composio/supabase_composio.py +11 -0
  168. lfx/components/composio/todoist_composio.py +11 -0
  169. lfx/components/composio/youtube_composio.py +11 -0
  170. lfx/components/confluence/__init__.py +3 -0
  171. lfx/components/confluence/confluence.py +84 -0
  172. lfx/components/couchbase/__init__.py +34 -0
  173. lfx/components/couchbase/couchbase.py +102 -0
  174. lfx/components/crewai/__init__.py +49 -0
  175. lfx/components/crewai/crewai.py +107 -0
  176. lfx/components/crewai/hierarchical_crew.py +46 -0
  177. lfx/components/crewai/hierarchical_task.py +44 -0
  178. lfx/components/crewai/sequential_crew.py +52 -0
  179. lfx/components/crewai/sequential_task.py +73 -0
  180. lfx/components/crewai/sequential_task_agent.py +143 -0
  181. lfx/components/custom_component/__init__.py +34 -0
  182. lfx/components/custom_component/custom_component.py +31 -0
  183. lfx/components/data/__init__.py +64 -0
  184. lfx/components/data/api_request.py +544 -0
  185. lfx/components/data/csv_to_data.py +95 -0
  186. lfx/components/data/directory.py +113 -0
  187. lfx/components/data/file.py +577 -0
  188. lfx/components/data/json_to_data.py +98 -0
  189. lfx/components/data/news_search.py +164 -0
  190. lfx/components/data/rss.py +69 -0
  191. lfx/components/data/sql_executor.py +101 -0
  192. lfx/components/data/url.py +311 -0
  193. lfx/components/data/web_search.py +112 -0
  194. lfx/components/data/webhook.py +56 -0
  195. lfx/components/datastax/__init__.py +70 -0
  196. lfx/components/datastax/astra_assistant_manager.py +306 -0
  197. lfx/components/datastax/astra_db.py +75 -0
  198. lfx/components/datastax/astra_vectorize.py +124 -0
  199. lfx/components/datastax/astradb.py +1285 -0
  200. lfx/components/datastax/astradb_cql.py +314 -0
  201. lfx/components/datastax/astradb_graph.py +330 -0
  202. lfx/components/datastax/astradb_tool.py +414 -0
  203. lfx/components/datastax/astradb_vectorstore.py +1285 -0
  204. lfx/components/datastax/cassandra.py +92 -0
  205. lfx/components/datastax/create_assistant.py +58 -0
  206. lfx/components/datastax/create_thread.py +32 -0
  207. lfx/components/datastax/dotenv.py +35 -0
  208. lfx/components/datastax/get_assistant.py +37 -0
  209. lfx/components/datastax/getenvvar.py +30 -0
  210. lfx/components/datastax/graph_rag.py +141 -0
  211. lfx/components/datastax/hcd.py +314 -0
  212. lfx/components/datastax/list_assistants.py +25 -0
  213. lfx/components/datastax/run.py +89 -0
  214. lfx/components/deactivated/__init__.py +15 -0
  215. lfx/components/deactivated/amazon_kendra.py +66 -0
  216. lfx/components/deactivated/chat_litellm_model.py +158 -0
  217. lfx/components/deactivated/code_block_extractor.py +26 -0
  218. lfx/components/deactivated/documents_to_data.py +22 -0
  219. lfx/components/deactivated/embed.py +16 -0
  220. lfx/components/deactivated/extract_key_from_data.py +46 -0
  221. lfx/components/deactivated/json_document_builder.py +57 -0
  222. lfx/components/deactivated/list_flows.py +20 -0
  223. lfx/components/deactivated/mcp_sse.py +61 -0
  224. lfx/components/deactivated/mcp_stdio.py +62 -0
  225. lfx/components/deactivated/merge_data.py +93 -0
  226. lfx/components/deactivated/message.py +37 -0
  227. lfx/components/deactivated/metal.py +54 -0
  228. lfx/components/deactivated/multi_query.py +59 -0
  229. lfx/components/deactivated/retriever.py +43 -0
  230. lfx/components/deactivated/selective_passthrough.py +77 -0
  231. lfx/components/deactivated/should_run_next.py +40 -0
  232. lfx/components/deactivated/split_text.py +63 -0
  233. lfx/components/deactivated/store_message.py +24 -0
  234. lfx/components/deactivated/sub_flow.py +124 -0
  235. lfx/components/deactivated/vectara_self_query.py +76 -0
  236. lfx/components/deactivated/vector_store.py +24 -0
  237. lfx/components/deepseek/__init__.py +34 -0
  238. lfx/components/deepseek/deepseek.py +136 -0
  239. lfx/components/docling/__init__.py +43 -0
  240. lfx/components/docling/chunk_docling_document.py +186 -0
  241. lfx/components/docling/docling_inline.py +231 -0
  242. lfx/components/docling/docling_remote.py +193 -0
  243. lfx/components/docling/export_docling_document.py +117 -0
  244. lfx/components/documentloaders/__init__.py +3 -0
  245. lfx/components/duckduckgo/__init__.py +3 -0
  246. lfx/components/duckduckgo/duck_duck_go_search_run.py +92 -0
  247. lfx/components/elastic/__init__.py +37 -0
  248. lfx/components/elastic/elasticsearch.py +267 -0
  249. lfx/components/elastic/opensearch.py +243 -0
  250. lfx/components/embeddings/__init__.py +37 -0
  251. lfx/components/embeddings/similarity.py +76 -0
  252. lfx/components/embeddings/text_embedder.py +64 -0
  253. lfx/components/exa/__init__.py +3 -0
  254. lfx/components/exa/exa_search.py +68 -0
  255. lfx/components/firecrawl/__init__.py +43 -0
  256. lfx/components/firecrawl/firecrawl_crawl_api.py +88 -0
  257. lfx/components/firecrawl/firecrawl_extract_api.py +136 -0
  258. lfx/components/firecrawl/firecrawl_map_api.py +89 -0
  259. lfx/components/firecrawl/firecrawl_scrape_api.py +73 -0
  260. lfx/components/git/__init__.py +4 -0
  261. lfx/components/git/git.py +262 -0
  262. lfx/components/git/gitextractor.py +196 -0
  263. lfx/components/glean/__init__.py +3 -0
  264. lfx/components/glean/glean_search_api.py +173 -0
  265. lfx/components/google/__init__.py +17 -0
  266. lfx/components/google/gmail.py +192 -0
  267. lfx/components/google/google_bq_sql_executor.py +157 -0
  268. lfx/components/google/google_drive.py +92 -0
  269. lfx/components/google/google_drive_search.py +152 -0
  270. lfx/components/google/google_generative_ai.py +147 -0
  271. lfx/components/google/google_generative_ai_embeddings.py +141 -0
  272. lfx/components/google/google_oauth_token.py +89 -0
  273. lfx/components/google/google_search_api_core.py +68 -0
  274. lfx/components/google/google_serper_api_core.py +74 -0
  275. lfx/components/groq/__init__.py +34 -0
  276. lfx/components/groq/groq.py +136 -0
  277. lfx/components/helpers/__init__.py +52 -0
  278. lfx/components/helpers/calculator_core.py +89 -0
  279. lfx/components/helpers/create_list.py +40 -0
  280. lfx/components/helpers/current_date.py +42 -0
  281. lfx/components/helpers/id_generator.py +42 -0
  282. lfx/components/helpers/memory.py +251 -0
  283. lfx/components/helpers/output_parser.py +45 -0
  284. lfx/components/helpers/store_message.py +90 -0
  285. lfx/components/homeassistant/__init__.py +7 -0
  286. lfx/components/homeassistant/home_assistant_control.py +152 -0
  287. lfx/components/homeassistant/list_home_assistant_states.py +137 -0
  288. lfx/components/huggingface/__init__.py +37 -0
  289. lfx/components/huggingface/huggingface.py +197 -0
  290. lfx/components/huggingface/huggingface_inference_api.py +106 -0
  291. lfx/components/ibm/__init__.py +34 -0
  292. lfx/components/ibm/watsonx.py +203 -0
  293. lfx/components/ibm/watsonx_embeddings.py +135 -0
  294. lfx/components/icosacomputing/__init__.py +5 -0
  295. lfx/components/icosacomputing/combinatorial_reasoner.py +84 -0
  296. lfx/components/input_output/__init__.py +38 -0
  297. lfx/components/input_output/chat.py +120 -0
  298. lfx/components/input_output/chat_output.py +200 -0
  299. lfx/components/input_output/text.py +27 -0
  300. lfx/components/input_output/text_output.py +29 -0
  301. lfx/components/jigsawstack/__init__.py +23 -0
  302. lfx/components/jigsawstack/ai_scrape.py +126 -0
  303. lfx/components/jigsawstack/ai_web_search.py +136 -0
  304. lfx/components/jigsawstack/file_read.py +115 -0
  305. lfx/components/jigsawstack/file_upload.py +94 -0
  306. lfx/components/jigsawstack/image_generation.py +205 -0
  307. lfx/components/jigsawstack/nsfw.py +60 -0
  308. lfx/components/jigsawstack/object_detection.py +124 -0
  309. lfx/components/jigsawstack/sentiment.py +112 -0
  310. lfx/components/jigsawstack/text_to_sql.py +90 -0
  311. lfx/components/jigsawstack/text_translate.py +77 -0
  312. lfx/components/jigsawstack/vocr.py +107 -0
  313. lfx/components/langchain_utilities/__init__.py +109 -0
  314. lfx/components/langchain_utilities/character.py +53 -0
  315. lfx/components/langchain_utilities/conversation.py +59 -0
  316. lfx/components/langchain_utilities/csv_agent.py +107 -0
  317. lfx/components/langchain_utilities/fake_embeddings.py +26 -0
  318. lfx/components/langchain_utilities/html_link_extractor.py +35 -0
  319. lfx/components/langchain_utilities/json_agent.py +45 -0
  320. lfx/components/langchain_utilities/langchain_hub.py +126 -0
  321. lfx/components/langchain_utilities/language_recursive.py +49 -0
  322. lfx/components/langchain_utilities/language_semantic.py +138 -0
  323. lfx/components/langchain_utilities/llm_checker.py +39 -0
  324. lfx/components/langchain_utilities/llm_math.py +42 -0
  325. lfx/components/langchain_utilities/natural_language.py +61 -0
  326. lfx/components/langchain_utilities/openai_tools.py +53 -0
  327. lfx/components/langchain_utilities/openapi.py +48 -0
  328. lfx/components/langchain_utilities/recursive_character.py +60 -0
  329. lfx/components/langchain_utilities/retrieval_qa.py +83 -0
  330. lfx/components/langchain_utilities/runnable_executor.py +137 -0
  331. lfx/components/langchain_utilities/self_query.py +80 -0
  332. lfx/components/langchain_utilities/spider.py +142 -0
  333. lfx/components/langchain_utilities/sql.py +40 -0
  334. lfx/components/langchain_utilities/sql_database.py +35 -0
  335. lfx/components/langchain_utilities/sql_generator.py +78 -0
  336. lfx/components/langchain_utilities/tool_calling.py +59 -0
  337. lfx/components/langchain_utilities/vector_store_info.py +49 -0
  338. lfx/components/langchain_utilities/vector_store_router.py +33 -0
  339. lfx/components/langchain_utilities/xml_agent.py +71 -0
  340. lfx/components/langwatch/__init__.py +3 -0
  341. lfx/components/langwatch/langwatch.py +278 -0
  342. lfx/components/link_extractors/__init__.py +3 -0
  343. lfx/components/lmstudio/__init__.py +34 -0
  344. lfx/components/lmstudio/lmstudioembeddings.py +89 -0
  345. lfx/components/lmstudio/lmstudiomodel.py +129 -0
  346. lfx/components/logic/__init__.py +52 -0
  347. lfx/components/logic/conditional_router.py +171 -0
  348. lfx/components/logic/data_conditional_router.py +125 -0
  349. lfx/components/logic/flow_tool.py +110 -0
  350. lfx/components/logic/listen.py +29 -0
  351. lfx/components/logic/loop.py +125 -0
  352. lfx/components/logic/notify.py +88 -0
  353. lfx/components/logic/pass_message.py +35 -0
  354. lfx/components/logic/run_flow.py +71 -0
  355. lfx/components/logic/sub_flow.py +114 -0
  356. lfx/components/maritalk/__init__.py +32 -0
  357. lfx/components/maritalk/maritalk.py +52 -0
  358. lfx/components/mem0/__init__.py +3 -0
  359. lfx/components/mem0/mem0_chat_memory.py +136 -0
  360. lfx/components/milvus/__init__.py +34 -0
  361. lfx/components/milvus/milvus.py +115 -0
  362. lfx/components/mistral/__init__.py +37 -0
  363. lfx/components/mistral/mistral.py +114 -0
  364. lfx/components/mistral/mistral_embeddings.py +58 -0
  365. lfx/components/models/__init__.py +34 -0
  366. lfx/components/models/embedding_model.py +114 -0
  367. lfx/components/models/language_model.py +144 -0
  368. lfx/components/mongodb/__init__.py +34 -0
  369. lfx/components/mongodb/mongodb_atlas.py +213 -0
  370. lfx/components/needle/__init__.py +3 -0
  371. lfx/components/needle/needle.py +104 -0
  372. lfx/components/notdiamond/__init__.py +34 -0
  373. lfx/components/notdiamond/notdiamond.py +228 -0
  374. lfx/components/novita/__init__.py +32 -0
  375. lfx/components/novita/novita.py +130 -0
  376. lfx/components/nvidia/__init__.py +57 -0
  377. lfx/components/nvidia/nvidia.py +157 -0
  378. lfx/components/nvidia/nvidia_embedding.py +77 -0
  379. lfx/components/nvidia/nvidia_ingest.py +317 -0
  380. lfx/components/nvidia/nvidia_rerank.py +63 -0
  381. lfx/components/nvidia/system_assist.py +65 -0
  382. lfx/components/olivya/__init__.py +3 -0
  383. lfx/components/olivya/olivya.py +116 -0
  384. lfx/components/ollama/__init__.py +37 -0
  385. lfx/components/ollama/ollama.py +330 -0
  386. lfx/components/ollama/ollama_embeddings.py +106 -0
  387. lfx/components/openai/__init__.py +37 -0
  388. lfx/components/openai/openai.py +100 -0
  389. lfx/components/openai/openai_chat_model.py +176 -0
  390. lfx/components/openrouter/__init__.py +32 -0
  391. lfx/components/openrouter/openrouter.py +202 -0
  392. lfx/components/output_parsers/__init__.py +3 -0
  393. lfx/components/perplexity/__init__.py +34 -0
  394. lfx/components/perplexity/perplexity.py +75 -0
  395. lfx/components/pgvector/__init__.py +34 -0
  396. lfx/components/pgvector/pgvector.py +72 -0
  397. lfx/components/pinecone/__init__.py +34 -0
  398. lfx/components/pinecone/pinecone.py +134 -0
  399. lfx/components/processing/__init__.py +117 -0
  400. lfx/components/processing/alter_metadata.py +108 -0
  401. lfx/components/processing/batch_run.py +205 -0
  402. lfx/components/processing/combine_text.py +39 -0
  403. lfx/components/processing/converter.py +159 -0
  404. lfx/components/processing/create_data.py +110 -0
  405. lfx/components/processing/data_operations.py +438 -0
  406. lfx/components/processing/data_to_dataframe.py +70 -0
  407. lfx/components/processing/dataframe_operations.py +313 -0
  408. lfx/components/processing/extract_key.py +53 -0
  409. lfx/components/processing/filter_data.py +42 -0
  410. lfx/components/processing/filter_data_values.py +88 -0
  411. lfx/components/processing/json_cleaner.py +103 -0
  412. lfx/components/processing/lambda_filter.py +154 -0
  413. lfx/components/processing/llm_router.py +499 -0
  414. lfx/components/processing/merge_data.py +90 -0
  415. lfx/components/processing/message_to_data.py +36 -0
  416. lfx/components/processing/parse_data.py +70 -0
  417. lfx/components/processing/parse_dataframe.py +68 -0
  418. lfx/components/processing/parse_json_data.py +90 -0
  419. lfx/components/processing/parser.py +143 -0
  420. lfx/components/processing/prompt.py +67 -0
  421. lfx/components/processing/python_repl_core.py +98 -0
  422. lfx/components/processing/regex.py +82 -0
  423. lfx/components/processing/save_file.py +225 -0
  424. lfx/components/processing/select_data.py +48 -0
  425. lfx/components/processing/split_text.py +141 -0
  426. lfx/components/processing/structured_output.py +202 -0
  427. lfx/components/processing/update_data.py +160 -0
  428. lfx/components/prototypes/__init__.py +34 -0
  429. lfx/components/prototypes/python_function.py +73 -0
  430. lfx/components/qdrant/__init__.py +34 -0
  431. lfx/components/qdrant/qdrant.py +109 -0
  432. lfx/components/redis/__init__.py +37 -0
  433. lfx/components/redis/redis.py +89 -0
  434. lfx/components/redis/redis_chat.py +43 -0
  435. lfx/components/sambanova/__init__.py +32 -0
  436. lfx/components/sambanova/sambanova.py +84 -0
  437. lfx/components/scrapegraph/__init__.py +40 -0
  438. lfx/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
  439. lfx/components/scrapegraph/scrapegraph_search_api.py +64 -0
  440. lfx/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
  441. lfx/components/searchapi/__init__.py +34 -0
  442. lfx/components/searchapi/search.py +79 -0
  443. lfx/components/serpapi/__init__.py +3 -0
  444. lfx/components/serpapi/serp.py +115 -0
  445. lfx/components/supabase/__init__.py +34 -0
  446. lfx/components/supabase/supabase.py +76 -0
  447. lfx/components/tavily/__init__.py +4 -0
  448. lfx/components/tavily/tavily_extract.py +117 -0
  449. lfx/components/tavily/tavily_search.py +212 -0
  450. lfx/components/textsplitters/__init__.py +3 -0
  451. lfx/components/toolkits/__init__.py +3 -0
  452. lfx/components/tools/__init__.py +72 -0
  453. lfx/components/tools/calculator.py +108 -0
  454. lfx/components/tools/google_search_api.py +45 -0
  455. lfx/components/tools/google_serper_api.py +115 -0
  456. lfx/components/tools/python_code_structured_tool.py +327 -0
  457. lfx/components/tools/python_repl.py +97 -0
  458. lfx/components/tools/search_api.py +87 -0
  459. lfx/components/tools/searxng.py +145 -0
  460. lfx/components/tools/serp_api.py +119 -0
  461. lfx/components/tools/tavily_search_tool.py +344 -0
  462. lfx/components/tools/wikidata_api.py +102 -0
  463. lfx/components/tools/wikipedia_api.py +49 -0
  464. lfx/components/tools/yahoo_finance.py +129 -0
  465. lfx/components/twelvelabs/__init__.py +52 -0
  466. lfx/components/twelvelabs/convert_astra_results.py +84 -0
  467. lfx/components/twelvelabs/pegasus_index.py +311 -0
  468. lfx/components/twelvelabs/split_video.py +291 -0
  469. lfx/components/twelvelabs/text_embeddings.py +57 -0
  470. lfx/components/twelvelabs/twelvelabs_pegasus.py +408 -0
  471. lfx/components/twelvelabs/video_embeddings.py +100 -0
  472. lfx/components/twelvelabs/video_file.py +179 -0
  473. lfx/components/unstructured/__init__.py +3 -0
  474. lfx/components/unstructured/unstructured.py +121 -0
  475. lfx/components/upstash/__init__.py +34 -0
  476. lfx/components/upstash/upstash.py +124 -0
  477. lfx/components/vectara/__init__.py +37 -0
  478. lfx/components/vectara/vectara.py +97 -0
  479. lfx/components/vectara/vectara_rag.py +164 -0
  480. lfx/components/vectorstores/__init__.py +40 -0
  481. lfx/components/vectorstores/astradb.py +1285 -0
  482. lfx/components/vectorstores/astradb_graph.py +319 -0
  483. lfx/components/vectorstores/cassandra.py +264 -0
  484. lfx/components/vectorstores/cassandra_graph.py +238 -0
  485. lfx/components/vectorstores/chroma.py +167 -0
  486. lfx/components/vectorstores/clickhouse.py +135 -0
  487. lfx/components/vectorstores/couchbase.py +102 -0
  488. lfx/components/vectorstores/elasticsearch.py +267 -0
  489. lfx/components/vectorstores/faiss.py +111 -0
  490. lfx/components/vectorstores/graph_rag.py +141 -0
  491. lfx/components/vectorstores/hcd.py +314 -0
  492. lfx/components/vectorstores/local_db.py +261 -0
  493. lfx/components/vectorstores/milvus.py +115 -0
  494. lfx/components/vectorstores/mongodb_atlas.py +213 -0
  495. lfx/components/vectorstores/opensearch.py +243 -0
  496. lfx/components/vectorstores/pgvector.py +72 -0
  497. lfx/components/vectorstores/pinecone.py +134 -0
  498. lfx/components/vectorstores/qdrant.py +109 -0
  499. lfx/components/vectorstores/supabase.py +76 -0
  500. lfx/components/vectorstores/upstash.py +124 -0
  501. lfx/components/vectorstores/vectara.py +97 -0
  502. lfx/components/vectorstores/vectara_rag.py +164 -0
  503. lfx/components/vectorstores/weaviate.py +89 -0
  504. lfx/components/vertexai/__init__.py +37 -0
  505. lfx/components/vertexai/vertexai.py +71 -0
  506. lfx/components/vertexai/vertexai_embeddings.py +67 -0
  507. lfx/components/weaviate/__init__.py +34 -0
  508. lfx/components/weaviate/weaviate.py +89 -0
  509. lfx/components/wikipedia/__init__.py +4 -0
  510. lfx/components/wikipedia/wikidata.py +86 -0
  511. lfx/components/wikipedia/wikipedia.py +53 -0
  512. lfx/components/wolframalpha/__init__.py +3 -0
  513. lfx/components/wolframalpha/wolfram_alpha_api.py +54 -0
  514. lfx/components/xai/__init__.py +32 -0
  515. lfx/components/xai/xai.py +167 -0
  516. lfx/components/yahoosearch/__init__.py +3 -0
  517. lfx/components/yahoosearch/yahoo.py +137 -0
  518. lfx/components/youtube/__init__.py +52 -0
  519. lfx/components/youtube/channel.py +227 -0
  520. lfx/components/youtube/comments.py +231 -0
  521. lfx/components/youtube/playlist.py +33 -0
  522. lfx/components/youtube/search.py +120 -0
  523. lfx/components/youtube/trending.py +285 -0
  524. lfx/components/youtube/video_details.py +263 -0
  525. lfx/components/youtube/youtube_transcripts.py +118 -0
  526. lfx/components/zep/__init__.py +3 -0
  527. lfx/components/zep/zep.py +44 -0
  528. lfx/constants.py +6 -0
  529. lfx/custom/__init__.py +7 -0
  530. lfx/custom/attributes.py +86 -0
  531. lfx/custom/code_parser/__init__.py +3 -0
  532. lfx/custom/code_parser/code_parser.py +361 -0
  533. lfx/custom/custom_component/__init__.py +0 -0
  534. lfx/custom/custom_component/base_component.py +128 -0
  535. lfx/custom/custom_component/component.py +1808 -0
  536. lfx/custom/custom_component/component_with_cache.py +8 -0
  537. lfx/custom/custom_component/custom_component.py +588 -0
  538. lfx/custom/dependency_analyzer.py +165 -0
  539. lfx/custom/directory_reader/__init__.py +3 -0
  540. lfx/custom/directory_reader/directory_reader.py +359 -0
  541. lfx/custom/directory_reader/utils.py +171 -0
  542. lfx/custom/eval.py +12 -0
  543. lfx/custom/schema.py +32 -0
  544. lfx/custom/tree_visitor.py +21 -0
  545. lfx/custom/utils.py +877 -0
  546. lfx/custom/validate.py +488 -0
  547. lfx/events/__init__.py +1 -0
  548. lfx/events/event_manager.py +110 -0
  549. lfx/exceptions/__init__.py +0 -0
  550. lfx/exceptions/component.py +15 -0
  551. lfx/field_typing/__init__.py +91 -0
  552. lfx/field_typing/constants.py +215 -0
  553. lfx/field_typing/range_spec.py +35 -0
  554. lfx/graph/__init__.py +6 -0
  555. lfx/graph/edge/__init__.py +0 -0
  556. lfx/graph/edge/base.py +277 -0
  557. lfx/graph/edge/schema.py +119 -0
  558. lfx/graph/edge/utils.py +0 -0
  559. lfx/graph/graph/__init__.py +0 -0
  560. lfx/graph/graph/ascii.py +202 -0
  561. lfx/graph/graph/base.py +2238 -0
  562. lfx/graph/graph/constants.py +63 -0
  563. lfx/graph/graph/runnable_vertices_manager.py +133 -0
  564. lfx/graph/graph/schema.py +52 -0
  565. lfx/graph/graph/state_model.py +66 -0
  566. lfx/graph/graph/utils.py +1024 -0
  567. lfx/graph/schema.py +75 -0
  568. lfx/graph/state/__init__.py +0 -0
  569. lfx/graph/state/model.py +237 -0
  570. lfx/graph/utils.py +200 -0
  571. lfx/graph/vertex/__init__.py +0 -0
  572. lfx/graph/vertex/base.py +823 -0
  573. lfx/graph/vertex/constants.py +0 -0
  574. lfx/graph/vertex/exceptions.py +4 -0
  575. lfx/graph/vertex/param_handler.py +264 -0
  576. lfx/graph/vertex/schema.py +26 -0
  577. lfx/graph/vertex/utils.py +19 -0
  578. lfx/graph/vertex/vertex_types.py +489 -0
  579. lfx/helpers/__init__.py +1 -0
  580. lfx/helpers/base_model.py +71 -0
  581. lfx/helpers/custom.py +13 -0
  582. lfx/helpers/data.py +167 -0
  583. lfx/helpers/flow.py +194 -0
  584. lfx/inputs/__init__.py +68 -0
  585. lfx/inputs/constants.py +2 -0
  586. lfx/inputs/input_mixin.py +328 -0
  587. lfx/inputs/inputs.py +714 -0
  588. lfx/inputs/validators.py +19 -0
  589. lfx/interface/__init__.py +6 -0
  590. lfx/interface/components.py +489 -0
  591. lfx/interface/importing/__init__.py +5 -0
  592. lfx/interface/importing/utils.py +39 -0
  593. lfx/interface/initialize/__init__.py +3 -0
  594. lfx/interface/initialize/loading.py +224 -0
  595. lfx/interface/listing.py +26 -0
  596. lfx/interface/run.py +16 -0
  597. lfx/interface/utils.py +111 -0
  598. lfx/io/__init__.py +63 -0
  599. lfx/io/schema.py +289 -0
  600. lfx/load/__init__.py +8 -0
  601. lfx/load/load.py +256 -0
  602. lfx/load/utils.py +99 -0
  603. lfx/log/__init__.py +5 -0
  604. lfx/log/logger.py +385 -0
  605. lfx/memory/__init__.py +90 -0
  606. lfx/memory/stubs.py +283 -0
  607. lfx/processing/__init__.py +1 -0
  608. lfx/processing/process.py +238 -0
  609. lfx/processing/utils.py +25 -0
  610. lfx/py.typed +0 -0
  611. lfx/schema/__init__.py +66 -0
  612. lfx/schema/artifact.py +83 -0
  613. lfx/schema/content_block.py +62 -0
  614. lfx/schema/content_types.py +91 -0
  615. lfx/schema/data.py +308 -0
  616. lfx/schema/dataframe.py +210 -0
  617. lfx/schema/dotdict.py +74 -0
  618. lfx/schema/encoders.py +13 -0
  619. lfx/schema/graph.py +47 -0
  620. lfx/schema/image.py +131 -0
  621. lfx/schema/json_schema.py +141 -0
  622. lfx/schema/log.py +61 -0
  623. lfx/schema/message.py +473 -0
  624. lfx/schema/openai_responses_schemas.py +74 -0
  625. lfx/schema/properties.py +41 -0
  626. lfx/schema/schema.py +171 -0
  627. lfx/schema/serialize.py +13 -0
  628. lfx/schema/table.py +140 -0
  629. lfx/schema/validators.py +114 -0
  630. lfx/serialization/__init__.py +5 -0
  631. lfx/serialization/constants.py +2 -0
  632. lfx/serialization/serialization.py +314 -0
  633. lfx/services/__init__.py +23 -0
  634. lfx/services/base.py +28 -0
  635. lfx/services/cache/__init__.py +6 -0
  636. lfx/services/cache/base.py +183 -0
  637. lfx/services/cache/service.py +166 -0
  638. lfx/services/cache/utils.py +169 -0
  639. lfx/services/chat/__init__.py +1 -0
  640. lfx/services/chat/config.py +2 -0
  641. lfx/services/chat/schema.py +10 -0
  642. lfx/services/deps.py +129 -0
  643. lfx/services/factory.py +19 -0
  644. lfx/services/initialize.py +19 -0
  645. lfx/services/interfaces.py +103 -0
  646. lfx/services/manager.py +172 -0
  647. lfx/services/schema.py +20 -0
  648. lfx/services/session.py +82 -0
  649. lfx/services/settings/__init__.py +3 -0
  650. lfx/services/settings/auth.py +130 -0
  651. lfx/services/settings/base.py +539 -0
  652. lfx/services/settings/constants.py +31 -0
  653. lfx/services/settings/factory.py +23 -0
  654. lfx/services/settings/feature_flags.py +12 -0
  655. lfx/services/settings/service.py +35 -0
  656. lfx/services/settings/utils.py +40 -0
  657. lfx/services/shared_component_cache/__init__.py +1 -0
  658. lfx/services/shared_component_cache/factory.py +30 -0
  659. lfx/services/shared_component_cache/service.py +9 -0
  660. lfx/services/storage/__init__.py +5 -0
  661. lfx/services/storage/local.py +155 -0
  662. lfx/services/storage/service.py +54 -0
  663. lfx/services/tracing/__init__.py +1 -0
  664. lfx/services/tracing/service.py +21 -0
  665. lfx/settings.py +6 -0
  666. lfx/template/__init__.py +6 -0
  667. lfx/template/field/__init__.py +0 -0
  668. lfx/template/field/base.py +257 -0
  669. lfx/template/field/prompt.py +15 -0
  670. lfx/template/frontend_node/__init__.py +6 -0
  671. lfx/template/frontend_node/base.py +212 -0
  672. lfx/template/frontend_node/constants.py +65 -0
  673. lfx/template/frontend_node/custom_components.py +79 -0
  674. lfx/template/template/__init__.py +0 -0
  675. lfx/template/template/base.py +100 -0
  676. lfx/template/utils.py +217 -0
  677. lfx/type_extraction/__init__.py +19 -0
  678. lfx/type_extraction/type_extraction.py +75 -0
  679. lfx/type_extraction.py +80 -0
  680. lfx/utils/__init__.py +1 -0
  681. lfx/utils/async_helpers.py +42 -0
  682. lfx/utils/component_utils.py +154 -0
  683. lfx/utils/concurrency.py +60 -0
  684. lfx/utils/connection_string_parser.py +11 -0
  685. lfx/utils/constants.py +205 -0
  686. lfx/utils/data_structure.py +212 -0
  687. lfx/utils/exceptions.py +22 -0
  688. lfx/utils/helpers.py +28 -0
  689. lfx/utils/image.py +73 -0
  690. lfx/utils/lazy_load.py +15 -0
  691. lfx/utils/request_utils.py +18 -0
  692. lfx/utils/schemas.py +139 -0
  693. lfx/utils/util.py +481 -0
  694. lfx/utils/util_strings.py +56 -0
  695. lfx/utils/version.py +24 -0
  696. lfx_nightly-0.1.11.dev0.dist-info/METADATA +293 -0
  697. lfx_nightly-0.1.11.dev0.dist-info/RECORD +699 -0
  698. lfx_nightly-0.1.11.dev0.dist-info/WHEEL +4 -0
  699. lfx_nightly-0.1.11.dev0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,22 @@
1
+ from langchain_core.documents import Document
2
+
3
+ from lfx.custom.custom_component.custom_component import CustomComponent
4
+ from lfx.schema.data import Data
5
+
6
+
7
+ class DocumentsToDataComponent(CustomComponent):
8
+ display_name = "Documents ⇢ Data"
9
+ description = "Convert LangChain Documents into Data."
10
+ icon = "LangChain"
11
+ name = "DocumentsToData"
12
+
13
+ field_config = {
14
+ "documents": {"display_name": "Documents"},
15
+ }
16
+
17
+ def build(self, documents: list[Document]) -> list[Data]:
18
+ if isinstance(documents, Document):
19
+ documents = [documents]
20
+ data = [Data.from_document(document) for document in documents]
21
+ self.status = data
22
+ return data
@@ -0,0 +1,16 @@
1
+ from lfx.custom.custom_component.custom_component import CustomComponent
2
+ from lfx.field_typing import Embeddings
3
+ from lfx.schema.data import Data
4
+
5
+
6
+ class EmbedComponent(CustomComponent):
7
+ display_name = "Embed Texts"
8
+ name = "Embed"
9
+
10
+ def build_config(self):
11
+ return {"texts": {"display_name": "Texts"}, "embbedings": {"display_name": "Embeddings"}}
12
+
13
+ def build(self, texts: list[str], embbedings: Embeddings) -> Data:
14
+ vectors = Data(vector=embbedings.embed_documents(texts))
15
+ self.status = vectors
16
+ return vectors
@@ -0,0 +1,46 @@
1
+ from lfx.custom.custom_component.custom_component import CustomComponent
2
+ from lfx.schema.data import Data
3
+
4
+
5
+ class ExtractKeyFromDataComponent(CustomComponent):
6
+ display_name = "Extract Key From Data"
7
+ description = "Extracts a key from a data."
8
+ beta: bool = True
9
+ name = "ExtractKeyFromData"
10
+
11
+ field_config = {
12
+ "data": {"display_name": "Data"},
13
+ "keys": {
14
+ "display_name": "Keys",
15
+ "info": "The keys to extract from the data.",
16
+ "input_types": [],
17
+ },
18
+ "silent_error": {
19
+ "display_name": "Silent Errors",
20
+ "info": "If True, errors will not be raised.",
21
+ "advanced": True,
22
+ },
23
+ }
24
+
25
+ def build(self, data: Data, keys: list[str], *, silent_error: bool = True) -> Data:
26
+ """Extracts the keys from a data.
27
+
28
+ Args:
29
+ data (Data): The data from which to extract the keys.
30
+ keys (list[str]): The keys to extract from the data.
31
+ silent_error (bool): If True, errors will not be raised.
32
+
33
+ Returns:
34
+ dict: The extracted keys.
35
+ """
36
+ extracted_keys = {}
37
+ for key in keys:
38
+ try:
39
+ extracted_keys[key] = getattr(data, key)
40
+ except AttributeError as e:
41
+ if not silent_error:
42
+ msg = f"The key '{key}' does not exist in the data."
43
+ raise KeyError(msg) from e
44
+ return_data = Data(data=extracted_keys)
45
+ self.status = return_data
46
+ return return_data
@@ -0,0 +1,57 @@
1
+ # JSON Document Builder
2
+
3
+ # Build a Document containing a JSON object using a key and another Document page content.
4
+
5
+ # **Params**
6
+
7
+ # - **Key:** The key to use for the JSON object.
8
+ # - **Document:** The Document page to use for the JSON object.
9
+
10
+ # **Output**
11
+
12
+ # - **Document:** The Document containing the JSON object.
13
+
14
+
15
+ import orjson
16
+ from langchain_core.documents import Document
17
+
18
+ from lfx.custom.custom_component.custom_component import CustomComponent
19
+ from lfx.io import HandleInput, StrInput
20
+
21
+
22
+ class JSONDocumentBuilder(CustomComponent):
23
+ display_name: str = "JSON Document Builder"
24
+ description: str = "Build a Document containing a JSON object using a key and another Document page content."
25
+ name = "JSONDocumentBuilder"
26
+ documentation: str = "https://docs.langflow.org/components/utilities#json-document-builder"
27
+ legacy = True
28
+
29
+ inputs = [
30
+ StrInput(
31
+ name="key",
32
+ display_name="Key",
33
+ required=True,
34
+ ),
35
+ HandleInput(
36
+ name="document",
37
+ display_name="Document",
38
+ required=True,
39
+ ),
40
+ ]
41
+
42
+ def build(
43
+ self,
44
+ key: str,
45
+ document: Document,
46
+ ) -> Document:
47
+ documents = None
48
+ if isinstance(document, list):
49
+ documents = [Document(page_content=orjson.dumps({key: doc.page_content}).decode()) for doc in document]
50
+ elif isinstance(document, Document):
51
+ documents = Document(page_content=orjson.dumps({key: document.page_content}).decode())
52
+ else:
53
+ msg = f"Expected Document or list of Documents, got {type(document)}"
54
+ raise TypeError(msg)
55
+
56
+ self.repr_value = documents
57
+ return documents
@@ -0,0 +1,20 @@
1
+ from lfx.custom.custom_component.custom_component import CustomComponent
2
+ from lfx.schema.data import Data
3
+
4
+
5
+ class ListFlowsComponent(CustomComponent):
6
+ display_name = "List Flows"
7
+ description = "A component to list all available flows."
8
+ icon = "ListFlows"
9
+ beta: bool = True
10
+ name = "ListFlows"
11
+
12
+ def build_config(self):
13
+ return {}
14
+
15
+ async def build(
16
+ self,
17
+ ) -> list[Data]:
18
+ flows = await self.alist_flows()
19
+ self.status = flows
20
+ return flows
@@ -0,0 +1,61 @@
1
+ # from lfx.field_typing import Data
2
+
3
+ from langchain_core.tools import StructuredTool
4
+ from mcp import types
5
+
6
+ from lfx.base.mcp.util import (
7
+ MCPSseClient,
8
+ create_input_schema_from_json_schema,
9
+ create_tool_coroutine,
10
+ create_tool_func,
11
+ )
12
+ from lfx.custom.custom_component.component import Component
13
+ from lfx.field_typing import Tool
14
+ from lfx.io import MessageTextInput, Output
15
+
16
+
17
+ class MCPSse(Component):
18
+ client = MCPSseClient()
19
+ tools = types.ListToolsResult
20
+ tool_names = [str]
21
+ display_name = "MCP Tools (SSE) [DEPRECATED]"
22
+ description = "Connects to an MCP server over SSE and exposes it's tools as langflow tools to be used by an Agent."
23
+ documentation: str = "https://docs.langflow.org/components-custom-components"
24
+ icon = "code"
25
+ name = "MCPSse"
26
+ legacy = True
27
+
28
+ inputs = [
29
+ MessageTextInput(
30
+ name="url",
31
+ display_name="mcp sse url",
32
+ info="sse url",
33
+ value="http://localhost:7860/api/v1/mcp/sse",
34
+ tool_mode=True,
35
+ ),
36
+ ]
37
+
38
+ outputs = [
39
+ Output(display_name="Tools", name="tools", method="build_output"),
40
+ ]
41
+
42
+ async def build_output(self) -> list[Tool]:
43
+ if self.client.session is None:
44
+ self.tools = await self.client.connect_to_server(self.url, {})
45
+
46
+ tool_list = []
47
+
48
+ for tool in self.tools:
49
+ args_schema = create_input_schema_from_json_schema(tool.inputSchema)
50
+ tool_list.append(
51
+ StructuredTool(
52
+ name=tool.name, # maybe format this
53
+ description=tool.description,
54
+ args_schema=args_schema,
55
+ func=create_tool_func(tool.name, args_schema, self.client.session),
56
+ coroutine=create_tool_coroutine(tool.name, args_schema, self.client.session),
57
+ )
58
+ )
59
+
60
+ self.tool_names = [tool.name for tool in self.tools]
61
+ return tool_list
@@ -0,0 +1,62 @@
1
+ # from lfx.field_typing import Data
2
+
3
+ from langchain_core.tools import StructuredTool
4
+ from mcp import types
5
+
6
+ from lfx.base.mcp.util import (
7
+ MCPStdioClient,
8
+ create_input_schema_from_json_schema,
9
+ create_tool_coroutine,
10
+ create_tool_func,
11
+ )
12
+ from lfx.custom.custom_component.component import Component
13
+ from lfx.field_typing import Tool
14
+ from lfx.io import MessageTextInput, Output
15
+
16
+
17
+ class MCPStdio(Component):
18
+ client = MCPStdioClient()
19
+ tools = types.ListToolsResult
20
+ tool_names = [str]
21
+ display_name = "MCP Tools (stdio) [DEPRECATED]"
22
+ description = (
23
+ "Connects to an MCP server over stdio and exposes it's tools as langflow tools to be used by an Agent."
24
+ )
25
+ documentation: str = "https://docs.langflow.org/components-custom-components"
26
+ icon = "code"
27
+ name = "MCPStdio"
28
+ legacy = True
29
+
30
+ inputs = [
31
+ MessageTextInput(
32
+ name="command",
33
+ display_name="mcp command",
34
+ info="mcp command",
35
+ value="uvx mcp-sse-shim@latest",
36
+ tool_mode=True,
37
+ ),
38
+ ]
39
+
40
+ outputs = [
41
+ Output(display_name="Tools", name="tools", method="build_output"),
42
+ ]
43
+
44
+ async def build_output(self) -> list[Tool]:
45
+ if self.client.session is None:
46
+ self.tools = await self.client.connect_to_server(self.command)
47
+
48
+ tool_list = []
49
+
50
+ for tool in self.tools:
51
+ args_schema = create_input_schema_from_json_schema(tool.inputSchema)
52
+ tool_list.append(
53
+ StructuredTool(
54
+ name=tool.name,
55
+ description=tool.description,
56
+ args_schema=args_schema,
57
+ func=create_tool_func(tool.name, args_schema, self.client.session),
58
+ coroutine=create_tool_coroutine(tool.name, args_schema, self.client.session),
59
+ )
60
+ )
61
+ self.tool_names = [tool.name for tool in self.tools]
62
+ return tool_list
@@ -0,0 +1,93 @@
1
+ from lfx.custom.custom_component.component import Component
2
+ from lfx.io import DataInput, Output
3
+ from lfx.log.logger import logger
4
+ from lfx.schema.data import Data
5
+
6
+
7
+ class MergeDataComponent(Component):
8
+ """MergeDataComponent is responsible for combining multiple Data objects into a unified list of Data objects.
9
+
10
+ It ensures that all keys across the input Data objects are present in each merged Data object.
11
+ Missing keys are filled with empty strings to maintain consistency.
12
+ """
13
+
14
+ display_name = "Merge Data"
15
+ description = (
16
+ "Combines multiple Data objects into a unified list, ensuring all keys are present in each Data object."
17
+ )
18
+ icon = "merge"
19
+
20
+ inputs = [
21
+ DataInput(
22
+ name="data_inputs",
23
+ display_name="Data Inputs",
24
+ is_list=True,
25
+ info="A list of Data inputs objects to be merged.",
26
+ ),
27
+ ]
28
+
29
+ outputs = [
30
+ Output(
31
+ display_name="Merged Data",
32
+ name="merged_data",
33
+ method="merge_data",
34
+ ),
35
+ ]
36
+
37
+ def merge_data(self) -> list[Data]:
38
+ """Merges multiple Data objects into a single list of Data objects.
39
+
40
+ Ensures that all keys from the input Data objects are present in each merged Data object.
41
+ Missing keys are filled with empty strings.
42
+
43
+ Returns:
44
+ List[Data]: A list of merged Data objects with consistent keys.
45
+ """
46
+ logger.info("Initiating the data merging process.")
47
+
48
+ data_inputs: list[Data] = self.data_inputs
49
+ logger.debug(f"Received {len(data_inputs)} data input(s) for merging.")
50
+
51
+ if not data_inputs:
52
+ logger.warning("No data inputs provided. Returning an empty list.")
53
+ return []
54
+
55
+ # Collect all unique keys from all Data objects
56
+ all_keys: set[str] = set()
57
+ for idx, data_input in enumerate(data_inputs):
58
+ if not isinstance(data_input, Data):
59
+ error_message = f"Data input at index {idx} is not of type Data."
60
+ logger.error(error_message)
61
+ type_error_message = (
62
+ f"All items in data_inputs must be of type Data. Item at index {idx} is {type(data_input)}"
63
+ )
64
+ raise TypeError(type_error_message)
65
+ all_keys.update(data_input.data.keys())
66
+ logger.debug(f"Collected {len(all_keys)} unique key(s) from input data.")
67
+
68
+ try:
69
+ # Create new list of Data objects with missing keys filled with empty strings
70
+ merged_data_list = []
71
+ for idx, data_input in enumerate(data_inputs):
72
+ merged_data_dict = {}
73
+
74
+ for key in all_keys:
75
+ # Use the existing value if the key exists, otherwise use an empty string
76
+ value = data_input.data.get(key, "")
77
+ if key not in data_input.data:
78
+ log_message = f"Key '{key}' missing in data input at index {idx}. Assigning empty string."
79
+ logger.debug(log_message)
80
+ merged_data_dict[key] = value
81
+
82
+ merged_data = Data(
83
+ text_key=data_input.text_key, data=merged_data_dict, default_value=data_input.default_value
84
+ )
85
+ merged_data_list.append(merged_data)
86
+ logger.debug(f"Merged Data object created for input at index {idx}.")
87
+
88
+ except Exception:
89
+ logger.exception("An error occurred during the data merging process.")
90
+ raise
91
+
92
+ logger.info("Data merging process completed successfully.")
93
+ return merged_data_list
@@ -0,0 +1,37 @@
1
+ from lfx.custom.custom_component.custom_component import CustomComponent
2
+ from lfx.schema.message import Message
3
+ from lfx.utils.constants import MESSAGE_SENDER_AI, MESSAGE_SENDER_USER
4
+
5
+
6
+ class MessageComponent(CustomComponent):
7
+ display_name = "Message"
8
+ description = "Creates a Message object given a Session ID."
9
+ name = "Message"
10
+
11
+ def build_config(self):
12
+ return {
13
+ "sender": {
14
+ "options": [MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],
15
+ "display_name": "Sender Type",
16
+ },
17
+ "sender_name": {"display_name": "Sender Name"},
18
+ "text": {"display_name": "Text"},
19
+ "session_id": {
20
+ "display_name": "Session ID",
21
+ "info": "Session ID of the chat history.",
22
+ "input_types": ["Message"],
23
+ },
24
+ }
25
+
26
+ def build(
27
+ self,
28
+ sender: str = MESSAGE_SENDER_USER,
29
+ sender_name: str | None = None,
30
+ session_id: str | None = None,
31
+ text: str = "",
32
+ ) -> Message:
33
+ flow_id = self.graph.flow_id if hasattr(self, "graph") else None
34
+ message = Message(text=text, sender=sender, sender_name=sender_name, flow_id=flow_id, session_id=session_id)
35
+
36
+ self.status = message
37
+ return message
@@ -0,0 +1,54 @@
1
+ # mypy: disable-error-code="attr-defined"
2
+ from langchain_community.retrievers import MetalRetriever
3
+
4
+ from lfx.base.vectorstores.model import check_cached_vector_store
5
+ from lfx.custom.custom_component.custom_component import CustomComponent
6
+ from lfx.io import DictInput, SecretStrInput, StrInput
7
+
8
+
9
+ class MetalRetrieverComponent(CustomComponent):
10
+ display_name: str = "Metal Retriever"
11
+ description: str = "Retriever that uses the Metal API."
12
+ name = "MetalRetriever"
13
+ legacy = True
14
+
15
+ inputs = [
16
+ SecretStrInput(
17
+ name="api_key",
18
+ display_name="API Key",
19
+ required=True,
20
+ ),
21
+ SecretStrInput(
22
+ name="client_id",
23
+ display_name="Client ID",
24
+ required=True,
25
+ ),
26
+ StrInput(
27
+ name="index_id",
28
+ display_name="Index ID",
29
+ required=True,
30
+ ),
31
+ DictInput(
32
+ name="params",
33
+ display_name="Parameters",
34
+ required=False,
35
+ ),
36
+ ]
37
+
38
+ @check_cached_vector_store
39
+ def build_vector_store(self) -> MetalRetriever:
40
+ """Builds the Metal Retriever."""
41
+ try:
42
+ from langchain_community.retrievers import MetalRetriever
43
+ from metal_sdk.metal import Metal
44
+ except ImportError as e:
45
+ msg = "Could not import Metal. Please install it with `pip install metal-sdk langchain-community`."
46
+ raise ImportError(msg) from e
47
+
48
+ try:
49
+ metal = Metal(api_key=self.api_key, client_id=self.client_id, index_id=self.index_id)
50
+ except Exception as e:
51
+ msg = "Could not connect to Metal API."
52
+ raise ValueError(msg) from e
53
+
54
+ return MetalRetriever(client=metal, params=self.params or {})
@@ -0,0 +1,59 @@
1
+ from langchain.prompts import PromptTemplate
2
+ from langchain.retrievers import MultiQueryRetriever
3
+
4
+ from lfx.custom.custom_component.custom_component import CustomComponent
5
+ from lfx.field_typing import BaseRetriever, LanguageModel, Text
6
+ from lfx.inputs.inputs import HandleInput, StrInput
7
+
8
+
9
+ class MultiQueryRetrieverComponent(CustomComponent):
10
+ display_name = "MultiQueryRetriever"
11
+ description = "Initialize from llm using default template."
12
+ documentation = "https://python.langchain.com/docs/modules/data_connection/retrievers/how_to/MultiQueryRetriever"
13
+ name = "MultiQueryRetriever"
14
+ legacy = True
15
+
16
+ inputs = [
17
+ HandleInput(
18
+ name="llm",
19
+ display_name="LLM",
20
+ input_types=["LanguageModel"],
21
+ required=True,
22
+ ),
23
+ HandleInput(
24
+ name="retriever",
25
+ display_name="Retriever",
26
+ input_types=["BaseRetriever"],
27
+ required=True,
28
+ ),
29
+ StrInput(
30
+ name="prompt",
31
+ display_name="Prompt",
32
+ value="You are an AI language model assistant. Your task is \n"
33
+ "to generate 3 different versions of the given user \n"
34
+ "question to retrieve relevant documents from a vector database. \n"
35
+ "By generating multiple perspectives on the user question, \n"
36
+ "your goal is to help the user overcome some of the limitations \n"
37
+ "of distance-based similarity search. Provide these alternative \n"
38
+ "questions separated by newlines. Original question: {question}",
39
+ required=False,
40
+ ),
41
+ StrInput(
42
+ name="parser_key",
43
+ display_name="Parser Key",
44
+ value="lines",
45
+ required=False,
46
+ ),
47
+ ]
48
+
49
+ def build(
50
+ self,
51
+ llm: LanguageModel,
52
+ retriever: BaseRetriever,
53
+ prompt: Text | None = None,
54
+ parser_key: str = "lines",
55
+ ) -> MultiQueryRetriever:
56
+ if not prompt:
57
+ return MultiQueryRetriever.from_llm(llm=llm, retriever=retriever, parser_key=parser_key)
58
+ prompt_template = PromptTemplate.from_template(prompt)
59
+ return MultiQueryRetriever.from_llm(llm=llm, retriever=retriever, prompt=prompt_template, parser_key=parser_key)
@@ -0,0 +1,43 @@
1
+ from langchain_core.tools import create_retriever_tool
2
+
3
+ from lfx.custom.custom_component.custom_component import CustomComponent
4
+ from lfx.field_typing import BaseRetriever, Tool
5
+ from lfx.io import HandleInput, StrInput
6
+
7
+
8
+ class RetrieverToolComponent(CustomComponent):
9
+ display_name = "RetrieverTool"
10
+ description = "Tool for interacting with retriever"
11
+ name = "RetrieverTool"
12
+ icon = "LangChain"
13
+ legacy = True
14
+
15
+ inputs = [
16
+ HandleInput(
17
+ name="retriever",
18
+ display_name="Retriever",
19
+ info="Retriever to interact with",
20
+ input_types=["Retriever"],
21
+ required=True,
22
+ ),
23
+ StrInput(
24
+ name="name",
25
+ display_name="Name",
26
+ info="Name of the tool",
27
+ required=True,
28
+ ),
29
+ StrInput(
30
+ name="description",
31
+ display_name="Description",
32
+ info="Description of the tool",
33
+ required=True,
34
+ ),
35
+ ]
36
+
37
+ def build(self, retriever: BaseRetriever, name: str, description: str, **kwargs) -> Tool:
38
+ _ = kwargs
39
+ return create_retriever_tool(
40
+ retriever=retriever,
41
+ name=name,
42
+ description=description,
43
+ )
@@ -0,0 +1,77 @@
1
+ from lfx.custom.custom_component.component import Component
2
+ from lfx.field_typing import Text
3
+ from lfx.io import BoolInput, DropdownInput, MessageTextInput, Output
4
+
5
+
6
+ class SelectivePassThroughComponent(Component):
7
+ display_name = "Selective Pass Through"
8
+ description = "Passes the specified value if a specified condition is met."
9
+ icon = "filter"
10
+ name = "SelectivePassThrough"
11
+
12
+ inputs = [
13
+ MessageTextInput(
14
+ name="input_value",
15
+ display_name="Input Value",
16
+ info="The primary input value to evaluate.",
17
+ ),
18
+ MessageTextInput(
19
+ name="comparison_value",
20
+ display_name="Comparison Value",
21
+ info="The value to compare against the input value.",
22
+ ),
23
+ DropdownInput(
24
+ name="operator",
25
+ display_name="Operator",
26
+ options=["equals", "not equals", "contains", "starts with", "ends with"],
27
+ info="Condition to evaluate the input value.",
28
+ ),
29
+ MessageTextInput(
30
+ name="value_to_pass",
31
+ display_name="Value to Pass",
32
+ info="The value to pass if the condition is met.",
33
+ ),
34
+ BoolInput(
35
+ name="case_sensitive",
36
+ display_name="Case Sensitive",
37
+ info="If true, the comparison will be case sensitive.",
38
+ value=False,
39
+ advanced=True,
40
+ ),
41
+ ]
42
+
43
+ outputs = [
44
+ Output(display_name="Passed Output", name="passed_output", method="pass_through"),
45
+ ]
46
+
47
+ def evaluate_condition(
48
+ self, input_value: str, comparison_value: str, operator: str, *, case_sensitive: bool
49
+ ) -> bool:
50
+ if not case_sensitive:
51
+ input_value = input_value.lower()
52
+ comparison_value = comparison_value.lower()
53
+
54
+ if operator == "equals":
55
+ return input_value == comparison_value
56
+ if operator == "not equals":
57
+ return input_value != comparison_value
58
+ if operator == "contains":
59
+ return comparison_value in input_value
60
+ if operator == "starts with":
61
+ return input_value.startswith(comparison_value)
62
+ if operator == "ends with":
63
+ return input_value.endswith(comparison_value)
64
+ return False
65
+
66
+ def pass_through(self) -> Text:
67
+ input_value = self.input_value
68
+ comparison_value = self.comparison_value
69
+ operator = self.operator
70
+ value_to_pass = self.value_to_pass
71
+ case_sensitive = self.case_sensitive
72
+
73
+ if self.evaluate_condition(input_value, comparison_value, operator, case_sensitive=case_sensitive):
74
+ self.status = value_to_pass
75
+ return value_to_pass
76
+ self.status = ""
77
+ return ""