import os import gradio as gr from dotenv import load_dotenv from openai import OpenAI from prompts.initial_prompt import INITIAL_PROMPT from prompts.main_prompt import MAIN_PROMPT, get_prompt_for_method, get_feedback_for_method # ✅ Load API key from .env file if os.path.exists(".env"): load_dotenv(".env") OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") # ✅ Ensure API Key is available if not OPENAI_API_KEY: raise ValueError("🚨 OpenAI API key is missing! Set it in the .env file.") client = OpenAI(api_key=OPENAI_API_KEY) # ✅ Chatbot Response Function def respond(user_message, history): if not user_message: return "", history user_message = user_message.strip().lower() # Normalize input for better handling # ✅ Extract previous user input last_user_input = history[-1][0].strip().lower() if history else "" # ✅ Check if user selected a method valid_methods = ["bar model", "double number line", "equation"] if user_message in valid_methods: prompt = get_prompt_for_method(user_message) history.append((user_message, prompt)) # Update history return prompt, history # ✅ Ensure the user has selected a method before receiving feedback if last_user_input in valid_methods: selected_method = last_user_input # Keep track of last selected method feedback = get_feedback_for_method(selected_method, user_message) history.append((user_message, feedback)) # Update history return feedback, history return "❌ I didn’t understand that. Please select a method first (Bar Model, Double Number Line, or Equation).", history # ✅ Gradio UI Setup with gr.Blocks() as demo: gr.Markdown("## 🤖 AI-Guided Math PD Chatbot") chatbot = gr.Chatbot(height=500) state_history = gr.State([]) user_input = gr.Textbox(placeholder="Type your message here...", label="Your Input") # ✅ Button for first-time users to start the chat def start_chat(): return [(INITIAL_PROMPT, "")] start_button = gr.Button("Start Chat") start_button.click(start_chat, outputs=[chatbot, state_history]) # ✅ Handling user input and response logic user_input.submit( respond, inputs=[user_input, state_history], outputs=[chatbot, state_history] ) if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860, share=True)