langflow-base-nightly 0.5.0.dev38__py3-none-any.whl → 0.5.1.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. langflow/alembic/versions/0882f9657f22_encrypt_existing_mcp_auth_settings_.py +122 -0
  2. langflow/api/router.py +2 -0
  3. langflow/api/v1/__init__.py +2 -0
  4. langflow/api/v1/endpoints.py +7 -1
  5. langflow/api/v1/mcp_projects.py +373 -52
  6. langflow/api/v1/openai_responses.py +545 -0
  7. langflow/api/v1/schemas.py +1 -2
  8. langflow/components/FAISS/__init__.py +34 -0
  9. langflow/components/agents/agent.py +246 -52
  10. langflow/components/cassandra/__init__.py +40 -0
  11. langflow/components/chroma/__init__.py +34 -0
  12. langflow/components/clickhouse/__init__.py +34 -0
  13. langflow/components/couchbase/__init__.py +34 -0
  14. langflow/components/data/file.py +302 -376
  15. langflow/components/datastax/__init__.py +3 -3
  16. langflow/components/docling/docling_inline.py +56 -4
  17. langflow/components/elastic/__init__.py +37 -0
  18. langflow/components/milvus/__init__.py +34 -0
  19. langflow/components/mongodb/__init__.py +34 -0
  20. langflow/components/nvidia/nvidia_ingest.py +3 -2
  21. langflow/components/ollama/ollama.py +1 -0
  22. langflow/components/perplexity/perplexity.py +3 -13
  23. langflow/components/pgvector/__init__.py +34 -0
  24. langflow/components/pinecone/__init__.py +34 -0
  25. langflow/components/qdrant/__init__.py +34 -0
  26. langflow/components/redis/__init__.py +36 -2
  27. langflow/components/redis/redis.py +75 -29
  28. langflow/components/redis/redis_chat.py +43 -0
  29. langflow/components/supabase/__init__.py +37 -0
  30. langflow/components/upstash/__init__.py +34 -0
  31. langflow/components/vectara/__init__.py +37 -0
  32. langflow/components/vectorstores/__init__.py +0 -69
  33. langflow/components/vectorstores/local_db.py +1 -0
  34. langflow/components/weaviate/__init__.py +34 -0
  35. langflow/components/youtube/channel.py +1 -1
  36. langflow/custom/custom_component/custom_component.py +11 -0
  37. langflow/custom/dependency_analyzer.py +165 -0
  38. langflow/custom/utils.py +34 -16
  39. langflow/frontend/assets/{SlackIcon-BhW6H3JR.js → SlackIcon-Cr3Q15Px.js} +1 -1
  40. langflow/frontend/assets/{Wikipedia-Dx5jbiy3.js → Wikipedia-GxM5sPdM.js} +1 -1
  41. langflow/frontend/assets/{Wolfram-CIyonzwo.js → Wolfram-BN3-VOCA.js} +1 -1
  42. langflow/frontend/assets/{index-DOEvKC2X.js → index-28oOcafk.js} +1 -1
  43. langflow/frontend/assets/{index-Bhv79Zso.js → index-2wSXqBtB.js} +1 -1
  44. langflow/frontend/assets/{index-BRmSeoWR.js → index-3wW7BClE.js} +1 -1
  45. langflow/frontend/assets/{index-eUkS6iJM.js → index-6pyH3ZJB.js} +1 -1
  46. langflow/frontend/assets/{index-Cr5v2ave.js → index-AWCSdofD.js} +1 -1
  47. langflow/frontend/assets/{index-C27Jj_26.js → index-B2Zgv_xv.js} +1 -1
  48. langflow/frontend/assets/{index-BKKrUElc.js → index-B2ptVQGM.js} +1 -1
  49. langflow/frontend/assets/{index-BnAFhkSN.js → index-B3TANVes.js} +1 -1
  50. langflow/frontend/assets/{index-hZUcL0MZ.js → index-B4yCvZKV.js} +1 -1
  51. langflow/frontend/assets/{index-BPR2mEFC.js → index-BC65VuWx.js} +1 -1
  52. langflow/frontend/assets/{index-CgU7KF4I.js → index-BCDSei1q.js} +1 -1
  53. langflow/frontend/assets/{index-CzHzeZuA.js → index-BJy50PvP.js} +1 -1
  54. langflow/frontend/assets/{index-DkGhPNeA.js → index-BKseQQ2I.js} +1 -1
  55. langflow/frontend/assets/{index-BVFaF7HW.js → index-BLTxEeTi.js} +1 -1
  56. langflow/frontend/assets/{index-cEXY6V06.js → index-BRg1f4Mu.js} +1 -1
  57. langflow/frontend/assets/{index-C2eQmQsn.js → index-BS8Vo8nc.js} +1 -1
  58. langflow/frontend/assets/{index-gdb7XMS8.js → index-BTKOU4xC.js} +1 -1
  59. langflow/frontend/assets/{index-U9GWm1eH.js → index-BVwJDmw-.js} +1 -1
  60. langflow/frontend/assets/{index-BWt5xGeA.js → index-BWYuQ2Sj.js} +1 -1
  61. langflow/frontend/assets/{index-Dx-Z87KT.js → index-BWdLILDG.js} +1 -1
  62. langflow/frontend/assets/{index-paQEWYGT.js → index-BZcw4827.js} +1 -1
  63. langflow/frontend/assets/{index-BDQrd7Tj.js → index-Bbi87Ve4.js} +1 -1
  64. langflow/frontend/assets/{index-vJOO5U8M.js → index-Bf0IYKLd.js} +1 -1
  65. langflow/frontend/assets/{index-1Q3VBqKn.js → index-Bg5nrMRh.js} +1 -1
  66. langflow/frontend/assets/{index-BFQ8KFK0.js → index-BiC280Nx.js} +1 -1
  67. langflow/frontend/assets/{index-CFNTYfFK.js → index-BiKKN6FR.js} +1 -1
  68. langflow/frontend/assets/{index-BPfdqCc_.js → index-Bief6eyJ.js} +1 -1
  69. langflow/frontend/assets/{index-Cxy9sEpy.js → index-BkXec1Yf.js} +1 -1
  70. langflow/frontend/assets/{index-D4tjMhfY.js → index-Bnl6QHtP.js} +1 -1
  71. langflow/frontend/assets/{index-BD7Io1hL.js → index-BpxbUiZD.js} +1978 -1978
  72. langflow/frontend/assets/{index-Ch5r0oW6.js → index-BrJV8psX.js} +1 -1
  73. langflow/frontend/assets/{index-DOQDkSoK.js → index-BwLWcUXL.js} +1 -1
  74. langflow/frontend/assets/{index-CMHpjHZl.js → index-Bx7dBY26.js} +1 -1
  75. langflow/frontend/assets/{index-CbnWRlYY.js → index-C-EdnFdA.js} +1 -1
  76. langflow/frontend/assets/{index-DljpLeCW.js → index-C-Xfg4cD.js} +1 -1
  77. langflow/frontend/assets/{index-Bwi4flFg.js → index-C1f2wMat.js} +1 -1
  78. langflow/frontend/assets/index-C1xroOlH.css +1 -0
  79. langflow/frontend/assets/{index-D6CSIrp1.js → index-C3KequvP.js} +1 -1
  80. langflow/frontend/assets/{index-BYjw7Gk3.js → index-C3ZjKdCD.js} +1 -1
  81. langflow/frontend/assets/{index-DIKUsGLF.js → index-C3l0zYn0.js} +1 -1
  82. langflow/frontend/assets/{index-CfPBgkqg.js → index-C3yvArUT.js} +1 -1
  83. langflow/frontend/assets/{index-CsLQiWNf.js → index-C9Cxnkl8.js} +1 -1
  84. langflow/frontend/assets/{index-mzl9ULw5.js → index-CBc8fEAE.js} +1 -1
  85. langflow/frontend/assets/{index-CEJNWPhA.js → index-CBvrGgID.js} +1 -1
  86. langflow/frontend/assets/{index-DwfHWnX7.js → index-CD-PqGCY.js} +1 -1
  87. langflow/frontend/assets/{index-dyXKnkMi.js → index-CGO1CiUr.js} +1 -1
  88. langflow/frontend/assets/{index-Dka_Rk4-.js → index-CH5UVA9b.js} +1 -1
  89. langflow/frontend/assets/{index-uiKla4UR.js → index-CLJeJYjH.js} +1 -1
  90. langflow/frontend/assets/{index-D9kwEzPB.js → index-CMZ79X-Y.js} +1 -1
  91. langflow/frontend/assets/{index-BrVhdPZb.js → index-CMzfJKiW.js} +1 -1
  92. langflow/frontend/assets/{index-Bct1s6__.js → index-CNw1H-Wc.js} +1 -1
  93. langflow/frontend/assets/{index-B7uEuOPK.js → index-CPHEscq9.js} +1 -1
  94. langflow/frontend/assets/{index-ekfMOqrF.js → index-CRPKJZw9.js} +1 -1
  95. langflow/frontend/assets/{index-G4ro0MjT.js → index-CRPyCfYy.js} +1 -1
  96. langflow/frontend/assets/{index-CSu8KHOi.js → index-CRcMqCIj.js} +1 -1
  97. langflow/frontend/assets/{index-DsoX2o1S.js → index-CUVDws8F.js} +1 -1
  98. langflow/frontend/assets/{index-r_8gs4nL.js → index-CVWQfRYZ.js} +1 -1
  99. langflow/frontend/assets/{index-7hzXChQz.js → index-CVl6MbaM.js} +1 -1
  100. langflow/frontend/assets/{index-B8UR8v-Q.js → index-CVwWoX99.js} +1 -1
  101. langflow/frontend/assets/{index-Dda2u_yz.js → index-CWPzZtSx.js} +1 -1
  102. langflow/frontend/assets/{index-BKeZt2hQ.js → index-CZqRL9DE.js} +1 -1
  103. langflow/frontend/assets/{index-DHngW1k8.js → index-CdIf07Rw.js} +1 -1
  104. langflow/frontend/assets/{index-C--IDAyc.js → index-Cewy7JZE.js} +1 -1
  105. langflow/frontend/assets/{index-DZP_SaHb.js → index-CfwLpbMM.js} +1 -1
  106. langflow/frontend/assets/{index-CuCM7Wu7.js → index-CiR1dxI4.js} +1 -1
  107. langflow/frontend/assets/{index-Xi4TplbI.js → index-CiixOzDG.js} +1 -1
  108. langflow/frontend/assets/{index-BLYw9MK2.js → index-ClsuDmR6.js} +1 -1
  109. langflow/frontend/assets/{index-DMCWDJOl.js → index-CmEYYRN1.js} +1 -1
  110. langflow/frontend/assets/{index-CrAF-31Y.js → index-Co20d-eQ.js} +1 -1
  111. langflow/frontend/assets/{index-DXAfIEvs.js → index-CpzXS6md.js} +1 -1
  112. langflow/frontend/assets/{index-BmYJJ5YS.js → index-Cqpzl1J4.js} +1 -1
  113. langflow/frontend/assets/{index-KWY77KfV.js → index-CtVIONP2.js} +1 -1
  114. langflow/frontend/assets/{index-B3KCdQ91.js → index-CuFXdTx4.js} +1 -1
  115. langflow/frontend/assets/{index-p2kStSPe.js → index-Cyd2HtHK.js} +1 -1
  116. langflow/frontend/assets/{index-CkjwSTSM.js → index-D-1tA8Dt.js} +1 -1
  117. langflow/frontend/assets/{index-BFf0HTFI.js → index-D-KY3kkq.js} +1 -1
  118. langflow/frontend/assets/{index-BYhcGLTV.js → index-D-_B1a8v.js} +1 -1
  119. langflow/frontend/assets/{index-Dr6pVDPI.js → index-D14EWPyZ.js} +1 -1
  120. langflow/frontend/assets/{index-BDuk0d7P.js → index-D2N3l-cw.js} +1 -1
  121. langflow/frontend/assets/{index-BvGQfVBD.js → index-D5ETnvJa.js} +1 -1
  122. langflow/frontend/assets/{index-D1oynC8a.js → index-D7kquVv2.js} +1 -1
  123. langflow/frontend/assets/{index-B1XqWJhG.js → index-DA6-bvgN.js} +1 -1
  124. langflow/frontend/assets/{index-DzIv3RyR.js → index-DDWBeudF.js} +1 -1
  125. langflow/frontend/assets/{index-BKlQbl-6.js → index-DDcMAaG4.js} +1 -1
  126. langflow/frontend/assets/{index-CkK25zZO.js → index-DHgomBdh.js} +1 -1
  127. langflow/frontend/assets/{index-Bj3lSwvZ.js → index-DJP-ss47.js} +1 -1
  128. langflow/frontend/assets/{index-DDXsm8tz.js → index-DQ7VYqQc.js} +1 -1
  129. langflow/frontend/assets/{index-BNQIbda3.js → index-DTqbvGC0.js} +1 -1
  130. langflow/frontend/assets/{index-BzoRPtTY.js → index-DUpri6zF.js} +1 -1
  131. langflow/frontend/assets/{index-35sspuLu.js → index-DV3utZDZ.js} +1 -1
  132. langflow/frontend/assets/{index-BpmqDOeZ.js → index-DXRfN4HV.js} +1 -1
  133. langflow/frontend/assets/{index-C0E3_MIK.js → index-Db9dYSzy.js} +1 -1
  134. langflow/frontend/assets/{index-C8K0r39B.js → index-DdtMEn6I.js} +1 -1
  135. langflow/frontend/assets/{index-BLsVo9iW.js → index-DfDhMHgQ.js} +1 -1
  136. langflow/frontend/assets/{index-BZFljdMa.js → index-Dfe7qfvf.js} +1 -1
  137. langflow/frontend/assets/{index-CyP3py8K.js → index-DhtZ5hx8.js} +1 -1
  138. langflow/frontend/assets/{index-w72fDjpG.js → index-DiB3CTo8.js} +1 -1
  139. langflow/frontend/assets/{index-CY7_TBTC.js → index-DiGWASY5.js} +1 -1
  140. langflow/frontend/assets/{index-CmSFKgiD.js → index-Dl5amdBz.js} +1 -1
  141. langflow/frontend/assets/{index-B0m53xKd.js → index-DlD4dXlZ.js} +1 -1
  142. langflow/frontend/assets/{index-DnVYJtVO.js → index-DmeiHnfl.js} +1 -1
  143. langflow/frontend/assets/index-Dmu-X5-4.js +1 -0
  144. langflow/frontend/assets/{index-CWYiSeWV.js → index-DpVWih90.js} +1 -1
  145. langflow/frontend/assets/{index-CjsommIr.js → index-DrDrcajG.js} +1 -1
  146. langflow/frontend/assets/{index-Un9pWxnP.js → index-Du-pc0KE.js} +1 -1
  147. langflow/frontend/assets/{index-oxHBZk2v.js → index-DwPkMTaY.js} +1 -1
  148. langflow/frontend/assets/{index-CgwykVGh.js → index-DwQEZe3C.js} +1 -1
  149. langflow/frontend/assets/{index-BmIx1cws.js → index-DyJFTK24.js} +1 -1
  150. langflow/frontend/assets/{index-0XQqYgdG.js → index-J38wh62w.js} +1 -1
  151. langflow/frontend/assets/{index-H7J7w7fa.js → index-Kwdl-e29.js} +1 -1
  152. langflow/frontend/assets/{index-CUKmGsI6.js → index-OwPvCmpW.js} +1 -1
  153. langflow/frontend/assets/{index-zV82kQ6k.js → index-Tw3Os-DN.js} +1 -1
  154. langflow/frontend/assets/{index-8cuhogZP.js → index-X0guhYF8.js} +1 -1
  155. langflow/frontend/assets/{index-BUse-kxM.js → index-dJWNxIRH.js} +1 -1
  156. langflow/frontend/assets/{index-DyqITq51.js → index-dcJ8-agu.js} +1 -1
  157. langflow/frontend/assets/{index-Cg53lrYh.js → index-eo2mAtL-.js} +1 -1
  158. langflow/frontend/assets/{index-DqbzUcI5.js → index-hG24k5xJ.js} +1 -1
  159. langflow/frontend/assets/{index-BQrVDjR1.js → index-h_aSZHf3.js} +1 -1
  160. langflow/frontend/assets/{index-kkA-qHB_.js → index-hbndqB9B.js} +1 -1
  161. langflow/frontend/assets/{index-DZxUIhWh.js → index-iJngutFo.js} +1 -1
  162. langflow/frontend/assets/{index-Dg8N3NSO.js → index-lTpteg8t.js} +1 -1
  163. langflow/frontend/assets/{index-DDhJVVel.js → index-lZX9AvZW.js} +1 -1
  164. langflow/frontend/assets/{index-BHhnpSkW.js → index-m8QA6VNM.js} +1 -1
  165. langflow/frontend/assets/{index-Bk4mTwnI.js → index-o0D2S7xW.js} +1 -1
  166. langflow/frontend/assets/{index-DJESSNJi.js → index-ovFJ_0J6.js} +1 -1
  167. langflow/frontend/assets/{index-DH6o91_s.js → index-pYJJOcma.js} +1 -1
  168. langflow/frontend/assets/{index-Bo-ww0Bb.js → index-sI75DsdM.js} +1 -1
  169. langflow/frontend/assets/{index-BcAgItH4.js → index-xvFOmxx4.js} +1 -1
  170. langflow/frontend/assets/{index-_cbGmjF4.js → index-z3SRY-mX.js} +1 -1
  171. langflow/frontend/assets/lazyIconImports-D97HEZkE.js +2 -0
  172. langflow/frontend/assets/{use-post-add-user-CvtuazTg.js → use-post-add-user-C0MdTpQ5.js} +1 -1
  173. langflow/frontend/index.html +2 -2
  174. langflow/graph/graph/base.py +4 -2
  175. langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +26 -0
  176. langflow/initial_setup/starter_projects/Basic Prompting.json +26 -0
  177. langflow/initial_setup/starter_projects/Blog Writer.json +56 -0
  178. langflow/initial_setup/starter_projects/Custom Component Generator.json +35 -0
  179. langflow/initial_setup/starter_projects/Document Q&A.json +27 -1
  180. langflow/initial_setup/starter_projects/Financial Report Parser.json +43 -0
  181. langflow/initial_setup/starter_projects/Hybrid Search RAG.json +83 -1
  182. langflow/initial_setup/starter_projects/Image Sentiment Analysis.json +43 -0
  183. langflow/initial_setup/starter_projects/Instagram Copywriter.json +49 -1
  184. langflow/initial_setup/starter_projects/Invoice Summarizer.json +40 -1
  185. langflow/initial_setup/starter_projects/Knowledge Ingestion.json +71 -0
  186. langflow/initial_setup/starter_projects/Knowledge Retrieval.json +63 -0
  187. langflow/initial_setup/starter_projects/Market Research.json +57 -1
  188. langflow/initial_setup/starter_projects/Meeting Summary.json +95 -0
  189. langflow/initial_setup/starter_projects/Memory Chatbot.json +35 -0
  190. langflow/initial_setup/starter_projects/News Aggregator.json +61 -1
  191. langflow/initial_setup/starter_projects/Nvidia Remix.json +67 -2
  192. langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +48 -1
  193. langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +44 -1
  194. langflow/initial_setup/starter_projects/Price Deal Finder.json +53 -1
  195. langflow/initial_setup/starter_projects/Research Agent.json +40 -1
  196. langflow/initial_setup/starter_projects/Research Translation Loop.json +66 -0
  197. langflow/initial_setup/starter_projects/SEO Keyword Generator.json +17 -0
  198. langflow/initial_setup/starter_projects/SaaS Pricing.json +27 -1
  199. langflow/initial_setup/starter_projects/Search agent.json +40 -1
  200. langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +72 -3
  201. langflow/initial_setup/starter_projects/Simple Agent.json +57 -1
  202. langflow/initial_setup/starter_projects/Social Media Agent.json +77 -1
  203. langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +35 -1
  204. langflow/initial_setup/starter_projects/Travel Planning Agents.json +51 -3
  205. langflow/initial_setup/starter_projects/Twitter Thread Generator.json +80 -0
  206. langflow/initial_setup/starter_projects/Vector Store RAG.json +110 -3
  207. langflow/initial_setup/starter_projects/Youtube Analysis.json +82 -1
  208. langflow/initial_setup/starter_projects/vector_store_rag.py +1 -1
  209. langflow/processing/process.py +3 -0
  210. langflow/schema/openai_responses_schemas.py +74 -0
  211. langflow/services/auth/mcp_encryption.py +104 -0
  212. langflow/services/settings/feature_flags.py +1 -1
  213. {langflow_base_nightly-0.5.0.dev38.dist-info → langflow_base_nightly-0.5.1.dev0.dist-info}/METADATA +1 -1
  214. {langflow_base_nightly-0.5.0.dev38.dist-info → langflow_base_nightly-0.5.1.dev0.dist-info}/RECORD +239 -219
  215. langflow/components/vectorstores/redis.py +0 -89
  216. langflow/frontend/assets/index-BWgIWfv2.js +0 -1
  217. langflow/frontend/assets/index-CqS7zir1.css +0 -1
  218. langflow/frontend/assets/lazyIconImports-DTNgvPE-.js +0 -2
  219. /langflow/components/{vectorstores → FAISS}/faiss.py +0 -0
  220. /langflow/components/{vectorstores → cassandra}/cassandra.py +0 -0
  221. /langflow/components/{datastax/cassandra.py → cassandra/cassandra_chat.py} +0 -0
  222. /langflow/components/{vectorstores → cassandra}/cassandra_graph.py +0 -0
  223. /langflow/components/{vectorstores → chroma}/chroma.py +0 -0
  224. /langflow/components/{vectorstores → clickhouse}/clickhouse.py +0 -0
  225. /langflow/components/{vectorstores → couchbase}/couchbase.py +0 -0
  226. /langflow/components/{vectorstores → datastax}/astradb.py +0 -0
  227. /langflow/components/{vectorstores → datastax}/astradb_graph.py +0 -0
  228. /langflow/components/{vectorstores → datastax}/graph_rag.py +0 -0
  229. /langflow/components/{vectorstores → datastax}/hcd.py +0 -0
  230. /langflow/components/{vectorstores → elastic}/elasticsearch.py +0 -0
  231. /langflow/components/{vectorstores → elastic}/opensearch.py +0 -0
  232. /langflow/components/{vectorstores → milvus}/milvus.py +0 -0
  233. /langflow/components/{vectorstores → mongodb}/mongodb_atlas.py +0 -0
  234. /langflow/components/{vectorstores → pgvector}/pgvector.py +0 -0
  235. /langflow/components/{vectorstores → pinecone}/pinecone.py +0 -0
  236. /langflow/components/{vectorstores → qdrant}/qdrant.py +0 -0
  237. /langflow/components/{vectorstores → supabase}/supabase.py +0 -0
  238. /langflow/components/{vectorstores → upstash}/upstash.py +0 -0
  239. /langflow/components/{vectorstores → vectara}/vectara.py +0 -0
  240. /langflow/components/{vectorstores → vectara}/vectara_rag.py +0 -0
  241. /langflow/components/{vectorstores → weaviate}/weaviate.py +0 -0
  242. {langflow_base_nightly-0.5.0.dev38.dist-info → langflow_base_nightly-0.5.1.dev0.dist-info}/WHEEL +0 -0
  243. {langflow_base_nightly-0.5.0.dev38.dist-info → langflow_base_nightly-0.5.1.dev0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,122 @@
1
+ """Encrypt existing MCP auth_settings credentials
2
+
3
+ Revision ID: 0882f9657f22
4
+ Revises: 1cb603706752
5
+ Create Date: 2025-08-21 20:11:26.504681
6
+
7
+ """
8
+ import json
9
+ from typing import Sequence, Union
10
+
11
+ from alembic import op
12
+ import sqlalchemy as sa
13
+ import sqlmodel
14
+ from sqlalchemy.engine.reflection import Inspector
15
+ from langflow.utils import migration
16
+
17
+
18
+ # revision identifiers, used by Alembic.
19
+ revision: str = '0882f9657f22'
20
+ down_revision: Union[str, None] = '1cb603706752'
21
+ branch_labels: Union[str, Sequence[str], None] = None
22
+ depends_on: Union[str, Sequence[str], None] = None
23
+
24
+
25
+ def upgrade() -> None:
26
+ """Encrypt sensitive fields in existing auth_settings data."""
27
+ conn = op.get_bind()
28
+
29
+ # Import encryption utilities
30
+ try:
31
+ from langflow.services.auth.mcp_encryption import encrypt_auth_settings
32
+ from langflow.services.deps import get_settings_service
33
+
34
+ # Check if the folder table exists
35
+ inspector = sa.inspect(conn)
36
+ if 'folder' not in inspector.get_table_names():
37
+ return
38
+
39
+ # Query all folders with auth_settings
40
+ result = conn.execute(
41
+ sa.text("SELECT id, auth_settings FROM folder WHERE auth_settings IS NOT NULL")
42
+ )
43
+
44
+ # Encrypt auth_settings for each folder
45
+ for row in result:
46
+ folder_id = row.id
47
+ auth_settings = row.auth_settings
48
+
49
+ if auth_settings:
50
+ try:
51
+ # Parse JSON if it's a string
52
+ if isinstance(auth_settings, str):
53
+ auth_settings_dict = json.loads(auth_settings)
54
+ else:
55
+ auth_settings_dict = auth_settings
56
+
57
+ # Encrypt sensitive fields
58
+ encrypted_settings = encrypt_auth_settings(auth_settings_dict)
59
+
60
+ # Update the record with encrypted data
61
+ if encrypted_settings:
62
+ conn.execute(
63
+ sa.text("UPDATE folder SET auth_settings = :auth_settings WHERE id = :id"),
64
+ {"auth_settings": json.dumps(encrypted_settings), "id": folder_id}
65
+ )
66
+ except Exception as e:
67
+ # Log the error but continue with other records
68
+ print(f"Warning: Failed to encrypt auth_settings for folder {folder_id}: {e}")
69
+
70
+ except ImportError as e:
71
+ # If encryption utilities are not available, skip the migration
72
+ print(f"Warning: Encryption utilities not available, skipping encryption migration: {e}")
73
+
74
+
75
+ def downgrade() -> None:
76
+ """Decrypt sensitive fields in auth_settings data (for rollback)."""
77
+ conn = op.get_bind()
78
+
79
+ # Import decryption utilities
80
+ try:
81
+ from langflow.services.auth.mcp_encryption import decrypt_auth_settings
82
+ from langflow.services.deps import get_settings_service
83
+
84
+ # Check if the folder table exists
85
+ inspector = sa.inspect(conn)
86
+ if 'folder' not in inspector.get_table_names():
87
+ return
88
+
89
+ # Query all folders with auth_settings
90
+ result = conn.execute(
91
+ sa.text("SELECT id, auth_settings FROM folder WHERE auth_settings IS NOT NULL")
92
+ )
93
+
94
+ # Decrypt auth_settings for each folder
95
+ for row in result:
96
+ folder_id = row.id
97
+ auth_settings = row.auth_settings
98
+
99
+ if auth_settings:
100
+ try:
101
+ # Parse JSON if it's a string
102
+ if isinstance(auth_settings, str):
103
+ auth_settings_dict = json.loads(auth_settings)
104
+ else:
105
+ auth_settings_dict = auth_settings
106
+
107
+ # Decrypt sensitive fields
108
+ decrypted_settings = decrypt_auth_settings(auth_settings_dict)
109
+
110
+ # Update the record with decrypted data
111
+ if decrypted_settings:
112
+ conn.execute(
113
+ sa.text("UPDATE folder SET auth_settings = :auth_settings WHERE id = :id"),
114
+ {"auth_settings": json.dumps(decrypted_settings), "id": folder_id}
115
+ )
116
+ except Exception as e:
117
+ # Log the error but continue with other records
118
+ print(f"Warning: Failed to decrypt auth_settings for folder {folder_id}: {e}")
119
+
120
+ except ImportError as e:
121
+ # If decryption utilities are not available, skip the migration
122
+ print(f"Warning: Decryption utilities not available, skipping decryption migration: {e}")
langflow/api/router.py CHANGED
@@ -13,6 +13,7 @@ from langflow.api.v1 import (
13
13
  mcp_projects_router,
14
14
  mcp_router,
15
15
  monitor_router,
16
+ openai_responses_router,
16
17
  projects_router,
17
18
  starter_projects_router,
18
19
  store_router,
@@ -50,6 +51,7 @@ router_v1.include_router(knowledge_bases_router)
50
51
  router_v1.include_router(mcp_router)
51
52
  router_v1.include_router(voice_mode_router)
52
53
  router_v1.include_router(mcp_projects_router)
54
+ router_v1.include_router(openai_responses_router)
53
55
 
54
56
  router_v2.include_router(files_router_v2)
55
57
  router_v2.include_router(mcp_router_v2)
@@ -9,6 +9,7 @@ from langflow.api.v1.login import router as login_router
9
9
  from langflow.api.v1.mcp import router as mcp_router
10
10
  from langflow.api.v1.mcp_projects import router as mcp_projects_router
11
11
  from langflow.api.v1.monitor import router as monitor_router
12
+ from langflow.api.v1.openai_responses import router as openai_responses_router
12
13
  from langflow.api.v1.projects import router as projects_router
13
14
  from langflow.api.v1.starter_projects import router as starter_projects_router
14
15
  from langflow.api.v1.store import router as store_router
@@ -29,6 +30,7 @@ __all__ = [
29
30
  "mcp_projects_router",
30
31
  "mcp_router",
31
32
  "monitor_router",
33
+ "openai_responses_router",
32
34
  "projects_router",
33
35
  "starter_projects_router",
34
36
  "store_router",
@@ -116,6 +116,7 @@ async def simple_run_flow(
116
116
  stream: bool = False,
117
117
  api_key_user: User | None = None,
118
118
  event_manager: EventManager | None = None,
119
+ context: dict | None = None,
119
120
  ):
120
121
  validate_input_and_tweaks(input_request)
121
122
  try:
@@ -127,7 +128,9 @@ async def simple_run_flow(
127
128
  raise ValueError(msg)
128
129
  graph_data = flow.data.copy()
129
130
  graph_data = process_tweaks(graph_data, input_request.tweaks or {}, stream=stream)
130
- graph = Graph.from_payload(graph_data, flow_id=flow_id_str, user_id=str(user_id), flow_name=flow.name)
131
+ graph = Graph.from_payload(
132
+ graph_data, flow_id=flow_id_str, user_id=str(user_id), flow_name=flow.name, context=context
133
+ )
131
134
  inputs = None
132
135
  if input_request.input_value is not None:
133
136
  inputs = [
@@ -228,6 +231,7 @@ async def run_flow_generator(
228
231
  api_key_user: User | None,
229
232
  event_manager: EventManager,
230
233
  client_consumed_queue: asyncio.Queue,
234
+ context: dict | None = None,
231
235
  ) -> None:
232
236
  """Executes a flow asynchronously and manages event streaming to the client.
233
237
 
@@ -240,6 +244,7 @@ async def run_flow_generator(
240
244
  api_key_user (User | None): Optional authenticated user running the flow
241
245
  event_manager (EventManager): Manages the streaming of events to the client
242
246
  client_consumed_queue (asyncio.Queue): Tracks client consumption of events
247
+ context (dict | None): Optional context to pass to the flow
243
248
 
244
249
  Events Generated:
245
250
  - "add_message": Sent when new messages are added during flow execution
@@ -260,6 +265,7 @@ async def run_flow_generator(
260
265
  stream=True,
261
266
  api_key_user=api_key_user,
262
267
  event_manager=event_manager,
268
+ context=context,
263
269
  )
264
270
  event_manager.on_end(data={"result": result.model_dump()})
265
271
  await client_consumed_queue.get()