| | 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) |
| | |