endpoint_biblioteca_funcionando

This commit is contained in:
2025-05-10 20:08:51 +02:00
parent c47b9474f4
commit b34d52036e
12 changed files with 123 additions and 55 deletions
+1 -1
View File
@@ -121,7 +121,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 6,
"id": "943d0deb", "id": "943d0deb",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
+1 -1
View File
@@ -4,6 +4,6 @@ from fastapi import APIRouter
router = APIRouter() router = APIRouter()
@router.get("/ping") @router.get("/")
async def ping(): async def ping():
return {"message": "pong"} return {"message": "pong"}
-26
View File
@@ -1,26 +0,0 @@
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from typing import Optional
from backend.db.conexion import get_conexion
from src.TextManager.biblioteca import Biblioteca
router = APIRouter()
class BibliotecaIn(BaseModel):
nombre: str
descripcion: Optional[str] = ""
vector_dim: Optional[int] = None
@router.post("/")
def crear_biblioteca(biblio: BibliotecaIn):
try:
biblioteca = Biblioteca(
nombre=biblio.nombre,
descripcion=biblio.descripcion,
vector_dim=biblio.vector_dim
)
conexion = get_conexion()
modelo = biblioteca.generar_modelo_notas(conexion)
return {"id": biblioteca.id, "modelo": str(modelo.__name__)}
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
@@ -0,0 +1,21 @@
# backend/api/v1/biblioteca.py
from fastapi import APIRouter, Depends
from pydantic import BaseModel
from backend.db.conexion import get_conexion
from backend.services.text_manager import crear_biblioteca
from src.ConexionSql.Postgres_conexion import PostgresConexion
router = APIRouter()
class BibliotecaInput(BaseModel):
nombre_biblioteca: str
descripcion: str
@router.post("/")
def crear_biblioteca_endpoint(
data: BibliotecaInput,
conexion: PostgresConexion = Depends(get_conexion)
):
return crear_biblioteca(nombre_biblioteca=data.nombre_biblioteca,
descripcion=data.descripcion,
conexion=conexion)
+2 -2
View File
@@ -1,8 +1,8 @@
# backend/api/router.py # backend/api/router.py
from fastapi import APIRouter from fastapi import APIRouter
from backend.api.v1.endpoints import ping, nota, text_manager from backend.api.v1.endpoints import ping, text_manager_endpoint
router = APIRouter() router = APIRouter()
router.include_router(ping.router, prefix="/api/v1/ping") router.include_router(ping.router, prefix="/api/v1/ping")
router.include_router(text_manager.router, prefix="/api/v1/bibliotecas") router.include_router(text_manager_endpoint.router, prefix="/api/v1/text_manager")
+7 -16
View File
@@ -1,19 +1,10 @@
# backend/db/conexion.py
from entrypoint.init_db import db_credencial
from src.ConexionSql.Postgres_conexion import PostgresConexion from src.ConexionSql.Postgres_conexion import PostgresConexion
from src.Credenciales.postgres_credencial import PostgresCredencial
from dotenv import load_dotenv
import os
from entrypoint import ENV_PATH
# Cargar .env
load_dotenv(ENV_PATH)
def get_conexion(): def get_conexion():
db_credencial = PostgresCredencial( conexion = PostgresConexion(db_credencial)
titulo=os.getenv("DB_TITLE"), try:
user=os.getenv("DB_USER"), yield conexion
password=os.getenv("DB_PASSWORD"), finally:
host=os.getenv("DB_HOST"), conexion.close()
port=os.getenv("DB_PORT"),
dbname=os.getenv("DB_NAME")
)
return PostgresConexion(db_credencial)
+30
View File
@@ -0,0 +1,30 @@
from src.TextManager.biblioteca import Biblioteca
from src.TextManager.biblioteca_mmr import BibliotecaRepo
from src.Llms.Embedders.Openai_embedder import OpenAIEmbedder
from src.ApiKeys.openai_apikey_mmr import OpenAICredencialRepo
from src.ConexionSql.Postgres_conexion import PostgresConexion
from backend.db.conexion import get_conexion
def crear_biblioteca(nombre_biblioteca: str, conexion: PostgresConexion, descripcion: str):
cred_repo = OpenAICredencialRepo(conexion)
credencial = cred_repo.get_by_id("OPAK20250510-ac2cea8af3110632314")
embedder = OpenAIEmbedder(credencial, model="text-embedding-3-large")
biblioteca = Biblioteca(nombre=nombre_biblioteca,
embedder=embedder,
descripcion=descripcion)
repo = BibliotecaRepo(conexion)
repo.add(biblioteca=biblioteca)
biblioteca.generar_modelo_notas(conexion)
return {
"mensaje": f"Biblioteca '{nombre_biblioteca}' creada con éxito.",
"id": biblioteca.id
}
if __name__ == "__main__":
crear_biblioteca("hola_intento5")
+17
View File
@@ -0,0 +1,17 @@
import os
import shutil
def eliminar_pycache(directorio):
eliminados = 0
for root, dirs, files in os.walk(directorio):
for d in dirs:
if d == "__pycache__":
ruta = os.path.join(root, d)
print(f"🗑️ Eliminando: {ruta}")
shutil.rmtree(ruta)
eliminados += 1
print(f"\n✅ Eliminados {eliminados} directorios '__pycache__'.")
if __name__ == "__main__":
ruta_raiz = os.path.dirname(os.path.abspath(__file__)) # Carpeta actual
eliminar_pycache(ruta_raiz)
+1 -1
View File
@@ -43,7 +43,7 @@ def init_db():
# Crear engine desde la clase de conexión PostgreSQL # Crear engine desde la clase de conexión PostgreSQL
conexion = PostgresConexion(db_credencial) conexion = PostgresConexion(db_credencial)
engine = conexion.engine # Recuperamos el engine directamente engine = conexion.get_engine() # Recuperamos el engine directamente
print("Creando tablas...") print("Creando tablas...")
Base.metadata.create_all(engine) Base.metadata.create_all(engine)
+1 -1
View File
@@ -13,7 +13,7 @@ import { MetodoSelect } from './MetodoSelect';
import { useMantineTheme } from '@mantine/core'; import { useMantineTheme } from '@mantine/core';
export function LlamadorAPI() { export function LlamadorAPI() {
const [direccion, setDireccion] = useState('http://localhost:8000/api/saludo'); const [direccion, setDireccion] = useState('http://localhost:8000/api/v1/ping/');
const [metodo, setMetodo] = useState('GET'); const [metodo, setMetodo] = useState('GET');
const [contenido, setContenido] = useState(''); const [contenido, setContenido] = useState('');
const [respuesta, setRespuesta] = useState(''); const [respuesta, setRespuesta] = useState('');
+30 -3
View File
@@ -1,12 +1,39 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from sqlalchemy.orm import Session from datetime import datetime, timezone
from sqlalchemy.orm import Session, sessionmaker
from sqlalchemy.engine import Engine from sqlalchemy.engine import Engine
from sqlalchemy import create_engine, text
from sqlalchemy.exc import SQLAlchemyError
class ConexionBase(ABC): class ConexionBase(ABC):
def __init__(self, uri: str):
self.estado = "pendiente"
self.timestamp = datetime.now(timezone.utc)
self._engine: Engine = create_engine(uri)
self._Session = sessionmaker(bind=self._engine)
self._session_instance: Session | None = None
@abstractmethod @abstractmethod
def get_session(self) -> Session: def get_session(self) -> Session:
pass if self._session_instance is None:
self._session_instance = self._Session()
return self._session_instance
@abstractmethod @abstractmethod
def get_engine(self) -> Engine: def get_engine(self) -> Engine:
pass return self._engine
def probar_conexion(self) -> bool:
try:
with self._engine.connect() as connection:
connection.execute(text("SELECT 1"))
self.estado = "exito"
return True
except SQLAlchemyError:
self.estado = "fallo"
return False
def close(self):
if self._session_instance is not None:
self._session_instance.close()
self._session_instance = None
+10 -2
View File
@@ -4,7 +4,6 @@ from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import sessionmaker, Session from sqlalchemy.orm import sessionmaker, Session
from sqlalchemy.engine import Engine from sqlalchemy.engine import Engine
from src.ConexionSql.Base_conexion import ConexionBase from src.ConexionSql.Base_conexion import ConexionBase
from src.Credenciales.postgres_credencial import PostgresCredencial from src.Credenciales.postgres_credencial import PostgresCredencial
@@ -32,9 +31,13 @@ class PostgresConexion(ConexionBase):
self._engine: Engine = create_engine(uri) self._engine: Engine = create_engine(uri)
self._Session = sessionmaker(bind=self._engine) self._Session = sessionmaker(bind=self._engine)
# ✅ INICIALIZAR LA SESIÓN AQUÍ
self._session_instance: Session | None = None
def get_session(self) -> Session: def get_session(self) -> Session:
return self._Session() if self._session_instance is None:
self._session_instance = self._Session()
return self._session_instance
def get_engine(self) -> Engine: def get_engine(self) -> Engine:
return self._engine return self._engine
@@ -48,3 +51,8 @@ class PostgresConexion(ConexionBase):
except SQLAlchemyError: except SQLAlchemyError:
self.estado = "fallo" self.estado = "fallo"
return False return False
def close(self):
if self._session_instance is not None:
self._session_instance.close()
self._session_instance = None