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")