lfx-nightly 0.2.0.dev25__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of lfx-nightly might be problematic. Click here for more details.

Files changed (769) hide show
  1. lfx/__init__.py +0 -0
  2. lfx/__main__.py +25 -0
  3. lfx/_assets/component_index.json +1 -0
  4. lfx/base/__init__.py +0 -0
  5. lfx/base/agents/__init__.py +0 -0
  6. lfx/base/agents/agent.py +375 -0
  7. lfx/base/agents/altk_base_agent.py +380 -0
  8. lfx/base/agents/altk_tool_wrappers.py +565 -0
  9. lfx/base/agents/callback.py +130 -0
  10. lfx/base/agents/context.py +109 -0
  11. lfx/base/agents/crewai/__init__.py +0 -0
  12. lfx/base/agents/crewai/crew.py +231 -0
  13. lfx/base/agents/crewai/tasks.py +12 -0
  14. lfx/base/agents/default_prompts.py +23 -0
  15. lfx/base/agents/errors.py +15 -0
  16. lfx/base/agents/events.py +430 -0
  17. lfx/base/agents/utils.py +237 -0
  18. lfx/base/astra_assistants/__init__.py +0 -0
  19. lfx/base/astra_assistants/util.py +171 -0
  20. lfx/base/chains/__init__.py +0 -0
  21. lfx/base/chains/model.py +19 -0
  22. lfx/base/composio/__init__.py +0 -0
  23. lfx/base/composio/composio_base.py +2584 -0
  24. lfx/base/compressors/__init__.py +0 -0
  25. lfx/base/compressors/model.py +60 -0
  26. lfx/base/constants.py +46 -0
  27. lfx/base/curl/__init__.py +0 -0
  28. lfx/base/curl/parse.py +188 -0
  29. lfx/base/data/__init__.py +5 -0
  30. lfx/base/data/base_file.py +810 -0
  31. lfx/base/data/docling_utils.py +338 -0
  32. lfx/base/data/storage_utils.py +192 -0
  33. lfx/base/data/utils.py +362 -0
  34. lfx/base/datastax/__init__.py +5 -0
  35. lfx/base/datastax/astradb_base.py +896 -0
  36. lfx/base/document_transformers/__init__.py +0 -0
  37. lfx/base/document_transformers/model.py +43 -0
  38. lfx/base/embeddings/__init__.py +0 -0
  39. lfx/base/embeddings/aiml_embeddings.py +62 -0
  40. lfx/base/embeddings/embeddings_class.py +113 -0
  41. lfx/base/embeddings/model.py +26 -0
  42. lfx/base/flow_processing/__init__.py +0 -0
  43. lfx/base/flow_processing/utils.py +86 -0
  44. lfx/base/huggingface/__init__.py +0 -0
  45. lfx/base/huggingface/model_bridge.py +133 -0
  46. lfx/base/io/__init__.py +0 -0
  47. lfx/base/io/chat.py +21 -0
  48. lfx/base/io/text.py +22 -0
  49. lfx/base/knowledge_bases/__init__.py +3 -0
  50. lfx/base/knowledge_bases/knowledge_base_utils.py +137 -0
  51. lfx/base/langchain_utilities/__init__.py +0 -0
  52. lfx/base/langchain_utilities/model.py +35 -0
  53. lfx/base/langchain_utilities/spider_constants.py +1 -0
  54. lfx/base/langwatch/__init__.py +0 -0
  55. lfx/base/langwatch/utils.py +18 -0
  56. lfx/base/mcp/__init__.py +0 -0
  57. lfx/base/mcp/constants.py +2 -0
  58. lfx/base/mcp/util.py +1659 -0
  59. lfx/base/memory/__init__.py +0 -0
  60. lfx/base/memory/memory.py +49 -0
  61. lfx/base/memory/model.py +38 -0
  62. lfx/base/models/__init__.py +3 -0
  63. lfx/base/models/aiml_constants.py +51 -0
  64. lfx/base/models/anthropic_constants.py +51 -0
  65. lfx/base/models/aws_constants.py +151 -0
  66. lfx/base/models/chat_result.py +76 -0
  67. lfx/base/models/cometapi_constants.py +54 -0
  68. lfx/base/models/google_generative_ai_constants.py +70 -0
  69. lfx/base/models/google_generative_ai_model.py +38 -0
  70. lfx/base/models/groq_constants.py +150 -0
  71. lfx/base/models/groq_model_discovery.py +265 -0
  72. lfx/base/models/model.py +375 -0
  73. lfx/base/models/model_input_constants.py +378 -0
  74. lfx/base/models/model_metadata.py +41 -0
  75. lfx/base/models/model_utils.py +108 -0
  76. lfx/base/models/novita_constants.py +35 -0
  77. lfx/base/models/ollama_constants.py +52 -0
  78. lfx/base/models/openai_constants.py +129 -0
  79. lfx/base/models/sambanova_constants.py +18 -0
  80. lfx/base/models/watsonx_constants.py +36 -0
  81. lfx/base/processing/__init__.py +0 -0
  82. lfx/base/prompts/__init__.py +0 -0
  83. lfx/base/prompts/api_utils.py +224 -0
  84. lfx/base/prompts/utils.py +61 -0
  85. lfx/base/textsplitters/__init__.py +0 -0
  86. lfx/base/textsplitters/model.py +28 -0
  87. lfx/base/tools/__init__.py +0 -0
  88. lfx/base/tools/base.py +26 -0
  89. lfx/base/tools/component_tool.py +325 -0
  90. lfx/base/tools/constants.py +49 -0
  91. lfx/base/tools/flow_tool.py +132 -0
  92. lfx/base/tools/run_flow.py +698 -0
  93. lfx/base/vectorstores/__init__.py +0 -0
  94. lfx/base/vectorstores/model.py +193 -0
  95. lfx/base/vectorstores/utils.py +22 -0
  96. lfx/base/vectorstores/vector_store_connection_decorator.py +52 -0
  97. lfx/cli/__init__.py +5 -0
  98. lfx/cli/commands.py +327 -0
  99. lfx/cli/common.py +650 -0
  100. lfx/cli/run.py +506 -0
  101. lfx/cli/script_loader.py +289 -0
  102. lfx/cli/serve_app.py +546 -0
  103. lfx/cli/validation.py +69 -0
  104. lfx/components/FAISS/__init__.py +34 -0
  105. lfx/components/FAISS/faiss.py +111 -0
  106. lfx/components/Notion/__init__.py +19 -0
  107. lfx/components/Notion/add_content_to_page.py +269 -0
  108. lfx/components/Notion/create_page.py +94 -0
  109. lfx/components/Notion/list_database_properties.py +68 -0
  110. lfx/components/Notion/list_pages.py +122 -0
  111. lfx/components/Notion/list_users.py +77 -0
  112. lfx/components/Notion/page_content_viewer.py +93 -0
  113. lfx/components/Notion/search.py +111 -0
  114. lfx/components/Notion/update_page_property.py +114 -0
  115. lfx/components/__init__.py +428 -0
  116. lfx/components/_importing.py +42 -0
  117. lfx/components/agentql/__init__.py +3 -0
  118. lfx/components/agentql/agentql_api.py +151 -0
  119. lfx/components/aiml/__init__.py +37 -0
  120. lfx/components/aiml/aiml.py +115 -0
  121. lfx/components/aiml/aiml_embeddings.py +37 -0
  122. lfx/components/altk/__init__.py +34 -0
  123. lfx/components/altk/altk_agent.py +193 -0
  124. lfx/components/amazon/__init__.py +36 -0
  125. lfx/components/amazon/amazon_bedrock_converse.py +195 -0
  126. lfx/components/amazon/amazon_bedrock_embedding.py +109 -0
  127. lfx/components/amazon/amazon_bedrock_model.py +130 -0
  128. lfx/components/amazon/s3_bucket_uploader.py +211 -0
  129. lfx/components/anthropic/__init__.py +34 -0
  130. lfx/components/anthropic/anthropic.py +187 -0
  131. lfx/components/apify/__init__.py +5 -0
  132. lfx/components/apify/apify_actor.py +325 -0
  133. lfx/components/arxiv/__init__.py +3 -0
  134. lfx/components/arxiv/arxiv.py +169 -0
  135. lfx/components/assemblyai/__init__.py +46 -0
  136. lfx/components/assemblyai/assemblyai_get_subtitles.py +83 -0
  137. lfx/components/assemblyai/assemblyai_lemur.py +183 -0
  138. lfx/components/assemblyai/assemblyai_list_transcripts.py +95 -0
  139. lfx/components/assemblyai/assemblyai_poll_transcript.py +72 -0
  140. lfx/components/assemblyai/assemblyai_start_transcript.py +188 -0
  141. lfx/components/azure/__init__.py +37 -0
  142. lfx/components/azure/azure_openai.py +95 -0
  143. lfx/components/azure/azure_openai_embeddings.py +83 -0
  144. lfx/components/baidu/__init__.py +32 -0
  145. lfx/components/baidu/baidu_qianfan_chat.py +113 -0
  146. lfx/components/bing/__init__.py +3 -0
  147. lfx/components/bing/bing_search_api.py +61 -0
  148. lfx/components/cassandra/__init__.py +40 -0
  149. lfx/components/cassandra/cassandra.py +264 -0
  150. lfx/components/cassandra/cassandra_chat.py +92 -0
  151. lfx/components/cassandra/cassandra_graph.py +238 -0
  152. lfx/components/chains/__init__.py +3 -0
  153. lfx/components/chroma/__init__.py +34 -0
  154. lfx/components/chroma/chroma.py +169 -0
  155. lfx/components/cleanlab/__init__.py +40 -0
  156. lfx/components/cleanlab/cleanlab_evaluator.py +155 -0
  157. lfx/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
  158. lfx/components/cleanlab/cleanlab_remediator.py +131 -0
  159. lfx/components/clickhouse/__init__.py +34 -0
  160. lfx/components/clickhouse/clickhouse.py +135 -0
  161. lfx/components/cloudflare/__init__.py +32 -0
  162. lfx/components/cloudflare/cloudflare.py +81 -0
  163. lfx/components/cohere/__init__.py +40 -0
  164. lfx/components/cohere/cohere_embeddings.py +81 -0
  165. lfx/components/cohere/cohere_models.py +46 -0
  166. lfx/components/cohere/cohere_rerank.py +51 -0
  167. lfx/components/cometapi/__init__.py +32 -0
  168. lfx/components/cometapi/cometapi.py +166 -0
  169. lfx/components/composio/__init__.py +222 -0
  170. lfx/components/composio/agentql_composio.py +11 -0
  171. lfx/components/composio/agiled_composio.py +11 -0
  172. lfx/components/composio/airtable_composio.py +11 -0
  173. lfx/components/composio/apollo_composio.py +11 -0
  174. lfx/components/composio/asana_composio.py +11 -0
  175. lfx/components/composio/attio_composio.py +11 -0
  176. lfx/components/composio/bitbucket_composio.py +11 -0
  177. lfx/components/composio/bolna_composio.py +11 -0
  178. lfx/components/composio/brightdata_composio.py +11 -0
  179. lfx/components/composio/calendly_composio.py +11 -0
  180. lfx/components/composio/canva_composio.py +11 -0
  181. lfx/components/composio/canvas_composio.py +11 -0
  182. lfx/components/composio/coda_composio.py +11 -0
  183. lfx/components/composio/composio_api.py +278 -0
  184. lfx/components/composio/contentful_composio.py +11 -0
  185. lfx/components/composio/digicert_composio.py +11 -0
  186. lfx/components/composio/discord_composio.py +11 -0
  187. lfx/components/composio/dropbox_compnent.py +11 -0
  188. lfx/components/composio/elevenlabs_composio.py +11 -0
  189. lfx/components/composio/exa_composio.py +11 -0
  190. lfx/components/composio/figma_composio.py +11 -0
  191. lfx/components/composio/finage_composio.py +11 -0
  192. lfx/components/composio/firecrawl_composio.py +11 -0
  193. lfx/components/composio/fireflies_composio.py +11 -0
  194. lfx/components/composio/fixer_composio.py +11 -0
  195. lfx/components/composio/flexisign_composio.py +11 -0
  196. lfx/components/composio/freshdesk_composio.py +11 -0
  197. lfx/components/composio/github_composio.py +11 -0
  198. lfx/components/composio/gmail_composio.py +38 -0
  199. lfx/components/composio/googlebigquery_composio.py +11 -0
  200. lfx/components/composio/googlecalendar_composio.py +11 -0
  201. lfx/components/composio/googleclassroom_composio.py +11 -0
  202. lfx/components/composio/googledocs_composio.py +11 -0
  203. lfx/components/composio/googlemeet_composio.py +11 -0
  204. lfx/components/composio/googlesheets_composio.py +11 -0
  205. lfx/components/composio/googletasks_composio.py +8 -0
  206. lfx/components/composio/heygen_composio.py +11 -0
  207. lfx/components/composio/instagram_composio.py +11 -0
  208. lfx/components/composio/jira_composio.py +11 -0
  209. lfx/components/composio/jotform_composio.py +11 -0
  210. lfx/components/composio/klaviyo_composio.py +11 -0
  211. lfx/components/composio/linear_composio.py +11 -0
  212. lfx/components/composio/listennotes_composio.py +11 -0
  213. lfx/components/composio/mem0_composio.py +11 -0
  214. lfx/components/composio/miro_composio.py +11 -0
  215. lfx/components/composio/missive_composio.py +11 -0
  216. lfx/components/composio/notion_composio.py +11 -0
  217. lfx/components/composio/onedrive_composio.py +11 -0
  218. lfx/components/composio/outlook_composio.py +11 -0
  219. lfx/components/composio/pandadoc_composio.py +11 -0
  220. lfx/components/composio/peopledatalabs_composio.py +11 -0
  221. lfx/components/composio/perplexityai_composio.py +11 -0
  222. lfx/components/composio/reddit_composio.py +11 -0
  223. lfx/components/composio/serpapi_composio.py +11 -0
  224. lfx/components/composio/slack_composio.py +11 -0
  225. lfx/components/composio/slackbot_composio.py +11 -0
  226. lfx/components/composio/snowflake_composio.py +11 -0
  227. lfx/components/composio/supabase_composio.py +11 -0
  228. lfx/components/composio/tavily_composio.py +11 -0
  229. lfx/components/composio/timelinesai_composio.py +11 -0
  230. lfx/components/composio/todoist_composio.py +11 -0
  231. lfx/components/composio/wrike_composio.py +11 -0
  232. lfx/components/composio/youtube_composio.py +11 -0
  233. lfx/components/confluence/__init__.py +3 -0
  234. lfx/components/confluence/confluence.py +84 -0
  235. lfx/components/couchbase/__init__.py +34 -0
  236. lfx/components/couchbase/couchbase.py +102 -0
  237. lfx/components/crewai/__init__.py +49 -0
  238. lfx/components/crewai/crewai.py +108 -0
  239. lfx/components/crewai/hierarchical_crew.py +47 -0
  240. lfx/components/crewai/hierarchical_task.py +45 -0
  241. lfx/components/crewai/sequential_crew.py +53 -0
  242. lfx/components/crewai/sequential_task.py +74 -0
  243. lfx/components/crewai/sequential_task_agent.py +144 -0
  244. lfx/components/cuga/__init__.py +34 -0
  245. lfx/components/cuga/cuga_agent.py +730 -0
  246. lfx/components/custom_component/__init__.py +34 -0
  247. lfx/components/custom_component/custom_component.py +31 -0
  248. lfx/components/data/__init__.py +114 -0
  249. lfx/components/data_source/__init__.py +58 -0
  250. lfx/components/data_source/api_request.py +577 -0
  251. lfx/components/data_source/csv_to_data.py +101 -0
  252. lfx/components/data_source/json_to_data.py +106 -0
  253. lfx/components/data_source/mock_data.py +398 -0
  254. lfx/components/data_source/news_search.py +166 -0
  255. lfx/components/data_source/rss.py +71 -0
  256. lfx/components/data_source/sql_executor.py +101 -0
  257. lfx/components/data_source/url.py +311 -0
  258. lfx/components/data_source/web_search.py +326 -0
  259. lfx/components/datastax/__init__.py +76 -0
  260. lfx/components/datastax/astradb_assistant_manager.py +307 -0
  261. lfx/components/datastax/astradb_chatmemory.py +40 -0
  262. lfx/components/datastax/astradb_cql.py +288 -0
  263. lfx/components/datastax/astradb_graph.py +217 -0
  264. lfx/components/datastax/astradb_tool.py +378 -0
  265. lfx/components/datastax/astradb_vectorize.py +122 -0
  266. lfx/components/datastax/astradb_vectorstore.py +449 -0
  267. lfx/components/datastax/create_assistant.py +59 -0
  268. lfx/components/datastax/create_thread.py +33 -0
  269. lfx/components/datastax/dotenv.py +36 -0
  270. lfx/components/datastax/get_assistant.py +38 -0
  271. lfx/components/datastax/getenvvar.py +31 -0
  272. lfx/components/datastax/graph_rag.py +141 -0
  273. lfx/components/datastax/hcd.py +315 -0
  274. lfx/components/datastax/list_assistants.py +26 -0
  275. lfx/components/datastax/run.py +90 -0
  276. lfx/components/deactivated/__init__.py +15 -0
  277. lfx/components/deactivated/amazon_kendra.py +66 -0
  278. lfx/components/deactivated/chat_litellm_model.py +158 -0
  279. lfx/components/deactivated/code_block_extractor.py +26 -0
  280. lfx/components/deactivated/documents_to_data.py +22 -0
  281. lfx/components/deactivated/embed.py +16 -0
  282. lfx/components/deactivated/extract_key_from_data.py +46 -0
  283. lfx/components/deactivated/json_document_builder.py +57 -0
  284. lfx/components/deactivated/list_flows.py +20 -0
  285. lfx/components/deactivated/mcp_sse.py +61 -0
  286. lfx/components/deactivated/mcp_stdio.py +62 -0
  287. lfx/components/deactivated/merge_data.py +93 -0
  288. lfx/components/deactivated/message.py +37 -0
  289. lfx/components/deactivated/metal.py +54 -0
  290. lfx/components/deactivated/multi_query.py +59 -0
  291. lfx/components/deactivated/retriever.py +43 -0
  292. lfx/components/deactivated/selective_passthrough.py +77 -0
  293. lfx/components/deactivated/should_run_next.py +40 -0
  294. lfx/components/deactivated/split_text.py +63 -0
  295. lfx/components/deactivated/store_message.py +24 -0
  296. lfx/components/deactivated/sub_flow.py +124 -0
  297. lfx/components/deactivated/vectara_self_query.py +76 -0
  298. lfx/components/deactivated/vector_store.py +24 -0
  299. lfx/components/deepseek/__init__.py +34 -0
  300. lfx/components/deepseek/deepseek.py +136 -0
  301. lfx/components/docling/__init__.py +43 -0
  302. lfx/components/docling/chunk_docling_document.py +186 -0
  303. lfx/components/docling/docling_inline.py +238 -0
  304. lfx/components/docling/docling_remote.py +195 -0
  305. lfx/components/docling/export_docling_document.py +117 -0
  306. lfx/components/documentloaders/__init__.py +3 -0
  307. lfx/components/duckduckgo/__init__.py +3 -0
  308. lfx/components/duckduckgo/duck_duck_go_search_run.py +92 -0
  309. lfx/components/elastic/__init__.py +37 -0
  310. lfx/components/elastic/elasticsearch.py +267 -0
  311. lfx/components/elastic/opensearch.py +789 -0
  312. lfx/components/elastic/opensearch_multimodal.py +1575 -0
  313. lfx/components/embeddings/__init__.py +37 -0
  314. lfx/components/embeddings/similarity.py +77 -0
  315. lfx/components/embeddings/text_embedder.py +65 -0
  316. lfx/components/exa/__init__.py +3 -0
  317. lfx/components/exa/exa_search.py +68 -0
  318. lfx/components/files_and_knowledge/__init__.py +47 -0
  319. lfx/components/files_and_knowledge/directory.py +113 -0
  320. lfx/components/files_and_knowledge/file.py +841 -0
  321. lfx/components/files_and_knowledge/ingestion.py +694 -0
  322. lfx/components/files_and_knowledge/retrieval.py +264 -0
  323. lfx/components/files_and_knowledge/save_file.py +746 -0
  324. lfx/components/firecrawl/__init__.py +43 -0
  325. lfx/components/firecrawl/firecrawl_crawl_api.py +88 -0
  326. lfx/components/firecrawl/firecrawl_extract_api.py +136 -0
  327. lfx/components/firecrawl/firecrawl_map_api.py +89 -0
  328. lfx/components/firecrawl/firecrawl_scrape_api.py +73 -0
  329. lfx/components/flow_controls/__init__.py +58 -0
  330. lfx/components/flow_controls/conditional_router.py +208 -0
  331. lfx/components/flow_controls/data_conditional_router.py +126 -0
  332. lfx/components/flow_controls/flow_tool.py +111 -0
  333. lfx/components/flow_controls/listen.py +29 -0
  334. lfx/components/flow_controls/loop.py +163 -0
  335. lfx/components/flow_controls/notify.py +88 -0
  336. lfx/components/flow_controls/pass_message.py +36 -0
  337. lfx/components/flow_controls/run_flow.py +108 -0
  338. lfx/components/flow_controls/sub_flow.py +115 -0
  339. lfx/components/git/__init__.py +4 -0
  340. lfx/components/git/git.py +262 -0
  341. lfx/components/git/gitextractor.py +196 -0
  342. lfx/components/glean/__init__.py +3 -0
  343. lfx/components/glean/glean_search_api.py +173 -0
  344. lfx/components/google/__init__.py +17 -0
  345. lfx/components/google/gmail.py +193 -0
  346. lfx/components/google/google_bq_sql_executor.py +157 -0
  347. lfx/components/google/google_drive.py +92 -0
  348. lfx/components/google/google_drive_search.py +152 -0
  349. lfx/components/google/google_generative_ai.py +144 -0
  350. lfx/components/google/google_generative_ai_embeddings.py +141 -0
  351. lfx/components/google/google_oauth_token.py +89 -0
  352. lfx/components/google/google_search_api_core.py +68 -0
  353. lfx/components/google/google_serper_api_core.py +74 -0
  354. lfx/components/groq/__init__.py +34 -0
  355. lfx/components/groq/groq.py +143 -0
  356. lfx/components/helpers/__init__.py +154 -0
  357. lfx/components/homeassistant/__init__.py +7 -0
  358. lfx/components/homeassistant/home_assistant_control.py +152 -0
  359. lfx/components/homeassistant/list_home_assistant_states.py +137 -0
  360. lfx/components/huggingface/__init__.py +37 -0
  361. lfx/components/huggingface/huggingface.py +199 -0
  362. lfx/components/huggingface/huggingface_inference_api.py +106 -0
  363. lfx/components/ibm/__init__.py +34 -0
  364. lfx/components/ibm/watsonx.py +207 -0
  365. lfx/components/ibm/watsonx_embeddings.py +135 -0
  366. lfx/components/icosacomputing/__init__.py +5 -0
  367. lfx/components/icosacomputing/combinatorial_reasoner.py +84 -0
  368. lfx/components/input_output/__init__.py +40 -0
  369. lfx/components/input_output/chat.py +109 -0
  370. lfx/components/input_output/chat_output.py +184 -0
  371. lfx/components/input_output/text.py +27 -0
  372. lfx/components/input_output/text_output.py +29 -0
  373. lfx/components/input_output/webhook.py +56 -0
  374. lfx/components/jigsawstack/__init__.py +23 -0
  375. lfx/components/jigsawstack/ai_scrape.py +126 -0
  376. lfx/components/jigsawstack/ai_web_search.py +136 -0
  377. lfx/components/jigsawstack/file_read.py +115 -0
  378. lfx/components/jigsawstack/file_upload.py +94 -0
  379. lfx/components/jigsawstack/image_generation.py +205 -0
  380. lfx/components/jigsawstack/nsfw.py +60 -0
  381. lfx/components/jigsawstack/object_detection.py +124 -0
  382. lfx/components/jigsawstack/sentiment.py +112 -0
  383. lfx/components/jigsawstack/text_to_sql.py +90 -0
  384. lfx/components/jigsawstack/text_translate.py +77 -0
  385. lfx/components/jigsawstack/vocr.py +107 -0
  386. lfx/components/knowledge_bases/__init__.py +89 -0
  387. lfx/components/langchain_utilities/__init__.py +109 -0
  388. lfx/components/langchain_utilities/character.py +53 -0
  389. lfx/components/langchain_utilities/conversation.py +59 -0
  390. lfx/components/langchain_utilities/csv_agent.py +175 -0
  391. lfx/components/langchain_utilities/fake_embeddings.py +26 -0
  392. lfx/components/langchain_utilities/html_link_extractor.py +35 -0
  393. lfx/components/langchain_utilities/json_agent.py +100 -0
  394. lfx/components/langchain_utilities/langchain_hub.py +126 -0
  395. lfx/components/langchain_utilities/language_recursive.py +49 -0
  396. lfx/components/langchain_utilities/language_semantic.py +138 -0
  397. lfx/components/langchain_utilities/llm_checker.py +39 -0
  398. lfx/components/langchain_utilities/llm_math.py +42 -0
  399. lfx/components/langchain_utilities/natural_language.py +61 -0
  400. lfx/components/langchain_utilities/openai_tools.py +53 -0
  401. lfx/components/langchain_utilities/openapi.py +48 -0
  402. lfx/components/langchain_utilities/recursive_character.py +60 -0
  403. lfx/components/langchain_utilities/retrieval_qa.py +83 -0
  404. lfx/components/langchain_utilities/runnable_executor.py +137 -0
  405. lfx/components/langchain_utilities/self_query.py +80 -0
  406. lfx/components/langchain_utilities/spider.py +142 -0
  407. lfx/components/langchain_utilities/sql.py +40 -0
  408. lfx/components/langchain_utilities/sql_database.py +35 -0
  409. lfx/components/langchain_utilities/sql_generator.py +78 -0
  410. lfx/components/langchain_utilities/tool_calling.py +59 -0
  411. lfx/components/langchain_utilities/vector_store_info.py +49 -0
  412. lfx/components/langchain_utilities/vector_store_router.py +33 -0
  413. lfx/components/langchain_utilities/xml_agent.py +71 -0
  414. lfx/components/langwatch/__init__.py +3 -0
  415. lfx/components/langwatch/langwatch.py +278 -0
  416. lfx/components/link_extractors/__init__.py +3 -0
  417. lfx/components/llm_operations/__init__.py +46 -0
  418. lfx/components/llm_operations/batch_run.py +205 -0
  419. lfx/components/llm_operations/lambda_filter.py +218 -0
  420. lfx/components/llm_operations/llm_conditional_router.py +421 -0
  421. lfx/components/llm_operations/llm_selector.py +499 -0
  422. lfx/components/llm_operations/structured_output.py +244 -0
  423. lfx/components/lmstudio/__init__.py +34 -0
  424. lfx/components/lmstudio/lmstudioembeddings.py +89 -0
  425. lfx/components/lmstudio/lmstudiomodel.py +133 -0
  426. lfx/components/logic/__init__.py +181 -0
  427. lfx/components/maritalk/__init__.py +32 -0
  428. lfx/components/maritalk/maritalk.py +52 -0
  429. lfx/components/mem0/__init__.py +3 -0
  430. lfx/components/mem0/mem0_chat_memory.py +147 -0
  431. lfx/components/milvus/__init__.py +34 -0
  432. lfx/components/milvus/milvus.py +115 -0
  433. lfx/components/mistral/__init__.py +37 -0
  434. lfx/components/mistral/mistral.py +114 -0
  435. lfx/components/mistral/mistral_embeddings.py +58 -0
  436. lfx/components/models/__init__.py +89 -0
  437. lfx/components/models_and_agents/__init__.py +49 -0
  438. lfx/components/models_and_agents/agent.py +644 -0
  439. lfx/components/models_and_agents/embedding_model.py +423 -0
  440. lfx/components/models_and_agents/language_model.py +398 -0
  441. lfx/components/models_and_agents/mcp_component.py +594 -0
  442. lfx/components/models_and_agents/memory.py +268 -0
  443. lfx/components/models_and_agents/prompt.py +67 -0
  444. lfx/components/mongodb/__init__.py +34 -0
  445. lfx/components/mongodb/mongodb_atlas.py +213 -0
  446. lfx/components/needle/__init__.py +3 -0
  447. lfx/components/needle/needle.py +104 -0
  448. lfx/components/notdiamond/__init__.py +34 -0
  449. lfx/components/notdiamond/notdiamond.py +228 -0
  450. lfx/components/novita/__init__.py +32 -0
  451. lfx/components/novita/novita.py +130 -0
  452. lfx/components/nvidia/__init__.py +57 -0
  453. lfx/components/nvidia/nvidia.py +151 -0
  454. lfx/components/nvidia/nvidia_embedding.py +77 -0
  455. lfx/components/nvidia/nvidia_ingest.py +317 -0
  456. lfx/components/nvidia/nvidia_rerank.py +63 -0
  457. lfx/components/nvidia/system_assist.py +65 -0
  458. lfx/components/olivya/__init__.py +3 -0
  459. lfx/components/olivya/olivya.py +116 -0
  460. lfx/components/ollama/__init__.py +37 -0
  461. lfx/components/ollama/ollama.py +548 -0
  462. lfx/components/ollama/ollama_embeddings.py +103 -0
  463. lfx/components/openai/__init__.py +37 -0
  464. lfx/components/openai/openai.py +100 -0
  465. lfx/components/openai/openai_chat_model.py +176 -0
  466. lfx/components/openrouter/__init__.py +32 -0
  467. lfx/components/openrouter/openrouter.py +104 -0
  468. lfx/components/output_parsers/__init__.py +3 -0
  469. lfx/components/perplexity/__init__.py +34 -0
  470. lfx/components/perplexity/perplexity.py +75 -0
  471. lfx/components/pgvector/__init__.py +34 -0
  472. lfx/components/pgvector/pgvector.py +72 -0
  473. lfx/components/pinecone/__init__.py +34 -0
  474. lfx/components/pinecone/pinecone.py +134 -0
  475. lfx/components/processing/__init__.py +72 -0
  476. lfx/components/processing/alter_metadata.py +109 -0
  477. lfx/components/processing/combine_text.py +40 -0
  478. lfx/components/processing/converter.py +248 -0
  479. lfx/components/processing/create_data.py +111 -0
  480. lfx/components/processing/create_list.py +40 -0
  481. lfx/components/processing/data_operations.py +528 -0
  482. lfx/components/processing/data_to_dataframe.py +71 -0
  483. lfx/components/processing/dataframe_operations.py +313 -0
  484. lfx/components/processing/dataframe_to_toolset.py +259 -0
  485. lfx/components/processing/dynamic_create_data.py +357 -0
  486. lfx/components/processing/extract_key.py +54 -0
  487. lfx/components/processing/filter_data.py +43 -0
  488. lfx/components/processing/filter_data_values.py +89 -0
  489. lfx/components/processing/json_cleaner.py +104 -0
  490. lfx/components/processing/merge_data.py +91 -0
  491. lfx/components/processing/message_to_data.py +37 -0
  492. lfx/components/processing/output_parser.py +46 -0
  493. lfx/components/processing/parse_data.py +71 -0
  494. lfx/components/processing/parse_dataframe.py +69 -0
  495. lfx/components/processing/parse_json_data.py +91 -0
  496. lfx/components/processing/parser.py +148 -0
  497. lfx/components/processing/regex.py +83 -0
  498. lfx/components/processing/select_data.py +49 -0
  499. lfx/components/processing/split_text.py +141 -0
  500. lfx/components/processing/store_message.py +91 -0
  501. lfx/components/processing/update_data.py +161 -0
  502. lfx/components/prototypes/__init__.py +35 -0
  503. lfx/components/prototypes/python_function.py +73 -0
  504. lfx/components/qdrant/__init__.py +34 -0
  505. lfx/components/qdrant/qdrant.py +109 -0
  506. lfx/components/redis/__init__.py +37 -0
  507. lfx/components/redis/redis.py +89 -0
  508. lfx/components/redis/redis_chat.py +43 -0
  509. lfx/components/sambanova/__init__.py +32 -0
  510. lfx/components/sambanova/sambanova.py +84 -0
  511. lfx/components/scrapegraph/__init__.py +40 -0
  512. lfx/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
  513. lfx/components/scrapegraph/scrapegraph_search_api.py +64 -0
  514. lfx/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
  515. lfx/components/searchapi/__init__.py +34 -0
  516. lfx/components/searchapi/search.py +79 -0
  517. lfx/components/serpapi/__init__.py +3 -0
  518. lfx/components/serpapi/serp.py +115 -0
  519. lfx/components/supabase/__init__.py +34 -0
  520. lfx/components/supabase/supabase.py +76 -0
  521. lfx/components/tavily/__init__.py +4 -0
  522. lfx/components/tavily/tavily_extract.py +117 -0
  523. lfx/components/tavily/tavily_search.py +212 -0
  524. lfx/components/textsplitters/__init__.py +3 -0
  525. lfx/components/toolkits/__init__.py +3 -0
  526. lfx/components/tools/__init__.py +66 -0
  527. lfx/components/tools/calculator.py +109 -0
  528. lfx/components/tools/google_search_api.py +45 -0
  529. lfx/components/tools/google_serper_api.py +115 -0
  530. lfx/components/tools/python_code_structured_tool.py +328 -0
  531. lfx/components/tools/python_repl.py +98 -0
  532. lfx/components/tools/search_api.py +88 -0
  533. lfx/components/tools/searxng.py +145 -0
  534. lfx/components/tools/serp_api.py +120 -0
  535. lfx/components/tools/tavily_search_tool.py +345 -0
  536. lfx/components/tools/wikidata_api.py +103 -0
  537. lfx/components/tools/wikipedia_api.py +50 -0
  538. lfx/components/tools/yahoo_finance.py +130 -0
  539. lfx/components/twelvelabs/__init__.py +52 -0
  540. lfx/components/twelvelabs/convert_astra_results.py +84 -0
  541. lfx/components/twelvelabs/pegasus_index.py +311 -0
  542. lfx/components/twelvelabs/split_video.py +301 -0
  543. lfx/components/twelvelabs/text_embeddings.py +57 -0
  544. lfx/components/twelvelabs/twelvelabs_pegasus.py +408 -0
  545. lfx/components/twelvelabs/video_embeddings.py +100 -0
  546. lfx/components/twelvelabs/video_file.py +191 -0
  547. lfx/components/unstructured/__init__.py +3 -0
  548. lfx/components/unstructured/unstructured.py +121 -0
  549. lfx/components/upstash/__init__.py +34 -0
  550. lfx/components/upstash/upstash.py +124 -0
  551. lfx/components/utilities/__init__.py +43 -0
  552. lfx/components/utilities/calculator_core.py +89 -0
  553. lfx/components/utilities/current_date.py +42 -0
  554. lfx/components/utilities/id_generator.py +42 -0
  555. lfx/components/utilities/python_repl_core.py +98 -0
  556. lfx/components/vectara/__init__.py +37 -0
  557. lfx/components/vectara/vectara.py +97 -0
  558. lfx/components/vectara/vectara_rag.py +164 -0
  559. lfx/components/vectorstores/__init__.py +34 -0
  560. lfx/components/vectorstores/local_db.py +270 -0
  561. lfx/components/vertexai/__init__.py +37 -0
  562. lfx/components/vertexai/vertexai.py +71 -0
  563. lfx/components/vertexai/vertexai_embeddings.py +67 -0
  564. lfx/components/vlmrun/__init__.py +34 -0
  565. lfx/components/vlmrun/vlmrun_transcription.py +224 -0
  566. lfx/components/weaviate/__init__.py +34 -0
  567. lfx/components/weaviate/weaviate.py +89 -0
  568. lfx/components/wikipedia/__init__.py +4 -0
  569. lfx/components/wikipedia/wikidata.py +86 -0
  570. lfx/components/wikipedia/wikipedia.py +53 -0
  571. lfx/components/wolframalpha/__init__.py +3 -0
  572. lfx/components/wolframalpha/wolfram_alpha_api.py +54 -0
  573. lfx/components/xai/__init__.py +32 -0
  574. lfx/components/xai/xai.py +167 -0
  575. lfx/components/yahoosearch/__init__.py +3 -0
  576. lfx/components/yahoosearch/yahoo.py +137 -0
  577. lfx/components/youtube/__init__.py +52 -0
  578. lfx/components/youtube/channel.py +227 -0
  579. lfx/components/youtube/comments.py +231 -0
  580. lfx/components/youtube/playlist.py +33 -0
  581. lfx/components/youtube/search.py +120 -0
  582. lfx/components/youtube/trending.py +285 -0
  583. lfx/components/youtube/video_details.py +263 -0
  584. lfx/components/youtube/youtube_transcripts.py +206 -0
  585. lfx/components/zep/__init__.py +3 -0
  586. lfx/components/zep/zep.py +45 -0
  587. lfx/constants.py +6 -0
  588. lfx/custom/__init__.py +7 -0
  589. lfx/custom/attributes.py +87 -0
  590. lfx/custom/code_parser/__init__.py +3 -0
  591. lfx/custom/code_parser/code_parser.py +361 -0
  592. lfx/custom/custom_component/__init__.py +0 -0
  593. lfx/custom/custom_component/base_component.py +128 -0
  594. lfx/custom/custom_component/component.py +1890 -0
  595. lfx/custom/custom_component/component_with_cache.py +8 -0
  596. lfx/custom/custom_component/custom_component.py +650 -0
  597. lfx/custom/dependency_analyzer.py +165 -0
  598. lfx/custom/directory_reader/__init__.py +3 -0
  599. lfx/custom/directory_reader/directory_reader.py +359 -0
  600. lfx/custom/directory_reader/utils.py +171 -0
  601. lfx/custom/eval.py +12 -0
  602. lfx/custom/schema.py +32 -0
  603. lfx/custom/tree_visitor.py +21 -0
  604. lfx/custom/utils.py +877 -0
  605. lfx/custom/validate.py +523 -0
  606. lfx/events/__init__.py +1 -0
  607. lfx/events/event_manager.py +110 -0
  608. lfx/exceptions/__init__.py +0 -0
  609. lfx/exceptions/component.py +15 -0
  610. lfx/field_typing/__init__.py +91 -0
  611. lfx/field_typing/constants.py +216 -0
  612. lfx/field_typing/range_spec.py +35 -0
  613. lfx/graph/__init__.py +6 -0
  614. lfx/graph/edge/__init__.py +0 -0
  615. lfx/graph/edge/base.py +300 -0
  616. lfx/graph/edge/schema.py +119 -0
  617. lfx/graph/edge/utils.py +0 -0
  618. lfx/graph/graph/__init__.py +0 -0
  619. lfx/graph/graph/ascii.py +202 -0
  620. lfx/graph/graph/base.py +2298 -0
  621. lfx/graph/graph/constants.py +63 -0
  622. lfx/graph/graph/runnable_vertices_manager.py +133 -0
  623. lfx/graph/graph/schema.py +53 -0
  624. lfx/graph/graph/state_model.py +66 -0
  625. lfx/graph/graph/utils.py +1024 -0
  626. lfx/graph/schema.py +75 -0
  627. lfx/graph/state/__init__.py +0 -0
  628. lfx/graph/state/model.py +250 -0
  629. lfx/graph/utils.py +206 -0
  630. lfx/graph/vertex/__init__.py +0 -0
  631. lfx/graph/vertex/base.py +826 -0
  632. lfx/graph/vertex/constants.py +0 -0
  633. lfx/graph/vertex/exceptions.py +4 -0
  634. lfx/graph/vertex/param_handler.py +316 -0
  635. lfx/graph/vertex/schema.py +26 -0
  636. lfx/graph/vertex/utils.py +19 -0
  637. lfx/graph/vertex/vertex_types.py +489 -0
  638. lfx/helpers/__init__.py +141 -0
  639. lfx/helpers/base_model.py +71 -0
  640. lfx/helpers/custom.py +13 -0
  641. lfx/helpers/data.py +167 -0
  642. lfx/helpers/flow.py +308 -0
  643. lfx/inputs/__init__.py +68 -0
  644. lfx/inputs/constants.py +2 -0
  645. lfx/inputs/input_mixin.py +352 -0
  646. lfx/inputs/inputs.py +718 -0
  647. lfx/inputs/validators.py +19 -0
  648. lfx/interface/__init__.py +6 -0
  649. lfx/interface/components.py +897 -0
  650. lfx/interface/importing/__init__.py +5 -0
  651. lfx/interface/importing/utils.py +39 -0
  652. lfx/interface/initialize/__init__.py +3 -0
  653. lfx/interface/initialize/loading.py +317 -0
  654. lfx/interface/listing.py +26 -0
  655. lfx/interface/run.py +16 -0
  656. lfx/interface/utils.py +111 -0
  657. lfx/io/__init__.py +63 -0
  658. lfx/io/schema.py +295 -0
  659. lfx/load/__init__.py +8 -0
  660. lfx/load/load.py +256 -0
  661. lfx/load/utils.py +99 -0
  662. lfx/log/__init__.py +5 -0
  663. lfx/log/logger.py +411 -0
  664. lfx/logging/__init__.py +11 -0
  665. lfx/logging/logger.py +24 -0
  666. lfx/memory/__init__.py +70 -0
  667. lfx/memory/stubs.py +302 -0
  668. lfx/processing/__init__.py +1 -0
  669. lfx/processing/process.py +238 -0
  670. lfx/processing/utils.py +25 -0
  671. lfx/py.typed +0 -0
  672. lfx/schema/__init__.py +66 -0
  673. lfx/schema/artifact.py +83 -0
  674. lfx/schema/content_block.py +62 -0
  675. lfx/schema/content_types.py +91 -0
  676. lfx/schema/cross_module.py +80 -0
  677. lfx/schema/data.py +309 -0
  678. lfx/schema/dataframe.py +210 -0
  679. lfx/schema/dotdict.py +74 -0
  680. lfx/schema/encoders.py +13 -0
  681. lfx/schema/graph.py +47 -0
  682. lfx/schema/image.py +184 -0
  683. lfx/schema/json_schema.py +186 -0
  684. lfx/schema/log.py +62 -0
  685. lfx/schema/message.py +493 -0
  686. lfx/schema/openai_responses_schemas.py +74 -0
  687. lfx/schema/properties.py +41 -0
  688. lfx/schema/schema.py +180 -0
  689. lfx/schema/serialize.py +13 -0
  690. lfx/schema/table.py +142 -0
  691. lfx/schema/validators.py +114 -0
  692. lfx/serialization/__init__.py +5 -0
  693. lfx/serialization/constants.py +2 -0
  694. lfx/serialization/serialization.py +314 -0
  695. lfx/services/__init__.py +26 -0
  696. lfx/services/base.py +28 -0
  697. lfx/services/cache/__init__.py +6 -0
  698. lfx/services/cache/base.py +183 -0
  699. lfx/services/cache/service.py +166 -0
  700. lfx/services/cache/utils.py +169 -0
  701. lfx/services/chat/__init__.py +1 -0
  702. lfx/services/chat/config.py +2 -0
  703. lfx/services/chat/schema.py +10 -0
  704. lfx/services/database/__init__.py +5 -0
  705. lfx/services/database/service.py +25 -0
  706. lfx/services/deps.py +194 -0
  707. lfx/services/factory.py +19 -0
  708. lfx/services/initialize.py +19 -0
  709. lfx/services/interfaces.py +103 -0
  710. lfx/services/manager.py +185 -0
  711. lfx/services/mcp_composer/__init__.py +6 -0
  712. lfx/services/mcp_composer/factory.py +16 -0
  713. lfx/services/mcp_composer/service.py +1441 -0
  714. lfx/services/schema.py +21 -0
  715. lfx/services/session.py +87 -0
  716. lfx/services/settings/__init__.py +3 -0
  717. lfx/services/settings/auth.py +133 -0
  718. lfx/services/settings/base.py +668 -0
  719. lfx/services/settings/constants.py +43 -0
  720. lfx/services/settings/factory.py +23 -0
  721. lfx/services/settings/feature_flags.py +11 -0
  722. lfx/services/settings/service.py +35 -0
  723. lfx/services/settings/utils.py +40 -0
  724. lfx/services/shared_component_cache/__init__.py +1 -0
  725. lfx/services/shared_component_cache/factory.py +30 -0
  726. lfx/services/shared_component_cache/service.py +9 -0
  727. lfx/services/storage/__init__.py +5 -0
  728. lfx/services/storage/local.py +185 -0
  729. lfx/services/storage/service.py +177 -0
  730. lfx/services/tracing/__init__.py +1 -0
  731. lfx/services/tracing/service.py +21 -0
  732. lfx/settings.py +6 -0
  733. lfx/template/__init__.py +6 -0
  734. lfx/template/field/__init__.py +0 -0
  735. lfx/template/field/base.py +260 -0
  736. lfx/template/field/prompt.py +15 -0
  737. lfx/template/frontend_node/__init__.py +6 -0
  738. lfx/template/frontend_node/base.py +214 -0
  739. lfx/template/frontend_node/constants.py +65 -0
  740. lfx/template/frontend_node/custom_components.py +79 -0
  741. lfx/template/template/__init__.py +0 -0
  742. lfx/template/template/base.py +100 -0
  743. lfx/template/utils.py +217 -0
  744. lfx/type_extraction/__init__.py +19 -0
  745. lfx/type_extraction/type_extraction.py +75 -0
  746. lfx/type_extraction.py +80 -0
  747. lfx/utils/__init__.py +1 -0
  748. lfx/utils/async_helpers.py +42 -0
  749. lfx/utils/component_utils.py +154 -0
  750. lfx/utils/concurrency.py +60 -0
  751. lfx/utils/connection_string_parser.py +11 -0
  752. lfx/utils/constants.py +233 -0
  753. lfx/utils/data_structure.py +212 -0
  754. lfx/utils/exceptions.py +22 -0
  755. lfx/utils/helpers.py +34 -0
  756. lfx/utils/image.py +79 -0
  757. lfx/utils/langflow_utils.py +52 -0
  758. lfx/utils/lazy_load.py +15 -0
  759. lfx/utils/request_utils.py +18 -0
  760. lfx/utils/schemas.py +139 -0
  761. lfx/utils/ssrf_protection.py +384 -0
  762. lfx/utils/util.py +626 -0
  763. lfx/utils/util_strings.py +56 -0
  764. lfx/utils/validate_cloud.py +26 -0
  765. lfx/utils/version.py +24 -0
  766. lfx_nightly-0.2.0.dev25.dist-info/METADATA +312 -0
  767. lfx_nightly-0.2.0.dev25.dist-info/RECORD +769 -0
  768. lfx_nightly-0.2.0.dev25.dist-info/WHEEL +4 -0
  769. lfx_nightly-0.2.0.dev25.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,141 @@
1
+ from langchain_text_splitters import CharacterTextSplitter
2
+
3
+ from lfx.custom.custom_component.component import Component
4
+ from lfx.io import DropdownInput, HandleInput, IntInput, MessageTextInput, Output
5
+ from lfx.schema.data import Data
6
+ from lfx.schema.dataframe import DataFrame
7
+ from lfx.schema.message import Message
8
+ from lfx.utils.util import unescape_string
9
+
10
+
11
+ class SplitTextComponent(Component):
12
+ display_name: str = "Split Text"
13
+ description: str = "Split text into chunks based on specified criteria."
14
+ documentation: str = "https://docs.langflow.org/split-text"
15
+ icon = "scissors-line-dashed"
16
+ name = "SplitText"
17
+
18
+ inputs = [
19
+ HandleInput(
20
+ name="data_inputs",
21
+ display_name="Input",
22
+ info="The data with texts to split in chunks.",
23
+ input_types=["Data", "DataFrame", "Message"],
24
+ required=True,
25
+ ),
26
+ IntInput(
27
+ name="chunk_overlap",
28
+ display_name="Chunk Overlap",
29
+ info="Number of characters to overlap between chunks.",
30
+ value=200,
31
+ ),
32
+ IntInput(
33
+ name="chunk_size",
34
+ display_name="Chunk Size",
35
+ info=(
36
+ "The maximum length of each chunk. Text is first split by separator, "
37
+ "then chunks are merged up to this size. "
38
+ "Individual splits larger than this won't be further divided."
39
+ ),
40
+ value=1000,
41
+ ),
42
+ MessageTextInput(
43
+ name="separator",
44
+ display_name="Separator",
45
+ info=(
46
+ "The character to split on. Use \\n for newline. "
47
+ "Examples: \\n\\n for paragraphs, \\n for lines, . for sentences"
48
+ ),
49
+ value="\n",
50
+ ),
51
+ MessageTextInput(
52
+ name="text_key",
53
+ display_name="Text Key",
54
+ info="The key to use for the text column.",
55
+ value="text",
56
+ advanced=True,
57
+ ),
58
+ DropdownInput(
59
+ name="keep_separator",
60
+ display_name="Keep Separator",
61
+ info="Whether to keep the separator in the output chunks and where to place it.",
62
+ options=["False", "True", "Start", "End"],
63
+ value="False",
64
+ advanced=True,
65
+ ),
66
+ ]
67
+
68
+ outputs = [
69
+ Output(display_name="Chunks", name="dataframe", method="split_text"),
70
+ ]
71
+
72
+ def _docs_to_data(self, docs) -> list[Data]:
73
+ return [Data(text=doc.page_content, data=doc.metadata) for doc in docs]
74
+
75
+ def _fix_separator(self, separator: str) -> str:
76
+ """Fix common separator issues and convert to proper format."""
77
+ if separator == "/n":
78
+ return "\n"
79
+ if separator == "/t":
80
+ return "\t"
81
+ return separator
82
+
83
+ def split_text_base(self):
84
+ separator = self._fix_separator(self.separator)
85
+ separator = unescape_string(separator)
86
+
87
+ if isinstance(self.data_inputs, DataFrame):
88
+ if not len(self.data_inputs):
89
+ msg = "DataFrame is empty"
90
+ raise TypeError(msg)
91
+
92
+ self.data_inputs.text_key = self.text_key
93
+ try:
94
+ documents = self.data_inputs.to_lc_documents()
95
+ except Exception as e:
96
+ msg = f"Error converting DataFrame to documents: {e}"
97
+ raise TypeError(msg) from e
98
+ elif isinstance(self.data_inputs, Message):
99
+ self.data_inputs = [self.data_inputs.to_data()]
100
+ return self.split_text_base()
101
+ else:
102
+ if not self.data_inputs:
103
+ msg = "No data inputs provided"
104
+ raise TypeError(msg)
105
+
106
+ documents = []
107
+ if isinstance(self.data_inputs, Data):
108
+ self.data_inputs.text_key = self.text_key
109
+ documents = [self.data_inputs.to_lc_document()]
110
+ else:
111
+ try:
112
+ documents = [input_.to_lc_document() for input_ in self.data_inputs if isinstance(input_, Data)]
113
+ if not documents:
114
+ msg = f"No valid Data inputs found in {type(self.data_inputs)}"
115
+ raise TypeError(msg)
116
+ except AttributeError as e:
117
+ msg = f"Invalid input type in collection: {e}"
118
+ raise TypeError(msg) from e
119
+ try:
120
+ # Convert string 'False'/'True' to boolean
121
+ keep_sep = self.keep_separator
122
+ if isinstance(keep_sep, str):
123
+ if keep_sep.lower() == "false":
124
+ keep_sep = False
125
+ elif keep_sep.lower() == "true":
126
+ keep_sep = True
127
+ # 'start' and 'end' are kept as strings
128
+
129
+ splitter = CharacterTextSplitter(
130
+ chunk_overlap=self.chunk_overlap,
131
+ chunk_size=self.chunk_size,
132
+ separator=separator,
133
+ keep_separator=keep_sep,
134
+ )
135
+ return splitter.split_documents(documents)
136
+ except Exception as e:
137
+ msg = f"Error splitting text: {e}"
138
+ raise TypeError(msg) from e
139
+
140
+ def split_text(self) -> DataFrame:
141
+ return DataFrame(self._docs_to_data(self.split_text_base()))
@@ -0,0 +1,91 @@
1
+ from lfx.custom.custom_component.component import Component
2
+ from lfx.inputs.inputs import (
3
+ HandleInput,
4
+ MessageTextInput,
5
+ )
6
+ from lfx.memory import aget_messages, astore_message
7
+ from lfx.schema.message import Message
8
+ from lfx.template.field.base import Output
9
+ from lfx.utils.constants import MESSAGE_SENDER_AI, MESSAGE_SENDER_NAME_AI
10
+
11
+
12
+ class MessageStoreComponent(Component):
13
+ display_name = "Message Store"
14
+ description = "Stores a chat message or text into Langflow tables or an external memory."
15
+ icon = "message-square-text"
16
+ name = "StoreMessage"
17
+ legacy = True
18
+ replacement = ["helpers.Memory"]
19
+
20
+ inputs = [
21
+ MessageTextInput(
22
+ name="message", display_name="Message", info="The chat message to be stored.", required=True, tool_mode=True
23
+ ),
24
+ HandleInput(
25
+ name="memory",
26
+ display_name="External Memory",
27
+ input_types=["Memory"],
28
+ info="The external memory to store the message. If empty, it will use the Langflow tables.",
29
+ ),
30
+ MessageTextInput(
31
+ name="sender",
32
+ display_name="Sender",
33
+ info="The sender of the message. Might be Machine or User. "
34
+ "If empty, the current sender parameter will be used.",
35
+ advanced=True,
36
+ ),
37
+ MessageTextInput(
38
+ name="sender_name",
39
+ display_name="Sender Name",
40
+ info="The name of the sender. Might be AI or User. If empty, the current sender parameter will be used.",
41
+ advanced=True,
42
+ ),
43
+ MessageTextInput(
44
+ name="session_id",
45
+ display_name="Session ID",
46
+ info="The session ID of the chat. If empty, the current session ID parameter will be used.",
47
+ value="",
48
+ advanced=True,
49
+ ),
50
+ ]
51
+
52
+ outputs = [
53
+ Output(display_name="Stored Messages", name="stored_messages", method="store_message", hidden=True),
54
+ ]
55
+
56
+ async def store_message(self) -> Message:
57
+ message = Message(text=self.message) if isinstance(self.message, str) else self.message
58
+
59
+ message.session_id = self.session_id or message.session_id
60
+ message.sender = self.sender or message.sender or MESSAGE_SENDER_AI
61
+ message.sender_name = self.sender_name or message.sender_name or MESSAGE_SENDER_NAME_AI
62
+
63
+ stored_messages: list[Message] = []
64
+
65
+ if self.memory:
66
+ self.memory.session_id = message.session_id
67
+ lc_message = message.to_lc_message()
68
+ await self.memory.aadd_messages([lc_message])
69
+
70
+ stored_messages = await self.memory.aget_messages() or []
71
+
72
+ stored_messages = [Message.from_lc_message(m) for m in stored_messages] if stored_messages else []
73
+
74
+ if message.sender:
75
+ stored_messages = [m for m in stored_messages if m.sender == message.sender]
76
+ else:
77
+ await astore_message(message, flow_id=self.graph.flow_id)
78
+ stored_messages = (
79
+ await aget_messages(
80
+ session_id=message.session_id, sender_name=message.sender_name, sender=message.sender
81
+ )
82
+ or []
83
+ )
84
+
85
+ if not stored_messages:
86
+ msg = "No messages were stored. Please ensure that the session ID and sender are properly set."
87
+ raise ValueError(msg)
88
+
89
+ stored_message = stored_messages[0]
90
+ self.status = stored_message
91
+ return stored_message
@@ -0,0 +1,161 @@
1
+ from typing import Any
2
+
3
+ from lfx.custom.custom_component.component import Component
4
+ from lfx.field_typing.range_spec import RangeSpec
5
+ from lfx.inputs.inputs import (
6
+ BoolInput,
7
+ DataInput,
8
+ DictInput,
9
+ IntInput,
10
+ MessageTextInput,
11
+ )
12
+ from lfx.io import Output
13
+ from lfx.schema.data import Data
14
+ from lfx.schema.dotdict import dotdict
15
+
16
+
17
+ class UpdateDataComponent(Component):
18
+ display_name: str = "Update Data"
19
+ description: str = "Dynamically update or append data with the specified fields."
20
+ name: str = "UpdateData"
21
+ MAX_FIELDS = 15 # Define a constant for maximum number of fields
22
+ icon = "FolderSync"
23
+ legacy = True
24
+ replacement = ["processing.DataOperations"]
25
+
26
+ inputs = [
27
+ DataInput(
28
+ name="old_data",
29
+ display_name="Data",
30
+ info="The record to update.",
31
+ is_list=True, # Changed to True to handle list of Data objects
32
+ required=True,
33
+ ),
34
+ IntInput(
35
+ name="number_of_fields",
36
+ display_name="Number of Fields",
37
+ info="Number of fields to be added to the record.",
38
+ real_time_refresh=True,
39
+ value=0,
40
+ range_spec=RangeSpec(min=1, max=MAX_FIELDS, step=1, step_type="int"),
41
+ ),
42
+ MessageTextInput(
43
+ name="text_key",
44
+ display_name="Text Key",
45
+ info="Key that identifies the field to be used as the text content.",
46
+ advanced=True,
47
+ ),
48
+ BoolInput(
49
+ name="text_key_validator",
50
+ display_name="Text Key Validator",
51
+ advanced=True,
52
+ info="If enabled, checks if the given 'Text Key' is present in the given 'Data'.",
53
+ ),
54
+ ]
55
+
56
+ outputs = [
57
+ Output(display_name="Data", name="data", method="build_data"),
58
+ ]
59
+
60
+ def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):
61
+ """Update the build configuration when the number of fields changes.
62
+
63
+ Args:
64
+ build_config (dotdict): The current build configuration.
65
+ field_value (Any): The new value for the field.
66
+ field_name (Optional[str]): The name of the field being updated.
67
+ """
68
+ if field_name == "number_of_fields":
69
+ default_keys = {
70
+ "code",
71
+ "_type",
72
+ "number_of_fields",
73
+ "text_key",
74
+ "old_data",
75
+ "text_key_validator",
76
+ }
77
+ try:
78
+ field_value_int = int(field_value)
79
+ except ValueError:
80
+ return build_config
81
+
82
+ if field_value_int > self.MAX_FIELDS:
83
+ build_config["number_of_fields"]["value"] = self.MAX_FIELDS
84
+ msg = f"Number of fields cannot exceed {self.MAX_FIELDS}. Try using a Component to combine two Data."
85
+ raise ValueError(msg)
86
+
87
+ existing_fields = {}
88
+ # Back up the existing template fields
89
+ for key in list(build_config.keys()):
90
+ if key not in default_keys:
91
+ existing_fields[key] = build_config.pop(key)
92
+
93
+ for i in range(1, field_value_int + 1):
94
+ key = f"field_{i}_key"
95
+ if key in existing_fields:
96
+ field = existing_fields[key]
97
+ build_config[key] = field
98
+ else:
99
+ field = DictInput(
100
+ display_name=f"Field {i}",
101
+ name=key,
102
+ info=f"Key for field {i}.",
103
+ input_types=["Message", "Data"],
104
+ )
105
+ build_config[field.name] = field.to_dict()
106
+
107
+ build_config["number_of_fields"]["value"] = field_value_int
108
+ return build_config
109
+
110
+ async def build_data(self) -> Data | list[Data]:
111
+ """Build the updated data by combining the old data with new fields."""
112
+ new_data = self.get_data()
113
+ if isinstance(self.old_data, list):
114
+ for data_item in self.old_data:
115
+ if not isinstance(data_item, Data):
116
+ continue # Skip invalid items
117
+ data_item.data.update(new_data)
118
+ if self.text_key:
119
+ data_item.text_key = self.text_key
120
+ self.validate_text_key(data_item)
121
+ self.status = self.old_data
122
+ return self.old_data # Returns List[Data]
123
+ if isinstance(self.old_data, Data):
124
+ self.old_data.data.update(new_data)
125
+ if self.text_key:
126
+ self.old_data.text_key = self.text_key
127
+ self.status = self.old_data
128
+ self.validate_text_key(self.old_data)
129
+ return self.old_data # Returns Data
130
+ msg = "old_data is not a Data object or list of Data objects."
131
+ raise ValueError(msg)
132
+
133
+ def get_data(self):
134
+ """Function to get the Data from the attributes."""
135
+ data = {}
136
+ default_keys = {
137
+ "code",
138
+ "_type",
139
+ "number_of_fields",
140
+ "text_key",
141
+ "old_data",
142
+ "text_key_validator",
143
+ }
144
+ for attr_name, attr_value in self._attributes.items():
145
+ if attr_name in default_keys:
146
+ continue # Skip default attributes
147
+ if isinstance(attr_value, dict):
148
+ for key, value in attr_value.items():
149
+ data[key] = value.get_text() if isinstance(value, Data) else value
150
+ elif isinstance(attr_value, Data):
151
+ data[attr_name] = attr_value.get_text()
152
+ else:
153
+ data[attr_name] = attr_value
154
+ return data
155
+
156
+ def validate_text_key(self, data: Data) -> None:
157
+ """This function validates that the Text Key is one of the keys in the Data."""
158
+ data_keys = data.data.keys()
159
+ if self.text_key and self.text_key not in data_keys:
160
+ msg = f"Text Key: '{self.text_key}' not found in the Data keys: {', '.join(data_keys)}"
161
+ raise ValueError(msg)
@@ -0,0 +1,35 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+ from lfx.components._importing import import_mod
6
+
7
+ # _dynamic_imports = {
8
+ # "KnowledgeIngestionComponent": "ingestion",
9
+ # "KnowledgeRetrievalComponent": "retrieval",
10
+
11
+ # }
12
+ _dynamic_imports = {
13
+ "PythonFunctionComponent": "python_function",
14
+ }
15
+
16
+ # __all__ = ["KnowledgeIngestionComponent", "KnowledgeRetrievalComponent"]
17
+ __all__ = ["PythonFunctionComponent"]
18
+
19
+
20
+ def __getattr__(attr_name: str) -> Any:
21
+ """Lazily import input/output components on attribute access."""
22
+ if attr_name not in _dynamic_imports:
23
+ msg = f"module '{__name__}' has no attribute '{attr_name}'"
24
+ raise AttributeError(msg)
25
+ try:
26
+ result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
27
+ except (ModuleNotFoundError, ImportError, AttributeError) as e:
28
+ msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
29
+ raise AttributeError(msg) from e
30
+ globals()[attr_name] = result
31
+ return result
32
+
33
+
34
+ def __dir__() -> list[str]:
35
+ return list(__all__)
@@ -0,0 +1,73 @@
1
+ from collections.abc import Callable
2
+
3
+ from lfx.custom.custom_component.component import Component
4
+ from lfx.custom.utils import get_function
5
+ from lfx.io import CodeInput, Output
6
+ from lfx.log.logger import logger
7
+ from lfx.schema.data import Data
8
+ from lfx.schema.dotdict import dotdict
9
+ from lfx.schema.message import Message
10
+
11
+
12
+ class PythonFunctionComponent(Component):
13
+ display_name = "Python Function"
14
+ description = "Define and execute a Python function that returns a Data object or a Message."
15
+ icon = "Python"
16
+ name = "PythonFunction"
17
+ legacy = True
18
+
19
+ inputs = [
20
+ CodeInput(
21
+ name="function_code",
22
+ display_name="Function Code",
23
+ info="The code for the function.",
24
+ ),
25
+ ]
26
+
27
+ outputs = [
28
+ Output(
29
+ name="function_output",
30
+ display_name="Function Callable",
31
+ method="get_function_callable",
32
+ ),
33
+ Output(
34
+ name="function_output_data",
35
+ display_name="Function Output (Data)",
36
+ method="execute_function_data",
37
+ ),
38
+ Output(
39
+ name="function_output_str",
40
+ display_name="Function Output (Message)",
41
+ method="execute_function_message",
42
+ ),
43
+ ]
44
+
45
+ def get_function_callable(self) -> Callable:
46
+ function_code = self.function_code
47
+ self.status = function_code
48
+ return get_function(function_code)
49
+
50
+ def execute_function(self) -> list[dotdict | str] | dotdict | str:
51
+ function_code = self.function_code
52
+
53
+ if not function_code:
54
+ return "No function code provided."
55
+
56
+ try:
57
+ func = get_function(function_code)
58
+ return func()
59
+ except Exception as e: # noqa: BLE001
60
+ logger.debug("Error executing function", exc_info=True)
61
+ return f"Error executing function: {e}"
62
+
63
+ def execute_function_data(self) -> list[Data]:
64
+ results = self.execute_function()
65
+ results = results if isinstance(results, list) else [results]
66
+ return [(Data(text=x) if isinstance(x, str) else Data(**x)) for x in results]
67
+
68
+ def execute_function_message(self) -> Message:
69
+ results = self.execute_function()
70
+ results = results if isinstance(results, list) else [results]
71
+ results_list = [str(x) for x in results]
72
+ results_str = "\n".join(results_list)
73
+ return Message(text=results_str)
@@ -0,0 +1,34 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Any
4
+
5
+ from lfx.components._importing import import_mod
6
+
7
+ if TYPE_CHECKING:
8
+ from .qdrant import QdrantVectorStoreComponent
9
+
10
+ _dynamic_imports = {
11
+ "QdrantVectorStoreComponent": "qdrant",
12
+ }
13
+
14
+ __all__ = [
15
+ "QdrantVectorStoreComponent",
16
+ ]
17
+
18
+
19
+ def __getattr__(attr_name: str) -> Any:
20
+ """Lazily import Qdrant components on attribute access."""
21
+ if attr_name not in _dynamic_imports:
22
+ msg = f"module '{__name__}' has no attribute '{attr_name}'"
23
+ raise AttributeError(msg)
24
+ try:
25
+ result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
26
+ except (ModuleNotFoundError, ImportError, AttributeError) as e:
27
+ msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
28
+ raise AttributeError(msg) from e
29
+ globals()[attr_name] = result
30
+ return result
31
+
32
+
33
+ def __dir__() -> list[str]:
34
+ return list(__all__)
@@ -0,0 +1,109 @@
1
+ from langchain_community.vectorstores import Qdrant
2
+ from langchain_core.embeddings import Embeddings
3
+
4
+ from lfx.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
5
+ from lfx.helpers.data import docs_to_data
6
+ from lfx.io import (
7
+ DropdownInput,
8
+ HandleInput,
9
+ IntInput,
10
+ SecretStrInput,
11
+ StrInput,
12
+ )
13
+ from lfx.schema.data import Data
14
+
15
+
16
+ class QdrantVectorStoreComponent(LCVectorStoreComponent):
17
+ display_name = "Qdrant"
18
+ description = "Qdrant Vector Store with search capabilities"
19
+ icon = "Qdrant"
20
+
21
+ inputs = [
22
+ StrInput(name="collection_name", display_name="Collection Name", required=True),
23
+ StrInput(name="host", display_name="Host", value="localhost", advanced=True),
24
+ IntInput(name="port", display_name="Port", value=6333, advanced=True),
25
+ IntInput(name="grpc_port", display_name="gRPC Port", value=6334, advanced=True),
26
+ SecretStrInput(name="api_key", display_name="Qdrant API Key", advanced=True),
27
+ StrInput(name="prefix", display_name="Prefix", advanced=True),
28
+ IntInput(name="timeout", display_name="Timeout", advanced=True),
29
+ StrInput(name="path", display_name="Path", advanced=True),
30
+ StrInput(name="url", display_name="URL", advanced=True),
31
+ DropdownInput(
32
+ name="distance_func",
33
+ display_name="Distance Function",
34
+ options=["Cosine", "Euclidean", "Dot Product"],
35
+ value="Cosine",
36
+ advanced=True,
37
+ ),
38
+ StrInput(name="content_payload_key", display_name="Content Payload Key", value="page_content", advanced=True),
39
+ StrInput(name="metadata_payload_key", display_name="Metadata Payload Key", value="metadata", advanced=True),
40
+ *LCVectorStoreComponent.inputs,
41
+ HandleInput(name="embedding", display_name="Embedding", input_types=["Embeddings"]),
42
+ IntInput(
43
+ name="number_of_results",
44
+ display_name="Number of Results",
45
+ info="Number of results to return.",
46
+ value=4,
47
+ advanced=True,
48
+ ),
49
+ ]
50
+
51
+ @check_cached_vector_store
52
+ def build_vector_store(self) -> Qdrant:
53
+ qdrant_kwargs = {
54
+ "collection_name": self.collection_name,
55
+ "content_payload_key": self.content_payload_key,
56
+ "metadata_payload_key": self.metadata_payload_key,
57
+ }
58
+
59
+ server_kwargs = {
60
+ "host": self.host or None,
61
+ "port": int(self.port), # Ensure port is an integer
62
+ "grpc_port": int(self.grpc_port), # Ensure grpc_port is an integer
63
+ "api_key": self.api_key,
64
+ "prefix": self.prefix,
65
+ # Ensure timeout is an integer
66
+ "timeout": int(self.timeout) if self.timeout else None,
67
+ "path": self.path or None,
68
+ "url": self.url or None,
69
+ }
70
+
71
+ server_kwargs = {k: v for k, v in server_kwargs.items() if v is not None}
72
+
73
+ # Convert DataFrame to Data if needed using parent's method
74
+ self.ingest_data = self._prepare_ingest_data()
75
+
76
+ documents = []
77
+ for _input in self.ingest_data or []:
78
+ if isinstance(_input, Data):
79
+ documents.append(_input.to_lc_document())
80
+ else:
81
+ documents.append(_input)
82
+
83
+ if not isinstance(self.embedding, Embeddings):
84
+ msg = "Invalid embedding object"
85
+ raise TypeError(msg)
86
+
87
+ if documents:
88
+ qdrant = Qdrant.from_documents(documents, embedding=self.embedding, **qdrant_kwargs, **server_kwargs)
89
+ else:
90
+ from qdrant_client import QdrantClient
91
+
92
+ client = QdrantClient(**server_kwargs)
93
+ qdrant = Qdrant(embeddings=self.embedding, client=client, **qdrant_kwargs)
94
+
95
+ return qdrant
96
+
97
+ def search_documents(self) -> list[Data]:
98
+ vector_store = self.build_vector_store()
99
+
100
+ if self.search_query and isinstance(self.search_query, str) and self.search_query.strip():
101
+ docs = vector_store.similarity_search(
102
+ query=self.search_query,
103
+ k=self.number_of_results,
104
+ )
105
+
106
+ data = docs_to_data(docs)
107
+ self.status = data
108
+ return data
109
+ return []
@@ -0,0 +1,37 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Any
4
+
5
+ from lfx.components._importing import import_mod
6
+
7
+ if TYPE_CHECKING:
8
+ from .redis import RedisVectorStoreComponent
9
+ from .redis_chat import RedisIndexChatMemory
10
+
11
+ _dynamic_imports = {
12
+ "RedisVectorStoreComponent": "redis",
13
+ "RedisIndexChatMemory": "redis_chat",
14
+ }
15
+
16
+ __all__ = [
17
+ "RedisIndexChatMemory",
18
+ "RedisVectorStoreComponent",
19
+ ]
20
+
21
+
22
+ def __getattr__(attr_name: str) -> Any:
23
+ """Lazily import Redis components on attribute access."""
24
+ if attr_name not in _dynamic_imports:
25
+ msg = f"module '{__name__}' has no attribute '{attr_name}'"
26
+ raise AttributeError(msg)
27
+ try:
28
+ result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
29
+ except (ModuleNotFoundError, ImportError, AttributeError) as e:
30
+ msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
31
+ raise AttributeError(msg) from e
32
+ globals()[attr_name] = result
33
+ return result
34
+
35
+
36
+ def __dir__() -> list[str]:
37
+ return list(__all__)