Created
October 24, 2025 04:04
-
-
Save Awesomeplayer165/829fe41d37f37a4a53b5d197e40fe9fa to your computer and use it in GitHub Desktop.
Chatbot AI
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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