shukdevdatta123 commited on
Commit
ca8ad1c
·
verified ·
1 Parent(s): 58baf4a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +84 -17
app.py CHANGED
@@ -36,6 +36,46 @@ def save_uploaded_image(image):
36
 
37
  return temp_file.name
38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  def get_recipe_suggestions(api_key, images, num_recipes=3, dietary_restrictions="None", cuisine_preference="Any"):
40
  """
41
  Get recipe suggestions based on the uploaded images of ingredients
@@ -66,9 +106,20 @@ def get_recipe_suggestions(api_key, images, num_recipes=3, dietary_restrictions=
66
  # Initialize Together client with the provided API key
67
  client = Together(api_key=api_key)
68
 
69
- # Create the prompt for the model
 
 
 
 
 
 
 
 
 
 
70
  system_prompt = """You are a culinary expert AI assistant that specializes in creating recipes based on available ingredients.
71
- Analyze the provided images of ingredients and suggest creative, detailed recipes that use as many of the shown ingredients as possible.
 
72
 
73
  For each recipe suggestion, include:
74
  1. Recipe name
@@ -81,23 +132,16 @@ def get_recipe_suggestions(api_key, images, num_recipes=3, dietary_restrictions=
81
 
82
  Consider any dietary restrictions and cuisine preferences mentioned by the user."""
83
 
84
- user_prompt = f"""Based on the ingredients shown in these images, suggest {num_recipes} creative and delicious recipes.
 
 
 
85
  Dietary restrictions to consider: {dietary_restrictions}
86
  Cuisine preference: {cuisine_preference}
87
- Please be specific about what ingredients you can identify in the images and creative with your recipe suggestions. Try to use ingredients from all images if possible."""
88
 
89
- # Create message with multiple images
90
- content = [{"type": "text", "text": user_prompt}]
91
-
92
- # Add all images to the content
93
- for img_path in image_paths:
94
- content.append({
95
- "type": "image_url",
96
- "image_url": {
97
- "url": f"file://{img_path}"
98
- }
99
- })
100
 
 
101
  response = client.chat.completions.create(
102
  model="meta-llama/Llama-Vision-Free",
103
  messages=[
@@ -107,7 +151,7 @@ def get_recipe_suggestions(api_key, images, num_recipes=3, dietary_restrictions=
107
  },
108
  {
109
  "role": "user",
110
- "content": content
111
  }
112
  ],
113
  max_tokens=2048,
@@ -121,7 +165,14 @@ def get_recipe_suggestions(api_key, images, num_recipes=3, dietary_restrictions=
121
  except:
122
  pass
123
 
124
- return response.choices[0].message.content
 
 
 
 
 
 
 
125
 
126
  except Exception as e:
127
  # Clean up the temporary files in case of error
@@ -300,6 +351,22 @@ button.primary-button:hover {
300
  padding: 20px;
301
  }
302
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
303
  /* Responsive styles */
304
  @media (max-width: 768px) {
305
  .app-title {
 
36
 
37
  return temp_file.name
38
 
39
+ def analyze_single_image(client, img_path):
40
+ """Analyze a single image to identify ingredients"""
41
+ system_prompt = """You are a culinary expert AI assistant that specializes in identifying ingredients in images.
42
+ Your task is to analyze the provided image and list all the food ingredients you can identify.
43
+ Be specific and detailed about what you see. Only list ingredients, don't suggest recipes yet."""
44
+
45
+ user_prompt = "Please identify all the food ingredients visible in this image. List each ingredient on a new line."
46
+
47
+ # Create message with the image
48
+ content = [
49
+ {"type": "text", "text": user_prompt},
50
+ {
51
+ "type": "image_url",
52
+ "image_url": {
53
+ "url": f"file://{img_path}"
54
+ }
55
+ }
56
+ ]
57
+
58
+ try:
59
+ response = client.chat.completions.create(
60
+ model="meta-llama/Llama-Vision-Free",
61
+ messages=[
62
+ {
63
+ "role": "system",
64
+ "content": system_prompt
65
+ },
66
+ {
67
+ "role": "user",
68
+ "content": content
69
+ }
70
+ ],
71
+ max_tokens=500,
72
+ temperature=0.2
73
+ )
74
+
75
+ return response.choices[0].message.content
76
+ except Exception as e:
77
+ return f"Error analyzing image: {str(e)}"
78
+
79
  def get_recipe_suggestions(api_key, images, num_recipes=3, dietary_restrictions="None", cuisine_preference="Any"):
80
  """
81
  Get recipe suggestions based on the uploaded images of ingredients
 
106
  # Initialize Together client with the provided API key
107
  client = Together(api_key=api_key)
108
 
109
+ # First, analyze each image separately to identify ingredients
110
+ all_ingredients = []
111
+ for img_path in image_paths:
112
+ ingredients_text = analyze_single_image(client, img_path)
113
+ all_ingredients.append(ingredients_text)
114
+
115
+ # Combine all ingredients into one list
116
+ combined_ingredients = "\n\n".join([f"Image {i+1} ingredients:\n{ingredients}"
117
+ for i, ingredients in enumerate(all_ingredients)])
118
+
119
+ # Now generate recipes based on all identified ingredients
120
  system_prompt = """You are a culinary expert AI assistant that specializes in creating recipes based on available ingredients.
121
+ You will be provided with lists of ingredients identified from multiple images. Your task is to suggest creative,
122
+ detailed recipes that use as many of the identified ingredients as possible.
123
 
124
  For each recipe suggestion, include:
125
  1. Recipe name
 
132
 
133
  Consider any dietary restrictions and cuisine preferences mentioned by the user."""
134
 
135
+ user_prompt = f"""Based on the following ingredients identified from multiple images, suggest {num_recipes} creative and delicious recipes.
136
+
137
+ {combined_ingredients}
138
+
139
  Dietary restrictions to consider: {dietary_restrictions}
140
  Cuisine preference: {cuisine_preference}
 
141
 
142
+ Please be creative with your recipe suggestions and try to use ingredients from multiple images if possible."""
 
 
 
 
 
 
 
 
 
 
143
 
144
+ # Generate recipe suggestions based on all identified ingredients
145
  response = client.chat.completions.create(
146
  model="meta-llama/Llama-Vision-Free",
147
  messages=[
 
151
  },
152
  {
153
  "role": "user",
154
+ "content": user_prompt
155
  }
156
  ],
157
  max_tokens=2048,
 
165
  except:
166
  pass
167
 
168
+ # Add information about the ingredients identified
169
+ result = "## 📋 Ingredients Identified\n\n"
170
+ result += combined_ingredients
171
+ result += "\n\n---\n\n"
172
+ result += "## 🍽️ Recipe Suggestions\n\n"
173
+ result += response.choices[0].message.content
174
+
175
+ return result
176
 
177
  except Exception as e:
178
  # Clean up the temporary files in case of error
 
351
  padding: 20px;
352
  }
353
 
354
+ .recipe-output {
355
+ max-height: 800px;
356
+ overflow-y: auto;
357
+ padding-right: 10px;
358
+ }
359
+
360
+ .recipe-output h2 {
361
+ color: var(--primary-color);
362
+ border-bottom: 1px solid var(--secondary-color);
363
+ padding-bottom: 5px;
364
+ }
365
+
366
+ .recipe-output h3 {
367
+ color: var(--secondary-color);
368
+ }
369
+
370
  /* Responsive styles */
371
  @media (max-width: 768px) {
372
  .app-title {