Spaces:
Sleeping
Sleeping
import gradio as gr | |
from smolagents import ToolCallingAgent, tool, LiteLLMModel | |
import os | |
from dotenv import load_dotenv | |
load_dotenv() | |
CO_API_KEY = os.environ.get("CO_API_KEY") | |
model = "command-r-plus-08-2024" | |
preamble = """You are Alfred, a helpful butler assistant. | |
When using a tool and getting a result, provide a clear response based on that result. | |
After calling a tool once, suggest a menu based on the result. | |
Include a creative description of ingredients for each item. | |
Do not add any additional information or context such as recommendations or explanations. | |
Use gender-neutral language and avoid gendered pronouns.""" | |
model = LiteLLMModel( | |
model_id=f"cohere/{model}", | |
api_key=CO_API_KEY, | |
temperature=0.2, | |
max_tokens=1000 | |
) | |
def suggest_menu(occasion: str) -> str: | |
""" | |
Suggests a menu based on the occasion. | |
Args: | |
occasion (str): The type of occasion for the party. Allowed values are: | |
- "casual": Menu for casual party. | |
- "formal": Menu for formal party. | |
- "superhero": Menu for superhero party. | |
- "custom": Custom menu. | |
""" | |
if occasion == "casual": | |
return "Pizza, and some snacks and drinks." | |
elif occasion == "formal": | |
return "three-course dinner with wine and dessert." | |
elif occasion == "superhero": | |
return "Buffet with high-energy and healthy food." | |
else: | |
return "Custom menu for the butler." | |
agent = ToolCallingAgent(tools=[suggest_menu], model=model) | |
def plan_menu(user_request): | |
try: | |
result = agent.run(preamble + f"\n{user_request}", max_steps=1) | |
return result | |
except Exception as e: | |
return f"Error: {str(e)}" | |
# Create Gradio interface | |
with gr.Blocks(title="Alfred's Menu Planner") as demo: | |
gr.Markdown("# 🍽️ Alfred's Menu Planner") | |
gr.Markdown("Ask Alfred to help plan a menu for your party!") | |
with gr.Row(): | |
with gr.Column(scale=1): | |
user_input = gr.Textbox( | |
label="What kind of menu do you need?", | |
placeholder="Enter a query, select an option below, or click the button for a surprise menu!", | |
lines=3 | |
) | |
submit_btn = gr.Button("Ask Alfred", variant="primary") | |
gr.Examples( | |
examples=[ | |
["Plan a casual menu for my birthday party"], | |
["I need a formal dinner menu for 8 people"], | |
["What would be good for a superhero themed party in my backyard?"], | |
["Suggest a menu for a garden party. Aim to impress!"] | |
], | |
inputs=user_input | |
) | |
with gr.Column(scale=2): | |
output = gr.Markdown( | |
label="Alfred's Response", | |
value="Ask Alfred for a menu recommendation!" | |
) | |
submit_btn.click( | |
fn=lambda: "Ask Alfred for a menu recommendation!", | |
outputs=output, | |
show_progress=True | |
).then( | |
fn=plan_menu, | |
inputs=user_input, | |
outputs=output, | |
show_progress=True | |
) | |
if __name__ == "__main__": | |
demo.launch() |