Spaces:
Running
Running
from langchain_openai import OpenAIEmbeddings | |
from langflow.base.embeddings.model import LCEmbeddingsModel | |
from langflow.base.models.openai_constants import OPENAI_EMBEDDING_MODEL_NAMES | |
from langflow.field_typing import Embeddings | |
from langflow.io import BoolInput, DictInput, DropdownInput, FloatInput, IntInput, MessageTextInput, SecretStrInput | |
class OpenAIEmbeddingsComponent(LCEmbeddingsModel): | |
display_name = "OpenAI Embeddings" | |
description = "Generate embeddings using OpenAI models." | |
icon = "OpenAI" | |
name = "OpenAIEmbeddings" | |
inputs = [ | |
DictInput( | |
name="default_headers", | |
display_name="Default Headers", | |
advanced=True, | |
info="Default headers to use for the API request.", | |
), | |
DictInput( | |
name="default_query", | |
display_name="Default Query", | |
advanced=True, | |
info="Default query parameters to use for the API request.", | |
), | |
IntInput(name="chunk_size", display_name="Chunk Size", advanced=True, value=1000), | |
MessageTextInput(name="client", display_name="Client", advanced=True), | |
MessageTextInput(name="deployment", display_name="Deployment", advanced=True), | |
IntInput(name="embedding_ctx_length", display_name="Embedding Context Length", advanced=True, value=1536), | |
IntInput(name="max_retries", display_name="Max Retries", value=3, advanced=True), | |
DropdownInput( | |
name="model", | |
display_name="Model", | |
advanced=False, | |
options=OPENAI_EMBEDDING_MODEL_NAMES, | |
value="text-embedding-3-small", | |
), | |
DictInput(name="model_kwargs", display_name="Model Kwargs", advanced=True), | |
SecretStrInput(name="openai_api_key", display_name="OpenAI API Key", value="OPENAI_API_KEY"), | |
MessageTextInput(name="openai_api_base", display_name="OpenAI API Base", advanced=True), | |
MessageTextInput(name="openai_api_type", display_name="OpenAI API Type", advanced=True), | |
MessageTextInput(name="openai_api_version", display_name="OpenAI API Version", advanced=True), | |
MessageTextInput( | |
name="openai_organization", | |
display_name="OpenAI Organization", | |
advanced=True, | |
), | |
MessageTextInput(name="openai_proxy", display_name="OpenAI Proxy", advanced=True), | |
FloatInput(name="request_timeout", display_name="Request Timeout", advanced=True), | |
BoolInput(name="show_progress_bar", display_name="Show Progress Bar", advanced=True), | |
BoolInput(name="skip_empty", display_name="Skip Empty", advanced=True), | |
MessageTextInput( | |
name="tiktoken_model_name", | |
display_name="TikToken Model Name", | |
advanced=True, | |
), | |
BoolInput( | |
name="tiktoken_enable", | |
display_name="TikToken Enable", | |
advanced=True, | |
value=True, | |
info="If False, you must have transformers installed.", | |
), | |
IntInput( | |
name="dimensions", | |
display_name="Dimensions", | |
info="The number of dimensions the resulting output embeddings should have. " | |
"Only supported by certain models.", | |
advanced=True, | |
), | |
] | |
def build_embeddings(self) -> Embeddings: | |
return OpenAIEmbeddings( | |
client=self.client or None, | |
model=self.model, | |
dimensions=self.dimensions or None, | |
deployment=self.deployment or None, | |
api_version=self.openai_api_version or None, | |
base_url=self.openai_api_base or None, | |
openai_api_type=self.openai_api_type or None, | |
openai_proxy=self.openai_proxy or None, | |
embedding_ctx_length=self.embedding_ctx_length, | |
api_key=self.openai_api_key or None, | |
organization=self.openai_organization or None, | |
allowed_special="all", | |
disallowed_special="all", | |
chunk_size=self.chunk_size, | |
max_retries=self.max_retries, | |
timeout=self.request_timeout or None, | |
tiktoken_enabled=self.tiktoken_enable, | |
tiktoken_model_name=self.tiktoken_model_name or None, | |
show_progress_bar=self.show_progress_bar, | |
model_kwargs=self.model_kwargs, | |
skip_empty=self.skip_empty, | |
default_headers=self.default_headers or None, | |
default_query=self.default_query or None, | |
) | |