-
-
Notifications
You must be signed in to change notification settings - Fork 245
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #176 from elder-plinius/master
Nutrition
- Loading branch information
Showing
2 changed files
with
99 additions
and
0 deletions.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
import os | ||
import base64 | ||
import requests | ||
from dotenv import load_dotenv | ||
from swarms.models import Anthropic, OpenAIChat | ||
from swarms.structs import Flow | ||
|
||
# Load environment variables | ||
load_dotenv() | ||
openai_api_key = os.getenv("OPENAI_API_KEY") | ||
|
||
# Define prompts for various tasks | ||
MEAL_PLAN_PROMPT = "Based on the following user preferences: dietary restrictions as vegetarian, preferred cuisines as Italian and Indian, a total caloric intake of around 2000 calories per day, and an exclusion of legumes, create a detailed weekly meal plan. Include a variety of meals for breakfast, lunch, dinner, and optional snacks." | ||
IMAGE_ANALYSIS_PROMPT = "Identify the items in this fridge, including their quantities and condition." | ||
|
||
# Function to encode image to base64 | ||
def encode_image(image_path): | ||
with open(image_path, "rb") as image_file: | ||
return base64.b64encode(image_file.read()).decode('utf-8') | ||
|
||
# Initialize Language Model (LLM) | ||
llm = OpenAIChat( | ||
openai_api_key=openai_api_key, | ||
max_tokens=3000, | ||
) | ||
|
||
# Function to handle vision tasks | ||
def create_vision_agent(image_path): | ||
base64_image = encode_image(image_path) | ||
headers = { | ||
"Content-Type": "application/json", | ||
"Authorization": f"Bearer {openai_api_key}" | ||
} | ||
payload = { | ||
"model": "gpt-4-vision-preview", | ||
"messages": [ | ||
{ | ||
"role": "user", | ||
"content": [ | ||
{"type": "text", "text": IMAGE_ANALYSIS_PROMPT}, | ||
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}} | ||
] | ||
} | ||
], | ||
"max_tokens": 300 | ||
} | ||
response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload) | ||
return response.json() | ||
|
||
# Function to generate an integrated shopping list considering meal plan and fridge contents | ||
def generate_integrated_shopping_list(meal_plan_output, image_analysis, user_preferences): | ||
# Prepare the prompt for the LLM | ||
fridge_contents = image_analysis['choices'][0]['message']['content'] | ||
prompt = (f"Based on this meal plan: {meal_plan_output}, " | ||
f"and the following items in the fridge: {fridge_contents}, " | ||
f"considering dietary preferences as vegetarian with a preference for Italian and Indian cuisines, " | ||
f"generate a comprehensive shopping list that includes only the items needed.") | ||
|
||
# Send the prompt to the LLM and return the response | ||
response = llm(prompt) | ||
return response # assuming the response is a string | ||
|
||
# Define agent for meal planning | ||
meal_plan_agent = Flow( | ||
llm=llm, | ||
sop=MEAL_PLAN_PROMPT, | ||
max_loops=1, | ||
autosave=True, | ||
saved_state_path="meal_plan_agent.json", | ||
) | ||
|
||
# User preferences for meal planning | ||
user_preferences = { | ||
"dietary_restrictions": "vegetarian", | ||
"preferred_cuisines": ["Italian", "Indian"], | ||
"caloric_intake": 2000, | ||
"other notes": "Doesn't eat legumes" | ||
} | ||
|
||
# Generate Meal Plan | ||
meal_plan_output = meal_plan_agent.run( | ||
f"Generate a meal plan: {user_preferences}" | ||
) | ||
|
||
# Vision Agent - Analyze an Image | ||
image_analysis_output = create_vision_agent("full_fridge.jpg") | ||
|
||
# Generate Integrated Shopping List | ||
integrated_shopping_list = generate_integrated_shopping_list(meal_plan_output, image_analysis_output, user_preferences) | ||
|
||
# Print and save the outputs | ||
print("Meal Plan:", meal_plan_output) | ||
print("Integrated Shopping List:", integrated_shopping_list) | ||
|
||
with open("nutrition_output.txt", "w") as file: | ||
file.write("Meal Plan:\n" + meal_plan_output + "\n\n") | ||
file.write("Integrated Shopping List:\n" + integrated_shopping_list + "\n") | ||
|
||
print("Outputs have been saved to nutrition_output.txt") |