File size: 3,374 Bytes
fbdcaaf
9ff2b7e
fd07ca2
 
 
 
 
 
 
fbdcaaf
 
 
 
 
fd07ca2
5182c3f
fbdcaaf
fd07ca2
 
 
 
 
 
 
 
 
 
 
 
ae16adf
fd07ca2
ae16adf
fd07ca2
 
 
 
fbdcaaf
 
 
 
 
fd07ca2
 
fbdcaaf
 
 
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
# 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 = st.radio(
    "Choose a difficulty level for your recipe.",
    ["Quick & Easy", "Intermediate", "Professional"],
    captions = [
        "Easy recipes with straightforward instructions. Ideal for beginners or those seeking quick and simple cooking.",
        "Recipes with some intricate steps that invite a little challenge. Perfect for regular cooks wanting to expand their repertoire with new ingredients and techniques.", 
        "Complex recipes that demand a high level of skill and precision. Suited for seasoned cooks aspiring to professional-level sophistication and creativity."
    ])

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
}

    
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)