Tai Truong
fix readme
d202ada
from typing import Any
from urllib.parse import urljoin
import httpx
from typing_extensions import override
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
class LMStudioEmbeddingsComponent(LCEmbeddingsModel):
display_name: str = "LM Studio Embeddings"
description: str = "Generate embeddings using LM Studio."
icon = "LMStudio"
@override
def update_build_config(self, build_config: dict, field_value: Any, field_name: str | None = None):
if field_name == "model":
base_url_dict = build_config.get("base_url", {})
base_url_load_from_db = base_url_dict.get("load_from_db", False)
base_url_value = base_url_dict.get("value")
if base_url_load_from_db:
base_url_value = self.variables(base_url_value)
elif not base_url_value:
base_url_value = "http://localhost:1234/v1"
build_config["model"]["options"] = self.get_model(base_url_value)
return build_config
def get_model(self, base_url_value: str) -> list[str]:
try:
url = urljoin(base_url_value, "/v1/models")
with httpx.Client() as client:
response = client.get(url)
response.raise_for_status()
data = response.json()
return [model["id"] for model in data.get("data", [])]
except Exception as e:
msg = "Could not retrieve models. Please, make sure the LM Studio server is running."
raise ValueError(msg) from e
inputs = [
DropdownInput(
name="model",
display_name="Model",
advanced=False,
refresh_button=True,
),
MessageTextInput(
name="base_url",
display_name="LM Studio Base URL",
refresh_button=True,
value="http://localhost:1234/v1",
),
SecretStrInput(
name="api_key",
display_name="LM Studio API Key",
advanced=True,
value="LMSTUDIO_API_KEY",
),
FloatInput(
name="temperature",
display_name="Model Temperature",
value=0.1,
advanced=True,
),
]
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 LM Studio Embeddings."
raise ImportError(msg) from e
try:
output = NVIDIAEmbeddings(
model=self.model,
base_url=self.base_url,
temperature=self.temperature,
nvidia_api_key=self.api_key,
)
except Exception as e:
msg = f"Could not connect to LM Studio API. Error: {e}"
raise ValueError(msg) from e
return output