openfree commited on
Commit
8fb770f
ยท
verified ยท
1 Parent(s): 19fead8

Upload app.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. app.py +118 -0
app.py ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import random
3
+ import matplotlib.pyplot as plt
4
+ import numpy as np
5
+ from PIL import Image
6
+ import io
7
+ def generate_math_content(education_level, math_field, specific_topic, difficulty):
8
+ # ๋ฌธ์ œ ์€ํ–‰ (์‹ค์ œ ๊ตฌํ˜„์‹œ ๋” ๋งŽ์€ ๋ฌธ์ œ ์ถ”๊ฐ€ ํ•„์š”)
9
+ problems = {
10
+ "์ค‘ํ•™๊ต": {
11
+ "๋Œ€์ˆ˜": {
12
+ "์ผ์ฐจ๋ฐฉ์ •์‹": [
13
+ {
14
+ "basic": "x + 5 = 12 ๋ฅผ ํ’€์–ด๋ณด์„ธ์š”.",
15
+ "medium": "2x + 7 = 15 ๋ฅผ ํ’€์–ด๋ณด์„ธ์š”.",
16
+ "advanced": "3x + 4 = 2x - 8 ์„ ํ’€์–ด๋ณด์„ธ์š”."
17
+ }
18
+ ]
19
+ },
20
+ "๊ธฐํ•˜": {
21
+ "์‚ผ๊ฐํ˜•": [
22
+ {
23
+ "basic": "๋ฐ‘๋ณ€์ด 6cm, ๋†’์ด๊ฐ€ 4cm์ธ ์‚ผ๊ฐํ˜•์˜ ๋„“์ด๋ฅผ ๊ตฌํ•˜์„ธ์š”.",
24
+ "medium": "์„ธ ๋ณ€์˜ ๊ธธ์ด๊ฐ€ 3, 4, 5์ธ ์‚ผ๊ฐํ˜•์˜ ๋„“์ด๋ฅผ ๊ตฌํ•˜์„ธ์š”.",
25
+ "advanced": "๋‘ ๋ณ€์˜ ๊ธธ์ด๊ฐ€ 5cm, 8cm์ด๊ณ  ๊ทธ ์‚ฌ์ด๊ฐ์ด 60ยฐ์ธ ์‚ผ๊ฐํ˜•์˜ ๋„“์ด๋ฅผ ๊ตฌํ•˜์„ธ์š”."
26
+ }
27
+ ]
28
+ }
29
+ }
30
+ }
31
+ # ํ•ด์„ค ์ƒ์„ฑ
32
+ def create_explanation():
33
+ explanations = {
34
+ "basic": "๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ด์šฉํ•œ ๋‹จ๊ณ„๋ณ„ ํ’€์ด:\n1. ์ฃผ์–ด์ง„ ์‹์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.\n2. ๊ธฐ๋ณธ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.\n3. ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.",
35
+ "medium": "์ค‘๊ธ‰ ๋‚œ์ด๋„ ํ’€์ด ์ „๋žต:\n1. ๋ฌธ์ œ ๋ถ„์„\n2. ์ ์šฉํ•  ๊ณต์‹ ์„ ํƒ\n3. ๊ณ„์‚ฐ ์ˆ˜ํ–‰\n4. ๊ฒฐ๊ณผ ๊ฒ€์ฆ",
36
+ "advanced": "๊ณ ๊ธ‰ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:\n1. ๋ฌธ์ œ์˜ ์กฐ๊ฑด ๋ถ„์„\n2. ํ•ด๊ฒฐ ์ „๋žต ์ˆ˜๋ฆฝ\n3. ๋‹จ๊ณ„๋ณ„ ๊ณ„์‚ฐ\n4. ๊ฒฐ๊ณผ์˜ ํƒ€๋‹น์„ฑ ๊ฒ€ํ† "
37
+ }
38
+ return explanations[difficulty]
39
+ # ์‹œ๊ฐํ™” ์ƒ์„ฑ
40
+ def create_visualization():
41
+ fig, ax = plt.subplots(figsize=(8, 6))
42
+ if math_field == "๋Œ€์ˆ˜":
43
+ x = np.linspace(-10, 10, 100)
44
+ y = x + 5
45
+ ax.plot(x, y)
46
+ ax.grid(True)
47
+ ax.axhline(y=0, color='k')
48
+ ax.axvline(x=0, color='k')
49
+ plt.title("์ผ์ฐจ๋ฐฉ์ •์‹์˜ ๊ทธ๋ž˜ํ”„")
50
+ elif math_field == "๊ธฐํ•˜":
51
+ points = np.array([[0, 0], [6, 0], [3, 4]])
52
+ triangle = plt.Polygon(points, fill=False)
53
+ ax.add_patch(triangle)
54
+ ax.set_xlim(-2, 8)
55
+ ax.set_ylim(-2, 6)
56
+ plt.title("์‚ผ๊ฐํ˜•")
57
+ buf = io.BytesIO()
58
+ plt.savefig(buf, format='png')
59
+ buf.seek(0)
60
+ return Image.open(buf)
61
+ # ์—ฐ์Šต๋ฌธ์ œ ์ƒ์„ฑ
62
+ practice_problems = [
63
+ "์—ฐ์Šต๋ฌธ์ œ 1: ๊ธฐ๋ณธ ๊ฐœ๋… ํ™•์ธ",
64
+ "์—ฐ์Šต๋ฌธ์ œ 2: ์‘์šฉ๋ ฅ ํ…Œ์ŠคํŠธ",
65
+ "์—ฐ์Šต๋ฌธ์ œ 3: ์‹ฌํ™” ๋ฌธ์ œ"
66
+ ]
67
+ # ์ž๊ฐ€์ง„๋‹จ ์ฒดํฌ๋ฆฌ์ŠคํŠธ
68
+ checklist = [
69
+ "โ–ก ํ•ต์‹ฌ ๊ฐœ๋…์„ ์ดํ•ดํ–ˆ๋‚˜์š”?",
70
+ "โ–ก ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?",
71
+ "โ–ก ๋น„์Šทํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‚˜์š”?",
72
+ "โ–ก ์‹ค์ƒํ™œ ์ ์šฉ ์‚ฌ๋ก€๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‚˜์š”?"
73
+ ]
74
+ problem = problems.get(education_level, {}).get(math_field, {}).get(specific_topic, [{}])[0].get(difficulty, "๋ฌธ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.")
75
+ explanation = create_explanation()
76
+ visualization = create_visualization()
77
+ return problem, explanation, visualization, "\n".join(practice_problems), "\n".join(checklist)
78
+ def create_interface():
79
+ with gr.Blocks() as demo:
80
+ with gr.Row():
81
+ with gr.Column():
82
+ education_level = gr.Dropdown(
83
+ choices=["์ค‘ํ•™๊ต", "๊ณ ๋“ฑํ•™๊ต", "๋Œ€ํ•™๊ต"],
84
+ label="๊ต์œก๊ณผ์ • ๋‹จ๊ณ„",
85
+ value="์ค‘ํ•™๊ต"
86
+ )
87
+ math_field = gr.Dropdown(
88
+ choices=["๋Œ€์ˆ˜", "๊ธฐํ•˜", "ํ•ด์„ํ•™"],
89
+ label="์ˆ˜ํ•™ ์˜์—ญ",
90
+ value="๋Œ€์ˆ˜"
91
+ )
92
+ specific_topic = gr.Dropdown(
93
+ choices=["์ผ์ฐจ๋ฐฉ์ •์‹", "์‚ผ๊ฐํ˜•"],
94
+ label="์„ธ๋ถ€ ์ฃผ์ œ",
95
+ value="์ผ์ฐจ๋ฐฉ์ •์‹"
96
+ )
97
+ difficulty = gr.Dropdown(
98
+ choices=["basic", "medium", "advanced"],
99
+ label="๋‚œ์ด๋„",
100
+ value="basic"
101
+ )
102
+ generate_btn = gr.Button("๋ฌธ์ œ ์ƒ์„ฑ")
103
+ with gr.Column():
104
+ problem_output = gr.Textbox(label="์ƒ์„ฑ๋œ ๋ฌธ์ œ")
105
+ explanation_output = gr.Textbox(label="์ƒ์„ธ ํ’€์ด")
106
+ visualization_output = gr.Image(label="์‹œ๊ฐํ™”")
107
+ practice_output = gr.Textbox(label="์—ฐ์Šต๋ฌธ์ œ")
108
+ checklist_output = gr.Textbox(label="์ž๊ฐ€์ง„๋‹จ ์ฒดํฌ๋ฆฌ์ŠคํŠธ")
109
+ generate_btn.click(
110
+ generate_math_content,
111
+ inputs=[education_level, math_field, specific_topic, difficulty],
112
+ outputs=[problem_output, explanation_output, visualization_output, practice_output, checklist_output]
113
+ )
114
+ return demo
115
+ demo = create_interface()
116
+
117
+ if __name__ == '__main__':
118
+ demo.launch()