Spaces:
Sleeping
Sleeping
File size: 6,043 Bytes
fc67835 9cf13b4 fc67835 9cf13b4 fc67835 9cf13b4 fc67835 9cf13b4 9ff257b 9cf13b4 9ff257b 9cf13b4 c5d9a1c 9cf13b4 43fa314 9cf13b4 43fa314 9cf13b4 9ff257b 9cf13b4 a632fa0 c5d9a1c 080d5eb a632fa0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
### 🚀 MAIN PROMPT ###
MAIN_PROMPT = """
### **Module 3: Proportional Reasoning Problem Types**
#### **Task Introduction**
"Welcome to this module on proportional reasoning problem types!
Your task is to explore three different problem types foundational to proportional reasoning:
1️⃣ **Missing Value Problems**
2️⃣ **Numerical Comparison Problems**
3️⃣ **Qualitative Reasoning Problems**
You will solve and compare these problems, **identify their characteristics**, and finally **create your own problems** for each type.
💡 **Throughout this module, I will guide you step by step.**
💡 **You will be encouraged to explain your reasoning.**
💡 **If you’re unsure, I will provide hints rather than giving direct answers.**
🚀 **Let’s get started! Solve each problem and compare them by analyzing your solution process.**"
---
### **🚀 Solve the Following Three Problems**
📌 **Problem 1: Missing Value Problem**
*"The scale on a map is **2 cm represents 25 miles**. If a given measurement on the map is **24 cm**, how many miles are represented?"*
📌 **Problem 2: Numerical Comparison Problem**
*"Ali and Ahmet purchased pencils. Ali bought **10 pencils for $3.50**, and Ahmet purchased **5 pencils for $1.80**. Who got the better deal?"*
📌 **Problem 3: Qualitative Reasoning Problem**
*"Kim is mixing paint. Yesterday, she combined **red and white paint** in a certain ratio. Today, she used **more red paint** but kept the **same amount of white paint**. How will today’s mixture compare to yesterday’s in color?"*
"""
### 🚀 PROBLEM SOLUTIONS ###
PROBLEM_SOLUTIONS_PROMPT = """
### **🚀 Step-by-Step Solutions**
#### **Problem 1: Missing Value Problem**
We set up the proportion:
\[
\frac{2 \text{ cm}}{25 \text{ miles}} = \frac{24 \text{ cm}}{x \text{ miles}}
\]
Cross-multiply:
\[
2x = 24 \times 25
\]
Solve for \( x \):
\[
x = \frac{600}{2} = 300
\]
**Conclusion:** *24 cm represents **300 miles**.*
---
#### **Problem 2: Numerical Comparison Problem**
**Calculate unit prices:**
\[
\text{Price per pencil (Ali)} = \frac{\$3.50}{10} = \$0.35
\]
\[
\text{Price per pencil (Ahmet)} = \frac{\$1.80}{5} = \$0.36
\]
**Comparison:**
- Ali: **\$0.35** per pencil
- Ahmet: **\$0.36** per pencil
**Conclusion:** *Ali got the better deal because he paid **less per pencil**.*
---
#### **Problem 3: Qualitative Reasoning Problem**
🔹 **Given Situation:**
- Yesterday: **Ratio of red to white paint**
- Today: **More red, same white**
🔹 **Reasoning:**
- Since the amount of **white paint stays the same** but **more red paint is added**, the **red-to-white ratio increases**.
- This means today’s mixture is **darker (more red)** than yesterday’s.
🔹 **Conclusion:**
- *The new paint mixture has a **stronger red color** than before.*
"""
---
### **🚀 Fully Updated `app.py` (Ensuring Proper OpenAI Handling & Math Formatting)**
```python
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, PROBLEM_SOLUTIONS_PROMPT # Ensure both are imported
# Load the API key from the .env file if available
if os.path.exists(".env"):
load_dotenv(".env")
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
client = OpenAI(api_key=OPENAI_API_KEY)
def gpt_call(history, user_message,
model="gpt-4o",
max_tokens=512,
temperature=0.7,
top_p=0.95):
"""
Calls the OpenAI API to generate a response.
- history: [(user_text, assistant_text), ...]
- user_message: The latest user message
"""
# 1) Start with the system message (MAIN_PROMPT) for context
messages = [{"role": "system", "content": MAIN_PROMPT}]
# 2) Append conversation history
for user_text, assistant_text in history:
if user_text:
messages.append({"role": "user", "content": user_text})
if assistant_text:
messages.append({"role": "assistant", "content": assistant_text})
# 3) Add the user's new message
messages.append({"role": "user", "content": user_message})
# 4) Call OpenAI API
completion = client.chat.completions.create(
model=model,
messages=messages,
max_tokens=max_tokens,
temperature=temperature,
top_p=top_p
)
return completion.choices[0].message.content
def respond(user_message, history):
"""
Handles user input and gets GPT-generated response.
- user_message: The message from the user
- history: List of (user, assistant) conversation history
"""
if not user_message:
return "", history
# If the user asks for a solution, inject PROBLEM_SOLUTIONS_PROMPT
if "solution" in user_message.lower():
assistant_reply = gpt_call(history, PROBLEM_SOLUTIONS_PROMPT)
else:
assistant_reply = gpt_call(history, user_message)
# Add conversation turn to history
history.append((user_message, assistant_reply))
return "", history
##############################
# Gradio Blocks UI
##############################
with gr.Blocks() as demo:
gr.Markdown("## AI-Guided Math PD Chatbot")
# Chatbot initialization with the first AI message
chatbot = gr.Chatbot(
value=[("", INITIAL_PROMPT)], # Initial system prompt
height=500
)
# Stores the chat history
state_history = gr.State([("", INITIAL_PROMPT)])
# User input field
user_input = gr.Textbox(
placeholder="Type your message here...",
label="Your Input"
)
# Submit action
user_input.submit(
respond,
inputs=[user_input, state_history],
outputs=[user_input, chatbot]
).then(
fn=lambda _, h: h,
inputs=[user_input, chatbot],
outputs=[state_history]
)
# Run the Gradio app
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860, share=True)
|