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,238 @@
1
+ from uuid import UUID
2
+
3
+ from langchain_community.graph_vectorstores import CassandraGraphVectorStore
4
+
5
+ from lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
6
+ from lfx.helpers.data import docs_to_data
7
+ from lfx.inputs.inputs import DictInput, FloatInput
8
+ from lfx.io import (
9
+ DropdownInput,
10
+ HandleInput,
11
+ IntInput,
12
+ MessageTextInput,
13
+ SecretStrInput,
14
+ )
15
+ from lfx.schema.data import Data
16
+
17
+
18
+ class CassandraGraphVectorStoreComponent(LCVectorStoreComponent):
19
+ display_name = "Cassandra Graph"
20
+ description = "Cassandra Graph Vector Store"
21
+ name = "CassandraGraph"
22
+ icon = "Cassandra"
23
+
24
+ inputs = [
25
+ MessageTextInput(
26
+ name="database_ref",
27
+ display_name="Contact Points / Astra Database ID",
28
+ info="Contact points for the database (or Astra DB database ID)",
29
+ required=True,
30
+ ),
31
+ MessageTextInput(
32
+ name="username", display_name="Username", info="Username for the database (leave empty for Astra DB)."
33
+ ),
34
+ SecretStrInput(
35
+ name="token",
36
+ display_name="Password / Astra DB Token",
37
+ info="User password for the database (or Astra DB token).",
38
+ required=True,
39
+ ),
40
+ MessageTextInput(
41
+ name="keyspace",
42
+ display_name="Keyspace",
43
+ info="Table Keyspace (or Astra DB namespace).",
44
+ required=True,
45
+ ),
46
+ MessageTextInput(
47
+ name="table_name",
48
+ display_name="Table Name",
49
+ info="The name of the table (or Astra DB collection) where vectors will be stored.",
50
+ required=True,
51
+ ),
52
+ DropdownInput(
53
+ name="setup_mode",
54
+ display_name="Setup Mode",
55
+ info="Configuration mode for setting up the Cassandra table, with options like 'Sync' or 'Off'.",
56
+ options=["Sync", "Off"],
57
+ value="Sync",
58
+ advanced=True,
59
+ ),
60
+ DictInput(
61
+ name="cluster_kwargs",
62
+ display_name="Cluster arguments",
63
+ info="Optional dictionary of additional keyword arguments for the Cassandra cluster.",
64
+ advanced=True,
65
+ list=True,
66
+ ),
67
+ *LCVectorStoreComponent.inputs,
68
+ HandleInput(name="embedding", display_name="Embedding", input_types=["Embeddings"]),
69
+ IntInput(
70
+ name="number_of_results",
71
+ display_name="Number of Results",
72
+ info="Number of results to return.",
73
+ value=4,
74
+ advanced=True,
75
+ ),
76
+ DropdownInput(
77
+ name="search_type",
78
+ display_name="Search Type",
79
+ info="Search type to use",
80
+ options=[
81
+ "Traversal",
82
+ "MMR traversal",
83
+ "Similarity",
84
+ "Similarity with score threshold",
85
+ "MMR (Max Marginal Relevance)",
86
+ ],
87
+ value="Traversal",
88
+ advanced=True,
89
+ ),
90
+ IntInput(
91
+ name="depth",
92
+ display_name="Depth of traversal",
93
+ info="The maximum depth of edges to traverse. (when using 'Traversal' or 'MMR traversal')",
94
+ value=1,
95
+ advanced=True,
96
+ ),
97
+ FloatInput(
98
+ name="search_score_threshold",
99
+ display_name="Search Score Threshold",
100
+ info="Minimum similarity score threshold for search results. "
101
+ "(when using 'Similarity with score threshold')",
102
+ value=0,
103
+ advanced=True,
104
+ ),
105
+ DictInput(
106
+ name="search_filter",
107
+ display_name="Search Metadata Filter",
108
+ info="Optional dictionary of filters to apply to the search query.",
109
+ advanced=True,
110
+ list=True,
111
+ ),
112
+ ]
113
+
114
+ @check_cached_vector_store
115
+ def build_vector_store(self) -> CassandraGraphVectorStore:
116
+ try:
117
+ import cassio
118
+ from langchain_community.utilities.cassandra import SetupMode
119
+ except ImportError as e:
120
+ msg = "Could not import cassio integration package. Please install it with `pip install cassio`."
121
+ raise ImportError(msg) from e
122
+
123
+ database_ref = self.database_ref
124
+
125
+ try:
126
+ UUID(self.database_ref)
127
+ is_astra = True
128
+ except ValueError:
129
+ is_astra = False
130
+ if "," in self.database_ref:
131
+ # use a copy because we can't change the type of the parameter
132
+ database_ref = self.database_ref.split(",")
133
+
134
+ if is_astra:
135
+ cassio.init(
136
+ database_id=database_ref,
137
+ token=self.token,
138
+ cluster_kwargs=self.cluster_kwargs,
139
+ )
140
+ else:
141
+ cassio.init(
142
+ contact_points=database_ref,
143
+ username=self.username,
144
+ password=self.token,
145
+ cluster_kwargs=self.cluster_kwargs,
146
+ )
147
+
148
+ self.ingest_data = self._prepare_ingest_data()
149
+
150
+ documents = []
151
+
152
+ for _input in self.ingest_data or []:
153
+ if isinstance(_input, Data):
154
+ documents.append(_input.to_lc_document())
155
+ else:
156
+ documents.append(_input)
157
+
158
+ setup_mode = SetupMode.OFF if self.setup_mode == "Off" else SetupMode.SYNC
159
+
160
+ if documents:
161
+ self.log(f"Adding {len(documents)} documents to the Vector Store.")
162
+ store = CassandraGraphVectorStore.from_documents(
163
+ documents=documents,
164
+ embedding=self.embedding,
165
+ node_table=self.table_name,
166
+ keyspace=self.keyspace,
167
+ )
168
+ else:
169
+ self.log("No documents to add to the Vector Store.")
170
+ store = CassandraGraphVectorStore(
171
+ embedding=self.embedding,
172
+ node_table=self.table_name,
173
+ keyspace=self.keyspace,
174
+ setup_mode=setup_mode,
175
+ )
176
+ return store
177
+
178
+ def _map_search_type(self) -> str:
179
+ if self.search_type == "Similarity":
180
+ return "similarity"
181
+ if self.search_type == "Similarity with score threshold":
182
+ return "similarity_score_threshold"
183
+ if self.search_type == "MMR (Max Marginal Relevance)":
184
+ return "mmr"
185
+ if self.search_type == "MMR Traversal":
186
+ return "mmr_traversal"
187
+ return "traversal"
188
+
189
+ def search_documents(self) -> list[Data]:
190
+ vector_store = self.build_vector_store()
191
+
192
+ self.log(f"Search input: {self.search_query}")
193
+ self.log(f"Search type: {self.search_type}")
194
+ self.log(f"Number of results: {self.number_of_results}")
195
+
196
+ if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():
197
+ try:
198
+ search_type = self._map_search_type()
199
+ search_args = self._build_search_args()
200
+
201
+ self.log(f"Search args: {search_args}")
202
+
203
+ docs = vector_store.search(query=self.search_query, search_type=search_type, **search_args)
204
+ except KeyError as e:
205
+ if "content" in str(e):
206
+ msg = (
207
+ "You should ingest data through Langflow (or LangChain) to query it in Langflow. "
208
+ "Your collection does not contain a field name 'content'."
209
+ )
210
+ raise ValueError(msg) from e
211
+ raise
212
+
213
+ self.log(f"Retrieved documents: {len(docs)}")
214
+
215
+ data = docs_to_data(docs)
216
+ self.status = data
217
+ return data
218
+ return []
219
+
220
+ def _build_search_args(self):
221
+ args = {
222
+ "k": self.number_of_results,
223
+ "score_threshold": self.search_score_threshold,
224
+ "depth": self.depth,
225
+ }
226
+
227
+ if self.search_filter:
228
+ clean_filter = {k: v for k, v in self.search_filter.items() if k and v}
229
+ if len(clean_filter) > 0:
230
+ args["filter"] = clean_filter
231
+ return args
232
+
233
+ def get_retriever_kwargs(self):
234
+ search_args = self._build_search_args()
235
+ return {
236
+ "search_type": self._map_search_type(),
237
+ "search_kwargs": search_args,
238
+ }
@@ -0,0 +1,167 @@
1
+ from copy import deepcopy
2
+ from typing import TYPE_CHECKING
3
+
4
+ from chromadb.config import Settings
5
+ from langchain_chroma import Chroma
6
+ from typing_extensions import override
7
+
8
+ from lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
9
+ from lfx.base.vectorstores.utils import chroma_collection_to_data
10
+ from lfx.inputs.inputs import BoolInput, DropdownInput, HandleInput, IntInput, StrInput
11
+ from lfx.schema.data import Data
12
+
13
+ if TYPE_CHECKING:
14
+ from lfx.schema.dataframe import DataFrame
15
+
16
+
17
+ class ChromaVectorStoreComponent(LCVectorStoreComponent):
18
+ """Chroma Vector Store with search capabilities."""
19
+
20
+ display_name: str = "Chroma DB"
21
+ description: str = "Chroma Vector Store with search capabilities"
22
+ name = "Chroma"
23
+ icon = "Chroma"
24
+
25
+ inputs = [
26
+ StrInput(
27
+ name="collection_name",
28
+ display_name="Collection Name",
29
+ value="langflow",
30
+ ),
31
+ StrInput(
32
+ name="persist_directory",
33
+ display_name="Persist Directory",
34
+ ),
35
+ *LCVectorStoreComponent.inputs,
36
+ HandleInput(name="embedding", display_name="Embedding", input_types=["Embeddings"]),
37
+ StrInput(
38
+ name="chroma_server_cors_allow_origins",
39
+ display_name="Server CORS Allow Origins",
40
+ advanced=True,
41
+ ),
42
+ StrInput(
43
+ name="chroma_server_host",
44
+ display_name="Server Host",
45
+ advanced=True,
46
+ ),
47
+ IntInput(
48
+ name="chroma_server_http_port",
49
+ display_name="Server HTTP Port",
50
+ advanced=True,
51
+ ),
52
+ IntInput(
53
+ name="chroma_server_grpc_port",
54
+ display_name="Server gRPC Port",
55
+ advanced=True,
56
+ ),
57
+ BoolInput(
58
+ name="chroma_server_ssl_enabled",
59
+ display_name="Server SSL Enabled",
60
+ advanced=True,
61
+ ),
62
+ BoolInput(
63
+ name="allow_duplicates",
64
+ display_name="Allow Duplicates",
65
+ advanced=True,
66
+ info="If false, will not add documents that are already in the Vector Store.",
67
+ ),
68
+ DropdownInput(
69
+ name="search_type",
70
+ display_name="Search Type",
71
+ options=["Similarity", "MMR"],
72
+ value="Similarity",
73
+ advanced=True,
74
+ ),
75
+ IntInput(
76
+ name="number_of_results",
77
+ display_name="Number of Results",
78
+ info="Number of results to return.",
79
+ advanced=True,
80
+ value=10,
81
+ ),
82
+ IntInput(
83
+ name="limit",
84
+ display_name="Limit",
85
+ advanced=True,
86
+ info="Limit the number of records to compare when Allow Duplicates is False.",
87
+ ),
88
+ ]
89
+
90
+ @override
91
+ @check_cached_vector_store
92
+ def build_vector_store(self) -> Chroma:
93
+ """Builds the Chroma object."""
94
+ try:
95
+ from chromadb import Client
96
+ from langchain_chroma import Chroma
97
+ except ImportError as e:
98
+ msg = "Could not import Chroma integration package. Please install it with `pip install langchain-chroma`."
99
+ raise ImportError(msg) from e
100
+ # Chroma settings
101
+ chroma_settings = None
102
+ client = None
103
+ if self.chroma_server_host:
104
+ chroma_settings = Settings(
105
+ chroma_server_cors_allow_origins=self.chroma_server_cors_allow_origins or [],
106
+ chroma_server_host=self.chroma_server_host,
107
+ chroma_server_http_port=self.chroma_server_http_port or None,
108
+ chroma_server_grpc_port=self.chroma_server_grpc_port or None,
109
+ chroma_server_ssl_enabled=self.chroma_server_ssl_enabled,
110
+ )
111
+ client = Client(settings=chroma_settings)
112
+
113
+ # Check persist_directory and expand it if it is a relative path
114
+ persist_directory = self.resolve_path(self.persist_directory) if self.persist_directory is not None else None
115
+
116
+ chroma = Chroma(
117
+ persist_directory=persist_directory,
118
+ client=client,
119
+ embedding_function=self.embedding,
120
+ collection_name=self.collection_name,
121
+ )
122
+
123
+ self._add_documents_to_vector_store(chroma)
124
+ self.status = chroma_collection_to_data(chroma.get(limit=self.limit))
125
+ return chroma
126
+
127
+ def _add_documents_to_vector_store(self, vector_store: "Chroma") -> None:
128
+ """Adds documents to the Vector Store."""
129
+ ingest_data: list | Data | DataFrame = self.ingest_data
130
+ if not ingest_data:
131
+ self.status = ""
132
+ return
133
+
134
+ # Convert DataFrame to Data if needed using parent's method
135
+ ingest_data = self._prepare_ingest_data()
136
+
137
+ stored_documents_without_id = []
138
+ if self.allow_duplicates:
139
+ stored_data = []
140
+ else:
141
+ stored_data = chroma_collection_to_data(vector_store.get(limit=self.limit))
142
+ for value in deepcopy(stored_data):
143
+ del value.id
144
+ stored_documents_without_id.append(value)
145
+
146
+ documents = []
147
+ for _input in ingest_data or []:
148
+ if isinstance(_input, Data):
149
+ if _input not in stored_documents_without_id:
150
+ documents.append(_input.to_lc_document())
151
+ else:
152
+ msg = "Vector Store Inputs must be Data objects."
153
+ raise TypeError(msg)
154
+
155
+ if documents and self.embedding is not None:
156
+ self.log(f"Adding {len(documents)} documents to the Vector Store.")
157
+ # Filter complex metadata to prevent ChromaDB errors
158
+ try:
159
+ from langchain_community.vectorstores.utils import filter_complex_metadata
160
+
161
+ filtered_documents = filter_complex_metadata(documents)
162
+ vector_store.add_documents(filtered_documents)
163
+ except ImportError:
164
+ self.log("Warning: Could not import filter_complex_metadata. Adding documents without filtering.")
165
+ vector_store.add_documents(documents)
166
+ else:
167
+ self.log("No documents to add to the Vector Store.")
@@ -0,0 +1,135 @@
1
+ from langchain_community.vectorstores import Clickhouse, ClickhouseSettings
2
+
3
+ from lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
4
+ from lfx.helpers.data import docs_to_data
5
+ from lfx.inputs.inputs import BoolInput, FloatInput
6
+ from lfx.io import (
7
+ DictInput,
8
+ DropdownInput,
9
+ HandleInput,
10
+ IntInput,
11
+ SecretStrInput,
12
+ StrInput,
13
+ )
14
+ from lfx.schema.data import Data
15
+
16
+
17
+ class ClickhouseVectorStoreComponent(LCVectorStoreComponent):
18
+ display_name = "Clickhouse"
19
+ description = "Clickhouse Vector Store with search capabilities"
20
+ name = "Clickhouse"
21
+ icon = "Clickhouse"
22
+
23
+ inputs = [
24
+ StrInput(name="host", display_name="hostname", required=True, value="localhost"),
25
+ IntInput(name="port", display_name="port", required=True, value=8123),
26
+ StrInput(name="database", display_name="database", required=True),
27
+ StrInput(name="table", display_name="Table name", required=True),
28
+ StrInput(name="username", display_name="The ClickHouse user name.", required=True),
29
+ SecretStrInput(name="password", display_name="The password for username.", required=True),
30
+ DropdownInput(
31
+ name="index_type",
32
+ display_name="index_type",
33
+ options=["annoy", "vector_similarity"],
34
+ info="Type of the index.",
35
+ value="annoy",
36
+ advanced=True,
37
+ ),
38
+ DropdownInput(
39
+ name="metric",
40
+ display_name="metric",
41
+ options=["angular", "euclidean", "manhattan", "hamming", "dot"],
42
+ info="Metric to compute distance.",
43
+ value="angular",
44
+ advanced=True,
45
+ ),
46
+ BoolInput(
47
+ name="secure",
48
+ display_name="Use https/TLS. This overrides inferred values from the interface or port arguments.",
49
+ value=False,
50
+ advanced=True,
51
+ ),
52
+ StrInput(name="index_param", display_name="Param of the index", value="100,'L2Distance'", advanced=True),
53
+ DictInput(name="index_query_params", display_name="index query params", advanced=True),
54
+ *LCVectorStoreComponent.inputs,
55
+ HandleInput(name="embedding", display_name="Embedding", input_types=["Embeddings"]),
56
+ IntInput(
57
+ name="number_of_results",
58
+ display_name="Number of Results",
59
+ info="Number of results to return.",
60
+ value=4,
61
+ advanced=True,
62
+ ),
63
+ FloatInput(name="score_threshold", display_name="Score threshold", advanced=True),
64
+ ]
65
+
66
+ @check_cached_vector_store
67
+ def build_vector_store(self) -> Clickhouse:
68
+ try:
69
+ import clickhouse_connect
70
+ except ImportError as e:
71
+ msg = (
72
+ "Failed to import Clickhouse dependencies. "
73
+ "Install it using `uv pip install langflow[clickhouse-connect] --pre`"
74
+ )
75
+ raise ImportError(msg) from e
76
+
77
+ try:
78
+ client = clickhouse_connect.get_client(
79
+ host=self.host, port=self.port, username=self.username, password=self.password
80
+ )
81
+ client.command("SELECT 1")
82
+ except Exception as e:
83
+ msg = f"Failed to connect to Clickhouse: {e}"
84
+ raise ValueError(msg) from e
85
+
86
+ # Convert DataFrame to Data if needed using parent's method
87
+ self.ingest_data = self._prepare_ingest_data()
88
+
89
+ documents = []
90
+ for _input in self.ingest_data or []:
91
+ if isinstance(_input, Data):
92
+ documents.append(_input.to_lc_document())
93
+ else:
94
+ documents.append(_input)
95
+
96
+ kwargs = {}
97
+ if self.index_param:
98
+ kwargs["index_param"] = self.index_param.split(",")
99
+ if self.index_query_params:
100
+ kwargs["index_query_params"] = self.index_query_params
101
+
102
+ settings = ClickhouseSettings(
103
+ table=self.table,
104
+ database=self.database,
105
+ host=self.host,
106
+ index_type=self.index_type,
107
+ metric=self.metric,
108
+ password=self.password,
109
+ port=self.port,
110
+ secure=self.secure,
111
+ username=self.username,
112
+ **kwargs,
113
+ )
114
+ if documents:
115
+ clickhouse_vs = Clickhouse.from_documents(documents=documents, embedding=self.embedding, config=settings)
116
+
117
+ else:
118
+ clickhouse_vs = Clickhouse(embedding=self.embedding, config=settings)
119
+
120
+ return clickhouse_vs
121
+
122
+ def search_documents(self) -> list[Data]:
123
+ vector_store = self.build_vector_store()
124
+
125
+ if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():
126
+ kwargs = {}
127
+ if self.score_threshold:
128
+ kwargs["score_threshold"] = self.score_threshold
129
+
130
+ docs = vector_store.similarity_search(query=self.search_query, k=self.number_of_results, **kwargs)
131
+
132
+ data = docs_to_data(docs)
133
+ self.status = data
134
+ return data
135
+ return []
@@ -0,0 +1,102 @@
1
+ from datetime import timedelta
2
+
3
+ from langchain_community.vectorstores import CouchbaseVectorStore
4
+
5
+ from lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
6
+ from lfx.helpers.data import docs_to_data
7
+ from lfx.io import HandleInput, IntInput, SecretStrInput, StrInput
8
+ from lfx.schema.data import Data
9
+
10
+
11
+ class CouchbaseVectorStoreComponent(LCVectorStoreComponent):
12
+ display_name = "Couchbase"
13
+ description = "Couchbase Vector Store with search capabilities"
14
+ name = "Couchbase"
15
+ icon = "Couchbase"
16
+
17
+ inputs = [
18
+ SecretStrInput(
19
+ name="couchbase_connection_string", display_name="Couchbase Cluster connection string", required=True
20
+ ),
21
+ StrInput(name="couchbase_username", display_name="Couchbase username", required=True),
22
+ SecretStrInput(name="couchbase_password", display_name="Couchbase password", required=True),
23
+ StrInput(name="bucket_name", display_name="Bucket Name", required=True),
24
+ StrInput(name="scope_name", display_name="Scope Name", required=True),
25
+ StrInput(name="collection_name", display_name="Collection Name", required=True),
26
+ StrInput(name="index_name", display_name="Index Name", required=True),
27
+ *LCVectorStoreComponent.inputs,
28
+ HandleInput(name="embedding", display_name="Embedding", input_types=["Embeddings"]),
29
+ IntInput(
30
+ name="number_of_results",
31
+ display_name="Number of Results",
32
+ info="Number of results to return.",
33
+ value=4,
34
+ advanced=True,
35
+ ),
36
+ ]
37
+
38
+ @check_cached_vector_store
39
+ def build_vector_store(self) -> CouchbaseVectorStore:
40
+ try:
41
+ from couchbase.auth import PasswordAuthenticator
42
+ from couchbase.cluster import Cluster
43
+ from couchbase.options import ClusterOptions
44
+ except ImportError as e:
45
+ msg = "Failed to import Couchbase dependencies. Install it using `uv pip install langflow[couchbase] --pre`"
46
+ raise ImportError(msg) from e
47
+
48
+ try:
49
+ auth = PasswordAuthenticator(self.couchbase_username, self.couchbase_password)
50
+ options = ClusterOptions(auth)
51
+ cluster = Cluster(self.couchbase_connection_string, options)
52
+
53
+ cluster.wait_until_ready(timedelta(seconds=5))
54
+ except Exception as e:
55
+ msg = f"Failed to connect to Couchbase: {e}"
56
+ raise ValueError(msg) from e
57
+
58
+ self.ingest_data = self._prepare_ingest_data()
59
+
60
+ documents = []
61
+ for _input in self.ingest_data or []:
62
+ if isinstance(_input, Data):
63
+ documents.append(_input.to_lc_document())
64
+ else:
65
+ documents.append(_input)
66
+
67
+ if documents:
68
+ couchbase_vs = CouchbaseVectorStore.from_documents(
69
+ documents=documents,
70
+ cluster=cluster,
71
+ bucket_name=self.bucket_name,
72
+ scope_name=self.scope_name,
73
+ collection_name=self.collection_name,
74
+ embedding=self.embedding,
75
+ index_name=self.index_name,
76
+ )
77
+
78
+ else:
79
+ couchbase_vs = CouchbaseVectorStore(
80
+ cluster=cluster,
81
+ bucket_name=self.bucket_name,
82
+ scope_name=self.scope_name,
83
+ collection_name=self.collection_name,
84
+ embedding=self.embedding,
85
+ index_name=self.index_name,
86
+ )
87
+
88
+ return couchbase_vs
89
+
90
+ def search_documents(self) -> list[Data]:
91
+ vector_store = self.build_vector_store()
92
+
93
+ if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():
94
+ docs = vector_store.similarity_search(
95
+ query=self.search_query,
96
+ k=self.number_of_results,
97
+ )
98
+
99
+ data = docs_to_data(docs)
100
+ self.status = data
101
+ return data
102
+ return []