Skip to content

Instantly share code, notes, and snippets.

@Awesomeplayer165
Created October 24, 2025 04:04
Show Gist options
  • Select an option

  • Save Awesomeplayer165/829fe41d37f37a4a53b5d197e40fe9fa to your computer and use it in GitHub Desktop.

Select an option

Save Awesomeplayer165/829fe41d37f37a4a53b5d197e40fe9fa to your computer and use it in GitHub Desktop.
Chatbot AI
import threading
import tkinter as tk
from tkinter.scrolledtext import ScrolledText
import google.generativeai as genai
# Configure API
api_key = ""
genai.configure(api_key=api_key)
MODEL = "gemini-2.5-flash"
class ChatApp:
def __init__(self, root):
self.root = root
root.title("Gemini Chatbot")
root.geometry("600x400")
# Create chat display area
self.text_area = ScrolledText(root, wrap=tk.WORD, state=tk.DISABLED)
self.text_area.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
# Create input field
self.entry_var = tk.StringVar()
self.entry = tk.Entry(root, textvariable=self.entry_var)
self.entry.pack(padx=10, pady=(0,10), fill=tk.X)
self.entry.bind("<Return>", self.send_message)
# Create send button
self.send_button = tk.Button(root, text="Send", command=self.send_message)
self.send_button.pack(padx=10, pady=(0,10))
# Initialize Gemini chat
self.model = genai.GenerativeModel(MODEL)
self.chat = self.model.start_chat(history=[])
def display_message(self, text, tag=None):
"""Add message to chat display"""
self.text_area.configure(state=tk.NORMAL)
self.text_area.insert(tk.END, text + "\n", tag)
self.text_area.configure(state=tk.DISABLED)
self.text_area.see(tk.END)
def send_message(self, event=None):
"""Handle user input and trigger response"""
user_input = self.entry_var.get().strip()
if not user_input:
return
self.entry_var.set("")
self.display_message("You: " + user_input, "user")
# Get response in background thread to prevent UI freeze
threading.Thread(target=self.get_response, args=(user_input,), daemon=True).start()
def get_response(self, user_input):
"""Call Gemini API and display response"""
try:
response = self.chat.send_message(user_input)
self.display_message("Assistant: " + response.text, "assistant")
except Exception as e:
self.display_message(f"[Error: {e}]", "error")
def main():
root = tk.Tk()
app = ChatApp(root)
# Config message colors
app.text_area.tag_config("user", foreground="blue")
app.text_area.tag_config("assistant", foreground="green")
app.text_area.tag_config("error", foreground="red")
root.mainloop()
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment