File size: 2,658 Bytes
cc7fc3b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import gradio as gr
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain, SequentialChain

# Set your OpenAI API key (this will be set via HF Secrets, not hardcoded)
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

# Initialize LLM
llm = OpenAI(temperature=0.9)

# Prompt for restaurant name
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 for menu items
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")

# Combine chains
chain = SequentialChain(
    chains=[name_chain, food_items_chain],
    input_variables=["cuisine"],
    output_variables=["restaraunt_name", "menu_items"],
    verbose=True
)

# Gradio interface logic
def generate_restaurant(cuisine):
    result = chain({"cuisine": cuisine})
    return result["restaraunt_name"], result["menu_items"]

# Gradio UI
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])

# Launch
demo.launch()