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,60 @@
1
+ import re
2
+ import threading
3
+ from contextlib import contextmanager
4
+ from pathlib import Path
5
+
6
+ from filelock import FileLock
7
+ from platformdirs import user_cache_dir
8
+
9
+
10
+ class KeyedMemoryLockManager:
11
+ """A manager for acquiring and releasing memory locks based on a key."""
12
+
13
+ def __init__(self) -> None:
14
+ self.locks: dict[str, threading.Lock] = {}
15
+ self.global_lock = threading.Lock()
16
+
17
+ def _get_lock(self, key: str):
18
+ with self.global_lock:
19
+ if key not in self.locks:
20
+ self.locks[key] = threading.Lock()
21
+ return self.locks[key]
22
+
23
+ @contextmanager
24
+ def lock(self, key: str):
25
+ lock = self._get_lock(key)
26
+ lock.acquire()
27
+ try:
28
+ yield
29
+ finally:
30
+ lock.release()
31
+
32
+
33
+ class KeyedWorkerLockManager:
34
+ """A manager for acquiring locks between workers based on a key."""
35
+
36
+ def __init__(self) -> None:
37
+ self.locks_dir = Path(user_cache_dir("langflow"), ensure_exists=True) / "worker_locks"
38
+
39
+ @staticmethod
40
+ def _validate_key(key: str) -> bool:
41
+ """Validate that the string only contains alphanumeric characters and underscores.
42
+
43
+ Parameters:
44
+ s (str): The string to validate.
45
+
46
+ Returns:
47
+ bool: True if the string is valid, False otherwise.
48
+ """
49
+ pattern = re.compile(r"^\w+$")
50
+ return bool(pattern.match(key))
51
+
52
+ @contextmanager
53
+ def lock(self, key: str):
54
+ if not self._validate_key(key):
55
+ msg = f"Invalid key: {key}"
56
+ raise ValueError(msg)
57
+
58
+ lock = FileLock(self.locks_dir / key)
59
+ with lock:
60
+ yield
@@ -0,0 +1,11 @@
1
+ """Connection string parser utilities for lfx package."""
2
+
3
+ from urllib.parse import quote
4
+
5
+
6
+ def transform_connection_string(connection_string) -> str:
7
+ """Transform connection string by encoding the password part."""
8
+ auth_part, db_url_name = connection_string.rsplit("@", 1)
9
+ protocol_user, password_string = auth_part.rsplit(":", 1)
10
+ encoded_password = quote(password_string)
11
+ return f"{protocol_user}:{encoded_password}@{db_url_name}"
lfx/utils/constants.py ADDED
@@ -0,0 +1,233 @@
1
+ from typing import Any
2
+
3
+ OPENAI_MODELS = [
4
+ "text-davinci-003",
5
+ "text-davinci-002",
6
+ "text-curie-001",
7
+ "text-babbage-001",
8
+ "text-ada-001",
9
+ ]
10
+ CHAT_OPENAI_MODELS = [
11
+ "gpt-4o",
12
+ "gpt-4o-mini",
13
+ "gpt-4-turbo-preview",
14
+ "gpt-4-0125-preview",
15
+ "gpt-4-1106-preview",
16
+ "gpt-4-vision-preview",
17
+ "gpt-3.5-turbo-0125",
18
+ "gpt-3.5-turbo-1106",
19
+ ]
20
+
21
+ REASONING_OPENAI_MODELS = [
22
+ "o1",
23
+ "o1-mini",
24
+ "o1-pro",
25
+ "o3-mini",
26
+ "o3",
27
+ "o3-pro",
28
+ "o4-mini",
29
+ "o4-mini-high",
30
+ ]
31
+
32
+ ANTHROPIC_MODELS = [
33
+ # largest model, ideal for a wide range of more complex tasks.
34
+ "claude-v1",
35
+ # An enhanced version of claude-v1 with a 100,000 token (roughly 75,000 word) context window.
36
+ "claude-v1-100k",
37
+ # A smaller model with far lower latency, sampling at roughly 40 words/sec!
38
+ "claude-instant-v1",
39
+ # Like claude-instant-v1 with a 100,000 token context window but retains its performance.
40
+ "claude-instant-v1-100k",
41
+ # Specific sub-versions of the above models:
42
+ # Vs claude-v1.2: better instruction-following, code, and non-English dialogue and writing.
43
+ "claude-v1.3",
44
+ # An enhanced version of claude-v1.3 with a 100,000 token (roughly 75,000 word) context window.
45
+ "claude-v1.3-100k",
46
+ # Vs claude-v1.1: small adv in general helpfulness, instruction following, coding, and other tasks.
47
+ "claude-v1.2",
48
+ # An earlier version of claude-v1.
49
+ "claude-v1.0",
50
+ # Latest version of claude-instant-v1. Better than claude-instant-v1.0 at most tasks.
51
+ "claude-instant-v1.1",
52
+ # Version of claude-instant-v1.1 with a 100K token context window.
53
+ "claude-instant-v1.1-100k",
54
+ # An earlier version of claude-instant-v1.
55
+ "claude-instant-v1.0",
56
+ ]
57
+
58
+ DEFAULT_PYTHON_FUNCTION = """
59
+ def python_function(text: str) -> str:
60
+ \"\"\"This is a default python function that returns the input text\"\"\"
61
+ return text
62
+ """
63
+
64
+
65
+ PYTHON_BASIC_TYPES = [str, bool, int, float, tuple, list, dict, set]
66
+ DIRECT_TYPES = [
67
+ "str",
68
+ "bool",
69
+ "dict",
70
+ "int",
71
+ "float",
72
+ "Any",
73
+ "prompt",
74
+ "code",
75
+ "NestedDict",
76
+ "table",
77
+ "slider",
78
+ "tab",
79
+ "sortableList",
80
+ "auth",
81
+ "connect",
82
+ "query",
83
+ "tools",
84
+ "mcp",
85
+ ]
86
+
87
+
88
+ LOADERS_INFO: list[dict[str, Any]] = [
89
+ {
90
+ "loader": "AirbyteJSONLoader",
91
+ "name": "Airbyte JSON (.jsonl)",
92
+ "import": "langchain_community.document_loaders.AirbyteJSONLoader",
93
+ "defaultFor": ["jsonl"],
94
+ "allowdTypes": ["jsonl"],
95
+ },
96
+ {
97
+ "loader": "JSONLoader",
98
+ "name": "JSON (.json)",
99
+ "import": "langchain_community.document_loaders.JSONLoader",
100
+ "defaultFor": ["json"],
101
+ "allowdTypes": ["json"],
102
+ },
103
+ {
104
+ "loader": "BSHTMLLoader",
105
+ "name": "BeautifulSoup4 HTML (.html, .htm)",
106
+ "import": "langchain_community.document_loaders.BSHTMLLoader",
107
+ "allowdTypes": ["html", "htm"],
108
+ },
109
+ {
110
+ "loader": "CSVLoader",
111
+ "name": "CSV (.csv)",
112
+ "import": "langchain_community.document_loaders.CSVLoader",
113
+ "defaultFor": ["csv"],
114
+ "allowdTypes": ["csv"],
115
+ },
116
+ {
117
+ "loader": "CoNLLULoader",
118
+ "name": "CoNLL-U (.conllu)",
119
+ "import": "langchain_community.document_loaders.CoNLLULoader",
120
+ "defaultFor": ["conllu"],
121
+ "allowdTypes": ["conllu"],
122
+ },
123
+ {
124
+ "loader": "EverNoteLoader",
125
+ "name": "EverNote (.enex)",
126
+ "import": "langchain_community.document_loaders.EverNoteLoader",
127
+ "defaultFor": ["enex"],
128
+ "allowdTypes": ["enex"],
129
+ },
130
+ {
131
+ "loader": "FacebookChatLoader",
132
+ "name": "Facebook Chat (.json)",
133
+ "import": "langchain_community.document_loaders.FacebookChatLoader",
134
+ "allowdTypes": ["json"],
135
+ },
136
+ {
137
+ "loader": "OutlookMessageLoader",
138
+ "name": "Outlook Message (.msg)",
139
+ "import": "langchain_community.document_loaders.OutlookMessageLoader",
140
+ "defaultFor": ["msg"],
141
+ "allowdTypes": ["msg"],
142
+ },
143
+ {
144
+ "loader": "PyPDFLoader",
145
+ "name": "PyPDF (.pdf)",
146
+ "import": "langchain_community.document_loaders.PyPDFLoader",
147
+ "defaultFor": ["pdf"],
148
+ "allowdTypes": ["pdf"],
149
+ },
150
+ {
151
+ "loader": "STRLoader",
152
+ "name": "Subtitle (.str)",
153
+ "import": "langchain_community.document_loaders.STRLoader",
154
+ "defaultFor": ["str"],
155
+ "allowdTypes": ["str"],
156
+ },
157
+ {
158
+ "loader": "TextLoader",
159
+ "name": "Text (.txt)",
160
+ "import": "langchain_community.document_loaders.TextLoader",
161
+ "defaultFor": ["txt"],
162
+ "allowdTypes": ["txt"],
163
+ },
164
+ {
165
+ "loader": "UnstructuredEmailLoader",
166
+ "name": "Unstructured Email (.eml)",
167
+ "import": "langchain_community.document_loaders.UnstructuredEmailLoader",
168
+ "defaultFor": ["eml"],
169
+ "allowdTypes": ["eml"],
170
+ },
171
+ {
172
+ "loader": "UnstructuredHTMLLoader",
173
+ "name": "Unstructured HTML (.html, .htm)",
174
+ "import": "langchain_community.document_loaders.UnstructuredHTMLLoader",
175
+ "defaultFor": ["html", "htm"],
176
+ "allowdTypes": ["html", "htm"],
177
+ },
178
+ {
179
+ "loader": "UnstructuredMarkdownLoader",
180
+ "name": "Unstructured Markdown (.md)",
181
+ "import": "langchain_community.document_loaders.UnstructuredMarkdownLoader",
182
+ "defaultFor": ["md", "mdx"],
183
+ "allowdTypes": ["md", "mdx"],
184
+ },
185
+ {
186
+ "loader": "UnstructuredPowerPointLoader",
187
+ "name": "Unstructured PowerPoint (.pptx)",
188
+ "import": "langchain_community.document_loaders.UnstructuredPowerPointLoader",
189
+ "defaultFor": ["pptx"],
190
+ "allowdTypes": ["pptx"],
191
+ },
192
+ {
193
+ "loader": "UnstructuredWordLoader",
194
+ "name": "Unstructured Word (.docx)",
195
+ "import": "langchain_community.document_loaders.UnstructuredWordLoader",
196
+ "defaultFor": ["docx"],
197
+ "allowdTypes": ["docx"],
198
+ },
199
+ ]
200
+
201
+
202
+ MESSAGE_SENDER_AI = "Machine"
203
+ MESSAGE_SENDER_USER = "User"
204
+ MESSAGE_SENDER_NAME_AI = "AI"
205
+ MESSAGE_SENDER_NAME_USER = "User"
206
+ EXTENSION_TO_CONTENT_TYPE = {
207
+ "json": "application/json",
208
+ "txt": "text/plain",
209
+ "csv": "text/csv",
210
+ "html": "text/html",
211
+ "pdf": "application/pdf",
212
+ "png": "image/png",
213
+ "jpg": "image/jpeg",
214
+ "jpeg": "image/jpeg",
215
+ "gif": "image/gif",
216
+ "svg": "image/svg+xml",
217
+ "mp3": "audio/mpeg",
218
+ "wav": "audio/wav",
219
+ "mp4": "video/mp4",
220
+ "webm": "video/webm",
221
+ "zip": "application/zip",
222
+ "tar": "application/x-tar",
223
+ "gz": "application/gzip",
224
+ "doc": "application/msword",
225
+ "docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
226
+ "xls": "application/vnd.ms-excel",
227
+ "xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
228
+ "ppt": "application/vnd.ms-powerpoint",
229
+ "pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
230
+ "xml": "application/xml",
231
+ "yaml": "application/x-yaml",
232
+ "yml": "application/x-yaml",
233
+ }
@@ -0,0 +1,212 @@
1
+ import json
2
+ from collections import Counter
3
+ from typing import Any
4
+
5
+ from lfx.schema.data import Data
6
+
7
+
8
+ def infer_list_type(items: list, max_samples: int = 5) -> str:
9
+ """Infer the type of a list by sampling its items.
10
+
11
+ Handles mixed types and provides more detailed type information.
12
+ """
13
+ if not items:
14
+ return "list(unknown)"
15
+
16
+ # Sample items (use all if less than max_samples)
17
+ samples = items[:max_samples]
18
+ types = [get_type_str(item) for item in samples]
19
+
20
+ # Count type occurrences
21
+ type_counter = Counter(types)
22
+
23
+ if len(type_counter) == 1:
24
+ # Single type
25
+ return f"list({types[0]})"
26
+ # Mixed types - show all found types
27
+ type_str = "|".join(sorted(type_counter.keys()))
28
+ return f"list({type_str})"
29
+
30
+
31
+ def get_type_str(value: Any) -> str:
32
+ """Get a detailed string representation of the type of a value.
33
+
34
+ Handles special cases and provides more specific type information.
35
+ """
36
+ if value is None:
37
+ return "null"
38
+ if isinstance(value, bool):
39
+ return "bool"
40
+ if isinstance(value, int):
41
+ return "int"
42
+ if isinstance(value, float):
43
+ return "float"
44
+ if isinstance(value, str):
45
+ # Check if string is actually a date/datetime
46
+ if any(date_pattern in value.lower() for date_pattern in ["date", "time", "yyyy", "mm/dd", "dd/mm", "yyyy-mm"]):
47
+ return "str(possible_date)"
48
+ # Check if it's a JSON string
49
+ try:
50
+ json.loads(value)
51
+ return "str(json)"
52
+ except (json.JSONDecodeError, TypeError):
53
+ pass
54
+ else:
55
+ return "str"
56
+ if isinstance(value, list | tuple | set):
57
+ return infer_list_type(list(value))
58
+ if isinstance(value, dict):
59
+ return "dict"
60
+ # Handle custom objects
61
+ return type(value).__name__
62
+
63
+
64
+ def analyze_value(
65
+ value: Any,
66
+ max_depth: int = 10,
67
+ current_depth: int = 0,
68
+ path: str = "",
69
+ *,
70
+ size_hints: bool = True,
71
+ include_samples: bool = True,
72
+ ) -> str | dict:
73
+ """Analyze a value and return its structure with additional metadata.
74
+
75
+ Args:
76
+ value: The value to analyze
77
+ max_depth: Maximum recursion depth
78
+ current_depth: Current recursion depth
79
+ path: Current path in the structure
80
+ size_hints: Whether to include size information for collections
81
+ include_samples: Whether to include sample structure for lists
82
+ """
83
+ if current_depth >= max_depth:
84
+ return f"max_depth_reached(depth={max_depth})"
85
+
86
+ try:
87
+ if isinstance(value, list | tuple | set):
88
+ length = len(value)
89
+ if length == 0:
90
+ return "list(unknown)"
91
+
92
+ type_info = infer_list_type(list(value))
93
+ size_info = f"[size={length}]" if size_hints else ""
94
+
95
+ # For lists of complex objects, include a sample of the structure
96
+ if (
97
+ include_samples
98
+ and length > 0
99
+ and isinstance(value, list | tuple)
100
+ and isinstance(value[0], dict | list)
101
+ and current_depth < max_depth - 1
102
+ ):
103
+ sample = analyze_value(
104
+ value[0],
105
+ max_depth,
106
+ current_depth + 1,
107
+ f"{path}[0]",
108
+ size_hints=size_hints,
109
+ include_samples=include_samples,
110
+ )
111
+ return f"{type_info}{size_info}, sample: {json.dumps(sample)}"
112
+
113
+ return f"{type_info}{size_info}"
114
+
115
+ if isinstance(value, dict):
116
+ result = {}
117
+ for k, v in value.items():
118
+ new_path = f"{path}.{k}" if path else k
119
+ try:
120
+ result[k] = analyze_value(
121
+ v,
122
+ max_depth,
123
+ current_depth + 1,
124
+ new_path,
125
+ size_hints=size_hints,
126
+ include_samples=include_samples,
127
+ )
128
+ except Exception as e: # noqa: BLE001
129
+ result[k] = f"error({e!s})"
130
+ return result
131
+
132
+ return get_type_str(value)
133
+
134
+ except Exception as e: # noqa: BLE001
135
+ return f"error({e!s})"
136
+
137
+
138
+ def get_data_structure(
139
+ data_obj: Data | dict,
140
+ max_depth: int = 10,
141
+ max_sample_size: int = 3,
142
+ *,
143
+ size_hints: bool = True,
144
+ include_sample_values: bool = False,
145
+ include_sample_structure: bool = True,
146
+ ) -> dict:
147
+ """Convert a Data object or dictionary into a detailed schema representation.
148
+
149
+ Args:
150
+ data_obj: The Data object or dictionary to analyze
151
+ max_depth: Maximum depth for nested structures
152
+ size_hints: Include size information for collections
153
+ include_sample_values: Whether to include sample values in the output
154
+ include_sample_structure: Whether to include sample structure for lists
155
+ max_sample_size: Maximum number of sample values to include
156
+
157
+ Returns:
158
+ dict: A dictionary containing:
159
+ - structure: The structure of the data
160
+ - samples: (optional) Sample values from the data
161
+
162
+ Example:
163
+ >>> data = {
164
+ ... "name": "John",
165
+ ... "scores": [1, 2, 3, 4, 5],
166
+ ... "details": {
167
+ ... "age": 30,
168
+ ... "cities": ["NY", "LA", "SF", "CHI"],
169
+ ... "metadata": {
170
+ ... "created": "2023-01-01",
171
+ ... "tags": ["user", "admin", 123]
172
+ ... }
173
+ ... }
174
+ ... }
175
+ >>> result = get_data_structure(data)
176
+ {
177
+ "structure": {
178
+ "name": "str",
179
+ "scores": "list(int)[size=5]",
180
+ "details": {
181
+ "age": "int",
182
+ "cities": "list(str)[size=4]",
183
+ "metadata": {
184
+ "created": "str(possible_date)",
185
+ "tags": "list(str|int)[size=3]"
186
+ }
187
+ }
188
+ }
189
+ }
190
+ """
191
+ # Handle both Data objects and dictionaries
192
+ data = data_obj.data if isinstance(data_obj, Data) else data_obj
193
+
194
+ result = {
195
+ "structure": analyze_value(
196
+ data, max_depth=max_depth, size_hints=size_hints, include_samples=include_sample_structure
197
+ )
198
+ }
199
+
200
+ if include_sample_values:
201
+ result["samples"] = get_sample_values(data, max_items=max_sample_size)
202
+
203
+ return result
204
+
205
+
206
+ def get_sample_values(data: Any, max_items: int = 3) -> Any:
207
+ """Get sample values from a data structure, handling nested structures."""
208
+ if isinstance(data, list | tuple | set):
209
+ return [get_sample_values(item) for item in list(data)[:max_items]]
210
+ if isinstance(data, dict):
211
+ return {k: get_sample_values(v, max_items) for k, v in data.items()}
212
+ return data
@@ -0,0 +1,22 @@
1
+ def format_syntax_error_message(exc: SyntaxError) -> str:
2
+ """Format a SyntaxError message for returning to the frontend."""
3
+ if exc.text is None:
4
+ return f"Syntax error in code. Error on line {exc.lineno}"
5
+ return f"Syntax error in code. Error on line {exc.lineno}: {exc.text.strip()}"
6
+
7
+
8
+ def get_causing_exception(exc: BaseException) -> BaseException:
9
+ """Get the causing exception from an exception."""
10
+ if hasattr(exc, "__cause__") and exc.__cause__:
11
+ return get_causing_exception(exc.__cause__)
12
+ return exc
13
+
14
+
15
+ def format_exception_message(exc: Exception) -> str:
16
+ """Format an exception message for returning to the frontend."""
17
+ # We need to check if the __cause__ is a SyntaxError
18
+ # If it is, we need to return the message of the SyntaxError
19
+ causing_exception = get_causing_exception(exc)
20
+ if isinstance(causing_exception, SyntaxError):
21
+ return format_syntax_error_message(causing_exception)
22
+ return str(exc)
lfx/utils/helpers.py ADDED
@@ -0,0 +1,34 @@
1
+ """Helper utility functions for lfx package."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import mimetypes
6
+ from typing import TYPE_CHECKING
7
+
8
+ from lfx.utils.constants import EXTENSION_TO_CONTENT_TYPE
9
+
10
+ if TYPE_CHECKING:
11
+ from pathlib import Path
12
+
13
+
14
+ def get_mime_type(file_path: str | Path) -> str:
15
+ """Get the MIME type of a file based on its extension.
16
+
17
+ Args:
18
+ file_path: Path to the file
19
+
20
+ Returns:
21
+ MIME type string (e.g., 'image/jpeg', 'image/png')
22
+
23
+ Raises:
24
+ ValueError: If MIME type cannot be determined
25
+ """
26
+ mime_type, _ = mimetypes.guess_type(str(file_path))
27
+ if mime_type is None:
28
+ msg = f"Could not determine MIME type for: {file_path}"
29
+ raise ValueError(msg)
30
+ return mime_type
31
+
32
+
33
+ def build_content_type_from_extension(extension: str):
34
+ return EXTENSION_TO_CONTENT_TYPE.get(extension.lower(), "application/octet-stream")
lfx/utils/image.py ADDED
@@ -0,0 +1,79 @@
1
+ """Image utility functions for lfx package."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import base64
6
+ from functools import lru_cache
7
+ from pathlib import Path
8
+
9
+ from lfx.utils.helpers import get_mime_type
10
+
11
+
12
+ def convert_image_to_base64(image_path: str | Path) -> str:
13
+ """Convert an image file to a base64 encoded string.
14
+
15
+ Args:
16
+ image_path: Path to the image file
17
+
18
+ Returns:
19
+ Base64 encoded string of the image
20
+
21
+ Raises:
22
+ FileNotFoundError: If the image file doesn't exist
23
+ """
24
+ image_path = Path(image_path)
25
+ if not image_path.exists():
26
+ msg = f"Image file not found: {image_path}"
27
+ raise FileNotFoundError(msg)
28
+
29
+ with image_path.open("rb") as image_file:
30
+ return base64.b64encode(image_file.read()).decode("utf-8")
31
+
32
+
33
+ def create_data_url(image_path: str | Path, mime_type: str | None = None) -> str:
34
+ """Create a data URL from an image file.
35
+
36
+ Args:
37
+ image_path: Path to the image file
38
+ mime_type: MIME type of the image. If None, will be auto-detected
39
+
40
+ Returns:
41
+ Data URL string in format: data:mime/type;base64,{base64_data}
42
+
43
+ Raises:
44
+ FileNotFoundError: If the image file doesn't exist
45
+ """
46
+ image_path = Path(image_path)
47
+ if not image_path.exists():
48
+ msg = f"Image file not found: {image_path}"
49
+ raise FileNotFoundError(msg)
50
+
51
+ if mime_type is None:
52
+ mime_type = get_mime_type(image_path)
53
+
54
+ base64_data = convert_image_to_base64(image_path)
55
+ return f"data:{mime_type};base64,{base64_data}"
56
+
57
+
58
+ @lru_cache(maxsize=50)
59
+ def create_image_content_dict(
60
+ image_path: str | Path, mime_type: str | None = None, model_name: str | None = None
61
+ ) -> dict:
62
+ """Create a content dictionary for multimodal inputs from an image file.
63
+
64
+ Args:
65
+ image_path: Path to the image file
66
+ mime_type: MIME type of the image. If None, will be auto-detected
67
+ model_name: Optional model parameter to determine content dict structure
68
+
69
+ Returns:
70
+ Content dictionary with type and image_url fields
71
+
72
+ Raises:
73
+ FileNotFoundError: If the image file doesn't exist
74
+ """
75
+ data_url = create_data_url(image_path, mime_type)
76
+
77
+ if model_name == "OllamaModel":
78
+ return {"type": "image_url", "source_type": "url", "image_url": data_url}
79
+ return {"type": "image", "source_type": "url", "url": data_url}