|
import os |
|
import gradio as gr |
|
from langchain.llms import OpenAI |
|
from langchain.prompts import PromptTemplate |
|
from langchain.chains import LLMChain, SequentialChain |
|
|
|
|
|
openai_api_key = os.getenv("OPENAI_API_KEY") |
|
if not openai_api_key: |
|
raise ValueError("Please set the OPENAI_API_KEY in your Hugging Face Space secrets.") |
|
|
|
os.environ["OPENAI_API_KEY"] = openai_api_key |
|
|
|
|
|
llm = OpenAI(temperature=0.9) |
|
|
|
|
|
prompt_template_name = PromptTemplate( |
|
input_variables=["cuisine"], |
|
template=""" |
|
I want to start a premium restaurant serving {cuisine} cuisine. |
|
Suggest a unique and classy name that reflects the richness and tradition of this food type. |
|
Avoid clichés. The name should be memorable and ideal for a fine-dining experience. |
|
""" |
|
) |
|
name_chain = LLMChain(llm=llm, prompt=prompt_template_name, output_key="restaraunt_name") |
|
|
|
|
|
prompt_template_items = PromptTemplate( |
|
input_variables=["restaraunt_name"], |
|
template=""" |
|
Create a detailed and elegant sample menu for a fine-dining restaurant named "{restaraunt_name}". |
|
|
|
Structure the response into the following categories: |
|
1. 🥗 Starters (3-4 items with names, short descriptions, and suggested prices) |
|
2. 🍝 Main Course (3-4 items with names, short descriptions, and suggested prices) |
|
3. 🍹 Drinks (3-4 items with names, short descriptions, and suggested prices) |
|
|
|
Ensure that: |
|
- Each item has a creative name and is culturally relevant. |
|
- Prices are in USD and reflect a premium dining experience. |
|
- The tone is refined, as if for a menu booklet or launch event. |
|
""" |
|
) |
|
food_items_chain = LLMChain(llm=llm, prompt=prompt_template_items, output_key="menu_items") |
|
|
|
|
|
chain = SequentialChain( |
|
chains=[name_chain, food_items_chain], |
|
input_variables=["cuisine"], |
|
output_variables=["restaraunt_name", "menu_items"], |
|
verbose=True |
|
) |
|
|
|
|
|
def generate_restaurant(cuisine): |
|
result = chain({"cuisine": cuisine}) |
|
return result["restaraunt_name"], result["menu_items"] |
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("## 🍽️ AI Restaurant Name & Gourmet Menu Generator") |
|
cuisine_input = gr.Textbox(label="Enter Cuisine Type", placeholder="e.g., Korean, French, Lebanese") |
|
name_output = gr.Textbox(label="✨ Suggested Restaurant Name") |
|
menu_output = gr.Textbox(label="📜 Gourmet Menu", lines=15) |
|
|
|
generate_button = gr.Button("Generate Menu") |
|
generate_button.click(generate_restaurant, inputs=[cuisine_input], outputs=[name_output, menu_output]) |
|
|
|
|
|
demo.launch() |
|
|