Spaces:
Running
Running
File size: 4,237 Bytes
fbdcaaf 9ff2b7e fd07ca2 fbdcaaf fd07ca2 5182c3f fbdcaaf fd07ca2 763e0c3 119e7a1 763e0c3 119e7a1 763e0c3 119e7a1 763e0c3 fd07ca2 763e0c3 fd07ca2 763e0c3 fd07ca2 fbdcaaf fd07ca2 fbdcaaf 763e0c3 fd07ca2 fbdcaaf 1481d5a fd07ca2 fbdcaaf 8bab72c fbdcaaf 5ff038b b2a32bf 5ff038b b7ee1cf 5ff038b b7ee1cf |
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 |
# imports
import streamlit as st
import numpy as np
import pandas as pd
import re
import json
import openai
openai.api_key = st.secrets["open_ai_key"]
# state management
if 'gpt_response' not in st.session_state:
st.session_state.gpt_response = None
# app
user_direction = st.text_area(
"Let's get cooking! What do you feel like making?",
placeholder="quick snack, asian style bowl with either noodles or rice, something italian",
)
serving_size = st.number_input(
"How many people are you cooking for?",
min_value=1,
max_value=100,
value=2,
step=1
)
difficulty_dictionary = {
"Quick & Easy": {
"description": "Easy recipes with straightforward instructions. Ideal for beginners or those seeking quick and simple cooking.",
"gpt_instruction": "Easy: a quick and easy recipe with simple/straightfoward ingredients and instructions."
}
"Intermediate": {
"description": "Recipes with some intricate steps that invite a little challenge. Perfect for regular cooks wanting to expand their repertoire with new ingredients and techniques.",
"gpt_instruction": "Intermediate: intermediate recipe with some intricate ingredients and instructional steps."
}
"Professional": {
"description": "Complex recipes that demand a high level of skill and precision. Suited for seasoned cooks aspiring to professional-level sophistication and creativity.",
"gpt_instruction": "Professional: restaurant quality dish that is innovative and even experimental. may use a variety of ingredients and techniques."
}
}
selected_difficulty = st.radio(
"Choose a difficulty level for your recipe.",
[
difficulty_dictionary[0],
difficulty_dictionary[1],
difficulty_dictionary[2]
],
captions = [
difficulty_dictionary["Quick & Easy"]["description"],
difficulty_dictionary["Intermediate"]["description"],
difficulty_dictionary["Professional"]["description"]
]
)
exclusions = st.text_area(
"Any ingredients you want to exclude?",
placeholder="gluten, dairy, nuts, cilantro",
)
user_inputs = {
"user_direction" : user_direction,
"exclusions": exclusions,
"serving_size": serving_size,
"difficulty": difficulty_dictionary['selected_difficulty']['gpt_instruction']
}
def generate_recipe(user_inputs):
with st.spinner('Building the perfect recipe for you...'):
context = """Provide me a recipe based on the user input.
Output this in a valid JSON object with the following properties:
recipe_name (string): the name of the recipe
recipe_serving_size (string): the serving size of the recipe (example: "4 people")
recipe_time (string): the amount of time required to make the recipe (example: "60 minutes (Preparation: 20 minutes, Baking: 40 minutes)")
recipe_ingredients (string): python list of ingredients required to make the recipe
recipe_instructions (string): python list of instructions to make the recipe
"""
messages = [
{"role": "system", "content": context},
{"role": "user", "content": str(user_inputs)}
]
st.session_state.gpt_response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
temperature=0.5
)
st.button(label='Submit', on_click=generate_recipe, kwargs=dict(user_inputs=user_inputs))
if st.session_state.gpt_response is not None:
st.divider()
loaded_recipe = json.loads(st.session_state.gpt_response['choices'][0]['message']['content'])
st.header(loaded_recipe['recipe_name'])
st.write(f"**Serving Size: {loaded_recipe['recipe_serving_size']}**")
st.write(f"**Time To Make: {loaded_recipe['recipe_time']}**")
st.subheader("Ingredients:")
md_ingredients = ''
for ingredient in loaded_recipe['recipe_ingredients']:
md_ingredients += "- " + ingredient + "\n"
st.markdown(md_ingredients)
st.subheader("Instructions:")
md_instructions = ''
for instruction in loaded_recipe['recipe_instructions']:
md_instructions += "- " + instruction + "\n"
st.markdown(md_instructions) |