File size: 3,685 Bytes
c54c38e 957293d 42390f7 66d8dc1 e349edf 957293d 66d8dc1 11c7c05 db8f193 957293d 29d2150 bde77a1 c54c38e bde77a1 d8958cb 11c7c05 bde77a1 c54c38e bde77a1 29d2150 bde77a1 c54c38e bde77a1 11c7c05 29d2150 11c7c05 29d2150 5923c3d 29d2150 42390f7 7702794 29d2150 7702794 29d2150 11c7c05 bde77a1 c54c38e bde77a1 11c7c05 29d2150 11c7c05 bde77a1 c54c38e 11c7c05 c54c38e |
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 110 111 112 113 114 115 116 117 118 119 120 121 122 |
import gradio as gr
from llama_cpp import Llama
llm = Llama.from_pretrained(
repo_id="ID2223JR/gguf_model_q4",
filename="unsloth.Q4_K_M.gguf",
)
# llm = Llama.from_pretrained(
# repo_id="ID2223JR/gguf_model_q8",
# filename="unsloth.Q8_0.gguf",
# )
# Data storage
ingredients_list = []
# Function to add ingredient
def add_ingredient(ingredient, quantity):
if ingredient and quantity > 0:
ingredients_list.append(f"{ingredient}, {quantity} grams")
return (
"\n".join(ingredients_list),
gr.update(value="", interactive=True),
gr.update(value=None, interactive=True),
)
# Function to enable/disable add button
def validate_inputs(ingredient, quantity):
if ingredient and quantity is not None and quantity > 0:
return gr.update(interactive=True)
return gr.update(interactive=False)
def submit_to_model():
if not ingredients_list:
yield "Ingredients list is empty! Please add ingredients first."
return
prompt = f"Using the following ingredients, suggest a recipe:\n\n" + "\n".join(
ingredients_list
)
try:
response = llm.create_chat_completion(
messages=[
{
"role": "system",
"content": (
"You are a world-renowned chef, celebrated for your expertise in creating delectable dishes from diverse cuisines. You have a vast knowledge of ingredients, cooking techniques, and dietary preferences. Your role is to suggest personalized recipes based on the ingredients available, dietary restrictions, or specific meal requests. Please provide clear, step-by-step instructions and any useful tips to enhance the dish's flavor or presentation. Begin by introducing the recipe and why it’s a great choice."
),
},
{"role": "user", "content": prompt},
],
stream=True, # Enable streaming
)
content = ""
for partial_response in response:
content += partial_response["choices"][0]["delta"].get("content", "")
if content:
yield content
ingredients_list.clear() # Reset list after generation
except Exception as e:
yield f"An error occurred: {str(e)}"
# App
def app():
with gr.Blocks() as demo:
with gr.Row():
ingredient_input = gr.Textbox(
label="Ingredient", placeholder="Enter ingredient name"
)
quantity_input = gr.Number(label="Quantity (grams)", value=None)
add_button = gr.Button("Add Ingredient", interactive=False)
output = gr.Textbox(label="Ingredients List", lines=10, interactive=False)
with gr.Row():
submit_button = gr.Button("Submit")
model_output = gr.Textbox(
label="Recipe Suggestion", lines=25, interactive=False
)
# Validate inputs
ingredient_input.change(
validate_inputs, [ingredient_input, quantity_input], add_button
)
quantity_input.change(
validate_inputs, [ingredient_input, quantity_input], add_button
)
# Add ingredient logic
add_button.click(
add_ingredient,
[ingredient_input, quantity_input],
[output, ingredient_input, quantity_input],
)
# Submit to model logic
submit_button.click(
submit_to_model,
inputs=None, # No inputs required as it uses the global ingredients_list
outputs=model_output,
)
return demo
demo = app()
demo.launch()
|