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,19 @@
1
+ """Type extraction module for lfx package."""
2
+
3
+ from lfx.type_extraction.type_extraction import (
4
+ extract_inner_type,
5
+ extract_inner_type_from_generic_alias,
6
+ extract_union_types,
7
+ extract_union_types_from_generic_alias,
8
+ extract_uniont_types_from_generic_alias,
9
+ post_process_type,
10
+ )
11
+
12
+ __all__ = [
13
+ "extract_inner_type",
14
+ "extract_inner_type_from_generic_alias",
15
+ "extract_union_types",
16
+ "extract_union_types_from_generic_alias",
17
+ "extract_uniont_types_from_generic_alias",
18
+ "post_process_type",
19
+ ]
@@ -0,0 +1,75 @@
1
+ import re
2
+ from collections.abc import Sequence as SequenceABC
3
+ from itertools import chain
4
+ from types import GenericAlias
5
+ from typing import Any, Union
6
+
7
+
8
+ def extract_inner_type_from_generic_alias(return_type: GenericAlias) -> Any:
9
+ """Extracts the inner type from a type hint that is a list or a Optional."""
10
+ if return_type.__origin__ in {list, SequenceABC}:
11
+ return list(return_type.__args__)
12
+ return return_type
13
+
14
+
15
+ def extract_inner_type(return_type: str) -> str:
16
+ """Extracts the inner type from a type hint that is a list."""
17
+ if match := re.match(r"list\[(.*)\]", return_type, re.IGNORECASE):
18
+ return match[1]
19
+ return return_type
20
+
21
+
22
+ def extract_union_types(return_type: str) -> list[str]:
23
+ """Extracts the inner type from a type hint that is a list."""
24
+ # If the return type is a Union, then we need to parse it
25
+ return_type = return_type.replace("Union", "").replace("[", "").replace("]", "")
26
+ return_types = return_type.split(",")
27
+ return [item.strip() for item in return_types]
28
+
29
+
30
+ def extract_uniont_types_from_generic_alias(return_type: GenericAlias) -> list:
31
+ """Extracts the inner type from a type hint that is a Union."""
32
+ if isinstance(return_type, list):
33
+ return [
34
+ _inner_arg
35
+ for _type in return_type
36
+ for _inner_arg in _type.__args__
37
+ if _inner_arg not in {Any, type(None), type(Any)}
38
+ ]
39
+ return list(return_type.__args__)
40
+
41
+
42
+ def post_process_type(type_):
43
+ """Process the return type of a function.
44
+
45
+ Args:
46
+ type_ (Any): The return type of the function.
47
+
48
+ Returns:
49
+ Union[List[Any], Any]: The processed return type.
50
+ """
51
+ if hasattr(type_, "__origin__") and type_.__origin__ in {list, list, SequenceABC}:
52
+ type_ = extract_inner_type_from_generic_alias(type_)
53
+
54
+ # If the return type is not a Union, then we just return it as a list
55
+ inner_type = type_[0] if isinstance(type_, list) else type_
56
+ if (not hasattr(inner_type, "__origin__") or inner_type.__origin__ != Union) and (
57
+ not hasattr(inner_type, "__class__") or inner_type.__class__.__name__ != "UnionType"
58
+ ):
59
+ return type_ if isinstance(type_, list) else [type_]
60
+ # If the return type is a Union, then we need to parse it
61
+ type_ = extract_union_types_from_generic_alias(type_)
62
+ type_ = set(chain.from_iterable([post_process_type(t) for t in type_]))
63
+ return list(type_)
64
+
65
+
66
+ def extract_union_types_from_generic_alias(return_type: GenericAlias) -> list:
67
+ """Extracts the inner type from a type hint that is a Union."""
68
+ if isinstance(return_type, list):
69
+ return [
70
+ _inner_arg
71
+ for _type in return_type
72
+ for _inner_arg in _type.__args__
73
+ if _inner_arg not in {Any, type(None), type(Any)}
74
+ ]
75
+ return list(return_type.__args__)
lfx/type_extraction.py ADDED
@@ -0,0 +1,80 @@
1
+ """Type extraction utilities copied from langflow for lfx package."""
2
+
3
+ import re
4
+ from collections.abc import Sequence as SequenceABC
5
+ from itertools import chain
6
+ from types import GenericAlias
7
+ from typing import Any, Union
8
+
9
+
10
+ def extract_inner_type_from_generic_alias(return_type: GenericAlias) -> Any:
11
+ """Extracts the inner type from a type hint that is a list or a Optional."""
12
+ if return_type.__origin__ in {list, SequenceABC}:
13
+ return list(return_type.__args__)
14
+ return return_type
15
+
16
+
17
+ def extract_inner_type(return_type: str) -> str:
18
+ """Extracts the inner type from a type hint that is a list."""
19
+ if match := re.match(r"list\[(.*)\]", return_type, re.IGNORECASE):
20
+ return match[1]
21
+ return return_type
22
+
23
+
24
+ def extract_union_types(return_type: str) -> list[str]:
25
+ """Extracts the inner type from a type hint that is a list."""
26
+ # If the return type is a Union, then we need to parse it
27
+ return_type = return_type.replace("Union", "").replace("[", "").replace("]", "")
28
+ return_types = return_type.split(",")
29
+ return [item.strip() for item in return_types]
30
+
31
+
32
+ def extract_uniont_types_from_generic_alias(return_type: GenericAlias) -> list:
33
+ """Extracts the inner type from a type hint that is a Union."""
34
+ if isinstance(return_type, list):
35
+ return [
36
+ _inner_arg
37
+ for _type in return_type
38
+ for _inner_arg in _type.__args__
39
+ if _inner_arg not in {Any, type(None), type(Any)}
40
+ ]
41
+
42
+ return list(return_type.__args__)
43
+
44
+
45
+ def post_process_type(type_):
46
+ """Process the return type of a function.
47
+
48
+ Args:
49
+ type_ (Any): The return type of the function.
50
+
51
+ Returns:
52
+ Union[List[Any], Any]: The processed return type.
53
+
54
+ """
55
+ if hasattr(type_, "__origin__") and type_.__origin__ in {list, list, SequenceABC}:
56
+ type_ = extract_inner_type_from_generic_alias(type_)
57
+
58
+ # If the return type is not a Union, then we just return it as a list
59
+ inner_type = type_[0] if isinstance(type_, list) else type_
60
+ if (not hasattr(inner_type, "__origin__") or inner_type.__origin__ != Union) and (
61
+ not hasattr(inner_type, "__class__") or inner_type.__class__.__name__ != "UnionType"
62
+ ):
63
+ return type_ if isinstance(type_, list) else [type_]
64
+ # If the return type is a Union, then we need to parse it
65
+ type_ = extract_union_types_from_generic_alias(type_)
66
+ type_ = set(chain.from_iterable([post_process_type(t) for t in type_]))
67
+ return list(type_)
68
+
69
+
70
+ def extract_union_types_from_generic_alias(return_type: GenericAlias) -> list:
71
+ """Extracts the inner type from a type hint that is a Union."""
72
+ if isinstance(return_type, list):
73
+ return [
74
+ _inner_arg
75
+ for _type in return_type
76
+ for _inner_arg in _type.__args__
77
+ if _inner_arg not in {Any, type(None), type(Any)}
78
+ ]
79
+
80
+ return list(return_type.__args__)
lfx/utils/__init__.py ADDED
@@ -0,0 +1 @@
1
+ """Utilities for lfx package."""
@@ -0,0 +1,42 @@
1
+ import asyncio
2
+ from contextlib import asynccontextmanager
3
+
4
+ if hasattr(asyncio, "timeout"):
5
+
6
+ @asynccontextmanager
7
+ async def timeout_context(timeout_seconds):
8
+ with asyncio.timeout(timeout_seconds) as ctx:
9
+ yield ctx
10
+
11
+ else:
12
+
13
+ @asynccontextmanager
14
+ async def timeout_context(timeout_seconds):
15
+ try:
16
+ yield await asyncio.wait_for(asyncio.Future(), timeout=timeout_seconds)
17
+ except asyncio.TimeoutError as e:
18
+ msg = f"Operation timed out after {timeout_seconds} seconds"
19
+ raise TimeoutError(msg) from e
20
+
21
+
22
+ def run_until_complete(coro):
23
+ try:
24
+ asyncio.get_running_loop()
25
+ except RuntimeError:
26
+ # If there's no event loop, create a new one and run the coroutine
27
+ return asyncio.run(coro)
28
+ # If there's already a running event loop, we can't call run_until_complete on it
29
+ # Instead, we need to run the coroutine in a new thread with a new event loop
30
+ import concurrent.futures
31
+
32
+ def run_in_new_loop():
33
+ new_loop = asyncio.new_event_loop()
34
+ asyncio.set_event_loop(new_loop)
35
+ try:
36
+ return new_loop.run_until_complete(coro)
37
+ finally:
38
+ new_loop.close()
39
+
40
+ with concurrent.futures.ThreadPoolExecutor() as executor:
41
+ future = executor.submit(run_in_new_loop)
42
+ return future.result()
@@ -0,0 +1,154 @@
1
+ from collections.abc import Callable
2
+ from typing import Any
3
+
4
+ from lfx.schema.dotdict import dotdict
5
+
6
+ DEFAULT_FIELDS = ["code", "_type"]
7
+
8
+
9
+ def update_fields(build_config: dotdict, fields: dict[str, Any]) -> dotdict:
10
+ """Update specified fields in build_config with new values."""
11
+ for key, value in fields.items():
12
+ if key in build_config:
13
+ build_config[key] = value
14
+ return build_config
15
+
16
+
17
+ def add_fields(build_config: dotdict, fields: dict[str, Any]) -> dotdict:
18
+ """Add new fields to build_config."""
19
+ build_config.update(fields)
20
+ return build_config
21
+
22
+
23
+ def delete_fields(build_config: dotdict, fields: dict[str, Any] | list[str]) -> dotdict:
24
+ """Delete specified fields from build_config."""
25
+ if isinstance(fields, dict):
26
+ fields = list(fields.keys())
27
+
28
+ for field in fields:
29
+ build_config.pop(field, None)
30
+ return build_config
31
+
32
+
33
+ def get_fields(build_config: dotdict, fields: list[str] | None = None) -> dict[str, Any]:
34
+ """Get fields from build_config.If fields is None, return all fields."""
35
+ if fields is None:
36
+ return dict(build_config)
37
+
38
+ result = {}
39
+ for field in fields:
40
+ if field in build_config:
41
+ result[field] = build_config[field]
42
+ return result
43
+
44
+
45
+ def update_input_types(build_config: dotdict) -> dotdict:
46
+ """Update input types for all fields in build_config."""
47
+ for key, value in build_config.items():
48
+ if isinstance(value, dict):
49
+ if value.get("input_types") is None:
50
+ build_config[key]["input_types"] = []
51
+ elif hasattr(value, "input_types") and value.input_types is None:
52
+ value.input_types = []
53
+ return build_config
54
+
55
+
56
+ def set_field_display(build_config: dotdict, field: str, value: bool | None = None) -> dotdict: # noqa: FBT001
57
+ """Set whether a field should be displayed in the UI."""
58
+ if field in build_config and isinstance(build_config[field], dict) and "show" in build_config[field]:
59
+ build_config[field]["show"] = value
60
+ return build_config
61
+
62
+
63
+ def set_multiple_field_display(
64
+ build_config: dotdict,
65
+ *,
66
+ fields: dict[str, bool] | None = None,
67
+ value: bool | None = None,
68
+ field_list: list[str] | None = None,
69
+ ) -> dotdict:
70
+ """Set display property for multiple fields at once."""
71
+ if fields is not None:
72
+ for field, visibility in fields.items():
73
+ build_config = set_field_display(build_config, field, value=visibility)
74
+ elif field_list is not None:
75
+ for field in field_list:
76
+ build_config = set_field_display(build_config, field, value=value)
77
+ return build_config
78
+
79
+
80
+ def set_field_advanced(build_config: dotdict, field: str, *, value: bool | None = None) -> dotdict:
81
+ """Set whether a field is considered 'advanced' in the UI."""
82
+ if value is None:
83
+ value = False
84
+ if field in build_config and isinstance(build_config[field], dict):
85
+ build_config[field]["advanced"] = value
86
+ return build_config
87
+
88
+
89
+ def set_multiple_field_advanced(
90
+ build_config: dotdict,
91
+ *,
92
+ fields: dict[str, bool] | None = None,
93
+ value: bool | None = None,
94
+ field_list: list[str] | None = None,
95
+ ) -> dotdict:
96
+ """Set advanced property for multiple fields at once."""
97
+ if fields is not None:
98
+ for field, advanced in fields.items():
99
+ build_config = set_field_advanced(build_config, field, value=advanced)
100
+ elif field_list is not None:
101
+ for field in field_list:
102
+ build_config = set_field_advanced(build_config, field, value=value)
103
+ return build_config
104
+
105
+
106
+ def merge_build_configs(base_config: dotdict, override_config: dotdict) -> dotdict:
107
+ """Merge two build configurations, with override_config taking precedence."""
108
+ result = dotdict(base_config.copy())
109
+ for key, value in override_config.items():
110
+ if key in result and isinstance(value, dict) and isinstance(result[key], dict):
111
+ # Recursively merge nested dictionaries
112
+ for sub_key, sub_value in value.items():
113
+ result[key][sub_key] = sub_value
114
+ else:
115
+ result[key] = value
116
+ return result
117
+
118
+
119
+ def set_current_fields(
120
+ build_config: dotdict,
121
+ action_fields: dict[str, list[str]],
122
+ *,
123
+ selected_action: str | None = None,
124
+ default_fields: list[str] = DEFAULT_FIELDS,
125
+ func: Callable = set_field_display,
126
+ default_value: bool | None = None,
127
+ ) -> dotdict:
128
+ """Set the current fields for a selected action."""
129
+ # action_fields = {action1: [field1, field2], action2: [field3, field4]}
130
+ # we need to show action of one field and disable the rest
131
+ if default_value is None:
132
+ default_value = False
133
+
134
+ def _call_func(build_config: dotdict, field: str, *, value: bool) -> dotdict:
135
+ """Helper to call the function with appropriate signature."""
136
+ if func == set_field_advanced:
137
+ return func(build_config, field, value=value)
138
+ return func(build_config, field, value)
139
+
140
+ if selected_action in action_fields:
141
+ for field in action_fields[selected_action]:
142
+ build_config = _call_func(build_config, field, value=not default_value)
143
+ for key, value in action_fields.items():
144
+ if key != selected_action:
145
+ for field in value:
146
+ build_config = _call_func(build_config, field, value=default_value)
147
+ if selected_action is None:
148
+ for value in action_fields.values():
149
+ for field in value:
150
+ build_config = _call_func(build_config, field, value=default_value)
151
+ if default_fields is not None:
152
+ for field in default_fields:
153
+ build_config = _call_func(build_config, field, value=not default_value)
154
+ return build_config
@@ -0,0 +1,60 @@
1
+ import re
2
+ import threading
3
+ from contextlib import contextmanager
4
+ from pathlib import Path
5
+
6
+ from filelock import FileLock
7
+ from platformdirs import user_cache_dir
8
+
9
+
10
+ class KeyedMemoryLockManager:
11
+ """A manager for acquiring and releasing memory locks based on a key."""
12
+
13
+ def __init__(self) -> None:
14
+ self.locks: dict[str, threading.Lock] = {}
15
+ self.global_lock = threading.Lock()
16
+
17
+ def _get_lock(self, key: str):
18
+ with self.global_lock:
19
+ if key not in self.locks:
20
+ self.locks[key] = threading.Lock()
21
+ return self.locks[key]
22
+
23
+ @contextmanager
24
+ def lock(self, key: str):
25
+ lock = self._get_lock(key)
26
+ lock.acquire()
27
+ try:
28
+ yield
29
+ finally:
30
+ lock.release()
31
+
32
+
33
+ class KeyedWorkerLockManager:
34
+ """A manager for acquiring locks between workers based on a key."""
35
+
36
+ def __init__(self) -> None:
37
+ self.locks_dir = Path(user_cache_dir("langflow"), ensure_exists=True) / "worker_locks"
38
+
39
+ @staticmethod
40
+ def _validate_key(key: str) -> bool:
41
+ """Validate that the string only contains alphanumeric characters and underscores.
42
+
43
+ Parameters:
44
+ s (str): The string to validate.
45
+
46
+ Returns:
47
+ bool: True if the string is valid, False otherwise.
48
+ """
49
+ pattern = re.compile(r"^\w+$")
50
+ return bool(pattern.match(key))
51
+
52
+ @contextmanager
53
+ def lock(self, key: str):
54
+ if not self._validate_key(key):
55
+ msg = f"Invalid key: {key}"
56
+ raise ValueError(msg)
57
+
58
+ lock = FileLock(self.locks_dir / key)
59
+ with lock:
60
+ yield
@@ -0,0 +1,11 @@
1
+ """Connection string parser utilities for lfx package."""
2
+
3
+ from urllib.parse import quote
4
+
5
+
6
+ def transform_connection_string(connection_string) -> str:
7
+ """Transform connection string by encoding the password part."""
8
+ auth_part, db_url_name = connection_string.rsplit("@", 1)
9
+ protocol_user, password_string = auth_part.rsplit(":", 1)
10
+ encoded_password = quote(password_string)
11
+ return f"{protocol_user}:{encoded_password}@{db_url_name}"
lfx/utils/constants.py ADDED
@@ -0,0 +1,205 @@
1
+ from typing import Any
2
+
3
+ OPENAI_MODELS = [
4
+ "text-davinci-003",
5
+ "text-davinci-002",
6
+ "text-curie-001",
7
+ "text-babbage-001",
8
+ "text-ada-001",
9
+ ]
10
+ CHAT_OPENAI_MODELS = [
11
+ "gpt-4o",
12
+ "gpt-4o-mini",
13
+ "gpt-4-turbo-preview",
14
+ "gpt-4-0125-preview",
15
+ "gpt-4-1106-preview",
16
+ "gpt-4-vision-preview",
17
+ "gpt-3.5-turbo-0125",
18
+ "gpt-3.5-turbo-1106",
19
+ ]
20
+
21
+ REASONING_OPENAI_MODELS = [
22
+ "o1",
23
+ "o1-mini",
24
+ "o1-pro",
25
+ "o3-mini",
26
+ "o3",
27
+ "o3-pro",
28
+ "o4-mini",
29
+ "o4-mini-high",
30
+ ]
31
+
32
+ ANTHROPIC_MODELS = [
33
+ # largest model, ideal for a wide range of more complex tasks.
34
+ "claude-v1",
35
+ # An enhanced version of claude-v1 with a 100,000 token (roughly 75,000 word) context window.
36
+ "claude-v1-100k",
37
+ # A smaller model with far lower latency, sampling at roughly 40 words/sec!
38
+ "claude-instant-v1",
39
+ # Like claude-instant-v1 with a 100,000 token context window but retains its performance.
40
+ "claude-instant-v1-100k",
41
+ # Specific sub-versions of the above models:
42
+ # Vs claude-v1.2: better instruction-following, code, and non-English dialogue and writing.
43
+ "claude-v1.3",
44
+ # An enhanced version of claude-v1.3 with a 100,000 token (roughly 75,000 word) context window.
45
+ "claude-v1.3-100k",
46
+ # Vs claude-v1.1: small adv in general helpfulness, instruction following, coding, and other tasks.
47
+ "claude-v1.2",
48
+ # An earlier version of claude-v1.
49
+ "claude-v1.0",
50
+ # Latest version of claude-instant-v1. Better than claude-instant-v1.0 at most tasks.
51
+ "claude-instant-v1.1",
52
+ # Version of claude-instant-v1.1 with a 100K token context window.
53
+ "claude-instant-v1.1-100k",
54
+ # An earlier version of claude-instant-v1.
55
+ "claude-instant-v1.0",
56
+ ]
57
+
58
+ DEFAULT_PYTHON_FUNCTION = """
59
+ def python_function(text: str) -> str:
60
+ \"\"\"This is a default python function that returns the input text\"\"\"
61
+ return text
62
+ """
63
+
64
+
65
+ PYTHON_BASIC_TYPES = [str, bool, int, float, tuple, list, dict, set]
66
+ DIRECT_TYPES = [
67
+ "str",
68
+ "bool",
69
+ "dict",
70
+ "int",
71
+ "float",
72
+ "Any",
73
+ "prompt",
74
+ "code",
75
+ "NestedDict",
76
+ "table",
77
+ "slider",
78
+ "tab",
79
+ "sortableList",
80
+ "auth",
81
+ "connect",
82
+ "query",
83
+ "tools",
84
+ "mcp",
85
+ ]
86
+
87
+
88
+ LOADERS_INFO: list[dict[str, Any]] = [
89
+ {
90
+ "loader": "AirbyteJSONLoader",
91
+ "name": "Airbyte JSON (.jsonl)",
92
+ "import": "langchain_community.document_loaders.AirbyteJSONLoader",
93
+ "defaultFor": ["jsonl"],
94
+ "allowdTypes": ["jsonl"],
95
+ },
96
+ {
97
+ "loader": "JSONLoader",
98
+ "name": "JSON (.json)",
99
+ "import": "langchain_community.document_loaders.JSONLoader",
100
+ "defaultFor": ["json"],
101
+ "allowdTypes": ["json"],
102
+ },
103
+ {
104
+ "loader": "BSHTMLLoader",
105
+ "name": "BeautifulSoup4 HTML (.html, .htm)",
106
+ "import": "langchain_community.document_loaders.BSHTMLLoader",
107
+ "allowdTypes": ["html", "htm"],
108
+ },
109
+ {
110
+ "loader": "CSVLoader",
111
+ "name": "CSV (.csv)",
112
+ "import": "langchain_community.document_loaders.CSVLoader",
113
+ "defaultFor": ["csv"],
114
+ "allowdTypes": ["csv"],
115
+ },
116
+ {
117
+ "loader": "CoNLLULoader",
118
+ "name": "CoNLL-U (.conllu)",
119
+ "import": "langchain_community.document_loaders.CoNLLULoader",
120
+ "defaultFor": ["conllu"],
121
+ "allowdTypes": ["conllu"],
122
+ },
123
+ {
124
+ "loader": "EverNoteLoader",
125
+ "name": "EverNote (.enex)",
126
+ "import": "langchain_community.document_loaders.EverNoteLoader",
127
+ "defaultFor": ["enex"],
128
+ "allowdTypes": ["enex"],
129
+ },
130
+ {
131
+ "loader": "FacebookChatLoader",
132
+ "name": "Facebook Chat (.json)",
133
+ "import": "langchain_community.document_loaders.FacebookChatLoader",
134
+ "allowdTypes": ["json"],
135
+ },
136
+ {
137
+ "loader": "OutlookMessageLoader",
138
+ "name": "Outlook Message (.msg)",
139
+ "import": "langchain_community.document_loaders.OutlookMessageLoader",
140
+ "defaultFor": ["msg"],
141
+ "allowdTypes": ["msg"],
142
+ },
143
+ {
144
+ "loader": "PyPDFLoader",
145
+ "name": "PyPDF (.pdf)",
146
+ "import": "langchain_community.document_loaders.PyPDFLoader",
147
+ "defaultFor": ["pdf"],
148
+ "allowdTypes": ["pdf"],
149
+ },
150
+ {
151
+ "loader": "STRLoader",
152
+ "name": "Subtitle (.str)",
153
+ "import": "langchain_community.document_loaders.STRLoader",
154
+ "defaultFor": ["str"],
155
+ "allowdTypes": ["str"],
156
+ },
157
+ {
158
+ "loader": "TextLoader",
159
+ "name": "Text (.txt)",
160
+ "import": "langchain_community.document_loaders.TextLoader",
161
+ "defaultFor": ["txt"],
162
+ "allowdTypes": ["txt"],
163
+ },
164
+ {
165
+ "loader": "UnstructuredEmailLoader",
166
+ "name": "Unstructured Email (.eml)",
167
+ "import": "langchain_community.document_loaders.UnstructuredEmailLoader",
168
+ "defaultFor": ["eml"],
169
+ "allowdTypes": ["eml"],
170
+ },
171
+ {
172
+ "loader": "UnstructuredHTMLLoader",
173
+ "name": "Unstructured HTML (.html, .htm)",
174
+ "import": "langchain_community.document_loaders.UnstructuredHTMLLoader",
175
+ "defaultFor": ["html", "htm"],
176
+ "allowdTypes": ["html", "htm"],
177
+ },
178
+ {
179
+ "loader": "UnstructuredMarkdownLoader",
180
+ "name": "Unstructured Markdown (.md)",
181
+ "import": "langchain_community.document_loaders.UnstructuredMarkdownLoader",
182
+ "defaultFor": ["md", "mdx"],
183
+ "allowdTypes": ["md", "mdx"],
184
+ },
185
+ {
186
+ "loader": "UnstructuredPowerPointLoader",
187
+ "name": "Unstructured PowerPoint (.pptx)",
188
+ "import": "langchain_community.document_loaders.UnstructuredPowerPointLoader",
189
+ "defaultFor": ["pptx"],
190
+ "allowdTypes": ["pptx"],
191
+ },
192
+ {
193
+ "loader": "UnstructuredWordLoader",
194
+ "name": "Unstructured Word (.docx)",
195
+ "import": "langchain_community.document_loaders.UnstructuredWordLoader",
196
+ "defaultFor": ["docx"],
197
+ "allowdTypes": ["docx"],
198
+ },
199
+ ]
200
+
201
+
202
+ MESSAGE_SENDER_AI = "Machine"
203
+ MESSAGE_SENDER_USER = "User"
204
+ MESSAGE_SENDER_NAME_AI = "AI"
205
+ MESSAGE_SENDER_NAME_USER = "User"