feat: add sambanova-langchain package (#5923)

* add new sambanova available models

* feat: add sambanova-langchain package

add sambanova package
minor improvements in sambanova component
add sambanova in agent examples

* [autofix.ci] apply automated fixes

* fmt

* [autofix.ci] apply automated fixes

* minor changes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Edwin Jose <edwin.jose@datastax.com>
This commit is contained in:
Jorge Piedrahita Ortiz 2025-02-07 06:55:24 -05:00 committed by GitHub
commit 414797f3f8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 74 additions and 8 deletions

View file

@ -95,6 +95,7 @@ dependencies = [
"langchain-google-community==2.0.3",
"langchain-elasticsearch==0.3.0",
"langchain-ollama==0.2.1",
"langchain-sambanova==0.1.0",
"langchain-community~=0.3.10",
"sqlalchemy[aiosqlite,postgresql_psycopg2binary,postgresql_psycopgbinary]>=2.0.36,<3.0.0",
"atlassian-python-api==3.41.16",

View file

@ -8,6 +8,7 @@ from langflow.components.models.google_generative_ai import GoogleGenerativeAICo
from langflow.components.models.groq import GroqModel
from langflow.components.models.nvidia import NVIDIAModelComponent
from langflow.components.models.openai import OpenAIModelComponent
from langflow.components.models.sambanova import SambaNovaComponent
from langflow.inputs.inputs import InputTypes, SecretStrInput
from langflow.template.field.base import Input
@ -147,6 +148,17 @@ def _get_amazon_bedrock_inputs_and_fields():
return amazon_bedrock_inputs, create_input_fields_dict(amazon_bedrock_inputs, "")
def _get_sambanova_inputs_and_fields():
try:
from langflow.components.models.sambanova import SambaNovaComponent
sambanova_inputs = get_filtered_inputs(SambaNovaComponent)
except ImportError as e:
msg = "SambaNova is not installed. Please install it with `pip install langchain-sambanova`."
raise ImportError(msg) from e
return sambanova_inputs, create_input_fields_dict(sambanova_inputs, "")
MODEL_PROVIDERS_DICT: dict[str, ModelProvidersDict] = {}
# Try to add each provider
@ -227,6 +239,17 @@ try:
except ImportError:
pass
try:
sambanova_inputs, sambanova_fields = _get_sambanova_inputs_and_fields()
MODEL_PROVIDERS_DICT["SambaNova"] = {
"fields": sambanova_fields,
"inputs": sambanova_inputs,
"prefix": "",
"component_class": SambaNovaComponent(),
}
except ImportError:
pass
MODEL_PROVIDERS = list(MODEL_PROVIDERS_DICT.keys())
ALL_PROVIDER_FIELDS: list[str] = [field for provider in MODEL_PROVIDERS_DICT.values() for field in provider["fields"]]

View file

@ -1,4 +1,5 @@
SAMBANOVA_MODEL_NAMES = [
"Meta-Llama-3.3-70B-Instruct",
"Meta-Llama-3.1-8B-Instruct",
"Meta-Llama-3.1-70B-Instruct",
"Meta-Llama-3.1-405B-Instruct",
@ -6,6 +7,10 @@ SAMBANOVA_MODEL_NAMES = [
"Meta-Llama-3.2-3B-Instruct",
"Llama-3.2-11B-Vision-Instruct",
"Llama-3.2-90B-Vision-Instruct",
"Qwen2.5-Coder-32B-Instruct",
"Qwen2.5-72B-Instruct",
"QwQ-32B-Preview",
"Qwen2-Audio-7B-Instruct",
]
MODEL_NAMES = SAMBANOVA_MODEL_NAMES

View file

@ -1,4 +1,4 @@
from langchain_community.chat_models.sambanova import ChatSambaNovaCloud
from langchain_sambanova import ChatSambaNovaCloud
from pydantic.v1 import SecretStr
from langflow.base.models.model import LCModelComponent
@ -18,7 +18,7 @@ class SambaNovaComponent(LCModelComponent):
inputs = [
*LCModelComponent._base_inputs,
StrInput(
name="sambanova_url",
name="base_url",
display_name="SambaNova Cloud Base Url",
advanced=True,
info="The base URL of the Sambanova Cloud API. "
@ -33,7 +33,7 @@ class SambaNovaComponent(LCModelComponent):
value=SAMBANOVA_MODEL_NAMES[0],
),
SecretStrInput(
name="sambanova_api_key",
name="api_key",
display_name="Sambanova API Key",
info="The Sambanova API Key to use for the Sambanova model.",
advanced=False,
@ -44,8 +44,16 @@ class SambaNovaComponent(LCModelComponent):
name="max_tokens",
display_name="Max Tokens",
advanced=True,
value=4096,
info="The maximum number of tokens to generate. Set to 0 for unlimited tokens.",
value=2048,
info="The maximum number of tokens to generate.",
),
SliderInput(
name="top_p",
display_name="top_p",
advanced=True,
value=1.0,
range_spec=RangeSpec(min=0, max=1, step=0.01),
info="Model top_p",
),
SliderInput(
name="temperature", display_name="Temperature", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)
@ -53,10 +61,11 @@ class SambaNovaComponent(LCModelComponent):
]
def build_model(self) -> LanguageModel: # type: ignore[type-var]
sambanova_url = self.sambanova_url
sambanova_api_key = self.sambanova_api_key
sambanova_url = self.base_url
sambanova_api_key = self.api_key
model_name = self.model_name
max_tokens = self.max_tokens
top_p = self.top_p
temperature = self.temperature
api_key = SecretStr(sambanova_api_key).get_secret_value() if sambanova_api_key else None
@ -65,6 +74,7 @@ class SambaNovaComponent(LCModelComponent):
model=model_name,
max_tokens=max_tokens or 1024,
temperature=temperature or 0.07,
top_p=top_p,
sambanova_url=sambanova_url,
sambanova_api_key=api_key,
)

View file

@ -1402,6 +1402,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",

View file

@ -1339,6 +1339,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",

View file

@ -1339,6 +1339,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",

View file

@ -717,6 +717,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",

View file

@ -706,6 +706,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
@ -1289,6 +1290,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
@ -2693,6 +2695,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
@ -3193,7 +3196,7 @@
"data": {
"id": "note-7I7gz",
"node": {
"description": "## Configure the agent by obtaining your OpenAI API key from [platform.openai.com](https://platform.openai.com). Under \"Model Provider\", choose:\n- OpenAI: Default, requires only API key\n- Anthropic/Azure/Groq/NVIDIA: Each requires their own API keys\n- Custom: Use your own model endpoint + authentication\n\nSelect model and input API key before running the flow.",
"description": "## Configure the agent by obtaining your OpenAI API key from [platform.openai.com](https://platform.openai.com). Under \"Model Provider\", choose:\n- OpenAI: Default, requires only API key\n- Anthropic/Azure/Groq/NVIDIA/SambaNova: Each requires their own API keys\n- Custom: Use your own model endpoint + authentication\n\nSelect model and input API key before running the flow.",
"display_name": "",
"documentation": "",
"template": {

View file

@ -215,6 +215,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",

View file

@ -823,6 +823,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
@ -1379,6 +1380,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
@ -1935,6 +1937,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",

16
uv.lock generated
View file

@ -3731,6 +3731,20 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/4e/52/91aeebc40051014a143f6aab77afd6a2acf17311ea461709317d804c7419/langchain_pinecone-0.2.2-py3-none-any.whl", hash = "sha256:3697455bbf0dc916f82bc4b31c8c1540eda45a4265ed7e108464a1992036c2ea", size = 11672 },
]
[[package]]
name = "langchain-sambanova"
version = "0.1.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "langchain-core" },
{ name = "sseclient-py" },
{ name = "types-requests" },
]
sdist = { url = "https://files.pythonhosted.org/packages/4f/dd/88a2aa89b24b2f1e245bf39989a6cd8fe3b21f09171326e1f77696e853d9/langchain_sambanova-0.1.0.tar.gz", hash = "sha256:70ead669b4d440b50fd02e11d5e7e3249b61cf7bb73a79173e40da410b006c0f", size = 23297 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/2c/5a/5a1a3671f70de77d6d8b06c170ba562776c6d88ffbb74cbdb12dc4fbef80/langchain_sambanova-0.1.0-py3-none-any.whl", hash = "sha256:b740011b136414e1ee503bca551bcd869731418457e27510de3a323476d09797", size = 23987 },
]
[[package]]
name = "langchain-tests"
version = "0.3.9"
@ -3839,6 +3853,7 @@ dependencies = [
{ name = "langchain-ollama" },
{ name = "langchain-openai" },
{ name = "langchain-pinecone" },
{ name = "langchain-sambanova" },
{ name = "langchain-unstructured" },
{ name = "langflow-base" },
{ name = "langfuse" },
@ -4001,6 +4016,7 @@ requires-dist = [
{ name = "langchain-ollama", specifier = "==0.2.1" },
{ name = "langchain-openai", specifier = "==0.2.12" },
{ name = "langchain-pinecone", specifier = "==0.2.2" },
{ name = "langchain-sambanova", specifier = "==0.1.0" },
{ name = "langchain-unstructured", specifier = "==0.1.5" },
{ name = "langflow-base", editable = "src/backend/base" },
{ name = "langfuse", specifier = "==2.53.9" },