Spaces:
Sleeping
Sleeping
File size: 5,978 Bytes
3a8a62c 3f91182 3a8a62c 75b990e 3a8a62c 75b990e 3a8a62c 3f91182 5a478e9 260d664 58f3f53 260d664 bee4260 6689ba9 5a478e9 260d664 58f3f53 5a478e9 3b0e1db 3d2f2fd 3b0e1db a148f61 3f91182 3b4fbd7 3f91182 8eff817 c00d84f 3f91182 3b4fbd7 3f91182 c00d84f 3f91182 b93ab61 5a478e9 260d664 d3c56de 3d2f2fd 3a8a62c 3f91182 260d664 5a478e9 8eff817 3f91182 8eff817 3f91182 c00d84f 3f91182 923b4cb 3f91182 8eff817 bee4260 3f91182 c00d84f 3f91182 5a478e9 260d664 8eff817 5a478e9 8eff817 6689ba9 260d664 3f91182 5a478e9 c00d84f b93ab61 1e70c5a 5a478e9 b93ab61 c00d84f 5a478e9 c00d84f 5a478e9 c00d84f 5a478e9 c00d84f 1975819 c00d84f 5a478e9 c00d84f 1975819 c00d84f 3b0e1db 5a478e9 b93ab61 3a8a62c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
import os
from dotenv import load_dotenv
import gradio as gr
from langchain_huggingface import HuggingFaceEndpoint
from datetime import datetime
# Load environment variables
load_dotenv()
HF_TOKEN = os.getenv("HF_TOKEN")
# Initialize the HuggingFace inference endpoint
llm = HuggingFaceEndpoint(
repo_id="mistralai/Mistral-7B-Instruct-v0.3",
huggingfacehub_api_token=HF_TOKEN.strip(),
temperature=0.7,
)
# Input validation function
def validate_ingredients(ingredients):
prompt = (
f"Review the provided list of items: {ingredients}. "
f"Determine if all items are valid food ingredients. "
f"Respond only with 'Valid' if all are valid food items or 'Invalid' if any are not."
)
response = llm(prompt)
return response.strip()
# Recipe generation function
def generate_recipe(ingredients):
prompt = (
f"You are an expert chef. Using the ingredients: {ingredients}, "
f"suggest two recipes. Provide a title, preparation time, and step-by-step instructions. "
f"It is not mandatory to include all ingredients, pick the ingredients required for each recipe. "
f"Do not include the ingredient list explicitly in the response."
)
response = llm(prompt)
return response.strip()
# Combined function for Gradio
def suggest_recipes(ingredients):
validation_result = validate_ingredients(ingredients)
if validation_result == "Valid":
return generate_recipe(ingredients)
else:
return "I'm sorry, but I can't process this request due to invalid ingredients. Please provide valid ingredients for cooking!"
# Feedback function
def save_feedback(feedback):
if feedback.strip():
with open("feedback.txt", "a") as file:
file.write(f"{datetime.now()}: {feedback}\n")
return "Thank you for your feedback!"
return "Please enter feedback before submitting."
# Gradio interface with professional color theme
with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="gray")) as app:
# Header section with professional background and white text
with gr.Row():
gr.HTML(
"""
<div style="text-align: center; margin: auto;">
<h1 style="color: #1155ff; font-size: 3.5em; font-weight: bold; font-family: 'Arial', sans-serif;">🍳 Recipe Generator !</h1>
<p style="font-size: 1.5em; color: #555555; font-weight: lighter; font-family: 'Verdana', sans-serif;">
Enter the ingredients you have, and we'll validate them and suggest delightful recipes!
</p>
</div>
"""
)
# Banner Image
# with gr.Row():
# gr.Image("./recipe-generator-banner.png", show_label=False)
with gr.Row():
gr.Image("./recipe-generator-banner.png", show_label=False, elem_id="banner-image", width="100%")
# Ingredient input and output with borders and padding for more contrast
with gr.Row():
with gr.Column():
ingredients_input = gr.Textbox(
label="Enter Ingredients (comma-separated):",
placeholder="e.g., eggs, milk, flour",
elem_id="input-box",
show_label=True,
interactive=True
)
with gr.Column():
recipe_output = gr.Textbox(
label="Suggested Recipes or Validation Result:",
lines=15,
interactive=False,
elem_id="output-box"
)
# Buttons with professional color design
with gr.Row():
generate_button = gr.Button("Get Recipes", elem_id="generate-btn", size="lg")
reset_button = gr.Button("Reset", elem_id="reset-btn", size="lg")
generate_button.click(suggest_recipes, inputs=ingredients_input, outputs=recipe_output)
reset_button.click(lambda: "", inputs=None, outputs=ingredients_input)
# Feedback Section with professional styled input fields
with gr.Row():
feedback_input = gr.Textbox(
label="Feedback:",
placeholder="Let us know how we can improve!",
elem_id="feedback-input",
lines=1
)
feedback_button = gr.Button("Submit", elem_id="feedback-btn", size="lg")
feedback_output = gr.Textbox(
label="Feedback Response:",
lines=1,
interactive=False,
elem_id="feedback-output"
)
feedback_button.click(save_feedback, inputs=feedback_input, outputs=feedback_output)
# Footer with contact link
with gr.Row():
gr.Markdown(
"""
<div style="text-align: center; margin-top: 2em;">
<p style="font-size: 1em; color:#333333; font-family: 'Arial', sans-serif;">
Developed by CloudYuga! Your feedback is valuable. Have questions?
<a href="mailto:connect@cloudyuga.guru" style="color: #0000FF; font-weight: bold; text-decoration: underline;">Contact us!</a>
</p>
</div>
"""
)
# Apply custom professional theme styling
app.css = """
body {
background-color: #FFFFFF; /* White background */
color: #333333;
}
#input-box, #output-box, #feedback-input {
background-color: #FFFFFF;
border: 2px solid #CCCCCC;
border-radius: 8px;
padding: 10px;
color: #333333;
}
#generate-btn, #reset-btn, #feedback-btn {
border-radius: 8px;
padding: 15px 30px;
font-size: 1.2em;
}
#generate-btn {
background-color: #DDDDDD;
color: #333333;
}
#reset-btn {
background-color: #DDDDDD;
color: #333333;
}
#feedback-btn {
background-color: #DDDDDD;
color: #333333;
}
#banner-image {
width: 100%;
height: auto;
}
"""
# Launch the app
app.launch()
|