from typing import Any from langflow.base.embeddings.model import LCEmbeddingsModel from langflow.field_typing import Embeddings from langflow.inputs.inputs import DropdownInput, SecretStrInput from langflow.io import FloatInput, MessageTextInput from langflow.schema.dotdict import dotdict class NVIDIAEmbeddingsComponent(LCEmbeddingsModel): display_name: str = "NVIDIA Embeddings" description: str = "Generate embeddings using NVIDIA models." icon = "NVIDIA" inputs = [ DropdownInput( name="model", display_name="Model", options=[ "nvidia/nv-embed-v1", "snowflake/arctic-embed-I", ], value="nvidia/nv-embed-v1", ), MessageTextInput( name="base_url", display_name="NVIDIA Base URL", refresh_button=True, value="https://integrate.api.nvidia.com/v1", ), SecretStrInput( name="nvidia_api_key", display_name="NVIDIA API Key", info="The NVIDIA API Key.", advanced=False, value="NVIDIA_API_KEY", ), FloatInput( name="temperature", display_name="Model Temperature", value=0.1, advanced=True, ), ] def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None): if field_name == "base_url" and field_value: try: build_model = self.build_embeddings() ids = [model.id for model in build_model.available_models] build_config["model"]["options"] = ids build_config["model"]["value"] = ids[0] except Exception as e: msg = f"Error getting model names: {e}" raise ValueError(msg) from e return build_config def build_embeddings(self) -> Embeddings: try: from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings except ImportError as e: msg = "Please install langchain-nvidia-ai-endpoints to use the Nvidia model." raise ImportError(msg) from e try: output = NVIDIAEmbeddings( model=self.model, base_url=self.base_url, temperature=self.temperature, nvidia_api_key=self.nvidia_api_key, ) except Exception as e: msg = f"Could not connect to NVIDIA API. Error: {e}" raise ValueError(msg) from e return output