Spaces:
Runtime error
Runtime error
| # Importing necessary Python libraries (pre-made code that helps us do specific tasks) | |
| import os # This helps us access environment variables, like secret keys | |
| import gradio as gr # Gradio helps us build simple web interfaces | |
| import openai # This allows us to connect to Poe’s API (powered by OpenAI) | |
| # ------------------------- | |
| # 🛠️ Poe API Setup | |
| # ------------------------- | |
| # We get the Poe API key from the environment (it's stored securely in Hugging Face Secrets) | |
| # This key lets us connect to Poe’s chatbot service | |
| POE_API_KEY = os.environ["POE_API_KEY"] | |
| # Creating a client (connection) to the Poe API | |
| # `base_url` is where the Poe service lives online | |
| client = openai.OpenAI( | |
| api_key=POE_API_KEY, | |
| base_url="https://api.poe.com/v1" | |
| ) | |
| # ------------------------- | |
| # 💬 Chat Function | |
| # ------------------------- | |
| # This is the main function that handles the conversation with Poe | |
| def chat_with_poe(history, message): | |
| # `history` stores past messages between user and bot | |
| # `message` is the new user message that needs a reply | |
| # Convert Gradio’s format to Poe’s format | |
| messages = [] # This will be a list of messages we send to Poe | |
| for user_msg, bot_msg in history: | |
| # Add the user’s previous message | |
| messages.append({"role": "user", "content": user_msg}) | |
| # If there's a bot reply, add it too | |
| if bot_msg: | |
| messages.append({"role": "assistant", "content": bot_msg}) | |
| # Add the new user message to the end of the list | |
| messages.append({"role": "user", "content": message}) | |
| try: | |
| # Send the messages to Poe and get the response from the chatbot | |
| response = client.chat.completions.create( | |
| model="My_Tutor_Shq", # The name of your bot on Poe | |
| messages=messages # All past and current messages | |
| ) | |
| # Extract the bot’s reply from the response | |
| bot_reply = response.choices[0].message.content | |
| except Exception as e: | |
| # If something goes wrong, show an error message | |
| bot_reply = f"⚠️ Error: {str(e)}" | |
| # Add the new message and bot reply to the chat history | |
| history.append((message, bot_reply)) | |
| # Return updated chat history twice (Gradio expects it this way) | |
| return history, history | |
| # ------------------------- | |
| # 🖼️ Gradio Chat Interface (UI) | |
| # ------------------------- | |
| # `with gr.Blocks()` sets up a visual layout for our chat interface | |
| # `theme=gr.themes.Soft()` makes the interface look nice and clean | |
| with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
| # This adds a title and description at the top | |
| gr.Markdown( | |
| # 🤖 Your title goes here | |
| # Description | |
| # Type below to start chatting. | |
| """ | |
| # 🤖 Python Tutor Bot | |
| """ | |
| ) | |
| # This creates the actual chatbot display window | |
| chatbot = gr.Chatbot([], height=400) | |
| # A text box where the user can type their message | |
| msg = gr.Textbox(placeholder="Type your message...") | |
| # A button to clear the chat history | |
| clear = gr.Button("Clear Chat") | |
| # When the user presses enter in the textbox: | |
| # Call `chat_with_poe()` using the current chat and new message | |
| # Update the chat window with the new messages | |
| msg.submit(chat_with_poe, [chatbot, msg], [chatbot, chatbot]) | |
| # When the "Clear Chat" button is clicked, reset the chatbot window to empty | |
| clear.click(lambda: [], None, chatbot) | |
| # ------------------------- | |
| # 🚀 Launch the App | |
| # ------------------------- | |
| # This runs the app if the file is being executed directly (not imported) | |
| if __name__ == "__main__": | |
| demo.launch() # Starts the Gradio interface so users can chat with the bot |