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

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

Potentially problematic release.


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

Files changed (769) hide show
  1. lfx/__init__.py +0 -0
  2. lfx/__main__.py +25 -0
  3. lfx/_assets/component_index.json +1 -0
  4. lfx/base/__init__.py +0 -0
  5. lfx/base/agents/__init__.py +0 -0
  6. lfx/base/agents/agent.py +375 -0
  7. lfx/base/agents/altk_base_agent.py +380 -0
  8. lfx/base/agents/altk_tool_wrappers.py +565 -0
  9. lfx/base/agents/callback.py +130 -0
  10. lfx/base/agents/context.py +109 -0
  11. lfx/base/agents/crewai/__init__.py +0 -0
  12. lfx/base/agents/crewai/crew.py +231 -0
  13. lfx/base/agents/crewai/tasks.py +12 -0
  14. lfx/base/agents/default_prompts.py +23 -0
  15. lfx/base/agents/errors.py +15 -0
  16. lfx/base/agents/events.py +430 -0
  17. lfx/base/agents/utils.py +237 -0
  18. lfx/base/astra_assistants/__init__.py +0 -0
  19. lfx/base/astra_assistants/util.py +171 -0
  20. lfx/base/chains/__init__.py +0 -0
  21. lfx/base/chains/model.py +19 -0
  22. lfx/base/composio/__init__.py +0 -0
  23. lfx/base/composio/composio_base.py +2584 -0
  24. lfx/base/compressors/__init__.py +0 -0
  25. lfx/base/compressors/model.py +60 -0
  26. lfx/base/constants.py +46 -0
  27. lfx/base/curl/__init__.py +0 -0
  28. lfx/base/curl/parse.py +188 -0
  29. lfx/base/data/__init__.py +5 -0
  30. lfx/base/data/base_file.py +810 -0
  31. lfx/base/data/docling_utils.py +338 -0
  32. lfx/base/data/storage_utils.py +192 -0
  33. lfx/base/data/utils.py +362 -0
  34. lfx/base/datastax/__init__.py +5 -0
  35. lfx/base/datastax/astradb_base.py +896 -0
  36. lfx/base/document_transformers/__init__.py +0 -0
  37. lfx/base/document_transformers/model.py +43 -0
  38. lfx/base/embeddings/__init__.py +0 -0
  39. lfx/base/embeddings/aiml_embeddings.py +62 -0
  40. lfx/base/embeddings/embeddings_class.py +113 -0
  41. lfx/base/embeddings/model.py +26 -0
  42. lfx/base/flow_processing/__init__.py +0 -0
  43. lfx/base/flow_processing/utils.py +86 -0
  44. lfx/base/huggingface/__init__.py +0 -0
  45. lfx/base/huggingface/model_bridge.py +133 -0
  46. lfx/base/io/__init__.py +0 -0
  47. lfx/base/io/chat.py +21 -0
  48. lfx/base/io/text.py +22 -0
  49. lfx/base/knowledge_bases/__init__.py +3 -0
  50. lfx/base/knowledge_bases/knowledge_base_utils.py +137 -0
  51. lfx/base/langchain_utilities/__init__.py +0 -0
  52. lfx/base/langchain_utilities/model.py +35 -0
  53. lfx/base/langchain_utilities/spider_constants.py +1 -0
  54. lfx/base/langwatch/__init__.py +0 -0
  55. lfx/base/langwatch/utils.py +18 -0
  56. lfx/base/mcp/__init__.py +0 -0
  57. lfx/base/mcp/constants.py +2 -0
  58. lfx/base/mcp/util.py +1659 -0
  59. lfx/base/memory/__init__.py +0 -0
  60. lfx/base/memory/memory.py +49 -0
  61. lfx/base/memory/model.py +38 -0
  62. lfx/base/models/__init__.py +3 -0
  63. lfx/base/models/aiml_constants.py +51 -0
  64. lfx/base/models/anthropic_constants.py +51 -0
  65. lfx/base/models/aws_constants.py +151 -0
  66. lfx/base/models/chat_result.py +76 -0
  67. lfx/base/models/cometapi_constants.py +54 -0
  68. lfx/base/models/google_generative_ai_constants.py +70 -0
  69. lfx/base/models/google_generative_ai_model.py +38 -0
  70. lfx/base/models/groq_constants.py +150 -0
  71. lfx/base/models/groq_model_discovery.py +265 -0
  72. lfx/base/models/model.py +375 -0
  73. lfx/base/models/model_input_constants.py +378 -0
  74. lfx/base/models/model_metadata.py +41 -0
  75. lfx/base/models/model_utils.py +108 -0
  76. lfx/base/models/novita_constants.py +35 -0
  77. lfx/base/models/ollama_constants.py +52 -0
  78. lfx/base/models/openai_constants.py +129 -0
  79. lfx/base/models/sambanova_constants.py +18 -0
  80. lfx/base/models/watsonx_constants.py +36 -0
  81. lfx/base/processing/__init__.py +0 -0
  82. lfx/base/prompts/__init__.py +0 -0
  83. lfx/base/prompts/api_utils.py +224 -0
  84. lfx/base/prompts/utils.py +61 -0
  85. lfx/base/textsplitters/__init__.py +0 -0
  86. lfx/base/textsplitters/model.py +28 -0
  87. lfx/base/tools/__init__.py +0 -0
  88. lfx/base/tools/base.py +26 -0
  89. lfx/base/tools/component_tool.py +325 -0
  90. lfx/base/tools/constants.py +49 -0
  91. lfx/base/tools/flow_tool.py +132 -0
  92. lfx/base/tools/run_flow.py +698 -0
  93. lfx/base/vectorstores/__init__.py +0 -0
  94. lfx/base/vectorstores/model.py +193 -0
  95. lfx/base/vectorstores/utils.py +22 -0
  96. lfx/base/vectorstores/vector_store_connection_decorator.py +52 -0
  97. lfx/cli/__init__.py +5 -0
  98. lfx/cli/commands.py +327 -0
  99. lfx/cli/common.py +650 -0
  100. lfx/cli/run.py +506 -0
  101. lfx/cli/script_loader.py +289 -0
  102. lfx/cli/serve_app.py +546 -0
  103. lfx/cli/validation.py +69 -0
  104. lfx/components/FAISS/__init__.py +34 -0
  105. lfx/components/FAISS/faiss.py +111 -0
  106. lfx/components/Notion/__init__.py +19 -0
  107. lfx/components/Notion/add_content_to_page.py +269 -0
  108. lfx/components/Notion/create_page.py +94 -0
  109. lfx/components/Notion/list_database_properties.py +68 -0
  110. lfx/components/Notion/list_pages.py +122 -0
  111. lfx/components/Notion/list_users.py +77 -0
  112. lfx/components/Notion/page_content_viewer.py +93 -0
  113. lfx/components/Notion/search.py +111 -0
  114. lfx/components/Notion/update_page_property.py +114 -0
  115. lfx/components/__init__.py +428 -0
  116. lfx/components/_importing.py +42 -0
  117. lfx/components/agentql/__init__.py +3 -0
  118. lfx/components/agentql/agentql_api.py +151 -0
  119. lfx/components/aiml/__init__.py +37 -0
  120. lfx/components/aiml/aiml.py +115 -0
  121. lfx/components/aiml/aiml_embeddings.py +37 -0
  122. lfx/components/altk/__init__.py +34 -0
  123. lfx/components/altk/altk_agent.py +193 -0
  124. lfx/components/amazon/__init__.py +36 -0
  125. lfx/components/amazon/amazon_bedrock_converse.py +195 -0
  126. lfx/components/amazon/amazon_bedrock_embedding.py +109 -0
  127. lfx/components/amazon/amazon_bedrock_model.py +130 -0
  128. lfx/components/amazon/s3_bucket_uploader.py +211 -0
  129. lfx/components/anthropic/__init__.py +34 -0
  130. lfx/components/anthropic/anthropic.py +187 -0
  131. lfx/components/apify/__init__.py +5 -0
  132. lfx/components/apify/apify_actor.py +325 -0
  133. lfx/components/arxiv/__init__.py +3 -0
  134. lfx/components/arxiv/arxiv.py +169 -0
  135. lfx/components/assemblyai/__init__.py +46 -0
  136. lfx/components/assemblyai/assemblyai_get_subtitles.py +83 -0
  137. lfx/components/assemblyai/assemblyai_lemur.py +183 -0
  138. lfx/components/assemblyai/assemblyai_list_transcripts.py +95 -0
  139. lfx/components/assemblyai/assemblyai_poll_transcript.py +72 -0
  140. lfx/components/assemblyai/assemblyai_start_transcript.py +188 -0
  141. lfx/components/azure/__init__.py +37 -0
  142. lfx/components/azure/azure_openai.py +95 -0
  143. lfx/components/azure/azure_openai_embeddings.py +83 -0
  144. lfx/components/baidu/__init__.py +32 -0
  145. lfx/components/baidu/baidu_qianfan_chat.py +113 -0
  146. lfx/components/bing/__init__.py +3 -0
  147. lfx/components/bing/bing_search_api.py +61 -0
  148. lfx/components/cassandra/__init__.py +40 -0
  149. lfx/components/cassandra/cassandra.py +264 -0
  150. lfx/components/cassandra/cassandra_chat.py +92 -0
  151. lfx/components/cassandra/cassandra_graph.py +238 -0
  152. lfx/components/chains/__init__.py +3 -0
  153. lfx/components/chroma/__init__.py +34 -0
  154. lfx/components/chroma/chroma.py +169 -0
  155. lfx/components/cleanlab/__init__.py +40 -0
  156. lfx/components/cleanlab/cleanlab_evaluator.py +155 -0
  157. lfx/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
  158. lfx/components/cleanlab/cleanlab_remediator.py +131 -0
  159. lfx/components/clickhouse/__init__.py +34 -0
  160. lfx/components/clickhouse/clickhouse.py +135 -0
  161. lfx/components/cloudflare/__init__.py +32 -0
  162. lfx/components/cloudflare/cloudflare.py +81 -0
  163. lfx/components/cohere/__init__.py +40 -0
  164. lfx/components/cohere/cohere_embeddings.py +81 -0
  165. lfx/components/cohere/cohere_models.py +46 -0
  166. lfx/components/cohere/cohere_rerank.py +51 -0
  167. lfx/components/cometapi/__init__.py +32 -0
  168. lfx/components/cometapi/cometapi.py +166 -0
  169. lfx/components/composio/__init__.py +222 -0
  170. lfx/components/composio/agentql_composio.py +11 -0
  171. lfx/components/composio/agiled_composio.py +11 -0
  172. lfx/components/composio/airtable_composio.py +11 -0
  173. lfx/components/composio/apollo_composio.py +11 -0
  174. lfx/components/composio/asana_composio.py +11 -0
  175. lfx/components/composio/attio_composio.py +11 -0
  176. lfx/components/composio/bitbucket_composio.py +11 -0
  177. lfx/components/composio/bolna_composio.py +11 -0
  178. lfx/components/composio/brightdata_composio.py +11 -0
  179. lfx/components/composio/calendly_composio.py +11 -0
  180. lfx/components/composio/canva_composio.py +11 -0
  181. lfx/components/composio/canvas_composio.py +11 -0
  182. lfx/components/composio/coda_composio.py +11 -0
  183. lfx/components/composio/composio_api.py +278 -0
  184. lfx/components/composio/contentful_composio.py +11 -0
  185. lfx/components/composio/digicert_composio.py +11 -0
  186. lfx/components/composio/discord_composio.py +11 -0
  187. lfx/components/composio/dropbox_compnent.py +11 -0
  188. lfx/components/composio/elevenlabs_composio.py +11 -0
  189. lfx/components/composio/exa_composio.py +11 -0
  190. lfx/components/composio/figma_composio.py +11 -0
  191. lfx/components/composio/finage_composio.py +11 -0
  192. lfx/components/composio/firecrawl_composio.py +11 -0
  193. lfx/components/composio/fireflies_composio.py +11 -0
  194. lfx/components/composio/fixer_composio.py +11 -0
  195. lfx/components/composio/flexisign_composio.py +11 -0
  196. lfx/components/composio/freshdesk_composio.py +11 -0
  197. lfx/components/composio/github_composio.py +11 -0
  198. lfx/components/composio/gmail_composio.py +38 -0
  199. lfx/components/composio/googlebigquery_composio.py +11 -0
  200. lfx/components/composio/googlecalendar_composio.py +11 -0
  201. lfx/components/composio/googleclassroom_composio.py +11 -0
  202. lfx/components/composio/googledocs_composio.py +11 -0
  203. lfx/components/composio/googlemeet_composio.py +11 -0
  204. lfx/components/composio/googlesheets_composio.py +11 -0
  205. lfx/components/composio/googletasks_composio.py +8 -0
  206. lfx/components/composio/heygen_composio.py +11 -0
  207. lfx/components/composio/instagram_composio.py +11 -0
  208. lfx/components/composio/jira_composio.py +11 -0
  209. lfx/components/composio/jotform_composio.py +11 -0
  210. lfx/components/composio/klaviyo_composio.py +11 -0
  211. lfx/components/composio/linear_composio.py +11 -0
  212. lfx/components/composio/listennotes_composio.py +11 -0
  213. lfx/components/composio/mem0_composio.py +11 -0
  214. lfx/components/composio/miro_composio.py +11 -0
  215. lfx/components/composio/missive_composio.py +11 -0
  216. lfx/components/composio/notion_composio.py +11 -0
  217. lfx/components/composio/onedrive_composio.py +11 -0
  218. lfx/components/composio/outlook_composio.py +11 -0
  219. lfx/components/composio/pandadoc_composio.py +11 -0
  220. lfx/components/composio/peopledatalabs_composio.py +11 -0
  221. lfx/components/composio/perplexityai_composio.py +11 -0
  222. lfx/components/composio/reddit_composio.py +11 -0
  223. lfx/components/composio/serpapi_composio.py +11 -0
  224. lfx/components/composio/slack_composio.py +11 -0
  225. lfx/components/composio/slackbot_composio.py +11 -0
  226. lfx/components/composio/snowflake_composio.py +11 -0
  227. lfx/components/composio/supabase_composio.py +11 -0
  228. lfx/components/composio/tavily_composio.py +11 -0
  229. lfx/components/composio/timelinesai_composio.py +11 -0
  230. lfx/components/composio/todoist_composio.py +11 -0
  231. lfx/components/composio/wrike_composio.py +11 -0
  232. lfx/components/composio/youtube_composio.py +11 -0
  233. lfx/components/confluence/__init__.py +3 -0
  234. lfx/components/confluence/confluence.py +84 -0
  235. lfx/components/couchbase/__init__.py +34 -0
  236. lfx/components/couchbase/couchbase.py +102 -0
  237. lfx/components/crewai/__init__.py +49 -0
  238. lfx/components/crewai/crewai.py +108 -0
  239. lfx/components/crewai/hierarchical_crew.py +47 -0
  240. lfx/components/crewai/hierarchical_task.py +45 -0
  241. lfx/components/crewai/sequential_crew.py +53 -0
  242. lfx/components/crewai/sequential_task.py +74 -0
  243. lfx/components/crewai/sequential_task_agent.py +144 -0
  244. lfx/components/cuga/__init__.py +34 -0
  245. lfx/components/cuga/cuga_agent.py +730 -0
  246. lfx/components/custom_component/__init__.py +34 -0
  247. lfx/components/custom_component/custom_component.py +31 -0
  248. lfx/components/data/__init__.py +114 -0
  249. lfx/components/data_source/__init__.py +58 -0
  250. lfx/components/data_source/api_request.py +577 -0
  251. lfx/components/data_source/csv_to_data.py +101 -0
  252. lfx/components/data_source/json_to_data.py +106 -0
  253. lfx/components/data_source/mock_data.py +398 -0
  254. lfx/components/data_source/news_search.py +166 -0
  255. lfx/components/data_source/rss.py +71 -0
  256. lfx/components/data_source/sql_executor.py +101 -0
  257. lfx/components/data_source/url.py +311 -0
  258. lfx/components/data_source/web_search.py +326 -0
  259. lfx/components/datastax/__init__.py +76 -0
  260. lfx/components/datastax/astradb_assistant_manager.py +307 -0
  261. lfx/components/datastax/astradb_chatmemory.py +40 -0
  262. lfx/components/datastax/astradb_cql.py +288 -0
  263. lfx/components/datastax/astradb_graph.py +217 -0
  264. lfx/components/datastax/astradb_tool.py +378 -0
  265. lfx/components/datastax/astradb_vectorize.py +122 -0
  266. lfx/components/datastax/astradb_vectorstore.py +449 -0
  267. lfx/components/datastax/create_assistant.py +59 -0
  268. lfx/components/datastax/create_thread.py +33 -0
  269. lfx/components/datastax/dotenv.py +36 -0
  270. lfx/components/datastax/get_assistant.py +38 -0
  271. lfx/components/datastax/getenvvar.py +31 -0
  272. lfx/components/datastax/graph_rag.py +141 -0
  273. lfx/components/datastax/hcd.py +315 -0
  274. lfx/components/datastax/list_assistants.py +26 -0
  275. lfx/components/datastax/run.py +90 -0
  276. lfx/components/deactivated/__init__.py +15 -0
  277. lfx/components/deactivated/amazon_kendra.py +66 -0
  278. lfx/components/deactivated/chat_litellm_model.py +158 -0
  279. lfx/components/deactivated/code_block_extractor.py +26 -0
  280. lfx/components/deactivated/documents_to_data.py +22 -0
  281. lfx/components/deactivated/embed.py +16 -0
  282. lfx/components/deactivated/extract_key_from_data.py +46 -0
  283. lfx/components/deactivated/json_document_builder.py +57 -0
  284. lfx/components/deactivated/list_flows.py +20 -0
  285. lfx/components/deactivated/mcp_sse.py +61 -0
  286. lfx/components/deactivated/mcp_stdio.py +62 -0
  287. lfx/components/deactivated/merge_data.py +93 -0
  288. lfx/components/deactivated/message.py +37 -0
  289. lfx/components/deactivated/metal.py +54 -0
  290. lfx/components/deactivated/multi_query.py +59 -0
  291. lfx/components/deactivated/retriever.py +43 -0
  292. lfx/components/deactivated/selective_passthrough.py +77 -0
  293. lfx/components/deactivated/should_run_next.py +40 -0
  294. lfx/components/deactivated/split_text.py +63 -0
  295. lfx/components/deactivated/store_message.py +24 -0
  296. lfx/components/deactivated/sub_flow.py +124 -0
  297. lfx/components/deactivated/vectara_self_query.py +76 -0
  298. lfx/components/deactivated/vector_store.py +24 -0
  299. lfx/components/deepseek/__init__.py +34 -0
  300. lfx/components/deepseek/deepseek.py +136 -0
  301. lfx/components/docling/__init__.py +43 -0
  302. lfx/components/docling/chunk_docling_document.py +186 -0
  303. lfx/components/docling/docling_inline.py +238 -0
  304. lfx/components/docling/docling_remote.py +195 -0
  305. lfx/components/docling/export_docling_document.py +117 -0
  306. lfx/components/documentloaders/__init__.py +3 -0
  307. lfx/components/duckduckgo/__init__.py +3 -0
  308. lfx/components/duckduckgo/duck_duck_go_search_run.py +92 -0
  309. lfx/components/elastic/__init__.py +37 -0
  310. lfx/components/elastic/elasticsearch.py +267 -0
  311. lfx/components/elastic/opensearch.py +789 -0
  312. lfx/components/elastic/opensearch_multimodal.py +1575 -0
  313. lfx/components/embeddings/__init__.py +37 -0
  314. lfx/components/embeddings/similarity.py +77 -0
  315. lfx/components/embeddings/text_embedder.py +65 -0
  316. lfx/components/exa/__init__.py +3 -0
  317. lfx/components/exa/exa_search.py +68 -0
  318. lfx/components/files_and_knowledge/__init__.py +47 -0
  319. lfx/components/files_and_knowledge/directory.py +113 -0
  320. lfx/components/files_and_knowledge/file.py +841 -0
  321. lfx/components/files_and_knowledge/ingestion.py +694 -0
  322. lfx/components/files_and_knowledge/retrieval.py +264 -0
  323. lfx/components/files_and_knowledge/save_file.py +746 -0
  324. lfx/components/firecrawl/__init__.py +43 -0
  325. lfx/components/firecrawl/firecrawl_crawl_api.py +88 -0
  326. lfx/components/firecrawl/firecrawl_extract_api.py +136 -0
  327. lfx/components/firecrawl/firecrawl_map_api.py +89 -0
  328. lfx/components/firecrawl/firecrawl_scrape_api.py +73 -0
  329. lfx/components/flow_controls/__init__.py +58 -0
  330. lfx/components/flow_controls/conditional_router.py +208 -0
  331. lfx/components/flow_controls/data_conditional_router.py +126 -0
  332. lfx/components/flow_controls/flow_tool.py +111 -0
  333. lfx/components/flow_controls/listen.py +29 -0
  334. lfx/components/flow_controls/loop.py +163 -0
  335. lfx/components/flow_controls/notify.py +88 -0
  336. lfx/components/flow_controls/pass_message.py +36 -0
  337. lfx/components/flow_controls/run_flow.py +108 -0
  338. lfx/components/flow_controls/sub_flow.py +115 -0
  339. lfx/components/git/__init__.py +4 -0
  340. lfx/components/git/git.py +262 -0
  341. lfx/components/git/gitextractor.py +196 -0
  342. lfx/components/glean/__init__.py +3 -0
  343. lfx/components/glean/glean_search_api.py +173 -0
  344. lfx/components/google/__init__.py +17 -0
  345. lfx/components/google/gmail.py +193 -0
  346. lfx/components/google/google_bq_sql_executor.py +157 -0
  347. lfx/components/google/google_drive.py +92 -0
  348. lfx/components/google/google_drive_search.py +152 -0
  349. lfx/components/google/google_generative_ai.py +144 -0
  350. lfx/components/google/google_generative_ai_embeddings.py +141 -0
  351. lfx/components/google/google_oauth_token.py +89 -0
  352. lfx/components/google/google_search_api_core.py +68 -0
  353. lfx/components/google/google_serper_api_core.py +74 -0
  354. lfx/components/groq/__init__.py +34 -0
  355. lfx/components/groq/groq.py +143 -0
  356. lfx/components/helpers/__init__.py +154 -0
  357. lfx/components/homeassistant/__init__.py +7 -0
  358. lfx/components/homeassistant/home_assistant_control.py +152 -0
  359. lfx/components/homeassistant/list_home_assistant_states.py +137 -0
  360. lfx/components/huggingface/__init__.py +37 -0
  361. lfx/components/huggingface/huggingface.py +199 -0
  362. lfx/components/huggingface/huggingface_inference_api.py +106 -0
  363. lfx/components/ibm/__init__.py +34 -0
  364. lfx/components/ibm/watsonx.py +207 -0
  365. lfx/components/ibm/watsonx_embeddings.py +135 -0
  366. lfx/components/icosacomputing/__init__.py +5 -0
  367. lfx/components/icosacomputing/combinatorial_reasoner.py +84 -0
  368. lfx/components/input_output/__init__.py +40 -0
  369. lfx/components/input_output/chat.py +109 -0
  370. lfx/components/input_output/chat_output.py +184 -0
  371. lfx/components/input_output/text.py +27 -0
  372. lfx/components/input_output/text_output.py +29 -0
  373. lfx/components/input_output/webhook.py +56 -0
  374. lfx/components/jigsawstack/__init__.py +23 -0
  375. lfx/components/jigsawstack/ai_scrape.py +126 -0
  376. lfx/components/jigsawstack/ai_web_search.py +136 -0
  377. lfx/components/jigsawstack/file_read.py +115 -0
  378. lfx/components/jigsawstack/file_upload.py +94 -0
  379. lfx/components/jigsawstack/image_generation.py +205 -0
  380. lfx/components/jigsawstack/nsfw.py +60 -0
  381. lfx/components/jigsawstack/object_detection.py +124 -0
  382. lfx/components/jigsawstack/sentiment.py +112 -0
  383. lfx/components/jigsawstack/text_to_sql.py +90 -0
  384. lfx/components/jigsawstack/text_translate.py +77 -0
  385. lfx/components/jigsawstack/vocr.py +107 -0
  386. lfx/components/knowledge_bases/__init__.py +89 -0
  387. lfx/components/langchain_utilities/__init__.py +109 -0
  388. lfx/components/langchain_utilities/character.py +53 -0
  389. lfx/components/langchain_utilities/conversation.py +59 -0
  390. lfx/components/langchain_utilities/csv_agent.py +175 -0
  391. lfx/components/langchain_utilities/fake_embeddings.py +26 -0
  392. lfx/components/langchain_utilities/html_link_extractor.py +35 -0
  393. lfx/components/langchain_utilities/json_agent.py +100 -0
  394. lfx/components/langchain_utilities/langchain_hub.py +126 -0
  395. lfx/components/langchain_utilities/language_recursive.py +49 -0
  396. lfx/components/langchain_utilities/language_semantic.py +138 -0
  397. lfx/components/langchain_utilities/llm_checker.py +39 -0
  398. lfx/components/langchain_utilities/llm_math.py +42 -0
  399. lfx/components/langchain_utilities/natural_language.py +61 -0
  400. lfx/components/langchain_utilities/openai_tools.py +53 -0
  401. lfx/components/langchain_utilities/openapi.py +48 -0
  402. lfx/components/langchain_utilities/recursive_character.py +60 -0
  403. lfx/components/langchain_utilities/retrieval_qa.py +83 -0
  404. lfx/components/langchain_utilities/runnable_executor.py +137 -0
  405. lfx/components/langchain_utilities/self_query.py +80 -0
  406. lfx/components/langchain_utilities/spider.py +142 -0
  407. lfx/components/langchain_utilities/sql.py +40 -0
  408. lfx/components/langchain_utilities/sql_database.py +35 -0
  409. lfx/components/langchain_utilities/sql_generator.py +78 -0
  410. lfx/components/langchain_utilities/tool_calling.py +59 -0
  411. lfx/components/langchain_utilities/vector_store_info.py +49 -0
  412. lfx/components/langchain_utilities/vector_store_router.py +33 -0
  413. lfx/components/langchain_utilities/xml_agent.py +71 -0
  414. lfx/components/langwatch/__init__.py +3 -0
  415. lfx/components/langwatch/langwatch.py +278 -0
  416. lfx/components/link_extractors/__init__.py +3 -0
  417. lfx/components/llm_operations/__init__.py +46 -0
  418. lfx/components/llm_operations/batch_run.py +205 -0
  419. lfx/components/llm_operations/lambda_filter.py +218 -0
  420. lfx/components/llm_operations/llm_conditional_router.py +421 -0
  421. lfx/components/llm_operations/llm_selector.py +499 -0
  422. lfx/components/llm_operations/structured_output.py +244 -0
  423. lfx/components/lmstudio/__init__.py +34 -0
  424. lfx/components/lmstudio/lmstudioembeddings.py +89 -0
  425. lfx/components/lmstudio/lmstudiomodel.py +133 -0
  426. lfx/components/logic/__init__.py +181 -0
  427. lfx/components/maritalk/__init__.py +32 -0
  428. lfx/components/maritalk/maritalk.py +52 -0
  429. lfx/components/mem0/__init__.py +3 -0
  430. lfx/components/mem0/mem0_chat_memory.py +147 -0
  431. lfx/components/milvus/__init__.py +34 -0
  432. lfx/components/milvus/milvus.py +115 -0
  433. lfx/components/mistral/__init__.py +37 -0
  434. lfx/components/mistral/mistral.py +114 -0
  435. lfx/components/mistral/mistral_embeddings.py +58 -0
  436. lfx/components/models/__init__.py +89 -0
  437. lfx/components/models_and_agents/__init__.py +49 -0
  438. lfx/components/models_and_agents/agent.py +644 -0
  439. lfx/components/models_and_agents/embedding_model.py +423 -0
  440. lfx/components/models_and_agents/language_model.py +398 -0
  441. lfx/components/models_and_agents/mcp_component.py +594 -0
  442. lfx/components/models_and_agents/memory.py +268 -0
  443. lfx/components/models_and_agents/prompt.py +67 -0
  444. lfx/components/mongodb/__init__.py +34 -0
  445. lfx/components/mongodb/mongodb_atlas.py +213 -0
  446. lfx/components/needle/__init__.py +3 -0
  447. lfx/components/needle/needle.py +104 -0
  448. lfx/components/notdiamond/__init__.py +34 -0
  449. lfx/components/notdiamond/notdiamond.py +228 -0
  450. lfx/components/novita/__init__.py +32 -0
  451. lfx/components/novita/novita.py +130 -0
  452. lfx/components/nvidia/__init__.py +57 -0
  453. lfx/components/nvidia/nvidia.py +151 -0
  454. lfx/components/nvidia/nvidia_embedding.py +77 -0
  455. lfx/components/nvidia/nvidia_ingest.py +317 -0
  456. lfx/components/nvidia/nvidia_rerank.py +63 -0
  457. lfx/components/nvidia/system_assist.py +65 -0
  458. lfx/components/olivya/__init__.py +3 -0
  459. lfx/components/olivya/olivya.py +116 -0
  460. lfx/components/ollama/__init__.py +37 -0
  461. lfx/components/ollama/ollama.py +548 -0
  462. lfx/components/ollama/ollama_embeddings.py +103 -0
  463. lfx/components/openai/__init__.py +37 -0
  464. lfx/components/openai/openai.py +100 -0
  465. lfx/components/openai/openai_chat_model.py +176 -0
  466. lfx/components/openrouter/__init__.py +32 -0
  467. lfx/components/openrouter/openrouter.py +104 -0
  468. lfx/components/output_parsers/__init__.py +3 -0
  469. lfx/components/perplexity/__init__.py +34 -0
  470. lfx/components/perplexity/perplexity.py +75 -0
  471. lfx/components/pgvector/__init__.py +34 -0
  472. lfx/components/pgvector/pgvector.py +72 -0
  473. lfx/components/pinecone/__init__.py +34 -0
  474. lfx/components/pinecone/pinecone.py +134 -0
  475. lfx/components/processing/__init__.py +72 -0
  476. lfx/components/processing/alter_metadata.py +109 -0
  477. lfx/components/processing/combine_text.py +40 -0
  478. lfx/components/processing/converter.py +248 -0
  479. lfx/components/processing/create_data.py +111 -0
  480. lfx/components/processing/create_list.py +40 -0
  481. lfx/components/processing/data_operations.py +528 -0
  482. lfx/components/processing/data_to_dataframe.py +71 -0
  483. lfx/components/processing/dataframe_operations.py +313 -0
  484. lfx/components/processing/dataframe_to_toolset.py +259 -0
  485. lfx/components/processing/dynamic_create_data.py +357 -0
  486. lfx/components/processing/extract_key.py +54 -0
  487. lfx/components/processing/filter_data.py +43 -0
  488. lfx/components/processing/filter_data_values.py +89 -0
  489. lfx/components/processing/json_cleaner.py +104 -0
  490. lfx/components/processing/merge_data.py +91 -0
  491. lfx/components/processing/message_to_data.py +37 -0
  492. lfx/components/processing/output_parser.py +46 -0
  493. lfx/components/processing/parse_data.py +71 -0
  494. lfx/components/processing/parse_dataframe.py +69 -0
  495. lfx/components/processing/parse_json_data.py +91 -0
  496. lfx/components/processing/parser.py +148 -0
  497. lfx/components/processing/regex.py +83 -0
  498. lfx/components/processing/select_data.py +49 -0
  499. lfx/components/processing/split_text.py +141 -0
  500. lfx/components/processing/store_message.py +91 -0
  501. lfx/components/processing/update_data.py +161 -0
  502. lfx/components/prototypes/__init__.py +35 -0
  503. lfx/components/prototypes/python_function.py +73 -0
  504. lfx/components/qdrant/__init__.py +34 -0
  505. lfx/components/qdrant/qdrant.py +109 -0
  506. lfx/components/redis/__init__.py +37 -0
  507. lfx/components/redis/redis.py +89 -0
  508. lfx/components/redis/redis_chat.py +43 -0
  509. lfx/components/sambanova/__init__.py +32 -0
  510. lfx/components/sambanova/sambanova.py +84 -0
  511. lfx/components/scrapegraph/__init__.py +40 -0
  512. lfx/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
  513. lfx/components/scrapegraph/scrapegraph_search_api.py +64 -0
  514. lfx/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
  515. lfx/components/searchapi/__init__.py +34 -0
  516. lfx/components/searchapi/search.py +79 -0
  517. lfx/components/serpapi/__init__.py +3 -0
  518. lfx/components/serpapi/serp.py +115 -0
  519. lfx/components/supabase/__init__.py +34 -0
  520. lfx/components/supabase/supabase.py +76 -0
  521. lfx/components/tavily/__init__.py +4 -0
  522. lfx/components/tavily/tavily_extract.py +117 -0
  523. lfx/components/tavily/tavily_search.py +212 -0
  524. lfx/components/textsplitters/__init__.py +3 -0
  525. lfx/components/toolkits/__init__.py +3 -0
  526. lfx/components/tools/__init__.py +66 -0
  527. lfx/components/tools/calculator.py +109 -0
  528. lfx/components/tools/google_search_api.py +45 -0
  529. lfx/components/tools/google_serper_api.py +115 -0
  530. lfx/components/tools/python_code_structured_tool.py +328 -0
  531. lfx/components/tools/python_repl.py +98 -0
  532. lfx/components/tools/search_api.py +88 -0
  533. lfx/components/tools/searxng.py +145 -0
  534. lfx/components/tools/serp_api.py +120 -0
  535. lfx/components/tools/tavily_search_tool.py +345 -0
  536. lfx/components/tools/wikidata_api.py +103 -0
  537. lfx/components/tools/wikipedia_api.py +50 -0
  538. lfx/components/tools/yahoo_finance.py +130 -0
  539. lfx/components/twelvelabs/__init__.py +52 -0
  540. lfx/components/twelvelabs/convert_astra_results.py +84 -0
  541. lfx/components/twelvelabs/pegasus_index.py +311 -0
  542. lfx/components/twelvelabs/split_video.py +301 -0
  543. lfx/components/twelvelabs/text_embeddings.py +57 -0
  544. lfx/components/twelvelabs/twelvelabs_pegasus.py +408 -0
  545. lfx/components/twelvelabs/video_embeddings.py +100 -0
  546. lfx/components/twelvelabs/video_file.py +191 -0
  547. lfx/components/unstructured/__init__.py +3 -0
  548. lfx/components/unstructured/unstructured.py +121 -0
  549. lfx/components/upstash/__init__.py +34 -0
  550. lfx/components/upstash/upstash.py +124 -0
  551. lfx/components/utilities/__init__.py +43 -0
  552. lfx/components/utilities/calculator_core.py +89 -0
  553. lfx/components/utilities/current_date.py +42 -0
  554. lfx/components/utilities/id_generator.py +42 -0
  555. lfx/components/utilities/python_repl_core.py +98 -0
  556. lfx/components/vectara/__init__.py +37 -0
  557. lfx/components/vectara/vectara.py +97 -0
  558. lfx/components/vectara/vectara_rag.py +164 -0
  559. lfx/components/vectorstores/__init__.py +34 -0
  560. lfx/components/vectorstores/local_db.py +270 -0
  561. lfx/components/vertexai/__init__.py +37 -0
  562. lfx/components/vertexai/vertexai.py +71 -0
  563. lfx/components/vertexai/vertexai_embeddings.py +67 -0
  564. lfx/components/vlmrun/__init__.py +34 -0
  565. lfx/components/vlmrun/vlmrun_transcription.py +224 -0
  566. lfx/components/weaviate/__init__.py +34 -0
  567. lfx/components/weaviate/weaviate.py +89 -0
  568. lfx/components/wikipedia/__init__.py +4 -0
  569. lfx/components/wikipedia/wikidata.py +86 -0
  570. lfx/components/wikipedia/wikipedia.py +53 -0
  571. lfx/components/wolframalpha/__init__.py +3 -0
  572. lfx/components/wolframalpha/wolfram_alpha_api.py +54 -0
  573. lfx/components/xai/__init__.py +32 -0
  574. lfx/components/xai/xai.py +167 -0
  575. lfx/components/yahoosearch/__init__.py +3 -0
  576. lfx/components/yahoosearch/yahoo.py +137 -0
  577. lfx/components/youtube/__init__.py +52 -0
  578. lfx/components/youtube/channel.py +227 -0
  579. lfx/components/youtube/comments.py +231 -0
  580. lfx/components/youtube/playlist.py +33 -0
  581. lfx/components/youtube/search.py +120 -0
  582. lfx/components/youtube/trending.py +285 -0
  583. lfx/components/youtube/video_details.py +263 -0
  584. lfx/components/youtube/youtube_transcripts.py +206 -0
  585. lfx/components/zep/__init__.py +3 -0
  586. lfx/components/zep/zep.py +45 -0
  587. lfx/constants.py +6 -0
  588. lfx/custom/__init__.py +7 -0
  589. lfx/custom/attributes.py +87 -0
  590. lfx/custom/code_parser/__init__.py +3 -0
  591. lfx/custom/code_parser/code_parser.py +361 -0
  592. lfx/custom/custom_component/__init__.py +0 -0
  593. lfx/custom/custom_component/base_component.py +128 -0
  594. lfx/custom/custom_component/component.py +1890 -0
  595. lfx/custom/custom_component/component_with_cache.py +8 -0
  596. lfx/custom/custom_component/custom_component.py +650 -0
  597. lfx/custom/dependency_analyzer.py +165 -0
  598. lfx/custom/directory_reader/__init__.py +3 -0
  599. lfx/custom/directory_reader/directory_reader.py +359 -0
  600. lfx/custom/directory_reader/utils.py +171 -0
  601. lfx/custom/eval.py +12 -0
  602. lfx/custom/schema.py +32 -0
  603. lfx/custom/tree_visitor.py +21 -0
  604. lfx/custom/utils.py +877 -0
  605. lfx/custom/validate.py +523 -0
  606. lfx/events/__init__.py +1 -0
  607. lfx/events/event_manager.py +110 -0
  608. lfx/exceptions/__init__.py +0 -0
  609. lfx/exceptions/component.py +15 -0
  610. lfx/field_typing/__init__.py +91 -0
  611. lfx/field_typing/constants.py +216 -0
  612. lfx/field_typing/range_spec.py +35 -0
  613. lfx/graph/__init__.py +6 -0
  614. lfx/graph/edge/__init__.py +0 -0
  615. lfx/graph/edge/base.py +300 -0
  616. lfx/graph/edge/schema.py +119 -0
  617. lfx/graph/edge/utils.py +0 -0
  618. lfx/graph/graph/__init__.py +0 -0
  619. lfx/graph/graph/ascii.py +202 -0
  620. lfx/graph/graph/base.py +2298 -0
  621. lfx/graph/graph/constants.py +63 -0
  622. lfx/graph/graph/runnable_vertices_manager.py +133 -0
  623. lfx/graph/graph/schema.py +53 -0
  624. lfx/graph/graph/state_model.py +66 -0
  625. lfx/graph/graph/utils.py +1024 -0
  626. lfx/graph/schema.py +75 -0
  627. lfx/graph/state/__init__.py +0 -0
  628. lfx/graph/state/model.py +250 -0
  629. lfx/graph/utils.py +206 -0
  630. lfx/graph/vertex/__init__.py +0 -0
  631. lfx/graph/vertex/base.py +826 -0
  632. lfx/graph/vertex/constants.py +0 -0
  633. lfx/graph/vertex/exceptions.py +4 -0
  634. lfx/graph/vertex/param_handler.py +316 -0
  635. lfx/graph/vertex/schema.py +26 -0
  636. lfx/graph/vertex/utils.py +19 -0
  637. lfx/graph/vertex/vertex_types.py +489 -0
  638. lfx/helpers/__init__.py +141 -0
  639. lfx/helpers/base_model.py +71 -0
  640. lfx/helpers/custom.py +13 -0
  641. lfx/helpers/data.py +167 -0
  642. lfx/helpers/flow.py +308 -0
  643. lfx/inputs/__init__.py +68 -0
  644. lfx/inputs/constants.py +2 -0
  645. lfx/inputs/input_mixin.py +352 -0
  646. lfx/inputs/inputs.py +718 -0
  647. lfx/inputs/validators.py +19 -0
  648. lfx/interface/__init__.py +6 -0
  649. lfx/interface/components.py +897 -0
  650. lfx/interface/importing/__init__.py +5 -0
  651. lfx/interface/importing/utils.py +39 -0
  652. lfx/interface/initialize/__init__.py +3 -0
  653. lfx/interface/initialize/loading.py +317 -0
  654. lfx/interface/listing.py +26 -0
  655. lfx/interface/run.py +16 -0
  656. lfx/interface/utils.py +111 -0
  657. lfx/io/__init__.py +63 -0
  658. lfx/io/schema.py +295 -0
  659. lfx/load/__init__.py +8 -0
  660. lfx/load/load.py +256 -0
  661. lfx/load/utils.py +99 -0
  662. lfx/log/__init__.py +5 -0
  663. lfx/log/logger.py +411 -0
  664. lfx/logging/__init__.py +11 -0
  665. lfx/logging/logger.py +24 -0
  666. lfx/memory/__init__.py +70 -0
  667. lfx/memory/stubs.py +302 -0
  668. lfx/processing/__init__.py +1 -0
  669. lfx/processing/process.py +238 -0
  670. lfx/processing/utils.py +25 -0
  671. lfx/py.typed +0 -0
  672. lfx/schema/__init__.py +66 -0
  673. lfx/schema/artifact.py +83 -0
  674. lfx/schema/content_block.py +62 -0
  675. lfx/schema/content_types.py +91 -0
  676. lfx/schema/cross_module.py +80 -0
  677. lfx/schema/data.py +309 -0
  678. lfx/schema/dataframe.py +210 -0
  679. lfx/schema/dotdict.py +74 -0
  680. lfx/schema/encoders.py +13 -0
  681. lfx/schema/graph.py +47 -0
  682. lfx/schema/image.py +184 -0
  683. lfx/schema/json_schema.py +186 -0
  684. lfx/schema/log.py +62 -0
  685. lfx/schema/message.py +493 -0
  686. lfx/schema/openai_responses_schemas.py +74 -0
  687. lfx/schema/properties.py +41 -0
  688. lfx/schema/schema.py +180 -0
  689. lfx/schema/serialize.py +13 -0
  690. lfx/schema/table.py +142 -0
  691. lfx/schema/validators.py +114 -0
  692. lfx/serialization/__init__.py +5 -0
  693. lfx/serialization/constants.py +2 -0
  694. lfx/serialization/serialization.py +314 -0
  695. lfx/services/__init__.py +26 -0
  696. lfx/services/base.py +28 -0
  697. lfx/services/cache/__init__.py +6 -0
  698. lfx/services/cache/base.py +183 -0
  699. lfx/services/cache/service.py +166 -0
  700. lfx/services/cache/utils.py +169 -0
  701. lfx/services/chat/__init__.py +1 -0
  702. lfx/services/chat/config.py +2 -0
  703. lfx/services/chat/schema.py +10 -0
  704. lfx/services/database/__init__.py +5 -0
  705. lfx/services/database/service.py +25 -0
  706. lfx/services/deps.py +194 -0
  707. lfx/services/factory.py +19 -0
  708. lfx/services/initialize.py +19 -0
  709. lfx/services/interfaces.py +103 -0
  710. lfx/services/manager.py +185 -0
  711. lfx/services/mcp_composer/__init__.py +6 -0
  712. lfx/services/mcp_composer/factory.py +16 -0
  713. lfx/services/mcp_composer/service.py +1441 -0
  714. lfx/services/schema.py +21 -0
  715. lfx/services/session.py +87 -0
  716. lfx/services/settings/__init__.py +3 -0
  717. lfx/services/settings/auth.py +133 -0
  718. lfx/services/settings/base.py +668 -0
  719. lfx/services/settings/constants.py +43 -0
  720. lfx/services/settings/factory.py +23 -0
  721. lfx/services/settings/feature_flags.py +11 -0
  722. lfx/services/settings/service.py +35 -0
  723. lfx/services/settings/utils.py +40 -0
  724. lfx/services/shared_component_cache/__init__.py +1 -0
  725. lfx/services/shared_component_cache/factory.py +30 -0
  726. lfx/services/shared_component_cache/service.py +9 -0
  727. lfx/services/storage/__init__.py +5 -0
  728. lfx/services/storage/local.py +185 -0
  729. lfx/services/storage/service.py +177 -0
  730. lfx/services/tracing/__init__.py +1 -0
  731. lfx/services/tracing/service.py +21 -0
  732. lfx/settings.py +6 -0
  733. lfx/template/__init__.py +6 -0
  734. lfx/template/field/__init__.py +0 -0
  735. lfx/template/field/base.py +260 -0
  736. lfx/template/field/prompt.py +15 -0
  737. lfx/template/frontend_node/__init__.py +6 -0
  738. lfx/template/frontend_node/base.py +214 -0
  739. lfx/template/frontend_node/constants.py +65 -0
  740. lfx/template/frontend_node/custom_components.py +79 -0
  741. lfx/template/template/__init__.py +0 -0
  742. lfx/template/template/base.py +100 -0
  743. lfx/template/utils.py +217 -0
  744. lfx/type_extraction/__init__.py +19 -0
  745. lfx/type_extraction/type_extraction.py +75 -0
  746. lfx/type_extraction.py +80 -0
  747. lfx/utils/__init__.py +1 -0
  748. lfx/utils/async_helpers.py +42 -0
  749. lfx/utils/component_utils.py +154 -0
  750. lfx/utils/concurrency.py +60 -0
  751. lfx/utils/connection_string_parser.py +11 -0
  752. lfx/utils/constants.py +233 -0
  753. lfx/utils/data_structure.py +212 -0
  754. lfx/utils/exceptions.py +22 -0
  755. lfx/utils/helpers.py +34 -0
  756. lfx/utils/image.py +79 -0
  757. lfx/utils/langflow_utils.py +52 -0
  758. lfx/utils/lazy_load.py +15 -0
  759. lfx/utils/request_utils.py +18 -0
  760. lfx/utils/schemas.py +139 -0
  761. lfx/utils/ssrf_protection.py +384 -0
  762. lfx/utils/util.py +626 -0
  763. lfx/utils/util_strings.py +56 -0
  764. lfx/utils/validate_cloud.py +26 -0
  765. lfx/utils/version.py +24 -0
  766. lfx_nightly-0.2.0.dev25.dist-info/METADATA +312 -0
  767. lfx_nightly-0.2.0.dev25.dist-info/RECORD +769 -0
  768. lfx_nightly-0.2.0.dev25.dist-info/WHEEL +4 -0
  769. lfx_nightly-0.2.0.dev25.dist-info/entry_points.txt +2 -0
lfx/inputs/inputs.py ADDED
@@ -0,0 +1,718 @@
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
+ AIMixin,
14
+ AuthMixin,
15
+ BaseInputMixin,
16
+ ConnectionMixin,
17
+ DatabaseLoadMixin,
18
+ DropDownMixin,
19
+ FieldTypes,
20
+ FileMixin,
21
+ InputTraceMixin,
22
+ LinkMixin,
23
+ ListableInputMixin,
24
+ MetadataTraceMixin,
25
+ MultilineMixin,
26
+ QueryMixin,
27
+ RangeMixin,
28
+ SerializableFieldTypes,
29
+ SliderMixin,
30
+ SortableListMixin,
31
+ TableMixin,
32
+ TabMixin,
33
+ ToolModeMixin,
34
+ )
35
+
36
+
37
+ class TableInput(BaseInputMixin, MetadataTraceMixin, TableMixin, ListableInputMixin, ToolModeMixin):
38
+ field_type: SerializableFieldTypes = FieldTypes.TABLE
39
+ is_list: bool = True
40
+
41
+ @field_validator("value")
42
+ @classmethod
43
+ def validate_value(cls, v: Any, _info):
44
+ # Convert single dict or Data instance into a list.
45
+ if isinstance(v, dict | Data):
46
+ v = [v]
47
+ # Automatically convert DataFrame into a list of dictionaries.
48
+ if isinstance(v, DataFrame):
49
+ v = v.to_dict(orient="records")
50
+ # Verify the value is now a list.
51
+ if not isinstance(v, list):
52
+ msg = (
53
+ "The table input must be a list of rows. You provided a "
54
+ f"{type(v).__name__}, which cannot be converted to table format. "
55
+ "Please provide your data as either:\n"
56
+ "- A list of dictionaries (each dict is a row)\n"
57
+ "- A pandas DataFrame\n"
58
+ "- A single dictionary (will become a one-row table)\n"
59
+ "- A Data object (Langflow's internal data structure)\n"
60
+ )
61
+ raise ValueError(msg) # noqa: TRY004
62
+ # Ensure each item in the list is either a dict or a Data instance.
63
+ for i, item in enumerate(v):
64
+ if not isinstance(item, dict | Data):
65
+ msg = (
66
+ f"Row {i + 1} in your table has an invalid format. Each row must be either:\n"
67
+ "- A dictionary containing column name/value pairs\n"
68
+ "- A Data object (Langflow's internal data structure for passing data between components)\n"
69
+ f"Instead, got a {type(item).__name__}. Please check the format of your input data."
70
+ )
71
+ raise ValueError(msg) # noqa: TRY004
72
+ return v
73
+
74
+
75
+ class HandleInput(BaseInputMixin, ListableInputMixin, MetadataTraceMixin):
76
+ """Represents an Input that has a Handle to a specific type (e.g. BaseLanguageModel, BaseRetriever, etc.).
77
+
78
+ This class inherits from the `BaseInputMixin` and `ListableInputMixin` classes.
79
+
80
+ Attributes:
81
+ input_types (list[str]): A list of input types.
82
+ field_type (SerializableFieldTypes): The field type of the input.
83
+ """
84
+
85
+ input_types: list[str] = Field(default_factory=list)
86
+ field_type: SerializableFieldTypes = FieldTypes.OTHER
87
+
88
+
89
+ class ToolsInput(BaseInputMixin, ListableInputMixin, MetadataTraceMixin, ToolModeMixin):
90
+ """Represents an Input that contains a list of tools to activate, deactivate, or edit.
91
+
92
+ Attributes:
93
+ field_type (SerializableFieldTypes): The field type of the input.
94
+ value (list[dict]): The value of the input.
95
+
96
+ """
97
+
98
+ field_type: SerializableFieldTypes = FieldTypes.TOOLS
99
+ value: list[dict] = Field(default_factory=list)
100
+ is_list: bool = True
101
+ real_time_refresh: bool = True
102
+
103
+
104
+ class DataInput(HandleInput, InputTraceMixin, ListableInputMixin, ToolModeMixin):
105
+ """Represents an Input that has a Handle that receives a Data object.
106
+
107
+ Attributes:
108
+ input_types (list[str]): A list of input types supported by this data input.
109
+ """
110
+
111
+ input_types: list[str] = ["Data"]
112
+
113
+
114
+ class DataFrameInput(HandleInput, InputTraceMixin, ListableInputMixin, ToolModeMixin):
115
+ input_types: list[str] = ["DataFrame"]
116
+
117
+
118
+ class PromptInput(BaseInputMixin, ListableInputMixin, InputTraceMixin, ToolModeMixin):
119
+ field_type: SerializableFieldTypes = FieldTypes.PROMPT
120
+
121
+
122
+ class CodeInput(BaseInputMixin, ListableInputMixin, InputTraceMixin, ToolModeMixin):
123
+ field_type: SerializableFieldTypes = FieldTypes.CODE
124
+
125
+
126
+ # Applying mixins to a specific input type
127
+ class StrInput(
128
+ BaseInputMixin,
129
+ ListableInputMixin,
130
+ DatabaseLoadMixin,
131
+ MetadataTraceMixin,
132
+ ToolModeMixin,
133
+ ):
134
+ field_type: SerializableFieldTypes = FieldTypes.TEXT
135
+ load_from_db: CoalesceBool = False
136
+ """Defines if the field will allow the user to open a text editor. Default is False."""
137
+
138
+ @staticmethod
139
+ def _validate_value(v: Any, info):
140
+ """Validates the given value and returns the processed value.
141
+
142
+ Args:
143
+ v (Any): The value to be validated.
144
+ info: Additional information about the input.
145
+
146
+ Returns:
147
+ The processed value.
148
+
149
+ Raises:
150
+ ValueError: If the value is not of a valid type or if the input is missing a required key.
151
+ """
152
+ if not isinstance(v, str) and v is not None:
153
+ # Keep the warning for now, but we should change it to an error
154
+ if info.data.get("input_types") and v.__class__.__name__ not in info.data.get("input_types"):
155
+ warnings.warn(
156
+ f"Invalid value type {type(v)} for input {info.data.get('name')}. "
157
+ f"Expected types: {info.data.get('input_types')}",
158
+ stacklevel=4,
159
+ )
160
+ else:
161
+ warnings.warn(
162
+ f"Invalid value type {type(v)} for input {info.data.get('name')}.",
163
+ stacklevel=4,
164
+ )
165
+ return v
166
+
167
+ @field_validator("value")
168
+ @classmethod
169
+ def validate_value(cls, v: Any, info):
170
+ """Validates the given value and returns the processed value.
171
+
172
+ Args:
173
+ v (Any): The value to be validated.
174
+ info: Additional information about the input.
175
+
176
+ Returns:
177
+ The processed value.
178
+
179
+ Raises:
180
+ ValueError: If the value is not of a valid type or if the input is missing a required key.
181
+ """
182
+ is_list = info.data["is_list"]
183
+ return [cls._validate_value(vv, info) for vv in v] if is_list else cls._validate_value(v, info)
184
+
185
+
186
+ class MessageInput(StrInput, InputTraceMixin):
187
+ input_types: list[str] = ["Message"]
188
+
189
+ @staticmethod
190
+ def _validate_value(v: Any, _info):
191
+ # If v is a instance of Message, then its fine
192
+ if isinstance(v, dict):
193
+ return Message(**v)
194
+ # Duck-typed Message check - works across module boundaries
195
+ if isinstance(v, Message):
196
+ # If it's from a different module (e.g., langflow.schema.Message),
197
+ # convert it to ensure we have the right type
198
+ if type(v).__module__ != Message.__module__:
199
+ return Message(**v.model_dump())
200
+ return v
201
+ if isinstance(v, str | AsyncIterator | Iterator):
202
+ return Message(text=v)
203
+ msg = f"Invalid value type {type(v)}"
204
+ raise ValueError(msg)
205
+
206
+
207
+ class MessageTextInput(StrInput, MetadataTraceMixin, InputTraceMixin, ToolModeMixin):
208
+ """Represents a text input component for the Langflow system.
209
+
210
+ This component is used to handle text inputs in the Langflow system.
211
+ It provides methods for validating and processing text values.
212
+
213
+ Attributes:
214
+ input_types (list[str]): A list of input types that this component supports.
215
+ In this case, it supports the "Message" input type.
216
+ """
217
+
218
+ input_types: list[str] = ["Message"]
219
+
220
+ @staticmethod
221
+ def _validate_value(v: Any, info):
222
+ """Validates the given value and returns the processed value.
223
+
224
+ Args:
225
+ v (Any): The value to be validated.
226
+ info: Additional information about the input.
227
+
228
+ Returns:
229
+ The processed value.
230
+
231
+ Raises:
232
+ ValueError: If the value is not of a valid type or if the input is missing a required key.
233
+ """
234
+ value: str | AsyncIterator | Iterator | None = None
235
+ if isinstance(v, dict):
236
+ v = Message(**v)
237
+ if isinstance(v, str):
238
+ value = v
239
+ elif isinstance(v, Message):
240
+ value = v.text
241
+ elif isinstance(v, Data):
242
+ if v.text_key in v.data:
243
+ value = v.data[v.text_key]
244
+ else:
245
+ keys = ", ".join(v.data.keys())
246
+ input_name = info.data["name"]
247
+ msg = (
248
+ f"The input to '{input_name}' must contain the key '{v.text_key}'."
249
+ f"You can set `text_key` to one of the following keys: {keys} "
250
+ "or set the value using another Component."
251
+ )
252
+ raise ValueError(msg)
253
+ elif isinstance(v, AsyncIterator | Iterator):
254
+ value = v
255
+ else:
256
+ msg = f"Invalid value type {type(v)}"
257
+ raise ValueError(msg) # noqa: TRY004
258
+ return value
259
+
260
+
261
+ class MultilineInput(MessageTextInput, AIMixin, MultilineMixin, InputTraceMixin, ToolModeMixin):
262
+ """Represents a multiline input field.
263
+
264
+ Attributes:
265
+ field_type (SerializableFieldTypes): The type of the field. Defaults to FieldTypes.TEXT.
266
+ multiline (CoalesceBool): Indicates whether the input field should support multiple lines. Defaults to True.
267
+ """
268
+
269
+ field_type: SerializableFieldTypes = FieldTypes.TEXT
270
+ multiline: CoalesceBool = True
271
+ copy_field: CoalesceBool = False
272
+
273
+
274
+ class MultilineSecretInput(MessageTextInput, MultilineMixin, InputTraceMixin):
275
+ """Represents a multiline input field.
276
+
277
+ Attributes:
278
+ field_type (SerializableFieldTypes): The type of the field. Defaults to FieldTypes.TEXT.
279
+ multiline (CoalesceBool): Indicates whether the input field should support multiple lines. Defaults to True.
280
+ """
281
+
282
+ field_type: SerializableFieldTypes = FieldTypes.PASSWORD
283
+ multiline: CoalesceBool = True
284
+ password: CoalesceBool = Field(default=True)
285
+ track_in_telemetry: CoalesceBool = False # Never track secret inputs
286
+
287
+
288
+ class SecretStrInput(BaseInputMixin, DatabaseLoadMixin):
289
+ """Represents a field with password field type.
290
+
291
+ This class inherits from `BaseInputMixin` and `DatabaseLoadMixin`.
292
+
293
+ Attributes:
294
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to `FieldTypes.PASSWORD`.
295
+ password (CoalesceBool): A boolean indicating whether the input is a password. Defaults to `True`.
296
+ input_types (list[str]): A list of input types associated with this input. Defaults to an empty list.
297
+ """
298
+
299
+ field_type: SerializableFieldTypes = FieldTypes.PASSWORD
300
+ password: CoalesceBool = Field(default=True)
301
+ input_types: list[str] = []
302
+ load_from_db: CoalesceBool = True
303
+ track_in_telemetry: CoalesceBool = False # Never track passwords
304
+
305
+ @field_validator("value")
306
+ @classmethod
307
+ def validate_value(cls, v: Any, info):
308
+ """Validates the given value and returns the processed value.
309
+
310
+ Args:
311
+ v (Any): The value to be validated.
312
+ info: Additional information about the input.
313
+
314
+ Returns:
315
+ The processed value.
316
+
317
+ Raises:
318
+ ValueError: If the value is not of a valid type or if the input is missing a required key.
319
+ """
320
+ value: str | AsyncIterator | Iterator | None = None
321
+ if isinstance(v, str):
322
+ value = v
323
+ elif isinstance(v, Message):
324
+ value = v.text
325
+ elif isinstance(v, Data):
326
+ if v.text_key in v.data:
327
+ value = v.data[v.text_key]
328
+ else:
329
+ keys = ", ".join(v.data.keys())
330
+ input_name = info.data["name"]
331
+ msg = (
332
+ f"The input to '{input_name}' must contain the key '{v.text_key}'."
333
+ f"You can set `text_key` to one of the following keys: {keys} "
334
+ "or set the value using another Component."
335
+ )
336
+ raise ValueError(msg)
337
+ elif isinstance(v, AsyncIterator | Iterator):
338
+ value = v
339
+ elif v is None:
340
+ value = None
341
+ else:
342
+ msg = f"Invalid value type `{type(v)}` for input `{info.data['name']}`"
343
+ raise ValueError(msg)
344
+ return value
345
+
346
+
347
+ class IntInput(BaseInputMixin, ListableInputMixin, RangeMixin, MetadataTraceMixin, ToolModeMixin):
348
+ """Represents an integer field.
349
+
350
+ This class represents an integer input and provides functionality for handling integer values.
351
+ It inherits from the `BaseInputMixin`, `ListableInputMixin`, and `RangeMixin` classes.
352
+
353
+ Attributes:
354
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.INTEGER.
355
+ """
356
+
357
+ field_type: SerializableFieldTypes = FieldTypes.INTEGER
358
+ track_in_telemetry: CoalesceBool = True # Safe numeric parameter
359
+
360
+ @field_validator("value")
361
+ @classmethod
362
+ def validate_value(cls, v: Any, info):
363
+ """Validates the given value and returns the processed value.
364
+
365
+ Args:
366
+ v (Any): The value to be validated.
367
+ info: Additional information about the input.
368
+
369
+ Returns:
370
+ The processed value.
371
+
372
+ Raises:
373
+ ValueError: If the value is not of a valid type or if the input is missing a required key.
374
+ """
375
+ if v and not isinstance(v, int | float):
376
+ msg = f"Invalid value type {type(v)} for input {info.data.get('name')}."
377
+ raise ValueError(msg)
378
+ if isinstance(v, float):
379
+ v = int(v)
380
+ return v
381
+
382
+
383
+ class FloatInput(BaseInputMixin, ListableInputMixin, RangeMixin, MetadataTraceMixin, ToolModeMixin):
384
+ """Represents a float field.
385
+
386
+ This class represents a float input and provides functionality for handling float values.
387
+ It inherits from the `BaseInputMixin`, `ListableInputMixin`, and `RangeMixin` classes.
388
+
389
+ Attributes:
390
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.FLOAT.
391
+ """
392
+
393
+ field_type: SerializableFieldTypes = FieldTypes.FLOAT
394
+ track_in_telemetry: CoalesceBool = True # Safe numeric parameter
395
+
396
+ @field_validator("value")
397
+ @classmethod
398
+ def validate_value(cls, v: Any, info):
399
+ """Validates the given value and returns the processed value.
400
+
401
+ Args:
402
+ v (Any): The value to be validated.
403
+ info: Additional information about the input.
404
+
405
+ Returns:
406
+ The processed value.
407
+
408
+ Raises:
409
+ ValueError: If the value is not of a valid type or if the input is missing a required key.
410
+ """
411
+ if v and not isinstance(v, int | float):
412
+ msg = f"Invalid value type {type(v)} for input {info.data.get('name')}."
413
+ raise ValueError(msg)
414
+ if isinstance(v, int):
415
+ v = float(v)
416
+ return v
417
+
418
+
419
+ class BoolInput(BaseInputMixin, ListableInputMixin, MetadataTraceMixin, ToolModeMixin):
420
+ """Represents a boolean field.
421
+
422
+ This class represents a boolean input and provides functionality for handling boolean values.
423
+ It inherits from the `BaseInputMixin` and `ListableInputMixin` classes.
424
+
425
+ Attributes:
426
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.BOOLEAN.
427
+ value (CoalesceBool): The value of the boolean input.
428
+ """
429
+
430
+ field_type: SerializableFieldTypes = FieldTypes.BOOLEAN
431
+ value: CoalesceBool = False
432
+ track_in_telemetry: CoalesceBool = True # Safe boolean flag
433
+
434
+
435
+ class NestedDictInput(
436
+ BaseInputMixin,
437
+ ListableInputMixin,
438
+ MetadataTraceMixin,
439
+ InputTraceMixin,
440
+ ToolModeMixin,
441
+ ):
442
+ """Represents a nested dictionary field.
443
+
444
+ This class represents a nested dictionary input and provides functionality for handling dictionary values.
445
+ It inherits from the `BaseInputMixin` and `ListableInputMixin` classes.
446
+
447
+ Attributes:
448
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.NESTED_DICT.
449
+ value (Optional[dict]): The value of the input. Defaults to an empty dictionary.
450
+ """
451
+
452
+ field_type: SerializableFieldTypes = FieldTypes.NESTED_DICT
453
+ value: dict | None = {}
454
+
455
+
456
+ class DictInput(BaseInputMixin, ListableInputMixin, InputTraceMixin, ToolModeMixin):
457
+ """Represents a dictionary field.
458
+
459
+ This class represents a dictionary input and provides functionality for handling dictionary values.
460
+ It inherits from the `BaseInputMixin` and `ListableInputMixin` classes.
461
+
462
+ Attributes:
463
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.DICT.
464
+ value (Optional[dict]): The value of the dictionary input. Defaults to an empty dictionary.
465
+ """
466
+
467
+ field_type: SerializableFieldTypes = FieldTypes.DICT
468
+ value: dict = Field(default_factory=dict)
469
+
470
+
471
+ class DropdownInput(BaseInputMixin, DropDownMixin, MetadataTraceMixin, ToolModeMixin):
472
+ """Represents a dropdown input field.
473
+
474
+ This class represents a dropdown input field and provides functionality for handling dropdown values.
475
+ It inherits from the `BaseInputMixin` and `DropDownMixin` classes.
476
+
477
+ Attributes:
478
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.TEXT.
479
+ options (Optional[Union[list[str], Callable]]): List of options for the field.
480
+ Default is None.
481
+ options_metadata (Optional[list[dict[str, str]]): List of dictionaries with metadata for each option.
482
+ Default is None.
483
+ combobox (CoalesceBool): Variable that defines if the user can insert custom values in the dropdown.
484
+ toggle (CoalesceBool): Variable that defines if a toggle button is shown.
485
+ toggle_value (CoalesceBool | None): Variable that defines the value of the toggle button. Defaults to None.
486
+ """
487
+
488
+ field_type: SerializableFieldTypes = FieldTypes.TEXT
489
+ options: list[str] = Field(default_factory=list)
490
+ options_metadata: list[dict[str, Any]] = Field(default_factory=list)
491
+ combobox: CoalesceBool = False
492
+ dialog_inputs: dict[str, Any] = Field(default_factory=dict)
493
+ external_options: dict[str, Any] = Field(default_factory=dict)
494
+ toggle: bool = False
495
+ toggle_disable: bool | None = None
496
+ toggle_value: bool | None = None
497
+ track_in_telemetry: CoalesceBool = True # Safe predefined choices
498
+
499
+
500
+ class ConnectionInput(BaseInputMixin, ConnectionMixin, MetadataTraceMixin, ToolModeMixin):
501
+ """Represents a connection input field.
502
+
503
+ This class represents a connection input field and provides functionality for handling connection values.
504
+ It inherits from the `BaseInputMixin` and `ConnectionMixin` classes.
505
+
506
+ """
507
+
508
+ field_type: SerializableFieldTypes = FieldTypes.CONNECTION
509
+ track_in_telemetry: CoalesceBool = False # Never track connection strings (may contain credentials)
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
+ track_in_telemetry: CoalesceBool = False # Never track auth credentials
525
+
526
+
527
+ class QueryInput(MessageTextInput, QueryMixin):
528
+ """Represents a query input field.
529
+
530
+ This class represents an query input field and provides functionality for handling search values.
531
+ It inherits from the `BaseInputMixin` and `QueryMixin` classes.
532
+
533
+ Attributes:
534
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.SEARCH.
535
+ separator (str | None): The separator for the query input. Defaults to None.
536
+ value (str): The value for the query input. Defaults to an empty string.
537
+ """
538
+
539
+ field_type: SerializableFieldTypes = FieldTypes.QUERY
540
+ separator: str | None = Field(default=None)
541
+
542
+
543
+ class SortableListInput(BaseInputMixin, SortableListMixin, MetadataTraceMixin, ToolModeMixin):
544
+ """Represents a list selection input field.
545
+
546
+ This class represents a list selection input field and provides functionality for handling list selection values.
547
+ It inherits from the `BaseInputMixin` and `ListableInputMixin` classes.
548
+
549
+ Attributes:
550
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.SORTABLE_LIST.
551
+ """
552
+
553
+ field_type: SerializableFieldTypes = FieldTypes.SORTABLE_LIST
554
+
555
+
556
+ class TabInput(BaseInputMixin, TabMixin, MetadataTraceMixin, ToolModeMixin):
557
+ """Represents a tab input field.
558
+
559
+ This class represents a tab input field that allows a maximum of 3 values, each with a maximum of 20 characters.
560
+ It inherits from the `BaseInputMixin` and `TabMixin` classes.
561
+
562
+ Attributes:
563
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.TAB.
564
+ options (list[str]): List of tab options. Maximum of 3 values allowed, each with a maximum of 20 characters.
565
+ active_tab (int): Index of the currently active tab. Defaults to 0.
566
+ """
567
+
568
+ field_type: SerializableFieldTypes = FieldTypes.TAB
569
+ options: list[str] = Field(default_factory=list)
570
+ track_in_telemetry: CoalesceBool = True # Safe UI tab selection
571
+
572
+ @model_validator(mode="after")
573
+ @classmethod
574
+ def validate_value(cls, values):
575
+ """Validates the value to ensure it's one of the tab values."""
576
+ options = values.options # Agora temos certeza de que options está disponível
577
+ value = values.value
578
+
579
+ if not isinstance(value, str):
580
+ msg = f"TabInput value must be a string. Got {type(value).__name__}."
581
+ raise TypeError(msg)
582
+
583
+ if value not in options and value != "":
584
+ msg = f"TabInput value must be one of the following: {options}. Got: '{value}'"
585
+ raise ValueError(msg)
586
+
587
+ return values
588
+
589
+
590
+ class MultiselectInput(BaseInputMixin, ListableInputMixin, DropDownMixin, MetadataTraceMixin, ToolModeMixin):
591
+ """Represents a multiselect input field.
592
+
593
+ This class represents a multiselect input field and provides functionality for handling multiselect values.
594
+ It inherits from the `BaseInputMixin`, `ListableInputMixin` and `DropDownMixin` classes.
595
+
596
+ Attributes:
597
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.TEXT.
598
+ options (Optional[Union[list[str], Callable]]): List of options for the field. Only used when is_list=True.
599
+ Default is None.
600
+ """
601
+
602
+ field_type: SerializableFieldTypes = FieldTypes.TEXT
603
+ options: list[str] = Field(default_factory=list)
604
+ is_list: bool = Field(default=True, serialization_alias="list")
605
+ combobox: CoalesceBool = False
606
+
607
+ @field_validator("value")
608
+ @classmethod
609
+ def validate_value(cls, v: Any, _info):
610
+ # Check if value is a list of dicts
611
+ if not isinstance(v, list):
612
+ msg = f"MultiselectInput value must be a list. Value: '{v}'"
613
+ raise ValueError(msg) # noqa: TRY004
614
+ for item in v:
615
+ if not isinstance(item, str):
616
+ msg = f"MultiselectInput value must be a list of strings. Item: '{item}' is not a string"
617
+ raise ValueError(msg) # noqa: TRY004
618
+ return v
619
+
620
+
621
+ class FileInput(BaseInputMixin, ListableInputMixin, FileMixin, MetadataTraceMixin, ToolModeMixin):
622
+ """Represents a file field.
623
+
624
+ This class represents a file input and provides functionality for handling file values.
625
+ It inherits from the `BaseInputMixin`, `ListableInputMixin`, and `FileMixin` classes.
626
+
627
+ Attributes:
628
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.FILE.
629
+ """
630
+
631
+ field_type: SerializableFieldTypes = FieldTypes.FILE
632
+ track_in_telemetry: CoalesceBool = False # Never track file paths (may contain PII)
633
+
634
+
635
+ class McpInput(BaseInputMixin, MetadataTraceMixin):
636
+ """Represents a mcp input field.
637
+
638
+ This class represents a mcp input and provides functionality for handling mcp values.
639
+ It inherits from the `BaseInputMixin` and `MetadataTraceMixin` classes.
640
+
641
+ Attributes:
642
+ field_type (SerializableFieldTypes): The field type of the input. Defaults to FieldTypes.MCP.
643
+ """
644
+
645
+ field_type: SerializableFieldTypes = FieldTypes.MCP
646
+ value: dict[str, Any] = Field(default_factory=dict)
647
+ track_in_telemetry: CoalesceBool = False # Never track MCP config (may contain sensitive data)
648
+
649
+
650
+ class LinkInput(BaseInputMixin, LinkMixin):
651
+ field_type: SerializableFieldTypes = FieldTypes.LINK
652
+
653
+
654
+ class SliderInput(BaseInputMixin, RangeMixin, SliderMixin, ToolModeMixin):
655
+ field_type: SerializableFieldTypes = FieldTypes.SLIDER
656
+
657
+
658
+ DEFAULT_PROMPT_INTUT_TYPES = ["Message"]
659
+
660
+ from lfx.template.field.base import Input # noqa: E402
661
+
662
+
663
+ class DefaultPromptField(Input):
664
+ name: str
665
+ display_name: str | None = None
666
+ field_type: str = "str"
667
+ advanced: bool = False
668
+ multiline: bool = True
669
+ input_types: list[str] = DEFAULT_PROMPT_INTUT_TYPES
670
+ value: Any = "" # Set the value to empty string
671
+
672
+
673
+ InputTypes: TypeAlias = (
674
+ Input
675
+ | AuthInput
676
+ | QueryInput
677
+ | DefaultPromptField
678
+ | BoolInput
679
+ | DataInput
680
+ | DictInput
681
+ | DropdownInput
682
+ | MultiselectInput
683
+ | SortableListInput
684
+ | ConnectionInput
685
+ | FileInput
686
+ | FloatInput
687
+ | HandleInput
688
+ | IntInput
689
+ | McpInput
690
+ | MultilineInput
691
+ | MultilineSecretInput
692
+ | NestedDictInput
693
+ | ToolsInput
694
+ | PromptInput
695
+ | CodeInput
696
+ | SecretStrInput
697
+ | StrInput
698
+ | MessageTextInput
699
+ | MessageInput
700
+ | TableInput
701
+ | LinkInput
702
+ | SliderInput
703
+ | DataFrameInput
704
+ | TabInput
705
+ )
706
+
707
+ InputTypesMap: dict[str, type[InputTypes]] = {t.__name__: t for t in get_args(InputTypes)}
708
+
709
+
710
+ def instantiate_input(input_type: str, data: dict) -> InputTypes:
711
+ input_type_class = InputTypesMap.get(input_type)
712
+ if "type" in data:
713
+ # Replace with field_type
714
+ data["field_type"] = data.pop("type")
715
+ if input_type_class:
716
+ return input_type_class(**data)
717
+ msg = f"Invalid input type: {input_type}"
718
+ raise ValueError(msg)