Source code for imagine.langchain.embeddings

from __future__ import annotations

from pydantic import BaseModel

from imagine.langchain.mixins import BaseLangChainMixin


try:
    from langchain_core.embeddings import Embeddings
except ImportError:
    raise ImportError(
        "LangChain dependencies are missing. Please install with 'pip install imagine-sdk[langchain]' to add them."
    )


[docs] class ImagineEmbeddings(BaseModel, Embeddings, BaseLangChainMixin): """Imagine embedding models.""" max_concurrent_requests: int = 64 model: str = "BAAI/bge-large-en-v1.5" # TODO: Leverage asyncio to make it faster...
[docs] def embed_documents(self, texts: list[str]) -> list[list[float]]: """Embed a list of document texts. Args: texts: The list of texts to embed. Returns: List of embeddings, one for each text. """ try: response = self.client.embeddings(texts=texts, model=self.model) return [embedding_obj.embedding for embedding_obj in response.data] except Exception: raise
[docs] async def aembed_documents(self, texts: list[str]) -> list[list[float]]: """Embed a list of document texts. Args: texts: The list of texts to embed. Returns: List of embeddings, one for each text. """ try: response = await self.async_client.embeddings(text=texts, model=self.model) return [embedding_obj.embedding for embedding_obj in response.data] except Exception: raise
[docs] def embed_query(self, text: str) -> list[float]: """Embed a single query text. Args: text: The text to embed. Returns: Embedding for the text. """ return self.embed_documents([text])[0]
[docs] async def aembed_query(self, text: str) -> list[float]: """Embed a single query text. Args: text: The text to embed. Returns: Embedding for the text. """ return (await self.aembed_documents([text]))[0]