wwebec's picture
Update app.py
7045df8 verified
# pip install gradio openai python-dotenv
import gradio as gr
import openai
import os
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
# Set OpenAI API key
openai.api_key = os.getenv("OPENAI_API_KEY")
HEADER_IMAGE_PATH = "header.jpg"
def compose_prompt(ingredients, complexity):
"""Composes the prompt for the OpenAI API."""
complexity_level = {
1: "very simple and quick",
2: "simple",
3: "moderate",
4: "complex",
5: "very complex and gourmet"
}.get(complexity, "simple")
prompt = f"""Task: Generate a recipe using the following ingredients with a {complexity_level} complexity level.
Ingredients: {ingredients}
The recipe should include:
- Recipe title
- Estimated prep and cook time (in minutes, total time <= 60 for complexity <= 2, <= 120 for complexity 5, using metric units)
- List of ingredients with approximate amounts (using metric units)
- Step-by-step cooking instructions (using degrees °C)
- Optional tips or substitutions
- Note about what to buy if something is missing
Format the output as Markdown.
"""
return prompt
def generate_recipe(ingredients, complexity):
"""Generates a recipe using the OpenAI API."""
if not ingredients:
return "Please provide some ingredients."
prompt = compose_prompt(ingredients, complexity)
try:
response = openai.chat.completions.create(
model="gpt-4-turbo", # or "gpt-4-turbo"
messages=[
{"role": "system", "content": "You are a helpful recipe generator."},
{"role": "user", "content": prompt}
],
temperature=0.7,
max_tokens=500,
)
return response.choices[0].message.content
except Exception as e:
return f"An error occurred: {e}"
with gr.Blocks(title="Recipe Generator") as demo:
headline_html = f"""
<div style="display:flex;align-items:center;gap:14px;margin:10px 0 6px 0;">
<img src="{HEADER_IMAGE_PATH}" alt="Header" style="height:56px;object-fit:contain;">
<h1 style="margin:0;font-size:28px;">Recipe Generator</h1>
</div>
"""
gr.HTML(headline_html)
gr.Markdown("# Recipe Generator")
gr.Markdown("Enter your ingredients and desired complexity to get a recipe.")
with gr.Row():
ingredients_input = gr.Textbox(
label="Ingredients",
placeholder="chicken, rice, tomatoes, garlic",
lines=3,
interactive=True
)
complexity_slider = gr.Slider(
label="Complexity level",
minimum=1,
maximum=5,
step=1,
value=2,
interactive=True
)
generate_button = gr.Button("Generate recipe")
recipe_output = gr.Markdown()
generate_button.click(
fn=generate_recipe,
inputs=[ingredients_input, complexity_slider],
outputs=recipe_output
)
gr.Examples(
examples=[
["pasta, spinach, cheese, garlic", 3],
["salmon, asparagus, lemon", 2],
["beef, potatoes, carrots, onions", 4]
],
inputs=[ingredients_input, complexity_slider]
)
if __name__ == "__main__":
demo.launch()