Spaces:
Sleeping
Sleeping
import os | |
import json | |
from typing import List, Dict, Any | |
# Nutrient thresholds for solids and liquids | |
thresholds = { | |
'solid': { | |
'calories': 250, | |
'sugar': 3, | |
'salt': 625 | |
}, | |
'liquid': { | |
'calories': 70, | |
'sugar': 2, | |
'salt': 175 | |
} | |
} | |
# Function to calculate percentage difference from threshold | |
def calculate_percentage_difference(value: float, threshold: float) -> float: | |
if threshold is None: | |
return None # For nutrients without a threshold | |
return ((value - threshold) / threshold) * 100 | |
# Function to analyze nutrients and calculate differences | |
async def analyze_nutrients(product_type: str, calories: float, sugar: float, salt: float, serving_size: float): | |
threshold_data = thresholds.get(product_type) | |
if not threshold_data: | |
raise HTTPException(status_code=400, detail=f"Invalid product type: {product_type}") | |
# Calculate scaled values based on serving size | |
scaled_calories = (calories / serving_size) * 100 if calories is not None else None | |
scaled_sugar = (sugar / serving_size) * 100 if sugar is not None else None | |
scaled_salt = (salt / serving_size) * 100 if salt is not None else None | |
nutrient_analysis = {} | |
nutrient_analysis_str = "" | |
# Analyze calories | |
if scaled_calories is not None: | |
nutrient_analysis['calories'] = { | |
'value': scaled_calories, | |
'threshold': threshold_data['calories'], | |
'difference': scaled_calories - threshold_data['calories'], | |
'percentageDiff': calculate_percentage_difference(scaled_calories, threshold_data['calories']) | |
} | |
if nutrient_analysis['calories']['percentageDiff'] > 0: | |
nutrient_analysis_str += f"Calories exceed the ICMR-defined threshold by {nutrient_analysis['calories']['percentageDiff']}%." | |
else: | |
nutrient_analysis_str += f"Calories are {abs(nutrient_analysis['calories']['percentageDiff'])}% below the ICMR-defined threshold." | |
# Analyze sugar | |
if scaled_sugar is not None: | |
nutrient_analysis['sugar'] = { | |
'value': scaled_sugar, | |
'threshold': threshold_data['sugar'], | |
'difference': scaled_sugar - threshold_data['sugar'], | |
'percentageDiff': calculate_percentage_difference(scaled_sugar, threshold_data['sugar']) | |
} | |
if nutrient_analysis['sugar']['percentageDiff'] > 0: | |
nutrient_analysis_str += f" Sugar exceeds the ICMR-defined threshold by {nutrient_analysis['sugar']['percentageDiff']}%." | |
else: | |
nutrient_analysis_str += f"Sugar is {abs(nutrient_analysis['sugar']['percentageDiff'])}% below the ICMR-defined threshold." | |
# Analyze salt | |
if scaled_salt is not None: | |
nutrient_analysis['salt'] = { | |
'value': scaled_salt, | |
'threshold': threshold_data['salt'], | |
'difference': scaled_salt - threshold_data['salt'], | |
'percentageDiff': calculate_percentage_difference(scaled_salt, threshold_data['salt']) | |
} | |
if nutrient_analysis['salt']['percentageDiff'] > 0: | |
nutrient_analysis_str += f" Salt exceeds the ICMR-defined threshold by {nutrient_analysis['salt']['percentageDiff']}%." | |
else: | |
nutrient_analysis_str += f"Salt is {abs(nutrient_analysis['salt']['percentageDiff'])}% below the ICMR-defined threshold." | |
return {"analysis": nutrient_analysis_str} | |