Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,70 +1,79 @@
|
|
1 |
import os
|
|
|
|
|
2 |
import google.generativeai as genai
|
3 |
import gradio as gr
|
4 |
-
import time
|
5 |
|
|
|
6 |
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
|
7 |
|
8 |
-
# ๋ชจ๋ธ
|
9 |
-
|
10 |
-
generation_config = {
|
11 |
"temperature": 1,
|
12 |
"top_p": 0.95,
|
13 |
"top_k": 64,
|
14 |
"max_output_tokens": 15000,
|
15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
},
|
22 |
-
{
|
23 |
-
"category": "HARM_CATEGORY_HATE_SPEECH",
|
24 |
-
"threshold": "BLOCK_NONE"
|
25 |
-
},
|
26 |
-
{
|
27 |
-
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
|
28 |
-
"threshold": "BLOCK_NONE"
|
29 |
-
},
|
30 |
-
{
|
31 |
-
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
|
32 |
-
"threshold": "BLOCK_NONE"
|
33 |
-
},
|
34 |
-
]
|
35 |
|
36 |
-
|
37 |
-
|
38 |
-
generation_config=generation_config,
|
39 |
-
safety_settings=safety_settings)
|
40 |
|
41 |
-
|
42 |
-
|
43 |
-
"
|
44 |
-
"์ฃผ์ ์ ๋ํ ๊ฐ๋
๊ธฐ๋ฐ ํ๊ตฌํ์ต ๊ตฌ์ฒด์ ์์
๊ณํ 0. ํ์ต์ฃผ์ ์ ๋ํ ๋งคํฌ๋ก ๊ฐ๋
(๊ฐ๋
์ ๋ ์ฆ), ๋ง์ดํฌ๋ก ๊ฐ๋
(๊ต๊ณผ๊ฐ๋
), ์ผ๋ฐํ(๊ฐ๋
์ ์ดํด)\n\n1. ๊ด๊ณ๋งบ๊ธฐ: ์ง์ ์ ์์ ์์
์ฐธ์ฌ, ์ฌ์ ์ง์ ์ ๋\n\n2. ์ง์คํ๊ธฐ: ๊ต๊ณผ๊ฐ๋
์กฐ์ฌ, ๊ด๋ จ ์ฌ์ค์ ์ ์ค 1-2๊ฐ ์๊ฐํ๊ธฐ\n\n3. ์กฐ์ฌํ๊ธฐ: ๊ฐ๋
๊ด๋ จ ์ฌ๋ก๋ค ์กฐ์ฌํ๊ธฐ, ์ฌ๋ก ์ถ๊ฐ์ ์๋ก ๊ฐ๋
์ดํด ํ์ฅํ๊ธฐ \n\n4. ์กฐ์ง ๋ฐ ์ ๋ฆฌํ๊ธฐ: ์ฌ์ค์ ๊ฐ๋
์ ์์ค์์ ์๊ฐ ๊ตฌ์ฑํ๊ธฐ, ๋ค๋ฅธ ์๋ฃ๋ก, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก, ๊ต๊ณผ๋ก ๊ฐ๋
๊ณผ ์๊ฐ ๋ํ๋ด๊ธฐ\n\n5. ์ผ๋ฐํ: ์ฌ์ค์ ์์์์ ํจํด ๋ฐ๊ฒฌํ๊ณ , ์ฐ๊ฒฐ์ฑ ์ฐพ๊ธฐ, ์ผ๋ฐํ ๋ช
๋ฃํํ๊ธฐ\n\n6.์ ์ด: ์ผ๋ฐํ ์ ํจ์ฑ๊ฒ์ฆํ๊ณ ์ ๋นํํ๊ธฐ, ์๋ก์ด ์ํฉ์ ์ ์ฉ, ํ์ต์ ๋ํด ์๋ฏธ์๋ ํ๋ ์ทจํ๊ธฐ, ์์ธก, ๊ฐ์ ์ ํ์ฑํ๊ธฐ ์ํด ๊ฒฝํ๊ณผ ์ดํด ํ์ฉํ๊ธฐ\n\n7. ์ฑ์ฐฐํ๊ธฐ: ํ์ต์ฃผ์ฒด์์ ์ธ์ํ๊ธฐ, ์์ ํ์ต๊ณผ์ ๊ณํํ๊ณ ํต์ ํ๊ธฐ, ๊ณผ์ ํ๊ฐํ๊ธฐ\n\n8. ํ๊ฐ ๊ณํ ๋ฐ ์ํ๊ณผ์ (GRASPS), ํ๊ฐ ๋ฃจ๋ธ๋ฆญ(์, ์ค, ํ ํ์ด)\n\n9. ํ์์ ํ๊ตฌ๋ฅผ ์ํ ํ",
|
45 |
-
prompt,
|
46 |
-
"๊ฐ๋
๊ธฐ๋ฐ ํ๊ตฌํ์ต",
|
47 |
-
]
|
48 |
|
49 |
-
|
50 |
-
|
|
|
|
|
|
|
51 |
|
52 |
-
|
53 |
-
|
54 |
-
for
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
yield f"์๋ฌ ๋ฐ์: {str(e)}"
|
60 |
|
61 |
-
# ์ธํฐํ์ด์ค ์ค์
|
62 |
iface = gr.Interface(
|
63 |
fn=generate_curriculum,
|
64 |
-
inputs=gr.Textbox(lines=
|
65 |
-
outputs=gr.Textbox(lines=
|
66 |
-
title="๊ฐ๋
๊ธฐ๋ฐ ํ๊ตฌํ์ต
|
67 |
-
description="
|
68 |
)
|
69 |
|
|
|
70 |
iface.launch()
|
|
|
1 |
import os
|
2 |
+
import time
|
3 |
+
|
4 |
import google.generativeai as genai
|
5 |
import gradio as gr
|
|
|
6 |
|
7 |
+
# Google Gemini API ํค ์ค์
|
8 |
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
|
9 |
|
10 |
+
# ๋ชจ๋ธ ์ค์
|
11 |
+
generation_config = {
|
|
|
12 |
"temperature": 1,
|
13 |
"top_p": 0.95,
|
14 |
"top_k": 64,
|
15 |
"max_output_tokens": 15000,
|
16 |
+
"response_mime_type": "text/plain",
|
17 |
+
}
|
18 |
+
|
19 |
+
model = genai.GenerativeModel(
|
20 |
+
model_name="gemini-1.5-pro",
|
21 |
+
generation_config=generation_config,
|
22 |
+
)
|
23 |
+
|
24 |
+
# ํ๋กฌํํธ ์ค์
|
25 |
+
SYSTEM_PROMPT = """
|
26 |
+
๋น์ ์ Concept-based inquiry learning expert, ๊ฐ๋
๊ธฐ๋ฐ ํ๊ตฌํ์ต ์ค๊ณ ์ ๋ฌธ๊ฐ์
๋๋ค.
|
27 |
+
์ด๋ฑํ๊ต ๊ฐ๋
๊ธฐ๋ฐ ํ๊ตฌํ์ต ์์
์ ์ฒด๊ณ์ ์ผ๋ก ์ค๊ณํด ์ฃผ์ธ์.
|
28 |
+
๋ค์์ ๊ฐ๋
๊ธฐ๋ฐ ํ๊ตฌํ์ต ์ค๊ณ์ ํ์ํ ์ ๋ณด์
๋๋ค.
|
29 |
+
|
30 |
+
**๊ฐ๋
๊ธฐ๋ฐ ํ๊ตฌํ์ต ๊ตฌ์ฑ ์์:**
|
31 |
+
1. **์ฑ์ทจ๊ธฐ์ค์ ๋ํ ๋งคํฌ๋ก ๊ฐ๋
(๊ฐ๋
์ ๋ ์ฆ), ๋ง์ดํฌ๋ก ๊ฐ๋
(๊ต๊ณผ๊ฐ๋
), ์ผ๋ฐํ(๊ฐ๋
์ ์ดํด)**
|
32 |
+
2. **๊ด๊ณ๋งบ๊ธฐ: ์ง์ ์ ์์ ์์
์ฐธ์ฌ, ์ฌ์ ์ง์ ์ ๋**
|
33 |
+
3. **์ง์คํ๊ธฐ: ๊ต๊ณผ๊ฐ๋
์กฐ์ฌ, ๊ด๋ จ ์ฌ์ค์ ์ ์ค 2~3๊ฐ ์๊ฐํ๊ธฐ**
|
34 |
+
4. **์กฐ์ฌํ๊ธฐ: ๊ฐ๋
๊ด๋ จ ์ฌ๋ก๋ค ์กฐ์ฌํ๊ธฐ, ์ฌ๋ก ์ถ๊ฐ์ ์๋ก ๊ฐ๋
์ดํด ํ์ฅํ๊ธฐ **
|
35 |
+
5. **์กฐ์ง ๋ฐ ์ ๋ฆฌํ๊ธฐ: ์ฌ์ค์ ๊ฐ๋
์ ์์ค์์ ์๊ฐ ๊ตฌ์ฑํ๊ธฐ, ๋ค๋ฅธ ์๋ฃ๋ก, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก, ๊ต๊ณผ๋ก ๊ฐ๋
๊ณผ ์๊ฐ ๋ํ๋ด๊ธฐ**
|
36 |
+
6. **์ผ๋ฐํ: ์ฌ์ค์ ์์์์ ํจํด ๋ฐ๊ฒฌํ๊ณ , ์ฐ๊ฒฐ์ฑ ์ฐพ๊ธฐ, ์ผ๋ฐํ ๋ช
๋ฃํํ๊ธฐ**
|
37 |
+
7. **์ ์ด: ์ผ๋ฐํ ์ ํจ์ฑ๊ฒ์ฆํ๊ณ ์ ๋นํํ๊ธฐ, ์๋ก์ด ์ํฉ์ ์ ์ฉ, ํ์ต์ ๋ํด ์๋ฏธ์๋ ํ๋ ์ทจํ๊ธฐ, ์์ธก, ๊ฐ์ ์ ํ์ฑํ๊ธฐ ์ํด ๊ฒฝํ๊ณผ ์ดํด ํ์ฉํ๊ธฐ**
|
38 |
+
8. **์ฑ์ฐฐํ๊ธฐ: ํ์ต์ฃผ์ฒด์์ ์ธ์ํ๊ธฐ, ์์ ํ์ต๊ณผ์ ๊ณํํ๊ณ ํต์ ํ๊ธฐ, ๊ณผ์ ํ๊ฐํ๊ธฐ**
|
39 |
+
9. **ํ๊ฐ ๊ณํ ๋ฐ ์ํ๊ณผ์ (GRASPS), ํ๊ฐ ๋ฃจ๋ธ๋ฆญ(์, ์ค, ํ ํ์ด)**
|
40 |
+
10. **ํ์์ ํ๊ตฌ๋ฅผ ์ํ ํ**
|
41 |
+
"""
|
42 |
|
43 |
+
def generate_curriculum(achievement_standard):
|
44 |
+
"""
|
45 |
+
์ฑ์ทจ๊ธฐ์ค์ ์
๋ ฅ๋ฐ์ ๊ฐ๋
๊ธฐ๋ฐ ํ๊ตฌํ์ต์ ์์ฑํฉ๋๋ค.
|
46 |
+
์์ํ์ ์ค์๊ฐ์ผ๋ก ์ถ๋ ฅํฉ๋๋ค.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
|
48 |
+
Args:
|
49 |
+
achievement_standard (str): ์ฑ์ทจ๊ธฐ์ค
|
|
|
|
|
50 |
|
51 |
+
Returns:
|
52 |
+
str: ์์ฑ๋ ๊ฐ๋
๊ธฐ๋ฐ ํ๊ตฌํ์ต
|
53 |
+
"""
|
|
|
|
|
|
|
|
|
54 |
|
55 |
+
prompt = [
|
56 |
+
SYSTEM_PROMPT,
|
57 |
+
f"**์ฑ์ทจ๊ธฐ์ค:** {achievement_standard}",
|
58 |
+
"**๊ฐ๋
๊ธฐ๋ฐ ํ๊ตฌํ์ต:**",
|
59 |
+
]
|
60 |
|
61 |
+
response = model.generate_content(prompt, stream=True)
|
62 |
+
collected_text = ""
|
63 |
+
for token in response:
|
64 |
+
chunk = token.text
|
65 |
+
collected_text += chunk
|
66 |
+
yield collected_text # ์ค์๊ฐ ์ถ๋ ฅ์ ์ํด yield ์ฌ์ฉ
|
67 |
+
time.sleep(0.03) # ์ถ๋ ฅ ์๋ ์กฐ์
|
|
|
68 |
|
69 |
+
# Gradio ์ธํฐํ์ด์ค ์ค์
|
70 |
iface = gr.Interface(
|
71 |
fn=generate_curriculum,
|
72 |
+
inputs=gr.Textbox(lines=3, label="์ฑ์ทจ๊ธฐ์ค ์
๋ ฅ"),
|
73 |
+
outputs=gr.Textbox(lines=10, label="๊ฐ๋
๊ธฐ๋ฐ ํ๊ตฌํ์ต"),
|
74 |
+
title="๊ฐ๋
๊ธฐ๋ฐ ํ๊ตฌํ์ต ์ค๊ณ ๋์ฐ๋ฏธ",
|
75 |
+
description="์ด๋ฑํ๊ต ๊ต์ก๊ณผ์ ์ ๋ง๋ ๊ฐ๋
๊ธฐ๋ฐ ํ๊ตฌํ์ต์ ์์ฑํฉ๋๋ค.",
|
76 |
)
|
77 |
|
78 |
+
# ์ธํฐํ์ด์ค ์คํ
|
79 |
iface.launch()
|