langflow-base-nightly 0.5.0.dev13__py3-none-any.whl → 0.5.0.dev14__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 (182) hide show
  1. langflow/api/v1/mcp_projects.py +38 -8
  2. langflow/base/huggingface/model_bridge.py +10 -10
  3. langflow/base/models/aiml_constants.py +3 -3
  4. langflow/base/models/groq_constants.py +1 -1
  5. langflow/components/agents/mcp_component.py +1 -1
  6. langflow/components/aiml/aiml.py +6 -6
  7. langflow/components/aiml/aiml_embeddings.py +2 -2
  8. langflow/components/anthropic/anthropic.py +1 -4
  9. langflow/components/cleanlab/cleanlab_evaluator.py +15 -3
  10. langflow/components/datastax/astra_vectorize.py +1 -0
  11. langflow/components/datastax/astradb_cql.py +1 -1
  12. langflow/components/datastax/astradb_tool.py +3 -3
  13. langflow/components/datastax/cassandra.py +6 -6
  14. langflow/components/datastax/getenvvar.py +4 -4
  15. langflow/components/firecrawl/firecrawl_crawl_api.py +2 -2
  16. langflow/components/firecrawl/firecrawl_extract_api.py +2 -2
  17. langflow/components/firecrawl/firecrawl_map_api.py +2 -2
  18. langflow/components/firecrawl/firecrawl_scrape_api.py +2 -2
  19. langflow/components/google/google_generative_ai_embeddings.py +1 -1
  20. langflow/components/homeassistant/list_home_assistant_states.py +1 -1
  21. langflow/components/huggingface/huggingface.py +4 -4
  22. langflow/components/huggingface/huggingface_inference_api.py +4 -4
  23. langflow/components/langchain_utilities/character.py +1 -1
  24. langflow/components/langchain_utilities/csv_agent.py +1 -1
  25. langflow/components/maritalk/maritalk.py +4 -4
  26. langflow/components/scrapegraph/scrapegraph_markdownify_api.py +3 -5
  27. langflow/components/scrapegraph/scrapegraph_search_api.py +3 -5
  28. langflow/components/scrapegraph/scrapegraph_smart_scraper_api.py +3 -5
  29. langflow/components/searchapi/search.py +2 -2
  30. langflow/components/serper/__init__.py +3 -0
  31. langflow/components/serper/google_serper_api_core.py +74 -0
  32. langflow/components/tools/yahoo_finance.py +3 -3
  33. langflow/components/twelvelabs/convert_astra_results.py +6 -6
  34. langflow/components/twelvelabs/pegasus_index.py +7 -7
  35. langflow/components/twelvelabs/text_embeddings.py +3 -3
  36. langflow/components/twelvelabs/twelvelabs_pegasus.py +4 -4
  37. langflow/components/twelvelabs/video_embeddings.py +2 -2
  38. langflow/components/vectorstores/cassandra.py +6 -6
  39. langflow/components/vectorstores/cassandra_graph.py +6 -6
  40. langflow/components/vertexai/vertexai_embeddings.py +2 -2
  41. langflow/components/wolframalpha/wolfram_alpha_api.py +2 -2
  42. langflow/components/yahoosearch/yahoo.py +2 -2
  43. langflow/components/youtube/playlist.py +1 -1
  44. langflow/frontend/assets/{SlackIcon-B1waip4k.js → SlackIcon-Dih77qpd.js} +1 -1
  45. langflow/frontend/assets/{Wikipedia-C5dnUOP0.js → Wikipedia-BYJ2Af3g.js} +1 -1
  46. langflow/frontend/assets/{Wolfram-DhcO0RVc.js → Wolfram-Dwefo5CF.js} +1 -1
  47. langflow/frontend/assets/{index-Bbl1tT9J.js → index-0FLpX7Tg.js} +1 -1
  48. langflow/frontend/assets/{index-CViOvTFf.js → index-0e6ks9eh.js} +1 -1
  49. langflow/frontend/assets/{index-C7_J2NrZ.js → index-0j6Eh8mg.js} +1 -1
  50. langflow/frontend/assets/{index-FRFezpnl.js → index-1vcIbKDO.js} +1 -1
  51. langflow/frontend/assets/{index-JnJLq8vw.js → index-9bvMBjLs.js} +1 -1
  52. langflow/frontend/assets/{index-CRjDABKd.js → index-B3pdOyuf.js} +1 -1
  53. langflow/frontend/assets/{index-DvfpMNxC.js → index-B4cInCAq.js} +1 -1
  54. langflow/frontend/assets/{index-DQHDRmym.js → index-B4pjhyvx.js} +1 -1
  55. langflow/frontend/assets/{index-606CKdUf.js → index-B9wefblS.js} +1 -1
  56. langflow/frontend/assets/{index-C5kZL0cq.js → index-BDQxVnvr.js} +1 -1
  57. langflow/frontend/assets/{index-BTgluuBN.js → index-BE409kHd.js} +1 -1
  58. langflow/frontend/assets/{index-PR9CDiB2.js → index-BQCEC0gu.js} +1 -1
  59. langflow/frontend/assets/{index-DYrXxgrb.js → index-BWQ5qTiO.js} +1 -1
  60. langflow/frontend/assets/{index-Bt6nxewq.js → index-BXwJ5cR8.js} +1 -1
  61. langflow/frontend/assets/{index-C0HZtOht.js → index-BYfoKgN8.js} +1 -1
  62. langflow/frontend/assets/{index-DUE44GEX.js → index-BbftOyAC.js} +1 -1
  63. langflow/frontend/assets/{index-QtS6b7Sw.js → index-Bbp7ntpZ.js} +1 -1
  64. langflow/frontend/assets/{index-CDSjGlZV.js → index-BdW1Wcti.js} +1 -1
  65. langflow/frontend/assets/{index-CCIWuZBs.js → index-BddZvdbS.js} +1 -1
  66. langflow/frontend/assets/{index-ipP5SzLr.js → index-BfJqk3Qa.js} +1 -1
  67. langflow/frontend/assets/{index-nLSeiMV2.js → index-BjUQm9eD.js} +1 -1
  68. langflow/frontend/assets/{index-BwVK35FL.js → index-Bka5RpWd.js} +1 -1
  69. langflow/frontend/assets/{index-DvZa-h7F.js → index-BlRtKsWp.js} +1 -1
  70. langflow/frontend/assets/{index-Dm2EC55c.js → index-BoeHAEuu.js} +1 -1
  71. langflow/frontend/assets/{index-D6ea_8pm.js → index-BrNec6ov.js} +1 -1
  72. langflow/frontend/assets/{index-CKPKfZJn.js → index-BuqogkQK.js} +1 -1
  73. langflow/frontend/assets/{index-eGM7b_zA.js → index-C-ivL6Oq.js} +1 -1
  74. langflow/frontend/assets/{index-DB7TCTGT.js → index-C-m3Gxeg.js} +1 -1
  75. langflow/frontend/assets/{index-Dxt2wnqB.js → index-C3Q34fz1.js} +1 -1
  76. langflow/frontend/assets/{index-gm2XOLA2.js → index-C4um5lO1.js} +1 -1
  77. langflow/frontend/assets/{index-D9hSZOYT.js → index-C7KgFHtR.js} +1 -1
  78. langflow/frontend/assets/{index-CDpU78JK.js → index-CBLqgnTW.js} +1 -1
  79. langflow/frontend/assets/{index-Cg_tVm4-.js → index-CCHXRf-S.js} +1 -1
  80. langflow/frontend/assets/{index-D3dEuwpy.js → index-CDXCZqup.js} +1 -1
  81. langflow/frontend/assets/{index-BfeYY-C1.js → index-CJ_0A6bU.js} +1 -1
  82. langflow/frontend/assets/{index-DwSpFzJE.js → index-CJr0yQQm.js} +1 -1
  83. langflow/frontend/assets/{index-3biIaEbi.js → index-CPS_B_3m.js} +1 -1
  84. langflow/frontend/assets/{index-BYlJ6oLH.js → index-CPfIlUgy.js} +1 -1
  85. langflow/frontend/assets/{index-Cg4VEh3c.js → index-CRP-0Cno.js} +1 -1
  86. langflow/frontend/assets/{index-9TR2hnD_.js → index-CSjySuAl.js} +1 -1
  87. langflow/frontend/assets/{index-8DyHY_Bk.js → index-CSpknOPy.js} +1 -1
  88. langflow/frontend/assets/{index-BGoj1qt5.js → index-CWGTwNhw.js} +1 -1
  89. langflow/frontend/assets/{index-DCetRusr.js → index-CXhpBfIV.js} +1 -1
  90. langflow/frontend/assets/{index-DYv6Aras.js → index-CaKoGpFK.js} +1 -1
  91. langflow/frontend/assets/{index-is0kQpz3.js → index-Caa7-ZjU.js} +1 -1
  92. langflow/frontend/assets/{index-Cm0S83En.js → index-CcXL04vZ.js} +1 -1
  93. langflow/frontend/assets/{index-Lj5U_BEs.js → index-CdMGkzln.js} +1 -1
  94. langflow/frontend/assets/{index-Bn6oRo0n.js → index-CfjI49bl.js} +1 -1
  95. langflow/frontend/assets/{index-CgIcVOr8.js → index-ClDBMe5M.js} +1 -1
  96. langflow/frontend/assets/{index-Dn6DEQeW.js → index-ClTcbiQB.js} +1 -1
  97. langflow/frontend/assets/{index-BHZEUpSJ.js → index-Ct2D07-1.js} +1 -1
  98. langflow/frontend/assets/{index-ChqaoD3t.js → index-CtwaBIuc.js} +1 -1
  99. langflow/frontend/assets/{index-X_N2VjCI.js → index-Cy1Z9mqZ.js} +1 -1
  100. langflow/frontend/assets/{index-DBmHwu6w.js → index-CzTQJZeb.js} +1 -1
  101. langflow/frontend/assets/{index-DOW9ZSLB.js → index-D4TLAW8M.js} +1 -1
  102. langflow/frontend/assets/{index-CDbyKwTG.js → index-D4w_g_Yj.js} +1 -1
  103. langflow/frontend/assets/{index-CDEm9KAj.js → index-D9JJ-YmW.js} +1 -1
  104. langflow/frontend/assets/{index-CALzRXXv.js → index-DAQ1UvXA.js} +1 -1
  105. langflow/frontend/assets/{index-B5ZG67DK.js → index-DDEcx301.js} +1 -1
  106. langflow/frontend/assets/{index-Dcalb9GV.js → index-DDWn8yNa.js} +1 -1
  107. langflow/frontend/assets/{index-ewyyoy2D.js → index-DEj3_QOc.js} +1 -1
  108. langflow/frontend/assets/{index-DH7xKo5T.js → index-DFndfbIo.js} +1 -1
  109. langflow/frontend/assets/{index-Dh4QIx-9.js → index-DFrdxImX.js} +1 -1
  110. langflow/frontend/assets/{index-Ps_-SFhI.js → index-DIC3KsGk.js} +1 -1
  111. langflow/frontend/assets/{index-DpxIP5eR.js → index-DIojVSfM.js} +1 -1
  112. langflow/frontend/assets/{index-DtNmksPw.js → index-DIuJjilC.js} +1 -1
  113. langflow/frontend/assets/{index-CDuvFcaF.js → index-DKJhqrXk.js} +1 -1
  114. langflow/frontend/assets/{index-kQTNfH4u.js → index-DKYBbGfc.js} +1 -1
  115. langflow/frontend/assets/{index-C3HQLjdj.js → index-DLIMCqaS.js} +1 -1
  116. langflow/frontend/assets/{index-DOD107en.js → index-DMS9e31u.js} +1 -1
  117. langflow/frontend/assets/{index-DFTYUoaZ.js → index-DQ3NrxR5.js} +1 -1
  118. langflow/frontend/assets/{index-ZEtb94y9.js → index-DUjlAXCM.js} +1 -1
  119. langflow/frontend/assets/{index-rDnX1gJr.js → index-DW4Zpar0.js} +4 -4
  120. langflow/frontend/assets/{index-DZgXMtLr.js → index-DWTbYDTB.js} +1 -1
  121. langflow/frontend/assets/{index-CPg6geGH.js → index-DWV1ogyW.js} +1 -1
  122. langflow/frontend/assets/{index-BMXOUkQC.js → index-DYPb-6hQ.js} +1 -1
  123. langflow/frontend/assets/{index-D7Zt_u8q.js → index-DZtOD1aK.js} +1 -1
  124. langflow/frontend/assets/{index-D3JSU9T-.js → index-Db3Cn_km.js} +1 -1
  125. langflow/frontend/assets/{index-BSw4Njsa.js → index-DdDE8pS2.js} +1 -1
  126. langflow/frontend/assets/{index-CsndNop1.js → index-DdlgftGH.js} +1 -1
  127. langflow/frontend/assets/{index-C-s9qpIS.js → index-DfP_yugk.js} +1 -1
  128. langflow/frontend/assets/{index-VgSSRzOC.js → index-DiqbQn4U.js} +1 -1
  129. langflow/frontend/assets/{index-ZdUecE-Q.js → index-DjTyLfre.js} +1 -1
  130. langflow/frontend/assets/{index-C_euB6Gl.js → index-DlHyGyk4.js} +1 -1
  131. langflow/frontend/assets/{index-CLbIIEk2.js → index-Dl_rpmpN.js} +1 -1
  132. langflow/frontend/assets/{index-B6e8DnbV.js → index-DmeZAW4t.js} +1 -1
  133. langflow/frontend/assets/{index-Dym17axM.js → index-DnFDOT0V.js} +1 -1
  134. langflow/frontend/assets/{index-418YVFa2.js → index-DnkMuyPE.js} +1 -1
  135. langflow/frontend/assets/{index-DjQo2TKu.js → index-DqXXnlPS.js} +1 -1
  136. langflow/frontend/assets/{index-BCSQ18YB.js → index-DrRQZJiA.js} +1 -1
  137. langflow/frontend/assets/{index-BrG-lJ13.js → index-DsmXC4At.js} +1 -1
  138. langflow/frontend/assets/{index-DpVlWsbf.js → index-Du0mgu8Q.js} +1 -1
  139. langflow/frontend/assets/{index-DM_Uy5wE.js → index-DyuMqJGl.js} +1 -1
  140. langflow/frontend/assets/{index-BONWErnQ.js → index-F6P4Nsx9.js} +1 -1
  141. langflow/frontend/assets/{index-Nrq24q0b.js → index-FQM7XBHB.js} +1 -1
  142. langflow/frontend/assets/{index-BC_ZSBd8.js → index-GXQb4IIA.js} +1 -1
  143. langflow/frontend/assets/{index-CmGwOqUn.js → index-NOgYI4Gh.js} +1 -1
  144. langflow/frontend/assets/{index-DiC6aHWh.js → index-Ni5tP5BY.js} +1 -1
  145. langflow/frontend/assets/{index-BC8MvYGc.js → index-ODFFulIs.js} +1 -1
  146. langflow/frontend/assets/{index-DgAnAkZI.js → index-Od-TMMOG.js} +1 -1
  147. langflow/frontend/assets/{index-Bf5rmL-A.js → index-Q21I-exN.js} +1 -1
  148. langflow/frontend/assets/{index-XRYx-9PH.js → index-ShvuM_cY.js} +1 -1
  149. langflow/frontend/assets/{index-CXUUEanr.js → index-TgSu-Cbc.js} +1 -1
  150. langflow/frontend/assets/{index-DMumbC9j.js → index-WTd3SnSA.js} +1 -1
  151. langflow/frontend/assets/{index-VroAkSXX.js → index-_Cjgx9_G.js} +1 -1
  152. langflow/frontend/assets/{index-BBGrtgHW.js → index-a4CQk26U.js} +1 -1
  153. langflow/frontend/assets/{index-MzhQqWgp.js → index-aPyyJURh.js} +1 -1
  154. langflow/frontend/assets/{index-DKVaEmO7.js → index-bY3xdOGY.js} +1 -1
  155. langflow/frontend/assets/{index-DFiKJBMw.js → index-cZ9eFOpV.js} +1 -1
  156. langflow/frontend/assets/{index-m4Hpi_aX.js → index-dDc6uug0.js} +1 -1
  157. langflow/frontend/assets/{index-CBUjLnxi.js → index-e_wl8RuP.js} +1 -1
  158. langflow/frontend/assets/{index-gY4GknXS.js → index-fD2E60CT.js} +1 -1
  159. langflow/frontend/assets/{index-BU-Bn5mu.js → index-fwMiX4kt.js} +1 -1
  160. langflow/frontend/assets/{index-Casu8D9q.js → index-i-ZrtN24.js} +1 -1
  161. langflow/frontend/assets/{index-BlMOr3_J.js → index-k6JCMqk5.js} +1 -1
  162. langflow/frontend/assets/{index-kElqCHmt.js → index-mVr-HGGn.js} +1 -1
  163. langflow/frontend/assets/{index-zO8eyFDr.js → index-r5xGoeRV.js} +1 -1
  164. langflow/frontend/assets/{index-JXRrBiMq.js → index-xbHbckRN.js} +1 -1
  165. langflow/frontend/assets/{index-SG4iMGMH.js → index-y7BDV8V7.js} +1 -1
  166. langflow/frontend/assets/lazyIconImports-Dzra1iru.js +2 -0
  167. langflow/frontend/assets/{use-post-add-user-BanYOJbs.js → use-post-add-user-TW-1s-Ct.js} +1 -1
  168. langflow/frontend/index.html +1 -1
  169. langflow/initial_setup/starter_projects/Nvidia Remix.json +2 -2
  170. langflow/initial_setup/starter_projects/Search agent.json +3 -3
  171. langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +103 -312
  172. langflow/initial_setup/starter_projects/Travel Planning Agents.json +3 -3
  173. langflow/initial_setup/starter_projects/Youtube Analysis.json +84 -272
  174. langflow/serialization/constants.py +1 -1
  175. langflow/services/auth/utils.py +12 -2
  176. langflow/services/settings/feature_flags.py +1 -1
  177. langflow/services/utils.py +1 -10
  178. {langflow_base_nightly-0.5.0.dev13.dist-info → langflow_base_nightly-0.5.0.dev14.dist-info}/METADATA +1 -1
  179. {langflow_base_nightly-0.5.0.dev13.dist-info → langflow_base_nightly-0.5.0.dev14.dist-info}/RECORD +181 -179
  180. langflow/frontend/assets/lazyIconImports-GHEHdmsf.js +0 -2
  181. {langflow_base_nightly-0.5.0.dev13.dist-info → langflow_base_nightly-0.5.0.dev14.dist-info}/WHEEL +0 -0
  182. {langflow_base_nightly-0.5.0.dev13.dist-info → langflow_base_nightly-0.5.0.dev14.dist-info}/entry_points.txt +0 -0
@@ -369,7 +369,6 @@ async def install_mcp_config(
369
369
  os_type = platform.system()
370
370
  command = "uvx"
371
371
  mcp_tool = "mcp-composer" if FEATURE_FLAGS.mcp_composer else "mcp-proxy"
372
- args = [mcp_tool, sse_url]
373
372
 
374
373
  # Check if running on WSL (will appear as Linux but with Microsoft in release info)
375
374
  is_wsl = os_type == "Linux" and "microsoft" in platform.uname().release.lower()
@@ -400,21 +399,52 @@ async def install_mcp_config(
400
399
  except OSError as e:
401
400
  logger.warning("Failed to get WSL IP address: %s. Using default URL.", str(e))
402
401
 
402
+ # Configure args based on the MCP tool
403
+ oauth_env = None
404
+ if FEATURE_FLAGS.mcp_composer:
405
+ args = [mcp_tool, "--sse-url", sse_url]
406
+
407
+ # Check for auth settings and add auth parameters
408
+ if project.auth_settings:
409
+ from langflow.api.v1.schemas import AuthSettings
410
+
411
+ auth_settings = AuthSettings(**project.auth_settings)
412
+ args.extend(["--auth_type", auth_settings.auth_type])
413
+
414
+ oauth_env = {
415
+ "OAUTH_HOST": auth_settings.oauth_host,
416
+ "OAUTH_PORT": auth_settings.oauth_port,
417
+ "OAUTH_SERVER_URL": auth_settings.oauth_server_url,
418
+ "OAUTH_CALLBACK_PATH": auth_settings.oauth_callback_path,
419
+ "OAUTH_CLIENT_ID": auth_settings.oauth_client_id,
420
+ "OAUTH_CLIENT_SECRET": auth_settings.oauth_client_secret,
421
+ "OAUTH_AUTH_URL": auth_settings.oauth_auth_url,
422
+ "OAUTH_TOKEN_URL": auth_settings.oauth_token_url,
423
+ "OAUTH_MCP_SCOPE": auth_settings.oauth_mcp_scope,
424
+ "OAUTH_PROVIDER_SCOPE": auth_settings.oauth_provider_scope,
425
+ }
426
+ else:
427
+ args = [mcp_tool, sse_url]
428
+
403
429
  if os_type == "Windows":
404
430
  command = "cmd"
405
- args = ["/c", "uvx", mcp_tool, sse_url]
431
+ args = ["/c", "uvx", *args]
406
432
  logger.debug("Windows detected, using cmd command")
407
433
 
408
434
  name = project.name
409
435
 
410
436
  # Create the MCP configuration
437
+ server_config = {
438
+ "command": command,
439
+ "args": args,
440
+ }
441
+
442
+ # Add environment variables if mcp-composer feature flag is enabled and auth settings exist
443
+ if FEATURE_FLAGS.mcp_composer and oauth_env is not None:
444
+ server_config["env"] = oauth_env # type: ignore[assignment]
445
+
411
446
  mcp_config = {
412
- "mcpServers": {
413
- f"lf-{sanitize_mcp_name(name)[: (MAX_MCP_SERVER_NAME_LENGTH - 4)]}": {
414
- "command": command,
415
- "args": args,
416
- }
417
- }
447
+ "mcpServers": {f"lf-{sanitize_mcp_name(name)[: (MAX_MCP_SERVER_NAME_LENGTH - 4)]}": server_config}
418
448
  }
419
449
 
420
450
  server_name = f"lf-{sanitize_mcp_name(name)[: (MAX_MCP_SERVER_NAME_LENGTH - 4)]}"
@@ -3,19 +3,19 @@ from langchain_core.language_models.chat_models import BaseChatModel
3
3
  from langchain_core.messages import AIMessage, HumanMessage, SystemMessage, ToolCall
4
4
  from langchain_core.tools import BaseTool
5
5
 
6
- # Import HuggingFace Model base
6
+ # Import Hugging Face Model base
7
7
  from smolagents import Model, Tool
8
8
  from smolagents.models import ChatMessage, ChatMessageToolCall, ChatMessageToolCallDefinition
9
9
 
10
10
 
11
11
  def _lc_tool_call_to_hf_tool_call(tool_call: ToolCall) -> ChatMessageToolCall:
12
- """Convert a LangChain ToolCall to a HuggingFace ChatMessageToolCall.
12
+ """Convert a LangChain ToolCall to a Hugging Face ChatMessageToolCall.
13
13
 
14
14
  Args:
15
15
  tool_call (ToolCall): LangChain tool call to convert
16
16
 
17
17
  Returns:
18
- ChatMessageToolCall: Equivalent HuggingFace tool call
18
+ ChatMessageToolCall: Equivalent Hugging Face tool call
19
19
  """
20
20
  return ChatMessageToolCall(
21
21
  function=ChatMessageToolCallDefinition(name=tool_call.name, arguments=tool_call.args),
@@ -24,24 +24,24 @@ def _lc_tool_call_to_hf_tool_call(tool_call: ToolCall) -> ChatMessageToolCall:
24
24
 
25
25
 
26
26
  def _hf_tool_to_lc_tool(tool) -> BaseTool:
27
- """Convert a HuggingFace Tool to a LangChain BaseTool.
27
+ """Convert a Hugging Face Tool to a LangChain BaseTool.
28
28
 
29
29
  Args:
30
- tool (Tool): HuggingFace tool to convert
30
+ tool (Tool): Hugging Face tool to convert
31
31
 
32
32
  Returns:
33
33
  BaseTool: Equivalent LangChain tool
34
34
  """
35
35
  if not hasattr(tool, "langchain_tool"):
36
- msg = "HuggingFace Tool does not have a langchain_tool attribute"
36
+ msg = "Hugging Face Tool does not have a langchain_tool attribute"
37
37
  raise ValueError(msg)
38
38
  return tool.langchain_tool
39
39
 
40
40
 
41
41
  class LangChainHFModel(Model):
42
- """A class bridging HuggingFace's `Model` interface with a LangChain `BaseChatModel`.
42
+ """A class bridging Hugging Face's `Model` interface with a LangChain `BaseChatModel`.
43
43
 
44
- This adapter allows using any LangChain chat model with the HuggingFace interface.
44
+ This adapter allows using any LangChain chat model with the Hugging Face interface.
45
45
  It handles conversion of message formats and tool calls between the two frameworks.
46
46
 
47
47
  Usage:
@@ -68,7 +68,7 @@ class LangChainHFModel(Model):
68
68
  tools_to_call_from: list[Tool] | None = None,
69
69
  **kwargs,
70
70
  ) -> ChatMessage:
71
- """Process messages through the LangChain model and return HuggingFace format.
71
+ """Process messages through the LangChain model and return Hugging Face format.
72
72
 
73
73
  Args:
74
74
  messages: List of message dictionaries with 'role' and 'content' keys
@@ -78,7 +78,7 @@ class LangChainHFModel(Model):
78
78
  **kwargs: Additional arguments passed to the LangChain model
79
79
 
80
80
  Returns:
81
- ChatMessage: Response in HuggingFace format
81
+ ChatMessage: Response in Hugging Face format
82
82
  """
83
83
  if grammar:
84
84
  msg = "Grammar is not yet supported."
@@ -17,10 +17,10 @@ class AimlModels:
17
17
  response = client.get("https://api.aimlapi.com/models")
18
18
  response.raise_for_status()
19
19
  except httpx.RequestError as e:
20
- msg = "Failed to connect to the AIML API."
20
+ msg = "Failed to connect to the AI/ML API."
21
21
  raise APIConnectionError(msg) from e
22
22
  except httpx.HTTPStatusError as e:
23
- msg = f"AIML API responded with status code: {e.response.status_code}"
23
+ msg = f"AI/ML API responded with status code: {e.response.status_code}"
24
24
  raise APIError(
25
25
  message=msg,
26
26
  body=None,
@@ -31,7 +31,7 @@ class AimlModels:
31
31
  models = response.json().get("data", [])
32
32
  self.separate_models_by_type(models)
33
33
  except (ValueError, KeyError, TypeError) as e:
34
- msg = "Failed to parse response data from AIML API. The format may be incorrect."
34
+ msg = "Failed to parse response data from AI/ML API. The format may be incorrect."
35
35
  raise ValueError(msg) from e
36
36
 
37
37
  def separate_models_by_type(self, models):
@@ -97,7 +97,7 @@ GROQ_MODELS_DETAILED = [
97
97
  create_model_metadata( # OpenAI
98
98
  provider="Groq", name="whisper-large-v3-turbo", icon="Groq", not_supported=True
99
99
  ),
100
- create_model_metadata( # HuggingFace
100
+ create_model_metadata( # Hugging Face
101
101
  provider="Groq", name="distil-whisper-large-v3-en", icon="Groq", not_supported=True
102
102
  ),
103
103
  ]
@@ -454,7 +454,7 @@ class MCPToolsComponent(ComponentWithCache):
454
454
  kwargs = {}
455
455
  for arg in tool_args:
456
456
  value = getattr(self, arg.name, None)
457
- if value:
457
+ if value is not None:
458
458
  if isinstance(value, Message):
459
459
  kwargs[arg.name] = value.text
460
460
  else:
@@ -17,8 +17,8 @@ from langflow.inputs.inputs import (
17
17
 
18
18
 
19
19
  class AIMLModelComponent(LCModelComponent):
20
- display_name = "AIML"
21
- description = "Generates text using AIML LLMs."
20
+ display_name = "AI/ML API"
21
+ description = "Generates text using AI/ML API LLMs."
22
22
  icon = "AIML"
23
23
  name = "AIMLModel"
24
24
  documentation = "https://docs.aimlapi.com/api-reference"
@@ -42,15 +42,15 @@ class AIMLModelComponent(LCModelComponent):
42
42
  ),
43
43
  StrInput(
44
44
  name="aiml_api_base",
45
- display_name="AIML API Base",
45
+ display_name="AI/ML API Base",
46
46
  advanced=True,
47
- info="The base URL of the OpenAI API. Defaults to https://api.aimlapi.com . "
47
+ info="The base URL of the API. Defaults to https://api.aimlapi.com . "
48
48
  "You can change this to use other APIs like JinaChat, LocalAI and Prem.",
49
49
  ),
50
50
  SecretStrInput(
51
51
  name="api_key",
52
- display_name="AIML API Key",
53
- info="The AIML API Key to use for the OpenAI model.",
52
+ display_name="AI/ML API Key",
53
+ info="The AI/ML API Key to use for the OpenAI model.",
54
54
  advanced=False,
55
55
  value="AIML_API_KEY",
56
56
  required=True,
@@ -6,9 +6,9 @@ from langflow.io import SecretStrInput
6
6
 
7
7
 
8
8
  class AIMLEmbeddingsComponent(LCEmbeddingsModel):
9
- display_name = "AI/ML Embeddings"
9
+ display_name = "AI/ML API Embeddings"
10
10
  description = "Generate embeddings using the AI/ML API."
11
- icon = "AI/ML"
11
+ icon = "AIML"
12
12
  name = "AIMLEmbeddings"
13
13
 
14
14
  inputs = [
@@ -19,7 +19,7 @@ from langflow.schema.dotdict import dotdict
19
19
 
20
20
  class AnthropicModelComponent(LCModelComponent):
21
21
  display_name = "Anthropic"
22
- description = "Generate text using Anthropic Chat&Completion LLMs with prefill support."
22
+ description = "Generate text using Anthropic's Messages API and models."
23
23
  icon = "Anthropic"
24
24
  name = "AnthropicModel"
25
25
 
@@ -74,9 +74,6 @@ class AnthropicModelComponent(LCModelComponent):
74
74
  value=False,
75
75
  real_time_refresh=True,
76
76
  ),
77
- MessageTextInput(
78
- name="prefill", display_name="Prefill", info="Prefill text to guide the model's response.", advanced=True
79
- ),
80
77
  ]
81
78
 
82
79
  def build_model(self) -> LanguageModel: # type: ignore[type-var]
@@ -113,9 +113,21 @@ class CleanlabEvaluator(Component):
113
113
  ]
114
114
 
115
115
  outputs = [
116
- Output(display_name="Response", name="response_passthrough", method="pass_response", types=["Message"]),
117
- Output(display_name="Trust Score", name="score", method="get_score", types=["number"]),
118
- Output(display_name="Explanation", name="explanation", method="get_explanation", types=["Message"]),
116
+ Output(
117
+ display_name="Response",
118
+ name="response_passthrough",
119
+ method="pass_response",
120
+ types=["Message"],
121
+ group_outputs=True,
122
+ ),
123
+ Output(display_name="Trust Score", name="score", method="get_score", types=["number"], group_outputs=True),
124
+ Output(
125
+ display_name="Explanation",
126
+ name="explanation",
127
+ method="get_explanation",
128
+ types=["Message"],
129
+ group_outputs=True,
130
+ ),
119
131
  ]
120
132
 
121
133
  def _evaluate_once(self):
@@ -12,6 +12,7 @@ class AstraVectorizeComponent(Component):
12
12
  "This component is deprecated. Please use the Astra DB Component directly."
13
13
  )
14
14
  documentation: str = "https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html"
15
+ legacy = True
15
16
  icon = "AstraDB"
16
17
  name = "AstraVectorize"
17
18
 
@@ -277,7 +277,7 @@ class AstraDBCQLToolComponent(LCToolComponent):
277
277
  name (str, optional): The name of the tool.
278
278
 
279
279
  Returns:
280
- Tool: The built AstraDB tool.
280
+ Tool: The built Astra DB tool.
281
281
  """
282
282
  schema_dict = self.create_args_schema()
283
283
  return StructuredTool.from_function(
@@ -268,7 +268,7 @@ class AstraDBToolComponent(LCToolComponent):
268
268
  return tool
269
269
 
270
270
  def projection_args(self, input_str: str) -> dict | None:
271
- """Build the projection arguments for the AstraDB query."""
271
+ """Build the projection arguments for the Astra DB query."""
272
272
  elements = input_str.split(",")
273
273
  result = {}
274
274
 
@@ -329,7 +329,7 @@ class AstraDBToolComponent(LCToolComponent):
329
329
  raise ValueError(msg)
330
330
 
331
331
  def build_filter(self, args: dict, filter_settings: list) -> dict:
332
- """Build filter dictionary for AstraDB query.
332
+ """Build filter dictionary for Astra DB query.
333
333
 
334
334
  Args:
335
335
  args: Dictionary of arguments from the tool
@@ -370,7 +370,7 @@ class AstraDBToolComponent(LCToolComponent):
370
370
  return filters
371
371
 
372
372
  def run_model(self, **args) -> Data | list[Data]:
373
- """Run the query to get the data from the AstraDB collection."""
373
+ """Run the query to get the data from the Astra DB collection."""
374
374
  collection = self._build_collection()
375
375
  sort = {}
376
376
 
@@ -13,28 +13,28 @@ class CassandraChatMemory(LCChatMemoryComponent):
13
13
  MessageTextInput(
14
14
  name="database_ref",
15
15
  display_name="Contact Points / Astra Database ID",
16
- info="Contact points for the database (or AstraDB database ID)",
16
+ info="Contact points for the database (or Astra DB database ID)",
17
17
  required=True,
18
18
  ),
19
19
  MessageTextInput(
20
- name="username", display_name="Username", info="Username for the database (leave empty for AstraDB)."
20
+ name="username", display_name="Username", info="Username for the database (leave empty for Astra DB)."
21
21
  ),
22
22
  SecretStrInput(
23
23
  name="token",
24
- display_name="Password / AstraDB Token",
25
- info="User password for the database (or AstraDB token).",
24
+ display_name="Password / Astra DB Token",
25
+ info="User password for the database (or Astra DB token).",
26
26
  required=True,
27
27
  ),
28
28
  MessageTextInput(
29
29
  name="keyspace",
30
30
  display_name="Keyspace",
31
- info="Table Keyspace (or AstraDB namespace).",
31
+ info="Table Keyspace (or Astra DB namespace).",
32
32
  required=True,
33
33
  ),
34
34
  MessageTextInput(
35
35
  name="table_name",
36
36
  display_name="Table Name",
37
- info="The name of the table (or AstraDB collection) where vectors will be stored.",
37
+ info="The name of the table (or Astra DB collection) where vectors will be stored.",
38
38
  required=True,
39
39
  ),
40
40
  MessageTextInput(
@@ -7,20 +7,20 @@ from langflow.template.field.base import Output
7
7
 
8
8
 
9
9
  class GetEnvVar(Component):
10
- display_name = "Get env var"
11
- description = "Get env var"
10
+ display_name = "Get Environment Variable"
11
+ description = "Gets the value of an environment variable from the system."
12
12
  icon = "AstraDB"
13
13
 
14
14
  inputs = [
15
15
  StrInput(
16
16
  name="env_var_name",
17
- display_name="Env var name",
17
+ display_name="Environment Variable Name",
18
18
  info="Name of the environment variable to get",
19
19
  )
20
20
  ]
21
21
 
22
22
  outputs = [
23
- Output(display_name="Env var value", name="env_var_value", method="process_inputs"),
23
+ Output(display_name="Environment Variable Value", name="env_var_value", method="process_inputs"),
24
24
  ]
25
25
 
26
26
  def process_inputs(self) -> Message:
@@ -6,8 +6,8 @@ from langflow.schema.data import Data
6
6
 
7
7
 
8
8
  class FirecrawlCrawlApi(Component):
9
- display_name: str = "FirecrawlCrawlApi"
10
- description: str = "Firecrawl Crawl API."
9
+ display_name: str = "Firecrawl Crawl API"
10
+ description: str = "Crawls a URL and returns the results."
11
11
  name = "FirecrawlCrawlApi"
12
12
 
13
13
  documentation: str = "https://docs.firecrawl.dev/v1/api-reference/endpoint/crawl-post"
@@ -12,8 +12,8 @@ from langflow.schema.data import Data
12
12
 
13
13
 
14
14
  class FirecrawlExtractApi(Component):
15
- display_name: str = "FirecrawlExtractApi"
16
- description: str = "Firecrawl Extract API."
15
+ display_name: str = "Firecrawl Extract API"
16
+ description: str = "Extracts data from a URL."
17
17
  name = "FirecrawlExtractApi"
18
18
 
19
19
  documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/extract"
@@ -9,8 +9,8 @@ from langflow.schema.data import Data
9
9
 
10
10
 
11
11
  class FirecrawlMapApi(Component):
12
- display_name: str = "FirecrawlMapApi"
13
- description: str = "Firecrawl Map API."
12
+ display_name: str = "Firecrawl Map API"
13
+ description: str = "Maps a URL and returns the results."
14
14
  name = "FirecrawlMapApi"
15
15
 
16
16
  documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/map"
@@ -10,8 +10,8 @@ from langflow.schema.data import Data
10
10
 
11
11
 
12
12
  class FirecrawlScrapeApi(Component):
13
- display_name: str = "FirecrawlScrapeApi"
14
- description: str = "Firecrawl Scrape API."
13
+ display_name: str = "Firecrawl Scrape API"
14
+ description: str = "Scrapes a URL and returns the results."
15
15
  name = "FirecrawlScrapeApi"
16
16
 
17
17
  documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/scrape"
@@ -24,7 +24,7 @@ class GoogleGenerativeAIEmbeddingsComponent(Component):
24
24
  "found in the langchain-google-genai package."
25
25
  )
26
26
  documentation: str = "https://python.langchain.com/v0.2/docs/integrations/text_embedding/google_generative_ai/"
27
- icon = "Google"
27
+ icon = "GoogleGenerativeAI"
28
28
  name = "Google Generative AI Embeddings"
29
29
 
30
30
  inputs = [
@@ -12,7 +12,7 @@ from langflow.schema.data import Data
12
12
 
13
13
 
14
14
  class ListHomeAssistantStates(LCToolComponent):
15
- display_name: str = "List HomeAssistant States"
15
+ display_name: str = "List Home Assistant States"
16
16
  description: str = (
17
17
  "Retrieve states from Home Assistant. "
18
18
  "The agent only needs to specify 'filter_domain' (optional). "
@@ -16,7 +16,7 @@ DEFAULT_MODEL = "meta-llama/Llama-3.3-70B-Instruct"
16
16
 
17
17
 
18
18
  class HuggingFaceEndpointsComponent(LCModelComponent):
19
- display_name: str = "HuggingFace"
19
+ display_name: str = "Hugging Face"
20
20
  description: str = "Generate text using Hugging Face Inference APIs."
21
21
  icon = "HuggingFace"
22
22
  name = "HuggingFaceModel"
@@ -26,7 +26,7 @@ class HuggingFaceEndpointsComponent(LCModelComponent):
26
26
  DropdownInput(
27
27
  name="model_id",
28
28
  display_name="Model ID",
29
- info="Select a model from HuggingFace Hub",
29
+ info="Select a model from Hugging Face Hub",
30
30
  options=[
31
31
  DEFAULT_MODEL,
32
32
  "mistralai/Mixtral-8x7B-Instruct-v0.1",
@@ -44,7 +44,7 @@ class HuggingFaceEndpointsComponent(LCModelComponent):
44
44
  StrInput(
45
45
  name="custom_model",
46
46
  display_name="Custom Model ID",
47
- info="Enter a custom model ID from HuggingFace Hub",
47
+ info="Enter a custom model ID from Hugging Face Hub",
48
48
  value="",
49
49
  show=False,
50
50
  required=True,
@@ -191,7 +191,7 @@ class HuggingFaceEndpointsComponent(LCModelComponent):
191
191
  repetition_penalty=repetition_penalty,
192
192
  )
193
193
  except Exception as e:
194
- msg = "Could not connect to HuggingFace Endpoints API."
194
+ msg = "Could not connect to Hugging Face Endpoints API."
195
195
  raise ValueError(msg) from e
196
196
 
197
197
  return llm
@@ -13,8 +13,8 @@ from langflow.io import MessageTextInput, Output, SecretStrInput
13
13
 
14
14
 
15
15
  class HuggingFaceInferenceAPIEmbeddingsComponent(LCEmbeddingsModel):
16
- display_name = "HuggingFace Embeddings Inference"
17
- description = "Generate embeddings using HuggingFace Text Embeddings Inference (TEI)"
16
+ display_name = "Hugging Face Embeddings Inference"
17
+ description = "Generate embeddings using Hugging Face Text Embeddings Inference (TEI)"
18
18
  documentation = "https://huggingface.co/docs/text-embeddings-inference/index"
19
19
  icon = "HuggingFace"
20
20
  name = "HuggingFaceInferenceAPIEmbeddings"
@@ -66,7 +66,7 @@ class HuggingFaceInferenceAPIEmbeddingsComponent(LCEmbeddingsModel):
66
66
  raise ValueError(msg) from e
67
67
 
68
68
  if response.status_code != requests.codes.ok:
69
- msg = f"HuggingFace health check failed: {response.status_code}"
69
+ msg = f"Hugging Face health check failed: {response.status_code}"
70
70
  raise ValueError(msg)
71
71
  # returning True to solve linting error
72
72
  return True
@@ -102,5 +102,5 @@ class HuggingFaceInferenceAPIEmbeddingsComponent(LCEmbeddingsModel):
102
102
  try:
103
103
  return self.create_huggingface_embeddings(api_key, api_url, self.model_name)
104
104
  except Exception as e:
105
- msg = "Could not connect to HuggingFace Inference API."
105
+ msg = "Could not connect to Hugging Face Inference API."
106
106
  raise ValueError(msg) from e
@@ -8,7 +8,7 @@ from langflow.utils.util import unescape_string
8
8
 
9
9
 
10
10
  class CharacterTextSplitterComponent(LCTextSplitterComponent):
11
- display_name = "CharacterTextSplitter"
11
+ display_name = "Character Text Splitter"
12
12
  description = "Split text by number of characters."
13
13
  documentation = "https://docs.langflow.org/components/text-splitters#charactertextsplitter"
14
14
  name = "CharacterTextSplitter"
@@ -14,7 +14,7 @@ from langflow.template.field.base import Output
14
14
 
15
15
 
16
16
  class CSVAgentComponent(LCAgentComponent):
17
- display_name = "CSVAgent"
17
+ display_name = "CSV Agent"
18
18
  description = "Construct a CSV agent from a CSV and tools."
19
19
  documentation = "https://python.langchain.com/docs/modules/agents/toolkits/csv"
20
20
  name = "CSVAgent"
@@ -7,8 +7,8 @@ from langflow.inputs.inputs import DropdownInput, FloatInput, IntInput, SecretSt
7
7
 
8
8
 
9
9
  class MaritalkModelComponent(LCModelComponent):
10
- display_name = "Maritalk"
11
- description = "Generates text using Maritalk LLMs."
10
+ display_name = "MariTalk"
11
+ description = "Generates text using MariTalk LLMs."
12
12
  icon = "Maritalk"
13
13
  name = "Maritalk"
14
14
  inputs = [
@@ -29,8 +29,8 @@ class MaritalkModelComponent(LCModelComponent):
29
29
  ),
30
30
  SecretStrInput(
31
31
  name="api_key",
32
- display_name="Maritalk API Key",
33
- info="The Maritalk API Key to use for the OpenAI model.",
32
+ display_name="MariTalk API Key",
33
+ info="The MariTalk API Key to use for authentication.",
34
34
  advanced=False,
35
35
  ),
36
36
  FloatInput(name="temperature", display_name="Temperature", value=0.1, range_spec=RangeSpec(min=0, max=1)),
@@ -8,14 +8,12 @@ from langflow.schema.data import Data
8
8
 
9
9
 
10
10
  class ScrapeGraphMarkdownifyApi(Component):
11
- display_name: str = "ScrapeGraphMarkdownifyApi"
12
- description: str = """ScrapeGraph Markdownify API.
13
- Given a URL, it will return the markdownified content of the website.
14
- More info at https://docs.scrapegraphai.com/services/markdownify"""
11
+ display_name: str = "ScrapeGraph Markdownify API"
12
+ description: str = "Given a URL, it will return the markdownified content of the website."
15
13
  name = "ScrapeGraphMarkdownifyApi"
16
14
 
17
15
  output_types: list[str] = ["Document"]
18
- documentation: str = "https://docs.scrapegraphai.com/introduction"
16
+ documentation: str = "https://docs.scrapegraphai.com/services/markdownify"
19
17
 
20
18
  inputs = [
21
19
  SecretStrInput(
@@ -8,13 +8,11 @@ from langflow.schema.data import Data
8
8
 
9
9
 
10
10
  class ScrapeGraphSearchApi(Component):
11
- display_name: str = "ScrapeGraphSearchApi"
12
- description: str = """ScrapeGraph Search API.
13
- Given a search prompt, it will return search results using ScrapeGraph's search functionality.
14
- More info at https://docs.scrapegraphai.com/services/searchscraper"""
11
+ display_name: str = "ScrapeGraph Search API"
12
+ description: str = "Given a search prompt, it will return search results using ScrapeGraph's search functionality."
15
13
  name = "ScrapeGraphSearchApi"
16
14
 
17
- documentation: str = "https://docs.scrapegraphai.com/introduction"
15
+ documentation: str = "https://docs.scrapegraphai.com/services/searchscraper"
18
16
  icon = "ScrapeGraph"
19
17
 
20
18
  inputs = [
@@ -8,14 +8,12 @@ from langflow.schema.data import Data
8
8
 
9
9
 
10
10
  class ScrapeGraphSmartScraperApi(Component):
11
- display_name: str = "ScrapeGraphSmartScraperApi"
12
- description: str = """ScrapeGraph Smart Scraper API.
13
- Given a URL, it will return the structured data of the website.
14
- More info at https://docs.scrapegraphai.com/services/smartscraper"""
11
+ display_name: str = "ScrapeGraph Smart Scraper API"
12
+ description: str = "Given a URL, it will return the structured data of the website."
15
13
  name = "ScrapeGraphSmartScraperApi"
16
14
 
17
15
  output_types: list[str] = ["Document"]
18
- documentation: str = "https://docs.scrapegraphai.com/introduction"
16
+ documentation: str = "https://docs.scrapegraphai.com/services/smartscraper"
19
17
 
20
18
  inputs = [
21
19
  SecretStrInput(
@@ -10,8 +10,8 @@ from langflow.schema.dataframe import DataFrame
10
10
 
11
11
 
12
12
  class SearchComponent(Component):
13
- display_name: str = "Search API"
14
- description: str = "Call the searchapi.io API with result limiting"
13
+ display_name: str = "SearchApi"
14
+ description: str = "Calls the SearchApi API with result limiting. Supports Google, Bing and DuckDuckGo."
15
15
  documentation: str = "https://www.searchapi.io/docs/google"
16
16
  icon = "SearchAPI"
17
17
 
@@ -0,0 +1,3 @@
1
+ from .google_serper_api_core import GoogleSerperAPICore
2
+
3
+ __all__ = ["GoogleSerperAPICore"]