from langchain_mistralai.embeddings import MistralAIEmbeddings from pydantic.v1 import SecretStr from langflow.base.models.model import LCModelComponent from langflow.field_typing import Embeddings from langflow.io import DropdownInput, IntInput, MessageTextInput, Output, SecretStrInput class MistralAIEmbeddingsComponent(LCModelComponent): display_name = "MistralAI Embeddings" description = "Generate embeddings using MistralAI models." icon = "MistralAI" name = "MistalAIEmbeddings" inputs = [ DropdownInput( name="model", display_name="Model", advanced=False, options=["mistral-embed"], value="mistral-embed", ), SecretStrInput(name="mistral_api_key", display_name="Mistral API Key"), IntInput( name="max_concurrent_requests", display_name="Max Concurrent Requests", advanced=True, value=64, ), IntInput(name="max_retries", display_name="Max Retries", advanced=True, value=5), IntInput(name="timeout", display_name="Request Timeout", advanced=True, value=120), MessageTextInput( name="endpoint", display_name="API Endpoint", advanced=True, value="https://api.mistral.ai/v1/", ), ] outputs = [ Output(display_name="Embeddings", name="embeddings", method="build_embeddings"), ] def build_embeddings(self) -> Embeddings: if not self.mistral_api_key: msg = "Mistral API Key is required" raise ValueError(msg) api_key = SecretStr(self.mistral_api_key).get_secret_value() return MistralAIEmbeddings( api_key=api_key, model=self.model, endpoint=self.endpoint, max_concurrent_requests=self.max_concurrent_requests, max_retries=self.max_retries, timeout=self.timeout, )