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.
  • 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.
  • Método principal:

    • get_instance(): Devuelve la instancia compartida del recomendador.

Cambios en views.py

Modificaciones en la vista restaurant(request):

  • 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.