from typing import List from domains.Llms.Embedders.Base_Embedder import EmbedderABC # Asegúrate de que EmbedderABC esté en este módulo from domains.ApiKeys.openai_apikey import OpenAICredencial from domains.ConexionApis.OpenAi_conexion import OpenAICliente from domains.Security.GenerarIDs import GeneradorIDUnico class OpenAIEmbedder(EmbedderABC): def __init__(self, credencial: OpenAICredencial, model: str, id: str = None): self.model = model self.client = OpenAICliente(credencial) self._dimension = None # Lazy loading self.id = id if id is not None else GeneradorIDUnico("OAMB").generar() def encoder(self, text: str) -> List[float]: """ Genera los embeddings para un texto dado utilizando el modelo de OpenAI. """ response = self.client.embedding(model=self.model, input=text) embedding = response.data[0].embedding if self._dimension is None: self._dimension = len(embedding) return embedding def dimension_number(self) -> int: """ Devuelve la dimensión del modelo de embedding, generando un embedding si no se ha calculado aún. """ if self._dimension is None: _ = self.encoder("dimension_check") return self._dimension