Tai Truong
fix readme
d202ada
import logging
from typing import TYPE_CHECKING
from langflow.custom import Component
from langflow.io import HandleInput, MessageInput, Output
from langflow.schema import Data
if TYPE_CHECKING:
from langflow.field_typing import Embeddings
from langflow.schema.message import Message
class TextEmbedderComponent(Component):
display_name: str = "Text Embedder"
description: str = "Generate embeddings for a given message using the specified embedding model."
icon = "binary"
inputs = [
HandleInput(
name="embedding_model",
display_name="Embedding Model",
info="The embedding model to use for generating embeddings.",
input_types=["Embeddings"],
),
MessageInput(
name="message",
display_name="Message",
info="The message to generate embeddings for.",
),
]
outputs = [
Output(display_name="Embedding Data", name="embeddings", method="generate_embeddings"),
]
def generate_embeddings(self) -> Data:
try:
embedding_model: Embeddings = self.embedding_model
message: Message = self.message
# Validate embedding model
if not embedding_model:
msg = "Embedding model not provided"
raise ValueError(msg)
# Extract the text content from the message
text_content = message.text if message and message.text else ""
if not text_content:
msg = "No text content found in message"
raise ValueError(msg)
# Check if the embedding model has the required attributes
if not hasattr(embedding_model, "client") or not embedding_model.client:
msg = "Embedding model client not properly initialized"
raise ValueError(msg)
# Ensure the base URL has proper protocol
if hasattr(embedding_model.client, "base_url"):
base_url = embedding_model.client.base_url
if not base_url.startswith(("http://", "https://")):
embedding_model.client.base_url = f"https://{base_url}"
# Generate embeddings using the provided embedding model
embeddings = embedding_model.embed_documents([text_content])
# Validate embeddings output
if not embeddings or not isinstance(embeddings, list):
msg = "Invalid embeddings generated"
raise ValueError(msg)
embedding_vector = embeddings[0]
except Exception as e:
logging.exception("Error generating embeddings")
# Return empty data with error status
error_data = Data(data={"text": "", "embeddings": [], "error": str(e)})
self.status = {"error": str(e)}
return error_data
# Create a Data object to encapsulate the results
result_data = Data(data={"text": text_content, "embeddings": embedding_vector})
self.status = {"text": text_content, "embeddings": embedding_vector}
return result_data