recipe-rover-api / app /services /recommendation.py
garvitcpp's picture
Update app/services/recommendation.py
b105344 verified
import logging
from app.services.image_search import ImageSearchService
from app.utils.data_loading import load_or_create_data
from app.utils.recommendation_utils import get_top_recommendations
logger = logging.getLogger(__name__)
class FlexibleRecipeRecommendationSystem:
def __init__(self, csv_file_path, precomputed_dir):
self.default_feature_weights = {
'ingredients': 0.15, 'category': 0.25, 'dietary': 0.20,
'calories': 0.10, 'time': 0.10, 'keywords': 0.10, 'keywords_name': 0.10
}
self.image_search_service = ImageSearchService()
self.data = load_or_create_data(csv_file_path, precomputed_dir, self.default_feature_weights)
async def get_recommendations(self, category=None, dietary_preference=None, ingredients=None,
calories=None, time=None, keywords=None, keywords_name=None,
top_n=6, feature_weights=None):
# Use the provided feature_weights, or fall back to the default if not provided
weights = feature_weights or self.default_feature_weights
return await get_top_recommendations(
self.data['df'], self.data['combined_matrix'],
self.data['tfidf_vectorizer_ingredients'],
self.data['tfidf_vectorizer_keywords'],
self.data['tfidf_vectorizer_keywords_name'],
self.data['category_dummies'], self.data['scaler'],
weights, self.image_search_service,
category, dietary_preference, ingredients,
calories, time, keywords, keywords_name, top_n
)