Web3Wizz / app.py
SatyamSinghal's picture
Update app.py
f2c95fa verified
import os
import gradio as gr
import openai
from langdetect import detect
# Set up OpenAI API with custom Groq endpoint
openai.api_key = os.getenv("API_KEY")
openai.api_base = "https://api.groq.com/openai/v1"
# Function to provide definitions with humor, storytelling, and coolness
def command_handler(user_input):
if user_input.lower().startswith("define "):
term = user_input[7:].strip()
definitions = {
"nft": (
"An NFT (Non-Fungible Token) is like owning the *original* Mona Lisa, but digitally. "
"Sure, people can take photos or screenshots, but the *real* ownership? That’s yours on the blockchain! 🖼️"
),
"smart contract": (
"A smart contract is like a vending machine but for the internet. You put in the crypto (coin), "
"the code checks everything (no dodgy snacks here), and boom—you get what you asked for, "
"all automated and drama-free! 🤖"
),
"blockchain": (
"Blockchain is like a digital diary, but it’s shared with your most trustworthy friends. "
"Each page is a block, and once written, it can’t be erased—so no one can rewrite your embarrassing pizza order. 🍕"
)
}
return definitions.get(term.lower(), "Hmm, I don’t have a fun story for that yet. Try another term!")
return None
# Function to get the Groq model's response with humor, shortness, and energy
def get_groq_response(message, user_language):
try:
response = openai.ChatCompletion.create(
model="llama-3.1-70b-versatile",
messages=[
{
"role": "system",
"content": (
f"You are Wiz, a cheerful and witty Web3 guide with a knack for humor and storytelling. "
f"Explain complex concepts with jokes, analogies, and relatable examples. "
f"Make users laugh and keep them curious about Web3. "
f"Use a lighthearted, engaging tone to create memorable learning experiences. "
f"Keep responses short, cool, and energetic!"
)
},
{"role": "user", "content": message}
]
)
return response.choices[0].message["content"]
except Exception as e:
return f"Oops, looks like I tripped over the blockchain! Error: {str(e)}"
# Function to handle chatbot interactions with cool, energetic responses
def chatbot(user_input, history=[]):
try:
# Detect the language of the user's input
detected_language = detect(user_input)
user_language = "Hindi" if detected_language == "hi" else "English"
# Handle commands like "Define [term]"
command_response = command_handler(user_input)
if command_response:
history.append((user_input, command_response))
return history, history
# Get the response from the Groq model with humor and energy
bot_response = get_groq_response(user_input, user_language)
# Add some cool and short replies
cool_replies = [
"Let's go! 🚀",
"Boom! 💥 That’s the power of Web3!",
"You’re on fire! 🔥 Keep the questions coming!",
"That’s some next-level stuff, right? 🤩",
"You just got schooled in Web3! 📚",
"Ready to level up? 💎",
"You’ve got the crypto magic! 🪄",
"That’s how we roll in the Web3 world! 🌍",
"You're cruising through this! 🏎️",
"Keep those questions coming, we're on a roll! 🎲"
]
bot_response = f"{bot_response} {cool_replies[hash(user_input) % len(cool_replies)]}"
# Append to conversation history
history.append((user_input, bot_response))
return history, history # Return updated chat history and state
except Exception as e:
return [(user_input, f"Yikes! Something went wrong: {str(e)}")], history
# Gradio Interface setup
chat_interface = gr.Interface(
fn=chatbot, # Function to call for chatbot interaction
inputs=["text", "state"], # Input fields: user message and chat history (state)
outputs=["chatbot", "state"], # Outputs: the chat and updated history (state)
live=False, # Disable live chat, responses shown after submit
title="Wiz: Your Fun Web3 Companion 🧙‍♂️", # Title of the app
description=(
"Welcome to Wiz, your Web3 companion with a sense of humour! 🎉\n\n"
"Ask me anything about Web3, blockchain, NFTs, or smart contracts.\n\n"
"I'll explain them with jokes, stories, and analogies to keep you entertained while you learn. "
"Get ready for some cool and energetic responses! Let’s laugh and grow together! 😄"
)
)
# Launch the Gradio interface
if __name__ == "__main__":
chat_interface.launch()