Inversion_Dependencias - SamuelGJ0320/Topi-Ing-Soft_Nomy GitHub Wiki
Archivos Nuevos
embedding_recommender.py
-
Se encuentra dentro de la app
restaurant
y hace lo siguiente:- Cargar embeddings desde archivos
.json
. - Calcular similitud entre el embedding del usuario y los embeddings precargados de los restaurantes.
- Devolver los restaurantes más similares según el texto ingresado por el usuario.
- Cargar embeddings desde archivos
-
Funciones principales:
load_json(file_path)
: Carga datos desde un archivo JSON.compute_similarity(user_embedding, restaurant_embedding)
: Retorna la similitud.get_recommendations(prompt, top_n=3)
: Genera un embedding para el prompt, calcula la similitud con cada restaurante y retorna los más relevantes.
recommender_provider.py
-
Se encuentra dentro de la app
restaurant
y hace lo siguiente:- Gestionar una única instancia del recomendador
EmbeddingRecommender
, cargando los datos una sola vez para mayor eficiencia.
- Gestionar una única instancia del recomendador
-
Método principal:
get_instance()
: Devuelve la instancia compartida del recomendador.
views.py
Cambios en restaurant(request)
:
Modificaciones en la vista - Se agregó la nueva dependencia:
from .recommender_provider import RecommenderProvider
- Se modificó la lógica del POST para usar el nuevo recomendador:
recommender = RecommenderProvider.get_instance() restaurants, best_restaurant = recommender.get_recommendations(prompt)
Ventajas de esta inversion de dependencia:
- Separación entre vistas y lógica de recomendación.
- La lógica de recomendación puede usarse fácilmente en otras vistas.
- Permite cambiar el modelo de embeddings o pasarse a base de datos sin modificar la lógica principal del sistema.
- Los archivos
.json
se cargan solo una vez en gracias Singleton, evitando cargas repetidas y mejorando el tiempo de respuesta.