from domains.Security.GenerarIDs import GeneradorIDUnico from domains.Llms.Embedders.Base_Embedder import EmbedderABC # Asegúrate de que esta ruta sea correcta from typing import List, Optional from domains.ConexionSql.Base_conexion import ConexionBase from sqlalchemy import MetaData # Asegúrate de importar esto from domains.TextManager.notas_mmr import generar_tabla_nota_para_biblioteca # Ajusta si es necesario from sqlalchemy import inspect from domains.base import Base class Biblioteca: def __init__( self, nombre: str, descripcion: str = "", id: Optional[str] = None, embedder: Optional[EmbedderABC] = None, vector_dim: Optional[int] = None ): """ Clase que representa una biblioteca de notas de texto. :param nombre: Nombre de la biblioteca. :param descripcion: Breve descripción de la biblioteca. :param id: ID único opcional. Si no se proporciona, se genera automáticamente. :param embedder: Objeto que implementa EmbedderABC para generar el vector del nombre. :param vector_dim: Dimensión del vector si no se proporciona un embedder. """ self.id = id if id is not None else GeneradorIDUnico("BBLI").generar() self.nombre = nombre if "biblio" in nombre else f"biblio_{nombre}" self.descripcion = descripcion self.embedder = embedder if self.embedder is not None: self.vector_dim = self.embedder.dimension_number() elif vector_dim is not None: self.vector_dim = vector_dim else: raise ValueError("Debes proporcionar un 'embedder' o un 'vector_dim' explícito.") def generar_modelo_notas(self, conexion: ConexionBase): nombre_tabla = f"{self.nombre}" print(f"[Notas] Generando tabla: {nombre_tabla}") engine = conexion.get_engine() inspector = inspect(engine) if inspector.has_table(nombre_tabla): print(f"[Notas] ❌ Ya existe la tabla {nombre_tabla}") raise ValueError(f"Ya existe una tabla con el nombre '{nombre_tabla}' en la base de datos.") print("[Notas] Generando definición SQL...") tabla, NotaModel = generar_tabla_nota_para_biblioteca(nombre_tabla, self.vector_dim, Base.metadata) print("[Notas] Creando tabla en base de datos...") Base.metadata.create_all(engine) print("[Notas] ✔️ Tabla creada") return NotaModel