# 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.", ["Beginner", "Home Chef", "Professional"], captions = [ "Easy recipes with straightforward instructions. Ideal for first-timers 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): context = """Provide me a recipe based on the user input. The recipe output should contain the following components: - recipe name - serving size - time to make - ingredients list - instructions 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: "Serving Size: 4 people") recipe_time (string): the amount of time required to make the recipe (example: "Time to Make: 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-4", messages=messages, temperature=0.2 ) st.button(label='Submit', on_click=generate_recipe, kwargs=dict(user_inputs=user_inputs)) if st.session_state.gpt_response is not None: st.json(json.loads(st.session_state.gpt_response['choices'][0]['message']['content']))