Quote_Generator / app.py
RozzaCreat's picture
Update app.py
42e8047 verified
Raw History Blame Contribute Delete
11.1 kB
from smolagents import CodeAgent, HfApiModel, tool
import yaml
import random
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI
@tool
def generate_famous_quote(topic: str) -> str:
"""
Generates a famous quote related to the provided topic.
Args:
topic (str): The topic or theme for the quote.
Returns:
str: A famous quote related to the topic and its author.
"""
# Dictionary of quotes by topic
quotes_by_topic = {
"love": [
"The greatest happiness of life is the conviction that we are loved; loved for ourselves, or rather, loved in spite of ourselves. — Victor Hugo",
"Love is composed of a single soul inhabiting two bodies. — Aristotle",
"Being deeply loved by someone gives you strength, while loving someone deeply gives you courage. — Lao Tzu",
"Where there is love, there is life. — Mahatma Gandhi",
"The best thing to hold onto in life is each other. — Audrey Hepburn"
],
"wisdom": [
"The only true wisdom is in knowing you know nothing. — Socrates",
"Wisdom is not a product of schooling but of the lifelong attempt to acquire it. — Albert Einstein",
"The fool doth think he is wise, but the wise man knows himself to be a fool. — William Shakespeare",
"By three methods we may learn wisdom: First, by reflection, which is noblest; Second, by imitation, which is easiest; and third by experience, which is the bitterest. — Confucius",
"The beginning of wisdom is the definition of terms. — Socrates"
],
"success": [
"Success is not final, failure is not fatal: It is the courage to continue that counts. — Winston Churchill",
"The way to get started is to quit talking and begin doing. — Walt Disney",
"Don't be distracted by criticism. Remember, the only taste of success some people get is to take a bite out of you. — Zig Ziglar",
"Success usually comes to those who are too busy to be looking for it. — Henry David Thoreau",
"I never dreamed about success, I worked for it. — Estée Lauder"
],
"happiness": [
"Happiness is not something ready-made. It comes from your own actions. — Dalai Lama",
"The happiness of your life depends upon the quality of your thoughts. — Marcus Aurelius",
"The most important thing is to enjoy your life—to be happy—it's all that matters. — Audrey Hepburn",
"Happiness is when what you think, what you say, and what you do are in harmony. — Mahatma Gandhi",
"Count your age by friends, not years. Count your life by smiles, not tears. — John Lennon"
],
"time": [
"The two most powerful warriors are patience and time. — Leo Tolstoy",
"Time is what we want most, but what we use worst. — William Penn",
"Yesterday is gone. Tomorrow has not yet come. We have only today. Let us begin. — Mother Teresa",
"Time you enjoy wasting is not wasted time. — Marthe Troly-Curtin",
"The future starts today, not tomorrow. — Pope John Paul II"
],
"friendship": [
"A real friend is one who walks in when the rest of the world walks out. — Walter Winchell",
"Friendship is born at that moment when one person says to another, 'What! You too? I thought I was the only one.' — C.S. Lewis",
"A friend is someone who knows all about you and still loves you. — Elbert Hubbard",
"A single rose can be my garden... a single friend, my world. — Leo Buscaglia",
"Friendship is the only cement that will ever hold the world together. — Woodrow Wilson"
],
"courage": [
"Courage is resistance to fear, mastery of fear, not absence of fear. — Mark Twain",
"It takes courage to grow up and become who you really are. — E.E. Cummings",
"Success is not final, failure is not fatal: It is the courage to continue that counts. — Winston Churchill",
"Courage is found in unlikely places. — J.R.R. Tolkien",
"You cannot swim for new horizons until you have courage to lose sight of the shore. — William Faulkner"
],
"change": [
"The only way to make sense out of change is to plunge into it, move with it, and join the dance. — Alan Watts",
"Change is the law of life. And those who look only to the past or present are certain to miss the future. — John F. Kennedy",
"Everyone thinks of changing the world, but no one thinks of changing himself. — Leo Tolstoy",
"Be the change that you wish to see in the world. — Mahatma Gandhi",
"Those who cannot change their minds cannot change anything. — George Bernard Shaw"
],
"education": [
"Education is the most powerful weapon which you can use to change the world. — Nelson Mandela",
"The function of education is to teach one to think intensively and to think critically. — Martin Luther King, Jr.",
"Education is not the filling of a pail, but the lighting of a fire. — W.B. Yeats",
"The roots of education are bitter, but the fruit is sweet. — Aristotle",
"An investment in knowledge pays the best interest. — Benjamin Franklin"
],
"faith": [
"Faith is taking the first step even when you don't see the whole staircase. — Martin Luther King, Jr.",
"Faith consists in believing when it is beyond the power of reason to believe. — Voltaire",
"Keep your faith in all beautiful things; in the sun when it is hidden, in the Spring when it is gone. — Roy R. Gilson",
"Faith is the bird that feels the light when the dawn is still dark. — Rabindranath Tagore",
"Faith is to believe what you do not see; the reward of this faith is to see what you believe. — Saint Augustine"
],
"hope": [
"Hope is being able to see that there is light despite all of the darkness. — Desmond Tutu",
"We must accept finite disappointment, but never lose infinite hope. — Martin Luther King, Jr.",
"Hope is the thing with feathers that perches in the soul. — Emily Dickinson",
"Where there is no vision, there is no hope. — George Washington Carver",
"A leader is a dealer in hope. — Napoleon Bonaparte"
],
"perseverance": [
"It does not matter how slowly you go as long as you do not stop. — Confucius",
"Perseverance is not a long race; it is many short races one after the other. — Walter Elliot",
"Many of life's failures are people who did not realize how close they were to success when they gave up. — Thomas Edison",
"Through perseverance many people win success out of what seemed destined to be certain failure. — Benjamin Disraeli",
"The difference between a successful person and others is not a lack of strength, not a lack of knowledge, but rather a lack in will. — Vince Lombardi"
]
}
# Normalize the topic (convert to lowercase)
topic_lower = topic.lower()
# Find the closest matching topic
if topic_lower in quotes_by_topic:
# Topic directly matches
relevant_quotes = quotes_by_topic[topic_lower]
else:
# Search for partial matches in topic keywords
matched_topics = []
for key in quotes_by_topic:
if key in topic_lower or topic_lower in key:
matched_topics.append(key)
if matched_topics:
# Use quotes from the first matching topic
relevant_quotes = quotes_by_topic[matched_topics[0]]
else:
# No match found - use a generic response
return f"No famous quotes found for '{topic}'. Try topics like: love, wisdom, success, happiness, time, friendship, courage, change, education, faith, hope, or perseverance."
# Return a random quote from the relevant ones
return random.choice(relevant_quotes)
# Setup agent
final_answer = FinalAnswerTool()
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct'
)
# Custom prompt templates for the quote generator agent
quote_prompt_templates = {
"react-system": """You are a helpful agent that provides famous quotes on various topics.
You have access to the following tools:
{tools_string}
When a user enters a topic, use the generate_famous_quote tool to find a relevant quote on that topic.
Return the quote to the user using the final_answer tool.
To use a tool, output an action in this format:
```py
action = tool_name(arg1=value1, arg2=value2, ...)
```
Always use Python syntax for calling tools. After using a tool, analyze the result to determine what to do next. Use final_answer to return your answer when complete.
""",
"react-human": "{input_string}",
"react-assistant": "{agent_response}",
}
# Load prompts.yaml if it exists, otherwise use our custom templates
try:
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
prompt_templates.update(quote_prompt_templates)
except:
prompt_templates = quote_prompt_templates
# Create the agent
agent = CodeAgent(
model=model,
tools=[final_answer, generate_famous_quote],
max_steps=3, # Reduced steps since this is a simple task
verbosity_level=1,
prompt_templates=prompt_templates
)
# Create a custom Gradio UI
class QuoteGeneratorUI(GradioUI):
def launch(self, **kwargs):
import gradio as gr
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# Famous Quotes Generator")
gr.Markdown("Enter a topic to receive a famous quote related to it.")
with gr.Row():
with gr.Column():
topic_input = gr.Textbox(label="Enter a topic (e.g., love, wisdom, success)")
submit_btn = gr.Button("Get Quote", variant="primary")
with gr.Row():
with gr.Column():
quote_output = gr.Markdown(label="Your Quote")
def get_quote(topic):
if not topic or topic.strip() == "":
return "Please enter a topic to receive a quote."
try:
quote = generate_famous_quote(topic)
return f"### Quote on '{topic}':\n\n> {quote}"
except Exception as e:
return f"Error generating quote: {str(e)}"
submit_btn.click(get_quote, inputs=topic_input, outputs=quote_output)
demo.launch(**kwargs)
# Launch the custom UI
QuoteGeneratorUI(agent).launch()