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

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

Potentially problematic release.


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

Files changed (769) hide show
  1. lfx/__init__.py +0 -0
  2. lfx/__main__.py +25 -0
  3. lfx/_assets/component_index.json +1 -0
  4. lfx/base/__init__.py +0 -0
  5. lfx/base/agents/__init__.py +0 -0
  6. lfx/base/agents/agent.py +375 -0
  7. lfx/base/agents/altk_base_agent.py +380 -0
  8. lfx/base/agents/altk_tool_wrappers.py +565 -0
  9. lfx/base/agents/callback.py +130 -0
  10. lfx/base/agents/context.py +109 -0
  11. lfx/base/agents/crewai/__init__.py +0 -0
  12. lfx/base/agents/crewai/crew.py +231 -0
  13. lfx/base/agents/crewai/tasks.py +12 -0
  14. lfx/base/agents/default_prompts.py +23 -0
  15. lfx/base/agents/errors.py +15 -0
  16. lfx/base/agents/events.py +430 -0
  17. lfx/base/agents/utils.py +237 -0
  18. lfx/base/astra_assistants/__init__.py +0 -0
  19. lfx/base/astra_assistants/util.py +171 -0
  20. lfx/base/chains/__init__.py +0 -0
  21. lfx/base/chains/model.py +19 -0
  22. lfx/base/composio/__init__.py +0 -0
  23. lfx/base/composio/composio_base.py +2584 -0
  24. lfx/base/compressors/__init__.py +0 -0
  25. lfx/base/compressors/model.py +60 -0
  26. lfx/base/constants.py +46 -0
  27. lfx/base/curl/__init__.py +0 -0
  28. lfx/base/curl/parse.py +188 -0
  29. lfx/base/data/__init__.py +5 -0
  30. lfx/base/data/base_file.py +810 -0
  31. lfx/base/data/docling_utils.py +338 -0
  32. lfx/base/data/storage_utils.py +192 -0
  33. lfx/base/data/utils.py +362 -0
  34. lfx/base/datastax/__init__.py +5 -0
  35. lfx/base/datastax/astradb_base.py +896 -0
  36. lfx/base/document_transformers/__init__.py +0 -0
  37. lfx/base/document_transformers/model.py +43 -0
  38. lfx/base/embeddings/__init__.py +0 -0
  39. lfx/base/embeddings/aiml_embeddings.py +62 -0
  40. lfx/base/embeddings/embeddings_class.py +113 -0
  41. lfx/base/embeddings/model.py +26 -0
  42. lfx/base/flow_processing/__init__.py +0 -0
  43. lfx/base/flow_processing/utils.py +86 -0
  44. lfx/base/huggingface/__init__.py +0 -0
  45. lfx/base/huggingface/model_bridge.py +133 -0
  46. lfx/base/io/__init__.py +0 -0
  47. lfx/base/io/chat.py +21 -0
  48. lfx/base/io/text.py +22 -0
  49. lfx/base/knowledge_bases/__init__.py +3 -0
  50. lfx/base/knowledge_bases/knowledge_base_utils.py +137 -0
  51. lfx/base/langchain_utilities/__init__.py +0 -0
  52. lfx/base/langchain_utilities/model.py +35 -0
  53. lfx/base/langchain_utilities/spider_constants.py +1 -0
  54. lfx/base/langwatch/__init__.py +0 -0
  55. lfx/base/langwatch/utils.py +18 -0
  56. lfx/base/mcp/__init__.py +0 -0
  57. lfx/base/mcp/constants.py +2 -0
  58. lfx/base/mcp/util.py +1659 -0
  59. lfx/base/memory/__init__.py +0 -0
  60. lfx/base/memory/memory.py +49 -0
  61. lfx/base/memory/model.py +38 -0
  62. lfx/base/models/__init__.py +3 -0
  63. lfx/base/models/aiml_constants.py +51 -0
  64. lfx/base/models/anthropic_constants.py +51 -0
  65. lfx/base/models/aws_constants.py +151 -0
  66. lfx/base/models/chat_result.py +76 -0
  67. lfx/base/models/cometapi_constants.py +54 -0
  68. lfx/base/models/google_generative_ai_constants.py +70 -0
  69. lfx/base/models/google_generative_ai_model.py +38 -0
  70. lfx/base/models/groq_constants.py +150 -0
  71. lfx/base/models/groq_model_discovery.py +265 -0
  72. lfx/base/models/model.py +375 -0
  73. lfx/base/models/model_input_constants.py +378 -0
  74. lfx/base/models/model_metadata.py +41 -0
  75. lfx/base/models/model_utils.py +108 -0
  76. lfx/base/models/novita_constants.py +35 -0
  77. lfx/base/models/ollama_constants.py +52 -0
  78. lfx/base/models/openai_constants.py +129 -0
  79. lfx/base/models/sambanova_constants.py +18 -0
  80. lfx/base/models/watsonx_constants.py +36 -0
  81. lfx/base/processing/__init__.py +0 -0
  82. lfx/base/prompts/__init__.py +0 -0
  83. lfx/base/prompts/api_utils.py +224 -0
  84. lfx/base/prompts/utils.py +61 -0
  85. lfx/base/textsplitters/__init__.py +0 -0
  86. lfx/base/textsplitters/model.py +28 -0
  87. lfx/base/tools/__init__.py +0 -0
  88. lfx/base/tools/base.py +26 -0
  89. lfx/base/tools/component_tool.py +325 -0
  90. lfx/base/tools/constants.py +49 -0
  91. lfx/base/tools/flow_tool.py +132 -0
  92. lfx/base/tools/run_flow.py +698 -0
  93. lfx/base/vectorstores/__init__.py +0 -0
  94. lfx/base/vectorstores/model.py +193 -0
  95. lfx/base/vectorstores/utils.py +22 -0
  96. lfx/base/vectorstores/vector_store_connection_decorator.py +52 -0
  97. lfx/cli/__init__.py +5 -0
  98. lfx/cli/commands.py +327 -0
  99. lfx/cli/common.py +650 -0
  100. lfx/cli/run.py +506 -0
  101. lfx/cli/script_loader.py +289 -0
  102. lfx/cli/serve_app.py +546 -0
  103. lfx/cli/validation.py +69 -0
  104. lfx/components/FAISS/__init__.py +34 -0
  105. lfx/components/FAISS/faiss.py +111 -0
  106. lfx/components/Notion/__init__.py +19 -0
  107. lfx/components/Notion/add_content_to_page.py +269 -0
  108. lfx/components/Notion/create_page.py +94 -0
  109. lfx/components/Notion/list_database_properties.py +68 -0
  110. lfx/components/Notion/list_pages.py +122 -0
  111. lfx/components/Notion/list_users.py +77 -0
  112. lfx/components/Notion/page_content_viewer.py +93 -0
  113. lfx/components/Notion/search.py +111 -0
  114. lfx/components/Notion/update_page_property.py +114 -0
  115. lfx/components/__init__.py +428 -0
  116. lfx/components/_importing.py +42 -0
  117. lfx/components/agentql/__init__.py +3 -0
  118. lfx/components/agentql/agentql_api.py +151 -0
  119. lfx/components/aiml/__init__.py +37 -0
  120. lfx/components/aiml/aiml.py +115 -0
  121. lfx/components/aiml/aiml_embeddings.py +37 -0
  122. lfx/components/altk/__init__.py +34 -0
  123. lfx/components/altk/altk_agent.py +193 -0
  124. lfx/components/amazon/__init__.py +36 -0
  125. lfx/components/amazon/amazon_bedrock_converse.py +195 -0
  126. lfx/components/amazon/amazon_bedrock_embedding.py +109 -0
  127. lfx/components/amazon/amazon_bedrock_model.py +130 -0
  128. lfx/components/amazon/s3_bucket_uploader.py +211 -0
  129. lfx/components/anthropic/__init__.py +34 -0
  130. lfx/components/anthropic/anthropic.py +187 -0
  131. lfx/components/apify/__init__.py +5 -0
  132. lfx/components/apify/apify_actor.py +325 -0
  133. lfx/components/arxiv/__init__.py +3 -0
  134. lfx/components/arxiv/arxiv.py +169 -0
  135. lfx/components/assemblyai/__init__.py +46 -0
  136. lfx/components/assemblyai/assemblyai_get_subtitles.py +83 -0
  137. lfx/components/assemblyai/assemblyai_lemur.py +183 -0
  138. lfx/components/assemblyai/assemblyai_list_transcripts.py +95 -0
  139. lfx/components/assemblyai/assemblyai_poll_transcript.py +72 -0
  140. lfx/components/assemblyai/assemblyai_start_transcript.py +188 -0
  141. lfx/components/azure/__init__.py +37 -0
  142. lfx/components/azure/azure_openai.py +95 -0
  143. lfx/components/azure/azure_openai_embeddings.py +83 -0
  144. lfx/components/baidu/__init__.py +32 -0
  145. lfx/components/baidu/baidu_qianfan_chat.py +113 -0
  146. lfx/components/bing/__init__.py +3 -0
  147. lfx/components/bing/bing_search_api.py +61 -0
  148. lfx/components/cassandra/__init__.py +40 -0
  149. lfx/components/cassandra/cassandra.py +264 -0
  150. lfx/components/cassandra/cassandra_chat.py +92 -0
  151. lfx/components/cassandra/cassandra_graph.py +238 -0
  152. lfx/components/chains/__init__.py +3 -0
  153. lfx/components/chroma/__init__.py +34 -0
  154. lfx/components/chroma/chroma.py +169 -0
  155. lfx/components/cleanlab/__init__.py +40 -0
  156. lfx/components/cleanlab/cleanlab_evaluator.py +155 -0
  157. lfx/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
  158. lfx/components/cleanlab/cleanlab_remediator.py +131 -0
  159. lfx/components/clickhouse/__init__.py +34 -0
  160. lfx/components/clickhouse/clickhouse.py +135 -0
  161. lfx/components/cloudflare/__init__.py +32 -0
  162. lfx/components/cloudflare/cloudflare.py +81 -0
  163. lfx/components/cohere/__init__.py +40 -0
  164. lfx/components/cohere/cohere_embeddings.py +81 -0
  165. lfx/components/cohere/cohere_models.py +46 -0
  166. lfx/components/cohere/cohere_rerank.py +51 -0
  167. lfx/components/cometapi/__init__.py +32 -0
  168. lfx/components/cometapi/cometapi.py +166 -0
  169. lfx/components/composio/__init__.py +222 -0
  170. lfx/components/composio/agentql_composio.py +11 -0
  171. lfx/components/composio/agiled_composio.py +11 -0
  172. lfx/components/composio/airtable_composio.py +11 -0
  173. lfx/components/composio/apollo_composio.py +11 -0
  174. lfx/components/composio/asana_composio.py +11 -0
  175. lfx/components/composio/attio_composio.py +11 -0
  176. lfx/components/composio/bitbucket_composio.py +11 -0
  177. lfx/components/composio/bolna_composio.py +11 -0
  178. lfx/components/composio/brightdata_composio.py +11 -0
  179. lfx/components/composio/calendly_composio.py +11 -0
  180. lfx/components/composio/canva_composio.py +11 -0
  181. lfx/components/composio/canvas_composio.py +11 -0
  182. lfx/components/composio/coda_composio.py +11 -0
  183. lfx/components/composio/composio_api.py +278 -0
  184. lfx/components/composio/contentful_composio.py +11 -0
  185. lfx/components/composio/digicert_composio.py +11 -0
  186. lfx/components/composio/discord_composio.py +11 -0
  187. lfx/components/composio/dropbox_compnent.py +11 -0
  188. lfx/components/composio/elevenlabs_composio.py +11 -0
  189. lfx/components/composio/exa_composio.py +11 -0
  190. lfx/components/composio/figma_composio.py +11 -0
  191. lfx/components/composio/finage_composio.py +11 -0
  192. lfx/components/composio/firecrawl_composio.py +11 -0
  193. lfx/components/composio/fireflies_composio.py +11 -0
  194. lfx/components/composio/fixer_composio.py +11 -0
  195. lfx/components/composio/flexisign_composio.py +11 -0
  196. lfx/components/composio/freshdesk_composio.py +11 -0
  197. lfx/components/composio/github_composio.py +11 -0
  198. lfx/components/composio/gmail_composio.py +38 -0
  199. lfx/components/composio/googlebigquery_composio.py +11 -0
  200. lfx/components/composio/googlecalendar_composio.py +11 -0
  201. lfx/components/composio/googleclassroom_composio.py +11 -0
  202. lfx/components/composio/googledocs_composio.py +11 -0
  203. lfx/components/composio/googlemeet_composio.py +11 -0
  204. lfx/components/composio/googlesheets_composio.py +11 -0
  205. lfx/components/composio/googletasks_composio.py +8 -0
  206. lfx/components/composio/heygen_composio.py +11 -0
  207. lfx/components/composio/instagram_composio.py +11 -0
  208. lfx/components/composio/jira_composio.py +11 -0
  209. lfx/components/composio/jotform_composio.py +11 -0
  210. lfx/components/composio/klaviyo_composio.py +11 -0
  211. lfx/components/composio/linear_composio.py +11 -0
  212. lfx/components/composio/listennotes_composio.py +11 -0
  213. lfx/components/composio/mem0_composio.py +11 -0
  214. lfx/components/composio/miro_composio.py +11 -0
  215. lfx/components/composio/missive_composio.py +11 -0
  216. lfx/components/composio/notion_composio.py +11 -0
  217. lfx/components/composio/onedrive_composio.py +11 -0
  218. lfx/components/composio/outlook_composio.py +11 -0
  219. lfx/components/composio/pandadoc_composio.py +11 -0
  220. lfx/components/composio/peopledatalabs_composio.py +11 -0
  221. lfx/components/composio/perplexityai_composio.py +11 -0
  222. lfx/components/composio/reddit_composio.py +11 -0
  223. lfx/components/composio/serpapi_composio.py +11 -0
  224. lfx/components/composio/slack_composio.py +11 -0
  225. lfx/components/composio/slackbot_composio.py +11 -0
  226. lfx/components/composio/snowflake_composio.py +11 -0
  227. lfx/components/composio/supabase_composio.py +11 -0
  228. lfx/components/composio/tavily_composio.py +11 -0
  229. lfx/components/composio/timelinesai_composio.py +11 -0
  230. lfx/components/composio/todoist_composio.py +11 -0
  231. lfx/components/composio/wrike_composio.py +11 -0
  232. lfx/components/composio/youtube_composio.py +11 -0
  233. lfx/components/confluence/__init__.py +3 -0
  234. lfx/components/confluence/confluence.py +84 -0
  235. lfx/components/couchbase/__init__.py +34 -0
  236. lfx/components/couchbase/couchbase.py +102 -0
  237. lfx/components/crewai/__init__.py +49 -0
  238. lfx/components/crewai/crewai.py +108 -0
  239. lfx/components/crewai/hierarchical_crew.py +47 -0
  240. lfx/components/crewai/hierarchical_task.py +45 -0
  241. lfx/components/crewai/sequential_crew.py +53 -0
  242. lfx/components/crewai/sequential_task.py +74 -0
  243. lfx/components/crewai/sequential_task_agent.py +144 -0
  244. lfx/components/cuga/__init__.py +34 -0
  245. lfx/components/cuga/cuga_agent.py +730 -0
  246. lfx/components/custom_component/__init__.py +34 -0
  247. lfx/components/custom_component/custom_component.py +31 -0
  248. lfx/components/data/__init__.py +114 -0
  249. lfx/components/data_source/__init__.py +58 -0
  250. lfx/components/data_source/api_request.py +577 -0
  251. lfx/components/data_source/csv_to_data.py +101 -0
  252. lfx/components/data_source/json_to_data.py +106 -0
  253. lfx/components/data_source/mock_data.py +398 -0
  254. lfx/components/data_source/news_search.py +166 -0
  255. lfx/components/data_source/rss.py +71 -0
  256. lfx/components/data_source/sql_executor.py +101 -0
  257. lfx/components/data_source/url.py +311 -0
  258. lfx/components/data_source/web_search.py +326 -0
  259. lfx/components/datastax/__init__.py +76 -0
  260. lfx/components/datastax/astradb_assistant_manager.py +307 -0
  261. lfx/components/datastax/astradb_chatmemory.py +40 -0
  262. lfx/components/datastax/astradb_cql.py +288 -0
  263. lfx/components/datastax/astradb_graph.py +217 -0
  264. lfx/components/datastax/astradb_tool.py +378 -0
  265. lfx/components/datastax/astradb_vectorize.py +122 -0
  266. lfx/components/datastax/astradb_vectorstore.py +449 -0
  267. lfx/components/datastax/create_assistant.py +59 -0
  268. lfx/components/datastax/create_thread.py +33 -0
  269. lfx/components/datastax/dotenv.py +36 -0
  270. lfx/components/datastax/get_assistant.py +38 -0
  271. lfx/components/datastax/getenvvar.py +31 -0
  272. lfx/components/datastax/graph_rag.py +141 -0
  273. lfx/components/datastax/hcd.py +315 -0
  274. lfx/components/datastax/list_assistants.py +26 -0
  275. lfx/components/datastax/run.py +90 -0
  276. lfx/components/deactivated/__init__.py +15 -0
  277. lfx/components/deactivated/amazon_kendra.py +66 -0
  278. lfx/components/deactivated/chat_litellm_model.py +158 -0
  279. lfx/components/deactivated/code_block_extractor.py +26 -0
  280. lfx/components/deactivated/documents_to_data.py +22 -0
  281. lfx/components/deactivated/embed.py +16 -0
  282. lfx/components/deactivated/extract_key_from_data.py +46 -0
  283. lfx/components/deactivated/json_document_builder.py +57 -0
  284. lfx/components/deactivated/list_flows.py +20 -0
  285. lfx/components/deactivated/mcp_sse.py +61 -0
  286. lfx/components/deactivated/mcp_stdio.py +62 -0
  287. lfx/components/deactivated/merge_data.py +93 -0
  288. lfx/components/deactivated/message.py +37 -0
  289. lfx/components/deactivated/metal.py +54 -0
  290. lfx/components/deactivated/multi_query.py +59 -0
  291. lfx/components/deactivated/retriever.py +43 -0
  292. lfx/components/deactivated/selective_passthrough.py +77 -0
  293. lfx/components/deactivated/should_run_next.py +40 -0
  294. lfx/components/deactivated/split_text.py +63 -0
  295. lfx/components/deactivated/store_message.py +24 -0
  296. lfx/components/deactivated/sub_flow.py +124 -0
  297. lfx/components/deactivated/vectara_self_query.py +76 -0
  298. lfx/components/deactivated/vector_store.py +24 -0
  299. lfx/components/deepseek/__init__.py +34 -0
  300. lfx/components/deepseek/deepseek.py +136 -0
  301. lfx/components/docling/__init__.py +43 -0
  302. lfx/components/docling/chunk_docling_document.py +186 -0
  303. lfx/components/docling/docling_inline.py +238 -0
  304. lfx/components/docling/docling_remote.py +195 -0
  305. lfx/components/docling/export_docling_document.py +117 -0
  306. lfx/components/documentloaders/__init__.py +3 -0
  307. lfx/components/duckduckgo/__init__.py +3 -0
  308. lfx/components/duckduckgo/duck_duck_go_search_run.py +92 -0
  309. lfx/components/elastic/__init__.py +37 -0
  310. lfx/components/elastic/elasticsearch.py +267 -0
  311. lfx/components/elastic/opensearch.py +789 -0
  312. lfx/components/elastic/opensearch_multimodal.py +1575 -0
  313. lfx/components/embeddings/__init__.py +37 -0
  314. lfx/components/embeddings/similarity.py +77 -0
  315. lfx/components/embeddings/text_embedder.py +65 -0
  316. lfx/components/exa/__init__.py +3 -0
  317. lfx/components/exa/exa_search.py +68 -0
  318. lfx/components/files_and_knowledge/__init__.py +47 -0
  319. lfx/components/files_and_knowledge/directory.py +113 -0
  320. lfx/components/files_and_knowledge/file.py +841 -0
  321. lfx/components/files_and_knowledge/ingestion.py +694 -0
  322. lfx/components/files_and_knowledge/retrieval.py +264 -0
  323. lfx/components/files_and_knowledge/save_file.py +746 -0
  324. lfx/components/firecrawl/__init__.py +43 -0
  325. lfx/components/firecrawl/firecrawl_crawl_api.py +88 -0
  326. lfx/components/firecrawl/firecrawl_extract_api.py +136 -0
  327. lfx/components/firecrawl/firecrawl_map_api.py +89 -0
  328. lfx/components/firecrawl/firecrawl_scrape_api.py +73 -0
  329. lfx/components/flow_controls/__init__.py +58 -0
  330. lfx/components/flow_controls/conditional_router.py +208 -0
  331. lfx/components/flow_controls/data_conditional_router.py +126 -0
  332. lfx/components/flow_controls/flow_tool.py +111 -0
  333. lfx/components/flow_controls/listen.py +29 -0
  334. lfx/components/flow_controls/loop.py +163 -0
  335. lfx/components/flow_controls/notify.py +88 -0
  336. lfx/components/flow_controls/pass_message.py +36 -0
  337. lfx/components/flow_controls/run_flow.py +108 -0
  338. lfx/components/flow_controls/sub_flow.py +115 -0
  339. lfx/components/git/__init__.py +4 -0
  340. lfx/components/git/git.py +262 -0
  341. lfx/components/git/gitextractor.py +196 -0
  342. lfx/components/glean/__init__.py +3 -0
  343. lfx/components/glean/glean_search_api.py +173 -0
  344. lfx/components/google/__init__.py +17 -0
  345. lfx/components/google/gmail.py +193 -0
  346. lfx/components/google/google_bq_sql_executor.py +157 -0
  347. lfx/components/google/google_drive.py +92 -0
  348. lfx/components/google/google_drive_search.py +152 -0
  349. lfx/components/google/google_generative_ai.py +144 -0
  350. lfx/components/google/google_generative_ai_embeddings.py +141 -0
  351. lfx/components/google/google_oauth_token.py +89 -0
  352. lfx/components/google/google_search_api_core.py +68 -0
  353. lfx/components/google/google_serper_api_core.py +74 -0
  354. lfx/components/groq/__init__.py +34 -0
  355. lfx/components/groq/groq.py +143 -0
  356. lfx/components/helpers/__init__.py +154 -0
  357. lfx/components/homeassistant/__init__.py +7 -0
  358. lfx/components/homeassistant/home_assistant_control.py +152 -0
  359. lfx/components/homeassistant/list_home_assistant_states.py +137 -0
  360. lfx/components/huggingface/__init__.py +37 -0
  361. lfx/components/huggingface/huggingface.py +199 -0
  362. lfx/components/huggingface/huggingface_inference_api.py +106 -0
  363. lfx/components/ibm/__init__.py +34 -0
  364. lfx/components/ibm/watsonx.py +207 -0
  365. lfx/components/ibm/watsonx_embeddings.py +135 -0
  366. lfx/components/icosacomputing/__init__.py +5 -0
  367. lfx/components/icosacomputing/combinatorial_reasoner.py +84 -0
  368. lfx/components/input_output/__init__.py +40 -0
  369. lfx/components/input_output/chat.py +109 -0
  370. lfx/components/input_output/chat_output.py +184 -0
  371. lfx/components/input_output/text.py +27 -0
  372. lfx/components/input_output/text_output.py +29 -0
  373. lfx/components/input_output/webhook.py +56 -0
  374. lfx/components/jigsawstack/__init__.py +23 -0
  375. lfx/components/jigsawstack/ai_scrape.py +126 -0
  376. lfx/components/jigsawstack/ai_web_search.py +136 -0
  377. lfx/components/jigsawstack/file_read.py +115 -0
  378. lfx/components/jigsawstack/file_upload.py +94 -0
  379. lfx/components/jigsawstack/image_generation.py +205 -0
  380. lfx/components/jigsawstack/nsfw.py +60 -0
  381. lfx/components/jigsawstack/object_detection.py +124 -0
  382. lfx/components/jigsawstack/sentiment.py +112 -0
  383. lfx/components/jigsawstack/text_to_sql.py +90 -0
  384. lfx/components/jigsawstack/text_translate.py +77 -0
  385. lfx/components/jigsawstack/vocr.py +107 -0
  386. lfx/components/knowledge_bases/__init__.py +89 -0
  387. lfx/components/langchain_utilities/__init__.py +109 -0
  388. lfx/components/langchain_utilities/character.py +53 -0
  389. lfx/components/langchain_utilities/conversation.py +59 -0
  390. lfx/components/langchain_utilities/csv_agent.py +175 -0
  391. lfx/components/langchain_utilities/fake_embeddings.py +26 -0
  392. lfx/components/langchain_utilities/html_link_extractor.py +35 -0
  393. lfx/components/langchain_utilities/json_agent.py +100 -0
  394. lfx/components/langchain_utilities/langchain_hub.py +126 -0
  395. lfx/components/langchain_utilities/language_recursive.py +49 -0
  396. lfx/components/langchain_utilities/language_semantic.py +138 -0
  397. lfx/components/langchain_utilities/llm_checker.py +39 -0
  398. lfx/components/langchain_utilities/llm_math.py +42 -0
  399. lfx/components/langchain_utilities/natural_language.py +61 -0
  400. lfx/components/langchain_utilities/openai_tools.py +53 -0
  401. lfx/components/langchain_utilities/openapi.py +48 -0
  402. lfx/components/langchain_utilities/recursive_character.py +60 -0
  403. lfx/components/langchain_utilities/retrieval_qa.py +83 -0
  404. lfx/components/langchain_utilities/runnable_executor.py +137 -0
  405. lfx/components/langchain_utilities/self_query.py +80 -0
  406. lfx/components/langchain_utilities/spider.py +142 -0
  407. lfx/components/langchain_utilities/sql.py +40 -0
  408. lfx/components/langchain_utilities/sql_database.py +35 -0
  409. lfx/components/langchain_utilities/sql_generator.py +78 -0
  410. lfx/components/langchain_utilities/tool_calling.py +59 -0
  411. lfx/components/langchain_utilities/vector_store_info.py +49 -0
  412. lfx/components/langchain_utilities/vector_store_router.py +33 -0
  413. lfx/components/langchain_utilities/xml_agent.py +71 -0
  414. lfx/components/langwatch/__init__.py +3 -0
  415. lfx/components/langwatch/langwatch.py +278 -0
  416. lfx/components/link_extractors/__init__.py +3 -0
  417. lfx/components/llm_operations/__init__.py +46 -0
  418. lfx/components/llm_operations/batch_run.py +205 -0
  419. lfx/components/llm_operations/lambda_filter.py +218 -0
  420. lfx/components/llm_operations/llm_conditional_router.py +421 -0
  421. lfx/components/llm_operations/llm_selector.py +499 -0
  422. lfx/components/llm_operations/structured_output.py +244 -0
  423. lfx/components/lmstudio/__init__.py +34 -0
  424. lfx/components/lmstudio/lmstudioembeddings.py +89 -0
  425. lfx/components/lmstudio/lmstudiomodel.py +133 -0
  426. lfx/components/logic/__init__.py +181 -0
  427. lfx/components/maritalk/__init__.py +32 -0
  428. lfx/components/maritalk/maritalk.py +52 -0
  429. lfx/components/mem0/__init__.py +3 -0
  430. lfx/components/mem0/mem0_chat_memory.py +147 -0
  431. lfx/components/milvus/__init__.py +34 -0
  432. lfx/components/milvus/milvus.py +115 -0
  433. lfx/components/mistral/__init__.py +37 -0
  434. lfx/components/mistral/mistral.py +114 -0
  435. lfx/components/mistral/mistral_embeddings.py +58 -0
  436. lfx/components/models/__init__.py +89 -0
  437. lfx/components/models_and_agents/__init__.py +49 -0
  438. lfx/components/models_and_agents/agent.py +644 -0
  439. lfx/components/models_and_agents/embedding_model.py +423 -0
  440. lfx/components/models_and_agents/language_model.py +398 -0
  441. lfx/components/models_and_agents/mcp_component.py +594 -0
  442. lfx/components/models_and_agents/memory.py +268 -0
  443. lfx/components/models_and_agents/prompt.py +67 -0
  444. lfx/components/mongodb/__init__.py +34 -0
  445. lfx/components/mongodb/mongodb_atlas.py +213 -0
  446. lfx/components/needle/__init__.py +3 -0
  447. lfx/components/needle/needle.py +104 -0
  448. lfx/components/notdiamond/__init__.py +34 -0
  449. lfx/components/notdiamond/notdiamond.py +228 -0
  450. lfx/components/novita/__init__.py +32 -0
  451. lfx/components/novita/novita.py +130 -0
  452. lfx/components/nvidia/__init__.py +57 -0
  453. lfx/components/nvidia/nvidia.py +151 -0
  454. lfx/components/nvidia/nvidia_embedding.py +77 -0
  455. lfx/components/nvidia/nvidia_ingest.py +317 -0
  456. lfx/components/nvidia/nvidia_rerank.py +63 -0
  457. lfx/components/nvidia/system_assist.py +65 -0
  458. lfx/components/olivya/__init__.py +3 -0
  459. lfx/components/olivya/olivya.py +116 -0
  460. lfx/components/ollama/__init__.py +37 -0
  461. lfx/components/ollama/ollama.py +548 -0
  462. lfx/components/ollama/ollama_embeddings.py +103 -0
  463. lfx/components/openai/__init__.py +37 -0
  464. lfx/components/openai/openai.py +100 -0
  465. lfx/components/openai/openai_chat_model.py +176 -0
  466. lfx/components/openrouter/__init__.py +32 -0
  467. lfx/components/openrouter/openrouter.py +104 -0
  468. lfx/components/output_parsers/__init__.py +3 -0
  469. lfx/components/perplexity/__init__.py +34 -0
  470. lfx/components/perplexity/perplexity.py +75 -0
  471. lfx/components/pgvector/__init__.py +34 -0
  472. lfx/components/pgvector/pgvector.py +72 -0
  473. lfx/components/pinecone/__init__.py +34 -0
  474. lfx/components/pinecone/pinecone.py +134 -0
  475. lfx/components/processing/__init__.py +72 -0
  476. lfx/components/processing/alter_metadata.py +109 -0
  477. lfx/components/processing/combine_text.py +40 -0
  478. lfx/components/processing/converter.py +248 -0
  479. lfx/components/processing/create_data.py +111 -0
  480. lfx/components/processing/create_list.py +40 -0
  481. lfx/components/processing/data_operations.py +528 -0
  482. lfx/components/processing/data_to_dataframe.py +71 -0
  483. lfx/components/processing/dataframe_operations.py +313 -0
  484. lfx/components/processing/dataframe_to_toolset.py +259 -0
  485. lfx/components/processing/dynamic_create_data.py +357 -0
  486. lfx/components/processing/extract_key.py +54 -0
  487. lfx/components/processing/filter_data.py +43 -0
  488. lfx/components/processing/filter_data_values.py +89 -0
  489. lfx/components/processing/json_cleaner.py +104 -0
  490. lfx/components/processing/merge_data.py +91 -0
  491. lfx/components/processing/message_to_data.py +37 -0
  492. lfx/components/processing/output_parser.py +46 -0
  493. lfx/components/processing/parse_data.py +71 -0
  494. lfx/components/processing/parse_dataframe.py +69 -0
  495. lfx/components/processing/parse_json_data.py +91 -0
  496. lfx/components/processing/parser.py +148 -0
  497. lfx/components/processing/regex.py +83 -0
  498. lfx/components/processing/select_data.py +49 -0
  499. lfx/components/processing/split_text.py +141 -0
  500. lfx/components/processing/store_message.py +91 -0
  501. lfx/components/processing/update_data.py +161 -0
  502. lfx/components/prototypes/__init__.py +35 -0
  503. lfx/components/prototypes/python_function.py +73 -0
  504. lfx/components/qdrant/__init__.py +34 -0
  505. lfx/components/qdrant/qdrant.py +109 -0
  506. lfx/components/redis/__init__.py +37 -0
  507. lfx/components/redis/redis.py +89 -0
  508. lfx/components/redis/redis_chat.py +43 -0
  509. lfx/components/sambanova/__init__.py +32 -0
  510. lfx/components/sambanova/sambanova.py +84 -0
  511. lfx/components/scrapegraph/__init__.py +40 -0
  512. lfx/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
  513. lfx/components/scrapegraph/scrapegraph_search_api.py +64 -0
  514. lfx/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
  515. lfx/components/searchapi/__init__.py +34 -0
  516. lfx/components/searchapi/search.py +79 -0
  517. lfx/components/serpapi/__init__.py +3 -0
  518. lfx/components/serpapi/serp.py +115 -0
  519. lfx/components/supabase/__init__.py +34 -0
  520. lfx/components/supabase/supabase.py +76 -0
  521. lfx/components/tavily/__init__.py +4 -0
  522. lfx/components/tavily/tavily_extract.py +117 -0
  523. lfx/components/tavily/tavily_search.py +212 -0
  524. lfx/components/textsplitters/__init__.py +3 -0
  525. lfx/components/toolkits/__init__.py +3 -0
  526. lfx/components/tools/__init__.py +66 -0
  527. lfx/components/tools/calculator.py +109 -0
  528. lfx/components/tools/google_search_api.py +45 -0
  529. lfx/components/tools/google_serper_api.py +115 -0
  530. lfx/components/tools/python_code_structured_tool.py +328 -0
  531. lfx/components/tools/python_repl.py +98 -0
  532. lfx/components/tools/search_api.py +88 -0
  533. lfx/components/tools/searxng.py +145 -0
  534. lfx/components/tools/serp_api.py +120 -0
  535. lfx/components/tools/tavily_search_tool.py +345 -0
  536. lfx/components/tools/wikidata_api.py +103 -0
  537. lfx/components/tools/wikipedia_api.py +50 -0
  538. lfx/components/tools/yahoo_finance.py +130 -0
  539. lfx/components/twelvelabs/__init__.py +52 -0
  540. lfx/components/twelvelabs/convert_astra_results.py +84 -0
  541. lfx/components/twelvelabs/pegasus_index.py +311 -0
  542. lfx/components/twelvelabs/split_video.py +301 -0
  543. lfx/components/twelvelabs/text_embeddings.py +57 -0
  544. lfx/components/twelvelabs/twelvelabs_pegasus.py +408 -0
  545. lfx/components/twelvelabs/video_embeddings.py +100 -0
  546. lfx/components/twelvelabs/video_file.py +191 -0
  547. lfx/components/unstructured/__init__.py +3 -0
  548. lfx/components/unstructured/unstructured.py +121 -0
  549. lfx/components/upstash/__init__.py +34 -0
  550. lfx/components/upstash/upstash.py +124 -0
  551. lfx/components/utilities/__init__.py +43 -0
  552. lfx/components/utilities/calculator_core.py +89 -0
  553. lfx/components/utilities/current_date.py +42 -0
  554. lfx/components/utilities/id_generator.py +42 -0
  555. lfx/components/utilities/python_repl_core.py +98 -0
  556. lfx/components/vectara/__init__.py +37 -0
  557. lfx/components/vectara/vectara.py +97 -0
  558. lfx/components/vectara/vectara_rag.py +164 -0
  559. lfx/components/vectorstores/__init__.py +34 -0
  560. lfx/components/vectorstores/local_db.py +270 -0
  561. lfx/components/vertexai/__init__.py +37 -0
  562. lfx/components/vertexai/vertexai.py +71 -0
  563. lfx/components/vertexai/vertexai_embeddings.py +67 -0
  564. lfx/components/vlmrun/__init__.py +34 -0
  565. lfx/components/vlmrun/vlmrun_transcription.py +224 -0
  566. lfx/components/weaviate/__init__.py +34 -0
  567. lfx/components/weaviate/weaviate.py +89 -0
  568. lfx/components/wikipedia/__init__.py +4 -0
  569. lfx/components/wikipedia/wikidata.py +86 -0
  570. lfx/components/wikipedia/wikipedia.py +53 -0
  571. lfx/components/wolframalpha/__init__.py +3 -0
  572. lfx/components/wolframalpha/wolfram_alpha_api.py +54 -0
  573. lfx/components/xai/__init__.py +32 -0
  574. lfx/components/xai/xai.py +167 -0
  575. lfx/components/yahoosearch/__init__.py +3 -0
  576. lfx/components/yahoosearch/yahoo.py +137 -0
  577. lfx/components/youtube/__init__.py +52 -0
  578. lfx/components/youtube/channel.py +227 -0
  579. lfx/components/youtube/comments.py +231 -0
  580. lfx/components/youtube/playlist.py +33 -0
  581. lfx/components/youtube/search.py +120 -0
  582. lfx/components/youtube/trending.py +285 -0
  583. lfx/components/youtube/video_details.py +263 -0
  584. lfx/components/youtube/youtube_transcripts.py +206 -0
  585. lfx/components/zep/__init__.py +3 -0
  586. lfx/components/zep/zep.py +45 -0
  587. lfx/constants.py +6 -0
  588. lfx/custom/__init__.py +7 -0
  589. lfx/custom/attributes.py +87 -0
  590. lfx/custom/code_parser/__init__.py +3 -0
  591. lfx/custom/code_parser/code_parser.py +361 -0
  592. lfx/custom/custom_component/__init__.py +0 -0
  593. lfx/custom/custom_component/base_component.py +128 -0
  594. lfx/custom/custom_component/component.py +1890 -0
  595. lfx/custom/custom_component/component_with_cache.py +8 -0
  596. lfx/custom/custom_component/custom_component.py +650 -0
  597. lfx/custom/dependency_analyzer.py +165 -0
  598. lfx/custom/directory_reader/__init__.py +3 -0
  599. lfx/custom/directory_reader/directory_reader.py +359 -0
  600. lfx/custom/directory_reader/utils.py +171 -0
  601. lfx/custom/eval.py +12 -0
  602. lfx/custom/schema.py +32 -0
  603. lfx/custom/tree_visitor.py +21 -0
  604. lfx/custom/utils.py +877 -0
  605. lfx/custom/validate.py +523 -0
  606. lfx/events/__init__.py +1 -0
  607. lfx/events/event_manager.py +110 -0
  608. lfx/exceptions/__init__.py +0 -0
  609. lfx/exceptions/component.py +15 -0
  610. lfx/field_typing/__init__.py +91 -0
  611. lfx/field_typing/constants.py +216 -0
  612. lfx/field_typing/range_spec.py +35 -0
  613. lfx/graph/__init__.py +6 -0
  614. lfx/graph/edge/__init__.py +0 -0
  615. lfx/graph/edge/base.py +300 -0
  616. lfx/graph/edge/schema.py +119 -0
  617. lfx/graph/edge/utils.py +0 -0
  618. lfx/graph/graph/__init__.py +0 -0
  619. lfx/graph/graph/ascii.py +202 -0
  620. lfx/graph/graph/base.py +2298 -0
  621. lfx/graph/graph/constants.py +63 -0
  622. lfx/graph/graph/runnable_vertices_manager.py +133 -0
  623. lfx/graph/graph/schema.py +53 -0
  624. lfx/graph/graph/state_model.py +66 -0
  625. lfx/graph/graph/utils.py +1024 -0
  626. lfx/graph/schema.py +75 -0
  627. lfx/graph/state/__init__.py +0 -0
  628. lfx/graph/state/model.py +250 -0
  629. lfx/graph/utils.py +206 -0
  630. lfx/graph/vertex/__init__.py +0 -0
  631. lfx/graph/vertex/base.py +826 -0
  632. lfx/graph/vertex/constants.py +0 -0
  633. lfx/graph/vertex/exceptions.py +4 -0
  634. lfx/graph/vertex/param_handler.py +316 -0
  635. lfx/graph/vertex/schema.py +26 -0
  636. lfx/graph/vertex/utils.py +19 -0
  637. lfx/graph/vertex/vertex_types.py +489 -0
  638. lfx/helpers/__init__.py +141 -0
  639. lfx/helpers/base_model.py +71 -0
  640. lfx/helpers/custom.py +13 -0
  641. lfx/helpers/data.py +167 -0
  642. lfx/helpers/flow.py +308 -0
  643. lfx/inputs/__init__.py +68 -0
  644. lfx/inputs/constants.py +2 -0
  645. lfx/inputs/input_mixin.py +352 -0
  646. lfx/inputs/inputs.py +718 -0
  647. lfx/inputs/validators.py +19 -0
  648. lfx/interface/__init__.py +6 -0
  649. lfx/interface/components.py +897 -0
  650. lfx/interface/importing/__init__.py +5 -0
  651. lfx/interface/importing/utils.py +39 -0
  652. lfx/interface/initialize/__init__.py +3 -0
  653. lfx/interface/initialize/loading.py +317 -0
  654. lfx/interface/listing.py +26 -0
  655. lfx/interface/run.py +16 -0
  656. lfx/interface/utils.py +111 -0
  657. lfx/io/__init__.py +63 -0
  658. lfx/io/schema.py +295 -0
  659. lfx/load/__init__.py +8 -0
  660. lfx/load/load.py +256 -0
  661. lfx/load/utils.py +99 -0
  662. lfx/log/__init__.py +5 -0
  663. lfx/log/logger.py +411 -0
  664. lfx/logging/__init__.py +11 -0
  665. lfx/logging/logger.py +24 -0
  666. lfx/memory/__init__.py +70 -0
  667. lfx/memory/stubs.py +302 -0
  668. lfx/processing/__init__.py +1 -0
  669. lfx/processing/process.py +238 -0
  670. lfx/processing/utils.py +25 -0
  671. lfx/py.typed +0 -0
  672. lfx/schema/__init__.py +66 -0
  673. lfx/schema/artifact.py +83 -0
  674. lfx/schema/content_block.py +62 -0
  675. lfx/schema/content_types.py +91 -0
  676. lfx/schema/cross_module.py +80 -0
  677. lfx/schema/data.py +309 -0
  678. lfx/schema/dataframe.py +210 -0
  679. lfx/schema/dotdict.py +74 -0
  680. lfx/schema/encoders.py +13 -0
  681. lfx/schema/graph.py +47 -0
  682. lfx/schema/image.py +184 -0
  683. lfx/schema/json_schema.py +186 -0
  684. lfx/schema/log.py +62 -0
  685. lfx/schema/message.py +493 -0
  686. lfx/schema/openai_responses_schemas.py +74 -0
  687. lfx/schema/properties.py +41 -0
  688. lfx/schema/schema.py +180 -0
  689. lfx/schema/serialize.py +13 -0
  690. lfx/schema/table.py +142 -0
  691. lfx/schema/validators.py +114 -0
  692. lfx/serialization/__init__.py +5 -0
  693. lfx/serialization/constants.py +2 -0
  694. lfx/serialization/serialization.py +314 -0
  695. lfx/services/__init__.py +26 -0
  696. lfx/services/base.py +28 -0
  697. lfx/services/cache/__init__.py +6 -0
  698. lfx/services/cache/base.py +183 -0
  699. lfx/services/cache/service.py +166 -0
  700. lfx/services/cache/utils.py +169 -0
  701. lfx/services/chat/__init__.py +1 -0
  702. lfx/services/chat/config.py +2 -0
  703. lfx/services/chat/schema.py +10 -0
  704. lfx/services/database/__init__.py +5 -0
  705. lfx/services/database/service.py +25 -0
  706. lfx/services/deps.py +194 -0
  707. lfx/services/factory.py +19 -0
  708. lfx/services/initialize.py +19 -0
  709. lfx/services/interfaces.py +103 -0
  710. lfx/services/manager.py +185 -0
  711. lfx/services/mcp_composer/__init__.py +6 -0
  712. lfx/services/mcp_composer/factory.py +16 -0
  713. lfx/services/mcp_composer/service.py +1441 -0
  714. lfx/services/schema.py +21 -0
  715. lfx/services/session.py +87 -0
  716. lfx/services/settings/__init__.py +3 -0
  717. lfx/services/settings/auth.py +133 -0
  718. lfx/services/settings/base.py +668 -0
  719. lfx/services/settings/constants.py +43 -0
  720. lfx/services/settings/factory.py +23 -0
  721. lfx/services/settings/feature_flags.py +11 -0
  722. lfx/services/settings/service.py +35 -0
  723. lfx/services/settings/utils.py +40 -0
  724. lfx/services/shared_component_cache/__init__.py +1 -0
  725. lfx/services/shared_component_cache/factory.py +30 -0
  726. lfx/services/shared_component_cache/service.py +9 -0
  727. lfx/services/storage/__init__.py +5 -0
  728. lfx/services/storage/local.py +185 -0
  729. lfx/services/storage/service.py +177 -0
  730. lfx/services/tracing/__init__.py +1 -0
  731. lfx/services/tracing/service.py +21 -0
  732. lfx/settings.py +6 -0
  733. lfx/template/__init__.py +6 -0
  734. lfx/template/field/__init__.py +0 -0
  735. lfx/template/field/base.py +260 -0
  736. lfx/template/field/prompt.py +15 -0
  737. lfx/template/frontend_node/__init__.py +6 -0
  738. lfx/template/frontend_node/base.py +214 -0
  739. lfx/template/frontend_node/constants.py +65 -0
  740. lfx/template/frontend_node/custom_components.py +79 -0
  741. lfx/template/template/__init__.py +0 -0
  742. lfx/template/template/base.py +100 -0
  743. lfx/template/utils.py +217 -0
  744. lfx/type_extraction/__init__.py +19 -0
  745. lfx/type_extraction/type_extraction.py +75 -0
  746. lfx/type_extraction.py +80 -0
  747. lfx/utils/__init__.py +1 -0
  748. lfx/utils/async_helpers.py +42 -0
  749. lfx/utils/component_utils.py +154 -0
  750. lfx/utils/concurrency.py +60 -0
  751. lfx/utils/connection_string_parser.py +11 -0
  752. lfx/utils/constants.py +233 -0
  753. lfx/utils/data_structure.py +212 -0
  754. lfx/utils/exceptions.py +22 -0
  755. lfx/utils/helpers.py +34 -0
  756. lfx/utils/image.py +79 -0
  757. lfx/utils/langflow_utils.py +52 -0
  758. lfx/utils/lazy_load.py +15 -0
  759. lfx/utils/request_utils.py +18 -0
  760. lfx/utils/schemas.py +139 -0
  761. lfx/utils/ssrf_protection.py +384 -0
  762. lfx/utils/util.py +626 -0
  763. lfx/utils/util_strings.py +56 -0
  764. lfx/utils/validate_cloud.py +26 -0
  765. lfx/utils/version.py +24 -0
  766. lfx_nightly-0.2.0.dev25.dist-info/METADATA +312 -0
  767. lfx_nightly-0.2.0.dev25.dist-info/RECORD +769 -0
  768. lfx_nightly-0.2.0.dev25.dist-info/WHEEL +4 -0
  769. lfx_nightly-0.2.0.dev25.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,91 @@
1
+ from typing import Any
2
+
3
+ from .constants import (
4
+ AgentExecutor,
5
+ BaseChatMemory,
6
+ BaseChatModel,
7
+ BaseDocumentCompressor,
8
+ BaseLanguageModel,
9
+ BaseLLM,
10
+ BaseLoader,
11
+ BaseMemory,
12
+ BaseOutputParser,
13
+ BasePromptTemplate,
14
+ BaseRetriever,
15
+ Callable,
16
+ Chain,
17
+ ChatPromptTemplate,
18
+ Code,
19
+ Data,
20
+ Document,
21
+ Embeddings,
22
+ LanguageModel,
23
+ NestedDict,
24
+ Object,
25
+ PromptTemplate,
26
+ Retriever,
27
+ Text,
28
+ TextSplitter,
29
+ Tool,
30
+ VectorStore,
31
+ )
32
+ from .range_spec import RangeSpec
33
+
34
+
35
+ def _import_input_class():
36
+ from lfx.template.field.base import Input
37
+
38
+ return Input
39
+
40
+
41
+ def _import_output_class():
42
+ from lfx.template.field.base import Output
43
+
44
+ return Output
45
+
46
+
47
+ def __getattr__(name: str) -> Any:
48
+ # This is to avoid circular imports
49
+ if name == "Input":
50
+ return _import_input_class()
51
+ if name == "Output":
52
+ return _import_output_class()
53
+ if name == "RangeSpec":
54
+ return RangeSpec
55
+ # The other names should work as if they were imported from constants
56
+ # Import the constants module langflow.field_typing.constants
57
+ from . import constants
58
+
59
+ return getattr(constants, name)
60
+
61
+
62
+ __all__ = [
63
+ "AgentExecutor",
64
+ "BaseChatMemory",
65
+ "BaseChatModel",
66
+ "BaseDocumentCompressor",
67
+ "BaseLLM",
68
+ "BaseLanguageModel",
69
+ "BaseLoader",
70
+ "BaseMemory",
71
+ "BaseOutputParser",
72
+ "BasePromptTemplate",
73
+ "BaseRetriever",
74
+ "Callable",
75
+ "Chain",
76
+ "ChatPromptTemplate",
77
+ "Code",
78
+ "Data",
79
+ "Document",
80
+ "Embeddings",
81
+ "LanguageModel",
82
+ "NestedDict",
83
+ "Object",
84
+ "PromptTemplate",
85
+ "RangeSpec",
86
+ "Retriever",
87
+ "Text",
88
+ "TextSplitter",
89
+ "Tool",
90
+ "VectorStore",
91
+ ]
@@ -0,0 +1,216 @@
1
+ """Constants for field typing used throughout lfx package."""
2
+
3
+ import importlib.util
4
+ from collections.abc import Callable
5
+ from typing import Text, TypeAlias, TypeVar
6
+
7
+ # Safe imports that don't create circular dependencies
8
+ try:
9
+ from langchain.agents.agent import AgentExecutor
10
+ from langchain.chains.base import Chain
11
+ from langchain.memory.chat_memory import BaseChatMemory
12
+ from langchain_core.chat_history import BaseChatMessageHistory
13
+ from langchain_core.document_loaders import BaseLoader
14
+ from langchain_core.documents import Document
15
+ from langchain_core.documents.compressor import BaseDocumentCompressor
16
+ from langchain_core.embeddings import Embeddings
17
+ from langchain_core.language_models import BaseLanguageModel, BaseLLM
18
+ from langchain_core.language_models.chat_models import BaseChatModel
19
+ from langchain_core.memory import BaseMemory
20
+ from langchain_core.output_parsers import BaseLLMOutputParser, BaseOutputParser
21
+ from langchain_core.prompts import BasePromptTemplate, ChatPromptTemplate, PromptTemplate
22
+ from langchain_core.retrievers import BaseRetriever
23
+ from langchain_core.tools import BaseTool, Tool
24
+ from langchain_core.vectorstores import VectorStore, VectorStoreRetriever
25
+ from langchain_text_splitters import TextSplitter
26
+ except ImportError:
27
+ # Create stub types if langchain is not available
28
+ class AgentExecutor:
29
+ pass
30
+
31
+ class Chain:
32
+ pass
33
+
34
+ class BaseChatMemory:
35
+ pass
36
+
37
+ class BaseChatMessageHistory:
38
+ pass
39
+
40
+ class BaseLoader:
41
+ pass
42
+
43
+ class Document:
44
+ pass
45
+
46
+ class BaseDocumentCompressor:
47
+ pass
48
+
49
+ class Embeddings:
50
+ pass
51
+
52
+ class BaseLanguageModel:
53
+ pass
54
+
55
+ class BaseLLM:
56
+ pass
57
+
58
+ class BaseChatModel:
59
+ pass
60
+
61
+ class BaseMemory:
62
+ pass
63
+
64
+ class BaseLLMOutputParser:
65
+ pass
66
+
67
+ class BaseOutputParser:
68
+ pass
69
+
70
+ class BasePromptTemplate:
71
+ pass
72
+
73
+ class ChatPromptTemplate:
74
+ pass
75
+
76
+ class PromptTemplate:
77
+ pass
78
+
79
+ class BaseRetriever:
80
+ pass
81
+
82
+ class BaseTool:
83
+ pass
84
+
85
+ class Tool:
86
+ pass
87
+
88
+ class VectorStore:
89
+ pass
90
+
91
+ class VectorStoreRetriever:
92
+ pass
93
+
94
+ class TextSplitter:
95
+ pass
96
+
97
+
98
+ # Import lfx schema types (avoid circular deps)
99
+ from lfx.schema.data import Data
100
+
101
+ # Type aliases
102
+ NestedDict: TypeAlias = dict[str, str | dict]
103
+ LanguageModel = TypeVar("LanguageModel", BaseLanguageModel, BaseLLM, BaseChatModel)
104
+ ToolEnabledLanguageModel = TypeVar("ToolEnabledLanguageModel", BaseLanguageModel, BaseLLM, BaseChatModel)
105
+ Memory = TypeVar("Memory", bound=BaseChatMessageHistory)
106
+
107
+ Retriever = TypeVar(
108
+ "Retriever",
109
+ BaseRetriever,
110
+ VectorStoreRetriever,
111
+ )
112
+ OutputParser = TypeVar(
113
+ "OutputParser",
114
+ BaseOutputParser,
115
+ BaseLLMOutputParser,
116
+ )
117
+
118
+
119
+ class Object:
120
+ """Generic object type for custom components."""
121
+
122
+
123
+ class Code:
124
+ """Code type for custom components."""
125
+
126
+
127
+ # Langchain base types mapping
128
+ LANGCHAIN_BASE_TYPES = {
129
+ "Chain": Chain,
130
+ "AgentExecutor": AgentExecutor,
131
+ "BaseTool": BaseTool,
132
+ "Tool": Tool,
133
+ "BaseLLM": BaseLLM,
134
+ "BaseLanguageModel": BaseLanguageModel,
135
+ "PromptTemplate": PromptTemplate,
136
+ "ChatPromptTemplate": ChatPromptTemplate,
137
+ "BasePromptTemplate": BasePromptTemplate,
138
+ "BaseLoader": BaseLoader,
139
+ "Document": Document,
140
+ "TextSplitter": TextSplitter,
141
+ "VectorStore": VectorStore,
142
+ "Embeddings": Embeddings,
143
+ "BaseRetriever": BaseRetriever,
144
+ "BaseOutputParser": BaseOutputParser,
145
+ "BaseMemory": BaseMemory,
146
+ "BaseChatMemory": BaseChatMemory,
147
+ "BaseChatModel": BaseChatModel,
148
+ "Memory": Memory,
149
+ "BaseDocumentCompressor": BaseDocumentCompressor,
150
+ }
151
+
152
+ # Langchain base types plus Python base types
153
+ CUSTOM_COMPONENT_SUPPORTED_TYPES = {
154
+ **LANGCHAIN_BASE_TYPES,
155
+ "NestedDict": NestedDict,
156
+ "Data": Data,
157
+ "Text": Text, # noqa: UP019
158
+ "Object": Object,
159
+ "Callable": Callable,
160
+ "LanguageModel": LanguageModel,
161
+ "Retriever": Retriever,
162
+ }
163
+
164
+ # Default import string for component code generation
165
+ LANGCHAIN_IMPORT_STRING = """from langchain.agents.agent import AgentExecutor
166
+ from langchain.chains.base import Chain
167
+ from langchain.memory.chat_memory import BaseChatMemory
168
+ from langchain_core.chat_history import BaseChatMessageHistory
169
+ from langchain_core.document_loaders import BaseLoader
170
+ from langchain_core.documents import Document
171
+ from langchain_core.embeddings import Embeddings
172
+ from langchain_core.language_models import BaseLanguageModel, BaseLLM
173
+ from langchain_core.language_models.chat_models import BaseChatModel
174
+ from langchain_core.memory import BaseMemory
175
+ from langchain_core.output_parsers import BaseLLMOutputParser, BaseOutputParser
176
+ from langchain_core.prompts import BasePromptTemplate, ChatPromptTemplate, PromptTemplate
177
+ from langchain_core.retrievers import BaseRetriever
178
+ from langchain_core.documents.compressor import BaseDocumentCompressor
179
+ from langchain_core.tools import BaseTool, Tool
180
+ from langchain_core.vectorstores import VectorStore, VectorStoreRetriever
181
+ from langchain_text_splitters import TextSplitter
182
+ """
183
+
184
+
185
+ DEFAULT_IMPORT_STRING = """
186
+
187
+ from lfx.io import (
188
+ BoolInput,
189
+ CodeInput,
190
+ DataInput,
191
+ DictInput,
192
+ DropdownInput,
193
+ FileInput,
194
+ FloatInput,
195
+ HandleInput,
196
+ IntInput,
197
+ LinkInput,
198
+ MessageInput,
199
+ MessageTextInput,
200
+ MultilineInput,
201
+ MultilineSecretInput,
202
+ MultiselectInput,
203
+ NestedDictInput,
204
+ Output,
205
+ PromptInput,
206
+ SecretStrInput,
207
+ SliderInput,
208
+ StrInput,
209
+ TableInput,
210
+ )
211
+ from lfx.schema.data import Data
212
+ from lfx.schema.dataframe import DataFrame
213
+ """
214
+
215
+ if importlib.util.find_spec("langchain") is not None:
216
+ DEFAULT_IMPORT_STRING = LANGCHAIN_IMPORT_STRING + DEFAULT_IMPORT_STRING
@@ -0,0 +1,35 @@
1
+ """Range specification for field types copied from langflow for lfx package."""
2
+
3
+ from typing import Literal
4
+
5
+ from pydantic import BaseModel, field_validator
6
+
7
+
8
+ class RangeSpec(BaseModel):
9
+ step_type: Literal["int", "float"] = "float"
10
+ min: float = -1.0
11
+ max: float = 1.0
12
+ step: float = 0.1
13
+
14
+ @field_validator("max")
15
+ @classmethod
16
+ def max_must_be_greater_than_min(cls, v, values):
17
+ if "min" in values.data and v <= values.data["min"]:
18
+ msg = "Max must be greater than min"
19
+ raise ValueError(msg)
20
+ return v
21
+
22
+ @field_validator("step")
23
+ @classmethod
24
+ def step_must_be_positive(cls, v, values):
25
+ if v <= 0:
26
+ msg = "Step must be positive"
27
+ raise ValueError(msg)
28
+ if values.data["step_type"] == "int" and isinstance(v, float) and not v.is_integer():
29
+ msg = "When step_type is int, step must be an integer"
30
+ raise ValueError(msg)
31
+ return v
32
+
33
+ @classmethod
34
+ def set_step_type(cls, step_type: Literal["int", "float"], range_spec: "RangeSpec") -> "RangeSpec":
35
+ return cls(min=range_spec.min, max=range_spec.max, step=range_spec.step, step_type=step_type)
lfx/graph/__init__.py ADDED
@@ -0,0 +1,6 @@
1
+ from lfx.graph.edge.base import Edge
2
+ from lfx.graph.graph.base import Graph
3
+ from lfx.graph.vertex.base import Vertex
4
+ from lfx.graph.vertex.vertex_types import CustomComponentVertex, InterfaceVertex, StateVertex
5
+
6
+ __all__ = ["CustomComponentVertex", "Edge", "Graph", "InterfaceVertex", "StateVertex", "Vertex"]
File without changes
lfx/graph/edge/base.py ADDED
@@ -0,0 +1,300 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Any, cast
4
+
5
+ from lfx.graph.edge.schema import EdgeData, LoopTargetHandleDict, SourceHandle, TargetHandle, TargetHandleDict
6
+ from lfx.log.logger import logger
7
+ from lfx.schema.schema import INPUT_FIELD_NAME
8
+
9
+ if TYPE_CHECKING:
10
+ from lfx.graph.vertex.base import Vertex
11
+
12
+
13
+ class Edge:
14
+ def __init__(self, source: Vertex, target: Vertex, edge: EdgeData):
15
+ self.source_id: str = source.id if source else ""
16
+ self.target_id: str = target.id if target else ""
17
+ self.valid_handles: bool = False
18
+ self.target_param: str | None = None
19
+ self._target_handle: TargetHandleDict | str | None = None
20
+ self._data = edge.copy()
21
+ self.is_cycle = False
22
+ if data := edge.get("data", {}):
23
+ self._source_handle = data.get("sourceHandle", {})
24
+ self._target_handle = cast("TargetHandleDict", data.get("targetHandle", {}))
25
+ self.source_handle: SourceHandle = SourceHandle(**self._source_handle)
26
+ if isinstance(self._target_handle, dict):
27
+ try:
28
+ if "name" in self._target_handle:
29
+ self.target_handle: TargetHandle = TargetHandle.from_loop_target_handle(
30
+ cast("LoopTargetHandleDict", self._target_handle)
31
+ )
32
+ else:
33
+ self.target_handle = TargetHandle(**self._target_handle)
34
+ except Exception as e:
35
+ if "inputTypes" in self._target_handle and self._target_handle["inputTypes"] is None:
36
+ # Check if self._target_handle['fieldName']
37
+ if hasattr(target, "custom_component"):
38
+ display_name = getattr(target.custom_component, "display_name", "")
39
+ msg = (
40
+ f"Component {display_name} field '{self._target_handle['fieldName']}' "
41
+ "might not be a valid input."
42
+ )
43
+ raise ValueError(msg) from e
44
+ msg = (
45
+ f"Field '{self._target_handle['fieldName']}' on {target.display_name} "
46
+ "might not be a valid input."
47
+ )
48
+ raise ValueError(msg) from e
49
+ raise
50
+
51
+ else:
52
+ msg = "Target handle is not a dictionary"
53
+ raise ValueError(msg)
54
+ self.target_param = self.target_handle.field_name
55
+ # validate handles
56
+ self.validate_handles(source, target)
57
+ else:
58
+ # Logging here because this is a breaking change
59
+ logger.error("Edge data is empty")
60
+ self._source_handle = edge.get("sourceHandle", "") # type: ignore[assignment]
61
+ self._target_handle = edge.get("targetHandle", "") # type: ignore[assignment]
62
+ # 'BaseLoader;BaseOutputParser|documents|PromptTemplate-zmTlD'
63
+ # target_param is documents
64
+ if isinstance(self._target_handle, str):
65
+ self.target_param = self._target_handle.split("|")[1]
66
+ self.source_handle = None # type: ignore[assignment]
67
+ self.target_handle = None # type: ignore[assignment]
68
+ else:
69
+ msg = "Target handle is not a string"
70
+ raise ValueError(msg)
71
+ # Validate in __init__ to fail fast
72
+ self.validate_edge(source, target)
73
+
74
+ def to_data(self):
75
+ return self._data
76
+
77
+ def validate_handles(self, source, target) -> None:
78
+ if isinstance(self._source_handle, str) or self.source_handle.base_classes:
79
+ self._legacy_validate_handles(source, target)
80
+ else:
81
+ self._validate_handles(source, target)
82
+
83
+ def _validate_handles(self, source, target) -> None:
84
+ if self.target_handle.input_types is None:
85
+ self.valid_handles = self.target_handle.type in self.source_handle.output_types
86
+ elif self.target_handle.type is None:
87
+ # ! This is not a good solution
88
+ # This is a loop edge
89
+ # If the target_handle.type is None, it means it's a loop edge
90
+ # and we should check if the source_handle.output_types is not empty
91
+ # and if the target_handle.input_types is empty or if any of the source_handle.output_types
92
+ # is in the target_handle.input_types
93
+ self.valid_handles = bool(self.source_handle.output_types) and (
94
+ not self.target_handle.input_types
95
+ or any(output_type in self.target_handle.input_types for output_type in self.source_handle.output_types)
96
+ )
97
+
98
+ elif self.source_handle.output_types is not None:
99
+ self.valid_handles = (
100
+ any(output_type in self.target_handle.input_types for output_type in self.source_handle.output_types)
101
+ or self.target_handle.type in self.source_handle.output_types
102
+ )
103
+
104
+ if not self.valid_handles:
105
+ logger.debug(self.source_handle)
106
+ logger.debug(self.target_handle)
107
+ msg = f"Edge between {source.display_name} and {target.display_name} has invalid handles"
108
+ raise ValueError(msg)
109
+
110
+ def _legacy_validate_handles(self, source, target) -> None:
111
+ if self.target_handle.input_types is None:
112
+ self.valid_handles = self.target_handle.type in self.source_handle.base_classes
113
+ else:
114
+ self.valid_handles = (
115
+ any(baseClass in self.target_handle.input_types for baseClass in self.source_handle.base_classes)
116
+ or self.target_handle.type in self.source_handle.base_classes
117
+ )
118
+ if not self.valid_handles:
119
+ logger.debug(self.source_handle)
120
+ logger.debug(self.target_handle)
121
+ msg = f"Edge between {source.vertex_type} and {target.vertex_type} has invalid handles"
122
+ raise ValueError(msg)
123
+
124
+ def __setstate__(self, state):
125
+ self.source_id = state["source_id"]
126
+ self.target_id = state["target_id"]
127
+ self.target_param = state["target_param"]
128
+ self.source_handle = state.get("source_handle")
129
+ self.target_handle = state.get("target_handle")
130
+ self._source_handle = state.get("_source_handle")
131
+ self._target_handle = state.get("_target_handle")
132
+ self._data = state.get("_data")
133
+ self.valid_handles = state.get("valid_handles")
134
+ self.source_types = state.get("source_types")
135
+ self.target_reqs = state.get("target_reqs")
136
+ self.matched_type = state.get("matched_type")
137
+
138
+ def validate_edge(self, source, target) -> None:
139
+ # If the self.source_handle has base_classes, then we are using the legacy
140
+ # way of defining the source and target handles
141
+ if isinstance(self._source_handle, str) or self.source_handle.base_classes:
142
+ self._legacy_validate_edge(source, target)
143
+ else:
144
+ self._validate_edge(source, target)
145
+
146
+ def _validate_edge(self, source, target) -> None:
147
+ # Validate that the outputs of the source node are valid inputs
148
+ # for the target node
149
+ # .outputs is a list of Output objects as dictionaries
150
+ # meaning: check for "types" key in each dictionary
151
+ self.source_types = [output for output in source.outputs if output["name"] == self.source_handle.name]
152
+
153
+ # Check if this is an loop input (loop target handle with output_types)
154
+ is_loop_input = hasattr(self.target_handle, "input_types") and self.target_handle.input_types
155
+ loop_input_types = []
156
+
157
+ if is_loop_input:
158
+ # For loop inputs, use the configured input_types
159
+ # (which already includes original type + loop_types from frontend)
160
+ loop_input_types = list(self.target_handle.input_types)
161
+ self.valid = any(
162
+ any(output_type in loop_input_types for output_type in output["types"]) for output in self.source_types
163
+ )
164
+ # Find the first matching type
165
+ self.matched_type = next(
166
+ (
167
+ output_type
168
+ for output in self.source_types
169
+ for output_type in output["types"]
170
+ if output_type in loop_input_types
171
+ ),
172
+ None,
173
+ )
174
+ else:
175
+ # Standard validation for regular inputs
176
+ self.target_reqs = target.required_inputs + target.optional_inputs
177
+ # Both lists contain strings and sometimes a string contains the value we are
178
+ # looking for e.g. comgin_out=["Chain"] and target_reqs=["LLMChain"]
179
+ # so we need to check if any of the strings in source_types is in target_reqs
180
+ self.valid = any(
181
+ any(output_type in target_req for output_type in output["types"])
182
+ for output in self.source_types
183
+ for target_req in self.target_reqs
184
+ )
185
+ # Update the matched type to be the first found match
186
+ self.matched_type = next(
187
+ (
188
+ output_type
189
+ for output in self.source_types
190
+ for output_type in output["types"]
191
+ for target_req in self.target_reqs
192
+ if output_type in target_req
193
+ ),
194
+ None,
195
+ )
196
+
197
+ no_matched_type = self.matched_type is None
198
+ if no_matched_type:
199
+ logger.debug(self.source_types)
200
+ logger.debug(self.target_reqs if not is_loop_input else loop_input_types)
201
+ msg = f"Edge between {source.vertex_type} and {target.vertex_type} has no matched type."
202
+ raise ValueError(msg)
203
+
204
+ def _legacy_validate_edge(self, source, target) -> None:
205
+ # Validate that the outputs of the source node are valid inputs
206
+ # for the target node
207
+ self.source_types = source.output
208
+ self.target_reqs = target.required_inputs + target.optional_inputs
209
+ # Both lists contain strings and sometimes a string contains the value we are
210
+ # looking for e.g. comgin_out=["Chain"] and target_reqs=["LLMChain"]
211
+ # so we need to check if any of the strings in source_types is in target_reqs
212
+ self.valid = any(output in target_req for output in self.source_types for target_req in self.target_reqs)
213
+ # Get what type of input the target node is expecting
214
+
215
+ self.matched_type = next(
216
+ (output for output in self.source_types if output in self.target_reqs),
217
+ None,
218
+ )
219
+ no_matched_type = self.matched_type is None
220
+ if no_matched_type:
221
+ logger.debug(self.source_types)
222
+ logger.debug(self.target_reqs)
223
+ msg = f"Edge between {source.vertex_type} and {target.vertex_type} has no matched type"
224
+ raise ValueError(msg)
225
+
226
+ def __repr__(self) -> str:
227
+ if (hasattr(self, "source_handle") and self.source_handle) and (
228
+ hasattr(self, "target_handle") and self.target_handle
229
+ ):
230
+ return f"{self.source_id} -[{self.source_handle.name}->{self.target_handle.field_name}]-> {self.target_id}"
231
+ return f"{self.source_id} -[{self.target_param}]-> {self.target_id}"
232
+
233
+ def __hash__(self) -> int:
234
+ return hash(self.__repr__())
235
+
236
+ def __eq__(self, /, other: object) -> bool:
237
+ if not isinstance(other, Edge):
238
+ return False
239
+ return (
240
+ self._source_handle == other._source_handle
241
+ and self._target_handle == other._target_handle
242
+ and self.target_param == other.target_param
243
+ )
244
+
245
+ def __str__(self) -> str:
246
+ return self.__repr__()
247
+
248
+
249
+ class CycleEdge(Edge):
250
+ def __init__(self, source: Vertex, target: Vertex, raw_edge: EdgeData):
251
+ super().__init__(source, target, raw_edge)
252
+ self.is_fulfilled = False # Whether the contract has been fulfilled.
253
+ self.result: Any = None
254
+ self.is_cycle = True
255
+ source.has_cycle_edges = True
256
+ target.has_cycle_edges = True
257
+
258
+ async def honor(self, source: Vertex, target: Vertex) -> None:
259
+ """Fulfills the contract by setting the result of the source vertex to the target vertex's parameter.
260
+
261
+ If the edge is runnable, the source vertex is run with the message text and the target vertex's
262
+ root_field param is set to the
263
+ result. If the edge is not runnable, the target vertex's parameter is set to the result.
264
+ :param message: The message object to be processed if the edge is runnable.
265
+ """
266
+ if self.is_fulfilled:
267
+ return
268
+
269
+ if not source.built:
270
+ # The system should be read-only, so we should not be building vertices
271
+ # that are not already built.
272
+ msg = f"Source vertex {source.id} is not built."
273
+ raise ValueError(msg)
274
+
275
+ if self.matched_type == "Text":
276
+ self.result = source.built_result
277
+ else:
278
+ self.result = source.built_object
279
+
280
+ target.params[self.target_param] = self.result
281
+ self.is_fulfilled = True
282
+
283
+ async def get_result_from_source(self, source: Vertex, target: Vertex):
284
+ # Fulfill the contract if it has not been fulfilled.
285
+ if not self.is_fulfilled:
286
+ await self.honor(source, target)
287
+
288
+ # If the target vertex is a power component we log messages
289
+ if (
290
+ target.vertex_type == "ChatOutput"
291
+ and isinstance(target.params.get(INPUT_FIELD_NAME), str | dict)
292
+ and target.params.get("message") == ""
293
+ ):
294
+ return self.result
295
+ return self.result
296
+
297
+ def __repr__(self) -> str:
298
+ str_repr = super().__repr__()
299
+ # Add a symbol to show this is a cycle edge
300
+ return f"{str_repr} 🔄"