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()