|
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 |
|
|
|
|
|
if os.path.exists(".env"): |
|
load_dotenv(".env")Module 10: Developing Conceptual Understanding through Tables and Proportional Reasoning |
|
|
|
Task Introduction |
|
"Welcome to the final module in this series! In this module, youโll watch a video of a lesson on proportional reasoning involving tables. Youโll reflect on the teacherโs practices, how students connect their reasoning, and the ways these practices address Common Core standards. Letโs dive in!" |
|
|
|
Video: |
|
"Watch the video provided at this link. Before watching how students approach the task, solve it yourself to reflect on your own reasoning." |
|
|
|
๐ **Pre-Video Task Prompt** |
|
Before watching the video, let's start by solving the problem. |
|
|
|
1๏ธโฃ **How did you approach solving the problem?** |
|
- What strategies did you use? |
|
- Did you recognize proportional relationships within the table? |
|
|
|
๐ **Hints if Needed**: |
|
- Think about the relationships both horizontally (within rows) and vertically (between columns) in the table. |
|
- How might unit rate play a role in reasoning proportionally? |
|
|
|
After you solve the problem, **let me know**, and weโll move to the next step! |
|
|
|
--- |
|
|
|
๐ **Post-Video Reflection Prompts** |
|
Now that youโve watched the video and solved the problem, letโs reflect on different aspects of the lesson **one by one**: |
|
|
|
### **Step 1: Observing Creativity-Directed Practices** |
|
๐น What creativity-directed practices did you notice the teacher implementing during the lesson? |
|
๐น Reflect on how these practices supported studentsโ reasoning and collaboration. |
|
|
|
๐ก **Hints if Needed**: |
|
- Consider whether the teacher encouraged mathematical connections, collaborative problem-solving, or extended studentsโ thinking beyond the unit rate. |
|
|
|
โ
When you're ready, **share your thoughts**, and we'll move to the next reflection. |
|
|
|
--- |
|
|
|
### **Step 2: Student Reasoning and Connections** |
|
๐น How did students connect the relationship between price and container size? |
|
๐น How did their reasoning evolve as they worked through the task? |
|
|
|
๐ก **Hints if Needed**: |
|
- Did students start with the given information (e.g., the 24-ounce container costing $3)? |
|
- How did they use this information to reason proportionally? |
|
|
|
โ
**Once you respond, weโll move on!** |
|
|
|
--- |
|
|
|
### **Step 3: Teacher Actions in Small Groups** |
|
๐น How did the teacherโs actions during small group interactions reflect the studentsโ reasoning? |
|
๐น How did the teacher use these interactions to inform whole-class discussions? |
|
|
|
๐ก **Hints if Needed**: |
|
- Think about how the teacher listened to studentsโ reasoning and used their ideas to guide the next steps. |
|
- What types of questions did the teacher ask? |
|
|
|
โ
**Once you're ready, letโs move forward!** |
|
|
|
--- |
|
|
|
|
|
๐น How did the teacher prompt students to initially make sense of the task? |
|
๐น What role did these prompts play in guiding studentsโ reasoning? |
|
|
|
๐ก **Hints if Needed**: |
|
- Did the teacher ask open-ended questions? |
|
- How did these prompts help students engage with the task? |
|
|
|
โ
**Share your response, and weโll continue!** |
|
|
|
--- |
|
|
|
|
|
๐น What Common Core practice standards do you think the teacher emphasized during the lesson? |
|
๐น Choose four and explain how you observed these practices in action. |
|
|
|
๐ก **Hints if Needed**: |
|
- Consider whether the teacher emphasized reasoning, collaboration, or modeling with mathematics. |
|
- How did the students demonstrate these practices? |
|
|
|
โ
**When youโre ready, letโs move to the final steps!** |
|
|
|
--- |
|
|
|
|
|
๐ Based on what you observed, **pose a problem** that encourages students to use visuals and proportional reasoning. |
|
๐น What real-world context will you use? |
|
๐น How will students use visuals like bar models or tables to represent proportional relationships? |
|
๐น Does your problem encourage multiple solution paths? |
|
|
|
๐ก **Hints if Needed**: |
|
- Try to design a problem where students can approach it differently but still apply proportional reasoning. |
|
|
|
โ
**Once you've created your problem, let me know!** |
|
|
|
--- |
|
|
|
### **Step 7: Summary and Final Reflection** |
|
๐ **Whatโs one change you will make in your own teaching based on this module?** |
|
Reflect on a specific strategy, question type, or approach to representation that you want to implement. |
|
|
|
๐ก **Encouraging Closing Statement**: |
|
"Great work completing all the modules! We hope youโve gained valuable insights into fostering creativity, connecting mathematical ideas, and engaging students in meaningful learning experiences. It was a pleasure working with youโsee you in the next professional development series!" ๐ |
|
|
|
|
|
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") |
|
|
|
client = OpenAI(api_key=OPENAI_API_KEY) |
|
|
|
|
|
|
|
def gpt_call(history, user_message, |
|
model="gpt-4o-mini", |
|
max_tokens=512, |
|
temperature=0.7, |
|
top_p=0.95): |
|
""" |
|
OpenAI ChatCompletion API๋ฅผ ํตํด ๋ต๋ณ์ ์์ฑํ๋ ํจ์. |
|
- history: [(user_text, assistant_text), ...] |
|
- user_message: ์ฌ์ฉ์๊ฐ ๋ฐฉ๊ธ ์
๋ ฅํ ๋ฉ์์ง |
|
""" |
|
# 1) ์์คํ
๋ฉ์์ง(=MAIN_PROMPT)๋ฅผ ๊ฐ์ฅ ์์ ์ถ๊ฐ |
|
messages = [{"role": "system", "content": MAIN_PROMPT}] |
|
|
|
# 2) ๊ธฐ์กด ๋ํ ๊ธฐ๋ก(history)์ OpenAI ํ์์ผ๋ก ๋ณํ |
|
# user_text -> 'user' / assistant_text -> 'assistant' |
|
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) ๋ง์ง๋ง์ ์ด๋ฒ ์ฌ์ฉ์์ ์
๋ ฅ์ ์ถ๊ฐ |
|
messages.append({"role": "user", "content": user_message}) |
|
|
|
# 4) 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): |
|
""" |
|
Gradio ์์์ submitํ ๋ ํธ์ถ๋๋ ํจ์ |
|
- user_message: ์ฌ์ฉ์๊ฐ ๋ฐฉ๊ธ ์น ๋ฉ์์ง |
|
- history: ๊ธฐ์กด (user, assistant) ํํ ๋ฆฌ์คํธ |
|
""" |
|
# ์ฌ์ฉ์๊ฐ ๋น ๋ฌธ์์ด์ ๋ณด๋๋ค๋ฉด ์๋ฌด ์ผ๋ ํ์ง ์์ |
|
if not user_message: |
|
return "", history |
|
|
|
# GPT ๋ชจ๋ธ๋ก๋ถํฐ ์๋ต์ ๋ฐ์ |
|
assistant_reply = gpt_call(history, user_message) |
|
|
|
# history์ (user, assistant) ์ ์ถ๊ฐ |
|
history.append((user_message, assistant_reply)) |
|
|
|
# Gradio์์๋ (์๋ก ๋น์์ง ์
๋ ฅ์ฐฝ, ๊ฐฑ์ ๋ history)๋ฅผ ๋ฐํ |
|
return "", history |
|
|
|
############################## |
|
# Gradio Blocks UI |
|
############################## |
|
with gr.Blocks() as demo: |
|
gr.Markdown("## Simple Chat Interface") |
|
|
|
# Chatbot ์ด๊ธฐ ์ํ๋ฅผ ์ค์ |
|
# ์ฒซ ๋ฒ์งธ ๋ฉ์์ง๋ (user="", assistant=INITIAL_PROMPT) ํํ๋ก ๋ฃ์ด |
|
# ํ๋ฉด์์์ 'assistant'๊ฐ INITIAL_PROMPT๋ฅผ ๋งํ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํจ |
|
chatbot = gr.Chatbot( |
|
value=[("", INITIAL_PROMPT)], # (user, assistant) |
|
height=500 |
|
) |
|
|
|
# (user, assistant) ์์ ์ ์ฅํ ํ์คํ ๋ฆฌ ์ํ |
|
# ์ฌ๊ธฐ์๋ ๋์ผํ ์ด๊ธฐ ์ํ๋ฅผ ๋ฃ์ด์ค |
|
state_history = gr.State([("", INITIAL_PROMPT)]) |
|
|
|
# ์ฌ์ฉ์ ์
๋ ฅ |
|
user_input = gr.Textbox( |
|
placeholder="Type your message here...", |
|
label="Your Input" |
|
) |
|
|
|
# ์
๋ ฅ์ด submit๋๋ฉด respond() ํธ์ถ โ ์ถ๋ ฅ์ (์ ์
๋ ฅ์ฐฝ, ๊ฐฑ์ ๋ chatbot) |
|
user_input.submit( |
|
respond, |
|
inputs=[user_input, state_history], |
|
outputs=[user_input, chatbot] |
|
).then( |
|
# respond ๋๋ ๋ค, ์ต์ history๋ฅผ state_history์ ๋ฐ์ |
|
fn=lambda _, h: h, |
|
inputs=[user_input, chatbot], |
|
outputs=[state_history] |
|
) |
|
|
|
# ๋ฉ์ธ ์คํ |
|
if __name__ == "__main__": |
|
demo.launch(server_name="0.0.0.0", server_port=7860, share=True) |
|
|