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-google-community==2.0.3",
"langchain-elasticsearch==0.3.0", "langchain-elasticsearch==0.3.0",
"langchain-ollama==0.2.1", "langchain-ollama==0.2.1",
"langchain-sambanova==0.1.0",
"langchain-community~=0.3.10", "langchain-community~=0.3.10",
"sqlalchemy[aiosqlite,postgresql_psycopg2binary,postgresql_psycopgbinary]>=2.0.36,<3.0.0", "sqlalchemy[aiosqlite,postgresql_psycopg2binary,postgresql_psycopgbinary]>=2.0.36,<3.0.0",
"atlassian-python-api==3.41.16", "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.groq import GroqModel
from langflow.components.models.nvidia import NVIDIAModelComponent from langflow.components.models.nvidia import NVIDIAModelComponent
from langflow.components.models.openai import OpenAIModelComponent from langflow.components.models.openai import OpenAIModelComponent
from langflow.components.models.sambanova import SambaNovaComponent
from langflow.inputs.inputs import InputTypes, SecretStrInput from langflow.inputs.inputs import InputTypes, SecretStrInput
from langflow.template.field.base import Input 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, "") 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] = {} MODEL_PROVIDERS_DICT: dict[str, ModelProvidersDict] = {}
# Try to add each provider # Try to add each provider
@ -227,6 +239,17 @@ try:
except ImportError: except ImportError:
pass 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()) 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"]] 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 = [ SAMBANOVA_MODEL_NAMES = [
"Meta-Llama-3.3-70B-Instruct",
"Meta-Llama-3.1-8B-Instruct", "Meta-Llama-3.1-8B-Instruct",
"Meta-Llama-3.1-70B-Instruct", "Meta-Llama-3.1-70B-Instruct",
"Meta-Llama-3.1-405B-Instruct", "Meta-Llama-3.1-405B-Instruct",
@ -6,6 +7,10 @@ SAMBANOVA_MODEL_NAMES = [
"Meta-Llama-3.2-3B-Instruct", "Meta-Llama-3.2-3B-Instruct",
"Llama-3.2-11B-Vision-Instruct", "Llama-3.2-11B-Vision-Instruct",
"Llama-3.2-90B-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 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 pydantic.v1 import SecretStr
from langflow.base.models.model import LCModelComponent from langflow.base.models.model import LCModelComponent
@ -18,7 +18,7 @@ class SambaNovaComponent(LCModelComponent):
inputs = [ inputs = [
*LCModelComponent._base_inputs, *LCModelComponent._base_inputs,
StrInput( StrInput(
name="sambanova_url", name="base_url",
display_name="SambaNova Cloud Base Url", display_name="SambaNova Cloud Base Url",
advanced=True, advanced=True,
info="The base URL of the Sambanova Cloud API. " info="The base URL of the Sambanova Cloud API. "
@ -33,7 +33,7 @@ class SambaNovaComponent(LCModelComponent):
value=SAMBANOVA_MODEL_NAMES[0], value=SAMBANOVA_MODEL_NAMES[0],
), ),
SecretStrInput( SecretStrInput(
name="sambanova_api_key", name="api_key",
display_name="Sambanova API Key", display_name="Sambanova API Key",
info="The Sambanova API Key to use for the Sambanova model.", info="The Sambanova API Key to use for the Sambanova model.",
advanced=False, advanced=False,
@ -44,8 +44,16 @@ class SambaNovaComponent(LCModelComponent):
name="max_tokens", name="max_tokens",
display_name="Max Tokens", display_name="Max Tokens",
advanced=True, advanced=True,
value=4096, value=2048,
info="The maximum number of tokens to generate. Set to 0 for unlimited tokens.", 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( SliderInput(
name="temperature", display_name="Temperature", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01) 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] def build_model(self) -> LanguageModel: # type: ignore[type-var]
sambanova_url = self.sambanova_url sambanova_url = self.base_url
sambanova_api_key = self.sambanova_api_key sambanova_api_key = self.api_key
model_name = self.model_name model_name = self.model_name
max_tokens = self.max_tokens max_tokens = self.max_tokens
top_p = self.top_p
temperature = self.temperature temperature = self.temperature
api_key = SecretStr(sambanova_api_key).get_secret_value() if sambanova_api_key else None 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, model=model_name,
max_tokens=max_tokens or 1024, max_tokens=max_tokens or 1024,
temperature=temperature or 0.07, temperature=temperature or 0.07,
top_p=top_p,
sambanova_url=sambanova_url, sambanova_url=sambanova_url,
sambanova_api_key=api_key, sambanova_api_key=api_key,
) )

View file

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

View file

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

View file

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

View file

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

View file

@ -706,6 +706,7 @@
"Groq", "Groq",
"NVIDIA", "NVIDIA",
"OpenAI", "OpenAI",
"SambaNova",
"Custom" "Custom"
], ],
"placeholder": "", "placeholder": "",
@ -1289,6 +1290,7 @@
"Groq", "Groq",
"NVIDIA", "NVIDIA",
"OpenAI", "OpenAI",
"SambaNova",
"Custom" "Custom"
], ],
"placeholder": "", "placeholder": "",
@ -2693,6 +2695,7 @@
"Groq", "Groq",
"NVIDIA", "NVIDIA",
"OpenAI", "OpenAI",
"SambaNova",
"Custom" "Custom"
], ],
"placeholder": "", "placeholder": "",
@ -3193,7 +3196,7 @@
"data": { "data": {
"id": "note-7I7gz", "id": "note-7I7gz",
"node": { "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": "", "display_name": "",
"documentation": "", "documentation": "",
"template": { "template": {

View file

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

View file

@ -823,6 +823,7 @@
"Groq", "Groq",
"NVIDIA", "NVIDIA",
"OpenAI", "OpenAI",
"SambaNova",
"Custom" "Custom"
], ],
"placeholder": "", "placeholder": "",
@ -1379,6 +1380,7 @@
"Groq", "Groq",
"NVIDIA", "NVIDIA",
"OpenAI", "OpenAI",
"SambaNova",
"Custom" "Custom"
], ],
"placeholder": "", "placeholder": "",
@ -1935,6 +1937,7 @@
"Groq", "Groq",
"NVIDIA", "NVIDIA",
"OpenAI", "OpenAI",
"SambaNova",
"Custom" "Custom"
], ],
"placeholder": "", "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 }, { 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]] [[package]]
name = "langchain-tests" name = "langchain-tests"
version = "0.3.9" version = "0.3.9"
@ -3839,6 +3853,7 @@ dependencies = [
{ name = "langchain-ollama" }, { name = "langchain-ollama" },
{ name = "langchain-openai" }, { name = "langchain-openai" },
{ name = "langchain-pinecone" }, { name = "langchain-pinecone" },
{ name = "langchain-sambanova" },
{ name = "langchain-unstructured" }, { name = "langchain-unstructured" },
{ name = "langflow-base" }, { name = "langflow-base" },
{ name = "langfuse" }, { name = "langfuse" },
@ -4001,6 +4016,7 @@ requires-dist = [
{ name = "langchain-ollama", specifier = "==0.2.1" }, { name = "langchain-ollama", specifier = "==0.2.1" },
{ name = "langchain-openai", specifier = "==0.2.12" }, { name = "langchain-openai", specifier = "==0.2.12" },
{ name = "langchain-pinecone", specifier = "==0.2.2" }, { name = "langchain-pinecone", specifier = "==0.2.2" },
{ name = "langchain-sambanova", specifier = "==0.1.0" },
{ name = "langchain-unstructured", specifier = "==0.1.5" }, { name = "langchain-unstructured", specifier = "==0.1.5" },
{ name = "langflow-base", editable = "src/backend/base" }, { name = "langflow-base", editable = "src/backend/base" },
{ name = "langfuse", specifier = "==2.53.9" }, { name = "langfuse", specifier = "==2.53.9" },