Skip to content

Commit

Permalink
feat: add sambanova-langchain package (#5923)
Browse files Browse the repository at this point in the history
* 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 <[email protected]>
  • Loading branch information
3 people authored Feb 7, 2025
1 parent a0474dc commit 414797f
Show file tree
Hide file tree
Showing 12 changed files with 74 additions and 8 deletions.
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
23 changes: 23 additions & 0 deletions src/backend/base/langflow/base/models/model_input_constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
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

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -227,6 +239,17 @@ def _get_amazon_bedrock_inputs_and_fields():
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"]]

Expand Down
5 changes: 5 additions & 0 deletions src/backend/base/langflow/base/models/sambanova_constants.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
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",
"Meta-Llama-3.2-1B-Instruct",
"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
24 changes: 17 additions & 7 deletions src/backend/base/langflow/components/models/sambanova.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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. "
Expand All @@ -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,
Expand All @@ -44,19 +44,28 @@ 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)
),
]

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
Expand All @@ -65,6 +74,7 @@ def build_model(self) -> LanguageModel: # type: ignore[type-var]
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,
)
Original file line number Diff line number Diff line change
Expand Up @@ -1402,6 +1402,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1339,6 +1339,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1339,6 +1339,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -706,6 +706,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
Expand Down Expand Up @@ -1289,6 +1290,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
Expand Down Expand Up @@ -2693,6 +2695,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
Expand Down Expand Up @@ -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": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -823,6 +823,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
Expand Down Expand Up @@ -1379,6 +1380,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
Expand Down Expand Up @@ -1935,6 +1937,7 @@
"Groq",
"NVIDIA",
"OpenAI",
"SambaNova",
"Custom"
],
"placeholder": "",
Expand Down
16 changes: 16 additions & 0 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 414797f

Please sign in to comment.