Spaces:
Running
Running
| 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 | |
| ) |