commit
57f19c14d3
After Width: | Height: | Size: 193 KiB |
@ -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")
|
Loading…
Reference in new issue