Update app.py
Browse files
app.py
CHANGED
@@ -4,10 +4,10 @@ import gradio as gr
|
|
4 |
from datetime import datetime
|
5 |
from transformers import pipeline
|
6 |
|
7 |
-
#
|
8 |
llm = pipeline("text-generation", model="google/gemma-2-2b-it", max_new_tokens=512)
|
9 |
|
10 |
-
#
|
11 |
def get_school_info(region_code, school_name, api_key):
|
12 |
url = f"https://open.neis.go.kr/hub/schoolInfo?KEY={api_key}&Type=json&pIndex=1&pSize=1&SCHUL_NM={school_name}&ATPT_OFCDC_SC_CODE={region_code}"
|
13 |
res = requests.get(url)
|
@@ -36,20 +36,27 @@ def summarize_schedule(rows, school_name, year):
|
|
36 |
result = llm([{"role": "user", "content": prompt}])
|
37 |
return result[0]["generated_text"].replace(prompt, "").strip()
|
38 |
|
39 |
-
#
|
40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
api_key = os.environ.get("NEIS_API_KEY", "a69e08342c8947b4a52cd72789a5ecaf")
|
42 |
|
43 |
if not school_name.strip():
|
44 |
-
return "β νκ΅λͺ
μ μ
λ ₯ν΄μ£ΌμΈμ.", "", ""
|
45 |
|
46 |
school_code, confirmed_region = get_school_info(region_code, school_name, api_key)
|
47 |
if not school_code:
|
48 |
-
return "β νκ΅ μ 보λ₯Ό μ°Ύμ μ μμ΅λλ€.
|
49 |
|
50 |
schedule_rows = get_schedule(confirmed_region, school_code, year, api_key)
|
51 |
if not schedule_rows:
|
52 |
-
return "βΉοΈ νμ¬μΌμ μ λ³΄κ° μμ΅λλ€.", "", ""
|
53 |
|
54 |
# μλ³ μΌμ νν°λ§
|
55 |
month_rows = [r for r in schedule_rows if r["AA_YMD"].startswith(f"{year}{month:02}")]
|
@@ -58,20 +65,18 @@ def load_and_summarize(region_code, school_name, year, month):
|
|
58 |
for r in month_rows
|
59 |
) or "π μ νν μμ ν΄λΉνλ μΌμ μ΄ μμ΅λλ€."
|
60 |
|
61 |
-
|
62 |
-
summary = summarize_schedule(schedule_rows, school_name, year)
|
63 |
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
"H10": "μΈμ°", "I10": "μΈμ’
", "J10": "κ²½κΈ°", "K10": "κ°μ", "M10": "μΆ©λΆ", "N10": "μΆ©λ¨",
|
70 |
-
"P10": "μ λΆ", "Q10": "μ λ¨", "R10": "κ²½λΆ", "S10": "κ²½λ¨", "T10": "μ μ£Ό"
|
71 |
-
}
|
72 |
|
|
|
73 |
with gr.Blocks(title="νμ¬μΌμ μμ½ μΊλ¦°λ") as demo:
|
74 |
gr.Markdown("## π« νμ¬μΌμ μ‘°ν λ° AI μμ½ (google/gemma-2-2b-it)")
|
|
|
75 |
with gr.Row():
|
76 |
region = gr.Dropdown(label="μ§μ κ΅μ‘μ²", choices=list(region_options.keys()), value="B10", interactive=True)
|
77 |
school_name = gr.Textbox(label="νκ΅λͺ
", placeholder="μ: μ리μ΄λ±νκ΅")
|
@@ -79,12 +84,23 @@ with gr.Blocks(title="νμ¬μΌμ μμ½ μΊλ¦°λ") as demo:
|
|
79 |
year = gr.Dropdown(label="λ
λ", choices=[2022, 2023, 2024, 2025], value=2024)
|
80 |
month = gr.Slider(label="μ", minimum=1, maximum=12, value=7, step=1)
|
81 |
|
82 |
-
|
83 |
-
|
84 |
status = gr.Markdown()
|
85 |
month_output = gr.Textbox(label="π μ νν μμ μΌμ ", lines=8)
|
86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
|
88 |
-
|
|
|
|
|
89 |
|
90 |
demo.launch()
|
|
|
4 |
from datetime import datetime
|
5 |
from transformers import pipeline
|
6 |
|
7 |
+
# ββββββββ Gemma λͺ¨λΈ λ‘λ© (1ν μΊμ) ββββββββ
|
8 |
llm = pipeline("text-generation", model="google/gemma-2-2b-it", max_new_tokens=512)
|
9 |
|
10 |
+
# ββββββββ API ν¨μ μ μ ββββββββ
|
11 |
def get_school_info(region_code, school_name, api_key):
|
12 |
url = f"https://open.neis.go.kr/hub/schoolInfo?KEY={api_key}&Type=json&pIndex=1&pSize=1&SCHUL_NM={school_name}&ATPT_OFCDC_SC_CODE={region_code}"
|
13 |
res = requests.get(url)
|
|
|
36 |
result = llm([{"role": "user", "content": prompt}])
|
37 |
return result[0]["generated_text"].replace(prompt, "").strip()
|
38 |
|
39 |
+
# ββββββββ μ§μ μ½λ λͺ©λ‘ ββββββββ
|
40 |
+
region_options = {
|
41 |
+
"B10": "μμΈ", "C10": "λΆμ°", "D10": "λꡬ", "E10": "μΈμ²", "F10": "κ΄μ£Ό", "G10": "λμ ",
|
42 |
+
"H10": "μΈμ°", "I10": "μΈμ’
", "J10": "κ²½κΈ°", "K10": "κ°μ", "M10": "μΆ©λΆ", "N10": "μΆ©λ¨",
|
43 |
+
"P10": "μ λΆ", "Q10": "μ λ¨", "R10": "κ²½λΆ", "S10": "κ²½λ¨", "T10": "μ μ£Ό"
|
44 |
+
}
|
45 |
+
|
46 |
+
# ββββββββ μ μΌμ λ§ λ¨Όμ 보μ¬μ£Όλ ν¨μ ββββββββ
|
47 |
+
def fetch_month_schedule(region_code, school_name, year, month):
|
48 |
api_key = os.environ.get("NEIS_API_KEY", "a69e08342c8947b4a52cd72789a5ecaf")
|
49 |
|
50 |
if not school_name.strip():
|
51 |
+
return "β νκ΅λͺ
μ μ
λ ₯ν΄μ£ΌμΈμ.", "", "", None
|
52 |
|
53 |
school_code, confirmed_region = get_school_info(region_code, school_name, api_key)
|
54 |
if not school_code:
|
55 |
+
return "β νκ΅ μ 보λ₯Ό μ°Ύμ μ μμ΅λλ€.", "", "", None
|
56 |
|
57 |
schedule_rows = get_schedule(confirmed_region, school_code, year, api_key)
|
58 |
if not schedule_rows:
|
59 |
+
return "βΉοΈ νμ¬μΌμ μ λ³΄κ° μμ΅λλ€.", "", "", None
|
60 |
|
61 |
# μλ³ μΌμ νν°λ§
|
62 |
month_rows = [r for r in schedule_rows if r["AA_YMD"].startswith(f"{year}{month:02}")]
|
|
|
65 |
for r in month_rows
|
66 |
) or "π μ νν μμ ν΄λΉνλ μΌμ μ΄ μμ΅λλ€."
|
67 |
|
68 |
+
return f"β
{school_name}μ {year}λ
{month}μ μΌμ μ
λλ€.", month_display, "β¨ [μλ λ²νΌμΌλ‘ μμ½ μμ±]", schedule_rows
|
|
|
69 |
|
70 |
+
# ββββββββ μμ½ λ²νΌμ΄ λλ Έμ λ μ€νλλ ν¨μ ββββββββ
|
71 |
+
def generate_summary(school_name, year, rows):
|
72 |
+
if not rows:
|
73 |
+
return "β οΈ λ¨Όμ μΌμ μ λΆλ¬μ μ£ΌμΈμ."
|
74 |
+
return summarize_schedule(rows, school_name, year)
|
|
|
|
|
|
|
75 |
|
76 |
+
# ββββββββ Gradio μΈν°νμ΄μ€ κ΅¬μ± ββββββββ
|
77 |
with gr.Blocks(title="νμ¬μΌμ μμ½ μΊλ¦°λ") as demo:
|
78 |
gr.Markdown("## π« νμ¬μΌμ μ‘°ν λ° AI μμ½ (google/gemma-2-2b-it)")
|
79 |
+
|
80 |
with gr.Row():
|
81 |
region = gr.Dropdown(label="μ§μ κ΅μ‘μ²", choices=list(region_options.keys()), value="B10", interactive=True)
|
82 |
school_name = gr.Textbox(label="νκ΅λͺ
", placeholder="μ: μ리μ΄λ±νκ΅")
|
|
|
84 |
year = gr.Dropdown(label="λ
λ", choices=[2022, 2023, 2024, 2025], value=2024)
|
85 |
month = gr.Slider(label="μ", minimum=1, maximum=12, value=7, step=1)
|
86 |
|
87 |
+
load_btn = gr.Button("οΏ½οΏ½οΏ½ μ μΌμ λΆλ¬μ€κΈ°")
|
|
|
88 |
status = gr.Markdown()
|
89 |
month_output = gr.Textbox(label="π μ νν μμ μΌμ ", lines=8)
|
90 |
+
summary_notice = gr.Markdown()
|
91 |
+
stored_rows = gr.State()
|
92 |
+
|
93 |
+
with gr.Accordion("β¨ 1λ
μΉ AI μμ½ λ³΄κΈ°", open=False):
|
94 |
+
summarize_btn = gr.Button("π€ μμ½ μμ±νκΈ°")
|
95 |
+
summary_output = gr.Textbox(label="π νμ¬μΌμ μμ½", lines=6)
|
96 |
+
|
97 |
+
# μ΄λ²€νΈ μ°κ²°
|
98 |
+
load_btn.click(fn=fetch_month_schedule,
|
99 |
+
inputs=[region, school_name, year, month],
|
100 |
+
outputs=[status, month_output, summary_notice, stored_rows])
|
101 |
|
102 |
+
summarize_btn.click(fn=generate_summary,
|
103 |
+
inputs=[school_name, year, stored_rows],
|
104 |
+
outputs=summary_output)
|
105 |
|
106 |
demo.launch()
|