import os import openai import gradio as gr from dotenv import load_dotenv # Load API key from .env file load_dotenv() api_key = os.getenv("OPENAI_API_KEY") if not api_key: raise ValueError("API Key not found! Ensure you have added OPENAI_API_KEY in your .env file.") # Set up OpenAI API Key openai.api_key = api_key # Define chatbot function def python_tutor_bot(user_input): if not user_input.strip(): return "Please enter a valid question." # Create a completion request response = openai.ChatCompletion.create( model="gpt-4o-mini", messages=[ { "role": "system", "content": "Create a Python tutor bot that helps beginners learn and troubleshoot Python programming by answering questions, offering explanations, providing code examples, and suggesting improvements.\n\n" "Explain concepts like you are doing it for an 8th grader.\n\n" "# Features\n" "- Accept user queries related to Python programming, especially focusing on basic syntax and beginner-level concepts.\n" "- Provide simple and clear explanations suitable for novice users.\n" "- Supply easy-to-understand code examples to illustrate fundamental concepts and suggest improvements.\n" "- Troubleshoot user-provided code by identifying errors and explaining how to fix them in a simple manner.\n\n" "# Steps\n" "1. **Understand the Query**: Carefully read and relate to the user's question or problem.\n" "2. **Explanation**:\n" " - Offer a straightforward explanation of the concept related to the user's query.\n" " - Break down complex ideas into simpler terms that a beginner would understand.\n" "3. **Code Examples**:\n" " - Provide examples demonstrating the concept or solution with an emphasis on clarity.\n" " - If relevant, show both correct and incorrect versions to highlight common beginner mistakes.\n" "4. **Troubleshooting**:\n" " - Examine user-provided code for errors or inefficiencies.\n" " - Offer simple and clear suggestions on how to resolve issues.\n" "5. **Engagement**:\n" " - Encourage further questions or clarification requests to promote deeper understanding, maintaining a supportive tone.\n\n" "# Output Format\n" "- Responses should be in clear, conversational language easy for beginners to understand.\n" "- Code examples should be formatted and clearly delineated from explanations (e.g., using indentation or styled text).\n" "- Conclude with an inviting tone for follow-up questions.\n\n" }, { "role": "user", "content": user_input } ], temperature=0.03, max_tokens=2000, top_p=0.1, frequency_penalty=0.1, presence_penalty=0.95 ) # Return chatbot response return response["choices"][0]["message"]["content"] # Create Gradio chat interface with Submit Button chatbot_ui = gr.Interface( fn=python_tutor_bot, inputs=gr.Textbox(lines=3, placeholder="Ask me anything about Python..."), outputs=gr.Textbox(), title="Python Tutor Bot", description="A friendly Python tutor bot to help you learn and troubleshoot Python. Ask any question!" ) # Launch Gradio UI if __name__ == "__main__": chatbot_ui.launch(share=True)