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
lfx/inputs/inputs.py ADDED
@@ -0,0 +1,714 @@
1
+ import warnings
2
+ from collections.abc import AsyncIterator, Iterator
3
+ from typing import Any, TypeAlias, get_args
4
+
5
+ from pandas import DataFrame
6
+ from pydantic import Field, field_validator, model_validator
7
+
8
+ from lfx.inputs.validators import CoalesceBool
9
+ from lfx.schema.data import Data
10
+ from lfx.schema.message import Message
11
+
12
+ from .input_mixin import (
13
+ AuthMixin,
14
+ BaseInputMixin,
15
+ ConnectionMixin,
16
+ DatabaseLoadMixin,
17
+ DropDownMixin,
18
+ FieldTypes,
19
+ FileMixin,
20
+ InputTraceMixin,
21
+ LinkMixin,
22
+ ListableInputMixin,
23
+ MetadataTraceMixin,
24
+ MultilineMixin,
25
+ QueryMixin,
26
+ RangeMixin,
27
+ SerializableFieldTypes,
28
+ SliderMixin,
29
+ SortableListMixin,
30
+ TableMixin,
31
+ TabMixin,
32
+ ToolModeMixin,
33
+ )
34
+
35
+
36
+ class TableInput(BaseInputMixin, MetadataTraceMixin, TableMixin, ListableInputMixin, ToolModeMixin):
37
+ field_type: SerializableFieldTypes = FieldTypes.TABLE
38
+ is_list: bool = True
39
+
40
+ @field_validator("value")
41
+ @classmethod
42
+ def validate_value(cls, v: Any, _info):
43
+ # Convert single dict or Data instance into a list.
44
+ if isinstance(v, dict | Data):
45
+ v = [v]
46
+ # Automatically convert DataFrame into a list of dictionaries.
47
+ if isinstance(v, DataFrame):
48
+ v = v.to_dict(orient="records")
49
+ # Verify the value is now a list.
50
+ if not isinstance(v, list):
51
+ msg = (
52
+ "The table input must be a list of rows. You provided a "
53
+ f"{type(v).__name__}, which cannot be converted to table format. "
54
+ "Please provide your data as either:\n"
55
+ "- A list of dictionaries (each dict is a row)\n"
56
+ "- A pandas DataFrame\n"
57
+ "- A single dictionary (will become a one-row table)\n"
58
+ "- A Data object (Langflow's internal data structure)\n"
59
+ )
60
+ raise ValueError(msg) # noqa: TRY004
61
+ # Ensure each item in the list is either a dict or a Data instance.
62
+ for i, item in enumerate(v):
63
+ if not isinstance(item, dict | Data):
64
+ msg = (
65
+ f"Row {i + 1} in your table has an invalid format. Each row must be either:\n"
66
+ "- A dictionary containing column name/value pairs\n"
67
+ "- A Data object (Langflow's internal data structure for passing data between components)\n"
68
+ f"Instead, got a {type(item).__name__}. Please check the format of your input data."
69
+ )
70
+ raise ValueError(msg) # noqa: TRY004
71
+ return v
72
+
73
+
74
+ class HandleInput(BaseInputMixin, ListableInputMixin, MetadataTraceMixin):
75
+ """Represents an Input that has a Handle to a specific type (e.g. BaseLanguageModel, BaseRetriever, etc.).
76
+
77
+ This class inherits from the `BaseInputMixin` and `ListableInputMixin` classes.
78
+
79
+ Attributes:
80
+ input_types (list[str]): A list of input types.
81
+ field_type (SerializableFieldTypes): The field type of the input.
82
+ """
83
+
84
+ input_types: list[str] = Field(default_factory=list)
85
+ field_type: SerializableFieldTypes = FieldTypes.OTHER
86
+
87
+
88
+ class ToolsInput(BaseInputMixin, ListableInputMixin, MetadataTraceMixin, ToolModeMixin):
89
+ """Represents an Input that contains a list of tools to activate, deactivate, or edit.
90
+
91
+ Attributes:
92
+ field_type (SerializableFieldTypes): The field type of the input.
93
+ value (list[dict]): The value of the input.
94
+
95
+ """
96
+
97
+ field_type: SerializableFieldTypes = FieldTypes.TOOLS
98
+ value: list[dict] = Field(default_factory=list)
99
+ is_list: bool = True
100
+ real_time_refresh: bool = True
101
+
102
+
103
+ class DataInput(HandleInput, InputTraceMixin, ListableInputMixin, ToolModeMixin):
104
+ """Represents an Input that has a Handle that receives a Data object.
105
+
106
+ Attributes:
107
+ input_types (list[str]): A list of input types supported by this data input.
108
+ """
109
+
110
+ input_types: list[str] = ["Data"]
111
+
112
+
113
+ class DataFrameInput(HandleInput, InputTraceMixin, ListableInputMixin, ToolModeMixin):
114
+ input_types: list[str] = ["DataFrame"]
115
+
116
+
117
+ class PromptInput(BaseInputMixin, ListableInputMixin, InputTraceMixin, ToolModeMixin):
118
+ field_type: SerializableFieldTypes = FieldTypes.PROMPT
119
+
120
+
121
+ class CodeInput(BaseInputMixin, ListableInputMixin, InputTraceMixin, ToolModeMixin):
122
+ field_type: SerializableFieldTypes = FieldTypes.CODE
123
+
124
+
125
+ # Applying mixins to a specific input type
126
+ class StrInput(
127
+ BaseInputMixin,
128
+ ListableInputMixin,
129
+ DatabaseLoadMixin,
130
+ MetadataTraceMixin,
131
+ ToolModeMixin,
132
+ ):
133
+ field_type: SerializableFieldTypes = FieldTypes.TEXT
134
+ load_from_db: CoalesceBool = False
135
+ """Defines if the field will allow the user to open a text editor. Default is False."""
136
+
137
+ @staticmethod
138
+ def _validate_value(v: Any, info):
139
+ """Validates the given value and returns the processed value.
140
+
141
+ Args:
142
+ v (Any): The value to be validated.
143
+ info: Additional information about the input.
144
+
145
+ Returns:
146
+ The processed value.
147
+
148
+ Raises:
149
+ ValueError: If the value is not of a valid type or if the input is missing a required key.
150
+ """
151
+ if not isinstance(v, str) and v is not None:
152
+ # Keep the warning for now, but we should change it to an error
153
+ if info.data.get("input_types") and v.__class__.__name__ not in info.data.get("input_types"):
154
+ warnings.warn(
155
+ f"Invalid value type {type(v)} for input {info.data.get('name')}. "
156
+ f"Expected types: {info.data.get('input_types')}",
157
+ stacklevel=4,
158
+ )
159
+ else:
160
+ warnings.warn(
161
+ f"Invalid value type {type(v)} for input {info.data.get('name')}.",
162
+ stacklevel=4,
163
+ )
164
+ return v
165
+
166
+ @field_validator("value")
167
+ @classmethod
168
+ def validate_value(cls, v: Any, info):
169
+ """Validates the given value and returns the processed value.
170
+
171
+ Args:
172
+ v (Any): The value to be validated.
173
+ info: Additional information about the input.
174
+
175
+ Returns:
176
+ The processed value.
177
+
178
+ Raises:
179
+ ValueError: If the value is not of a valid type or if the input is missing a required key.
180
+ """
181
+ is_list = info.data["is_list"]
182
+ return [cls._validate_value(vv, info) for vv in v] if is_list else cls._validate_value(v, info)
183
+
184
+
185
+ class MessageInput(StrInput, InputTraceMixin):
186
+ input_types: list[str] = ["Message"]
187
+
188
+ @staticmethod
189
+ def _validate_value(v: Any, _info):
190
+ # If v is a instance of Message, then its fine
191
+ if isinstance(v, dict):
192
+ return Message(**v)
193
+ if isinstance(v, Message):
194
+ return v
195
+ # Check for Message-like objects by examining their fields
196
+ # This handles both langflow and lfx Message instances
197
+ if hasattr(v, "text") and hasattr(v, "model_dump") and callable(v.model_dump):
198
+ # Check if it has other Message-specific attributes
199
+ message_fields = {"text", "data", "sender", "session_id", "properties"}
200
+ obj_attrs = set(dir(v))
201
+ min_message_fields = 3
202
+ if len(message_fields.intersection(obj_attrs)) >= min_message_fields:
203
+ try:
204
+ return Message(**v.model_dump())
205
+ except (TypeError, ValueError):
206
+ # Fallback to text only if model_dump fails
207
+ return Message(text=v.text)
208
+ if isinstance(v, str | AsyncIterator | Iterator):
209
+ return Message(text=v)
210
+ # For simplified implementation, we'll skip MessageBase handling
211
+ msg = f"Invalid value type {type(v)}"
212
+ raise ValueError(msg)
213
+
214
+
215
+ class MessageTextInput(StrInput, MetadataTraceMixin, InputTraceMixin, ToolModeMixin):
216
+ """Represents a text input component for the Langflow system.
217
+
218
+ This component is used to handle text inputs in the Langflow system.
219
+ It provides methods for validating and processing text values.
220
+
221
+ Attributes:
222
+ input_types (list[str]): A list of input types that this component supports.
223
+ In this case, it supports the "Message" input type.
224
+ """
225
+
226
+ input_types: list[str] = ["Message"]
227
+
228
+ @staticmethod
229
+ def _validate_value(v: Any, info):
230
+ """Validates the given value and returns the processed value.
231
+
232
+ Args:
233
+ v (Any): The value to be validated.
234
+ info: Additional information about the input.
235
+
236
+ Returns:
237
+ The processed value.
238
+
239
+ Raises:
240
+ ValueError: If the value is not of a valid type or if the input is missing a required key.
241
+ """
242
+ value: str | AsyncIterator | Iterator | None = None
243
+ if isinstance(v, dict):
244
+ v = Message(**v)
245
+ if isinstance(v, str):
246
+ value = v
247
+ elif isinstance(v, Message):
248
+ value = v.text
249
+ elif isinstance(v, Data):
250
+ if v.text_key in v.data:
251
+ value = v.data[v.text_key]
252
+ else:
253
+ keys = ", ".join(v.data.keys())
254
+ input_name = info.data["name"]
255
+ msg = (
256
+ f"The input to '{input_name}' must contain the key '{v.text_key}'."
257
+ f"You can set `text_key` to one of the following keys: {keys} "
258
+ "or set the value using another Component."
259
+ )
260
+ raise ValueError(msg)
261
+ elif isinstance(v, AsyncIterator | Iterator):
262
+ value = v
263
+ else:
264
+ msg = f"Invalid value type {type(v)}"
265
+ raise ValueError(msg) # noqa: TRY004
266
+ return value
267
+
268
+
269
+ class MultilineInput(MessageTextInput, MultilineMixin, InputTraceMixin, ToolModeMixin):
270
+ """Represents a multiline input field.
271
+
272
+ Attributes:
273
+ field_type (SerializableFieldTypes): The type of the field. Defaults to FieldTypes.TEXT.
274
+ multiline (CoalesceBool): Indicates whether the input field should support multiple lines. Defaults to True.
275
+ """
276
+
277
+ field_type: SerializableFieldTypes = FieldTypes.TEXT
278
+ multiline: CoalesceBool = True
279
+ copy_field: CoalesceBool = False
280
+
281
+
282
+ class MultilineSecretInput(MessageTextInput, MultilineMixin, InputTraceMixin):
283
+ """Represents a multiline input field.
284
+
285
+ Attributes:
286
+ field_type (SerializableFieldTypes): The type of the field. Defaults to FieldTypes.TEXT.
287
+ multiline (CoalesceBool): Indicates whether the input field should support multiple lines. Defaults to True.
288
+ """
289
+
290
+ field_type: SerializableFieldTypes = FieldTypes.PASSWORD
291
+ multiline: CoalesceBool = True
292
+ password: CoalesceBool = Field(default=True)
293
+
294
+
295
+ class SecretStrInput(BaseInputMixin, DatabaseLoadMixin):
296
+ """Represents a field with password field type.
297
+
298
+ This class inherits from `BaseInputMixin` and `DatabaseLoadMixin`.
299
+
300
+ Attributes:
301
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to `FieldTypes.PASSWORD`.
302
+ password (CoalesceBool): A boolean indicating whether the input is a password. Defaults to `True`.
303
+ input_types (list[str]): A list of input types associated with this input. Defaults to an empty list.
304
+ """
305
+
306
+ field_type: SerializableFieldTypes = FieldTypes.PASSWORD
307
+ password: CoalesceBool = Field(default=True)
308
+ input_types: list[str] = []
309
+ load_from_db: CoalesceBool = True
310
+
311
+ @field_validator("value")
312
+ @classmethod
313
+ def validate_value(cls, v: Any, info):
314
+ """Validates the given value and returns the processed value.
315
+
316
+ Args:
317
+ v (Any): The value to be validated.
318
+ info: Additional information about the input.
319
+
320
+ Returns:
321
+ The processed value.
322
+
323
+ Raises:
324
+ ValueError: If the value is not of a valid type or if the input is missing a required key.
325
+ """
326
+ value: str | AsyncIterator | Iterator | None = None
327
+ if isinstance(v, str):
328
+ value = v
329
+ elif isinstance(v, Message):
330
+ value = v.text
331
+ elif isinstance(v, Data):
332
+ if v.text_key in v.data:
333
+ value = v.data[v.text_key]
334
+ else:
335
+ keys = ", ".join(v.data.keys())
336
+ input_name = info.data["name"]
337
+ msg = (
338
+ f"The input to '{input_name}' must contain the key '{v.text_key}'."
339
+ f"You can set `text_key` to one of the following keys: {keys} "
340
+ "or set the value using another Component."
341
+ )
342
+ raise ValueError(msg)
343
+ elif isinstance(v, AsyncIterator | Iterator):
344
+ value = v
345
+ elif v is None:
346
+ value = None
347
+ else:
348
+ msg = f"Invalid value type `{type(v)}` for input `{info.data['name']}`"
349
+ raise ValueError(msg)
350
+ return value
351
+
352
+
353
+ class IntInput(BaseInputMixin, ListableInputMixin, RangeMixin, MetadataTraceMixin, ToolModeMixin):
354
+ """Represents an integer field.
355
+
356
+ This class represents an integer input and provides functionality for handling integer values.
357
+ It inherits from the `BaseInputMixin`, `ListableInputMixin`, and `RangeMixin` classes.
358
+
359
+ Attributes:
360
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.INTEGER.
361
+ """
362
+
363
+ field_type: SerializableFieldTypes = FieldTypes.INTEGER
364
+
365
+ @field_validator("value")
366
+ @classmethod
367
+ def validate_value(cls, v: Any, info):
368
+ """Validates the given value and returns the processed value.
369
+
370
+ Args:
371
+ v (Any): The value to be validated.
372
+ info: Additional information about the input.
373
+
374
+ Returns:
375
+ The processed value.
376
+
377
+ Raises:
378
+ ValueError: If the value is not of a valid type or if the input is missing a required key.
379
+ """
380
+ if v and not isinstance(v, int | float):
381
+ msg = f"Invalid value type {type(v)} for input {info.data.get('name')}."
382
+ raise ValueError(msg)
383
+ if isinstance(v, float):
384
+ v = int(v)
385
+ return v
386
+
387
+
388
+ class FloatInput(BaseInputMixin, ListableInputMixin, RangeMixin, MetadataTraceMixin, ToolModeMixin):
389
+ """Represents a float field.
390
+
391
+ This class represents a float input and provides functionality for handling float values.
392
+ It inherits from the `BaseInputMixin`, `ListableInputMixin`, and `RangeMixin` classes.
393
+
394
+ Attributes:
395
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.FLOAT.
396
+ """
397
+
398
+ field_type: SerializableFieldTypes = FieldTypes.FLOAT
399
+
400
+ @field_validator("value")
401
+ @classmethod
402
+ def validate_value(cls, v: Any, info):
403
+ """Validates the given value and returns the processed value.
404
+
405
+ Args:
406
+ v (Any): The value to be validated.
407
+ info: Additional information about the input.
408
+
409
+ Returns:
410
+ The processed value.
411
+
412
+ Raises:
413
+ ValueError: If the value is not of a valid type or if the input is missing a required key.
414
+ """
415
+ if v and not isinstance(v, int | float):
416
+ msg = f"Invalid value type {type(v)} for input {info.data.get('name')}."
417
+ raise ValueError(msg)
418
+ if isinstance(v, int):
419
+ v = float(v)
420
+ return v
421
+
422
+
423
+ class BoolInput(BaseInputMixin, ListableInputMixin, MetadataTraceMixin, ToolModeMixin):
424
+ """Represents a boolean field.
425
+
426
+ This class represents a boolean input and provides functionality for handling boolean values.
427
+ It inherits from the `BaseInputMixin` and `ListableInputMixin` classes.
428
+
429
+ Attributes:
430
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.BOOLEAN.
431
+ value (CoalesceBool): The value of the boolean input.
432
+ """
433
+
434
+ field_type: SerializableFieldTypes = FieldTypes.BOOLEAN
435
+ value: CoalesceBool = False
436
+
437
+
438
+ class NestedDictInput(
439
+ BaseInputMixin,
440
+ ListableInputMixin,
441
+ MetadataTraceMixin,
442
+ InputTraceMixin,
443
+ ToolModeMixin,
444
+ ):
445
+ """Represents a nested dictionary field.
446
+
447
+ This class represents a nested dictionary input and provides functionality for handling dictionary values.
448
+ It inherits from the `BaseInputMixin` and `ListableInputMixin` classes.
449
+
450
+ Attributes:
451
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.NESTED_DICT.
452
+ value (Optional[dict]): The value of the input. Defaults to an empty dictionary.
453
+ """
454
+
455
+ field_type: SerializableFieldTypes = FieldTypes.NESTED_DICT
456
+ value: dict | None = {}
457
+
458
+
459
+ class DictInput(BaseInputMixin, ListableInputMixin, InputTraceMixin, ToolModeMixin):
460
+ """Represents a dictionary field.
461
+
462
+ This class represents a dictionary input and provides functionality for handling dictionary values.
463
+ It inherits from the `BaseInputMixin` and `ListableInputMixin` classes.
464
+
465
+ Attributes:
466
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.DICT.
467
+ value (Optional[dict]): The value of the dictionary input. Defaults to an empty dictionary.
468
+ """
469
+
470
+ field_type: SerializableFieldTypes = FieldTypes.DICT
471
+ value: dict = Field(default_factory=dict)
472
+
473
+
474
+ class DropdownInput(BaseInputMixin, DropDownMixin, MetadataTraceMixin, ToolModeMixin):
475
+ """Represents a dropdown input field.
476
+
477
+ This class represents a dropdown input field and provides functionality for handling dropdown values.
478
+ It inherits from the `BaseInputMixin` and `DropDownMixin` classes.
479
+
480
+ Attributes:
481
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.TEXT.
482
+ options (Optional[Union[list[str], Callable]]): List of options for the field.
483
+ Default is None.
484
+ options_metadata (Optional[list[dict[str, str]]): List of dictionaries with metadata for each option.
485
+ Default is None.
486
+ combobox (CoalesceBool): Variable that defines if the user can insert custom values in the dropdown.
487
+ toggle (CoalesceBool): Variable that defines if a toggle button is shown.
488
+ toggle_value (CoalesceBool | None): Variable that defines the value of the toggle button. Defaults to None.
489
+ """
490
+
491
+ field_type: SerializableFieldTypes = FieldTypes.TEXT
492
+ options: list[str] = Field(default_factory=list)
493
+ options_metadata: list[dict[str, Any]] = Field(default_factory=list)
494
+ combobox: CoalesceBool = False
495
+ dialog_inputs: dict[str, Any] = Field(default_factory=dict)
496
+ toggle: bool = False
497
+ toggle_disable: bool | None = None
498
+ toggle_value: bool | None = None
499
+
500
+
501
+ class ConnectionInput(BaseInputMixin, ConnectionMixin, MetadataTraceMixin, ToolModeMixin):
502
+ """Represents a connection input field.
503
+
504
+ This class represents a connection input field and provides functionality for handling connection values.
505
+ It inherits from the `BaseInputMixin` and `ConnectionMixin` classes.
506
+
507
+ """
508
+
509
+ field_type: SerializableFieldTypes = FieldTypes.CONNECTION
510
+
511
+
512
+ class AuthInput(BaseInputMixin, AuthMixin, MetadataTraceMixin):
513
+ """Represents an authentication input field.
514
+
515
+ This class represents an authentication input field and provides functionality for handling authentication values.
516
+ It inherits from the `BaseInputMixin` and `AuthMixin` classes.
517
+
518
+ Attributes:
519
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.AUTH.
520
+ """
521
+
522
+ field_type: SerializableFieldTypes = FieldTypes.AUTH
523
+ show: bool = False
524
+
525
+
526
+ class QueryInput(MessageTextInput, QueryMixin):
527
+ """Represents a query input field.
528
+
529
+ This class represents an query input field and provides functionality for handling search values.
530
+ It inherits from the `BaseInputMixin` and `QueryMixin` classes.
531
+
532
+ Attributes:
533
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.SEARCH.
534
+ separator (str | None): The separator for the query input. Defaults to None.
535
+ value (str): The value for the query input. Defaults to an empty string.
536
+ """
537
+
538
+ field_type: SerializableFieldTypes = FieldTypes.QUERY
539
+ separator: str | None = Field(default=None)
540
+
541
+
542
+ class SortableListInput(BaseInputMixin, SortableListMixin, MetadataTraceMixin, ToolModeMixin):
543
+ """Represents a list selection input field.
544
+
545
+ This class represents a list selection input field and provides functionality for handling list selection values.
546
+ It inherits from the `BaseInputMixin` and `ListableInputMixin` classes.
547
+
548
+ Attributes:
549
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.SORTABLE_LIST.
550
+ """
551
+
552
+ field_type: SerializableFieldTypes = FieldTypes.SORTABLE_LIST
553
+
554
+
555
+ class TabInput(BaseInputMixin, TabMixin, MetadataTraceMixin, ToolModeMixin):
556
+ """Represents a tab input field.
557
+
558
+ This class represents a tab input field that allows a maximum of 3 values, each with a maximum of 20 characters.
559
+ It inherits from the `BaseInputMixin` and `TabMixin` classes.
560
+
561
+ Attributes:
562
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.TAB.
563
+ options (list[str]): List of tab options. Maximum of 3 values allowed, each with a maximum of 20 characters.
564
+ active_tab (int): Index of the currently active tab. Defaults to 0.
565
+ """
566
+
567
+ field_type: SerializableFieldTypes = FieldTypes.TAB
568
+ options: list[str] = Field(default_factory=list)
569
+
570
+ @model_validator(mode="after")
571
+ @classmethod
572
+ def validate_value(cls, values):
573
+ """Validates the value to ensure it's one of the tab values."""
574
+ options = values.options # Agora temos certeza de que options está disponível
575
+ value = values.value
576
+
577
+ if not isinstance(value, str):
578
+ msg = f"TabInput value must be a string. Got {type(value).__name__}."
579
+ raise TypeError(msg)
580
+
581
+ if value not in options and value != "":
582
+ msg = f"TabInput value must be one of the following: {options}. Got: '{value}'"
583
+ raise ValueError(msg)
584
+
585
+ return values
586
+
587
+
588
+ class MultiselectInput(BaseInputMixin, ListableInputMixin, DropDownMixin, MetadataTraceMixin, ToolModeMixin):
589
+ """Represents a multiselect input field.
590
+
591
+ This class represents a multiselect input field and provides functionality for handling multiselect values.
592
+ It inherits from the `BaseInputMixin`, `ListableInputMixin` and `DropDownMixin` classes.
593
+
594
+ Attributes:
595
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.TEXT.
596
+ options (Optional[Union[list[str], Callable]]): List of options for the field. Only used when is_list=True.
597
+ Default is None.
598
+ """
599
+
600
+ field_type: SerializableFieldTypes = FieldTypes.TEXT
601
+ options: list[str] = Field(default_factory=list)
602
+ is_list: bool = Field(default=True, serialization_alias="list")
603
+ combobox: CoalesceBool = False
604
+
605
+ @field_validator("value")
606
+ @classmethod
607
+ def validate_value(cls, v: Any, _info):
608
+ # Check if value is a list of dicts
609
+ if not isinstance(v, list):
610
+ msg = f"MultiselectInput value must be a list. Value: '{v}'"
611
+ raise ValueError(msg) # noqa: TRY004
612
+ for item in v:
613
+ if not isinstance(item, str):
614
+ msg = f"MultiselectInput value must be a list of strings. Item: '{item}' is not a string"
615
+ raise ValueError(msg) # noqa: TRY004
616
+ return v
617
+
618
+
619
+ class FileInput(BaseInputMixin, ListableInputMixin, FileMixin, MetadataTraceMixin):
620
+ """Represents a file field.
621
+
622
+ This class represents a file input and provides functionality for handling file values.
623
+ It inherits from the `BaseInputMixin`, `ListableInputMixin`, and `FileMixin` classes.
624
+
625
+ Attributes:
626
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.FILE.
627
+ """
628
+
629
+ field_type: SerializableFieldTypes = FieldTypes.FILE
630
+
631
+
632
+ class McpInput(BaseInputMixin, MetadataTraceMixin):
633
+ """Represents a mcp input field.
634
+
635
+ This class represents a mcp input and provides functionality for handling mcp values.
636
+ It inherits from the `BaseInputMixin` and `MetadataTraceMixin` classes.
637
+
638
+ Attributes:
639
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.MCP.
640
+ """
641
+
642
+ field_type: SerializableFieldTypes = FieldTypes.MCP
643
+ value: dict[str, Any] = Field(default_factory=dict)
644
+
645
+
646
+ class LinkInput(BaseInputMixin, LinkMixin):
647
+ field_type: SerializableFieldTypes = FieldTypes.LINK
648
+
649
+
650
+ class SliderInput(BaseInputMixin, RangeMixin, SliderMixin, ToolModeMixin):
651
+ field_type: SerializableFieldTypes = FieldTypes.SLIDER
652
+
653
+
654
+ DEFAULT_PROMPT_INTUT_TYPES = ["Message"]
655
+
656
+ from lfx.template.field.base import Input # noqa: E402
657
+
658
+
659
+ class DefaultPromptField(Input):
660
+ name: str
661
+ display_name: str | None = None
662
+ field_type: str = "str"
663
+ advanced: bool = False
664
+ multiline: bool = True
665
+ input_types: list[str] = DEFAULT_PROMPT_INTUT_TYPES
666
+ value: Any = "" # Set the value to empty string
667
+
668
+
669
+ InputTypes: TypeAlias = (
670
+ Input
671
+ | AuthInput
672
+ | QueryInput
673
+ | DefaultPromptField
674
+ | BoolInput
675
+ | DataInput
676
+ | DictInput
677
+ | DropdownInput
678
+ | MultiselectInput
679
+ | SortableListInput
680
+ | ConnectionInput
681
+ | FileInput
682
+ | FloatInput
683
+ | HandleInput
684
+ | IntInput
685
+ | McpInput
686
+ | MultilineInput
687
+ | MultilineSecretInput
688
+ | NestedDictInput
689
+ | ToolsInput
690
+ | PromptInput
691
+ | CodeInput
692
+ | SecretStrInput
693
+ | StrInput
694
+ | MessageTextInput
695
+ | MessageInput
696
+ | TableInput
697
+ | LinkInput
698
+ | SliderInput
699
+ | DataFrameInput
700
+ | TabInput
701
+ )
702
+
703
+ InputTypesMap: dict[str, type[InputTypes]] = {t.__name__: t for t in get_args(InputTypes)}
704
+
705
+
706
+ def instantiate_input(input_type: str, data: dict) -> InputTypes:
707
+ input_type_class = InputTypesMap.get(input_type)
708
+ if "type" in data:
709
+ # Replace with field_type
710
+ data["field_type"] = data.pop("type")
711
+ if input_type_class:
712
+ return input_type_class(**data)
713
+ msg = f"Invalid input type: {input_type}"
714
+ raise ValueError(msg)