JUNGU commited on
Commit
2c4b32b
·
verified ·
1 Parent(s): 9d3125c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -54
app.py CHANGED
@@ -1,15 +1,13 @@
1
- import streamlit as st
2
- import openai
3
  import json
4
- from annotated_text import annotated_text
5
  import os
6
- import achivenment_standards as data
7
-
8
 
9
  # OpenAI API 설정 (환경 변수에서 읽어옴)
10
  openai.api_key = os.getenv("OPENAI_API_KEY")
11
 
12
- #gpt이용해서 추론함수 만들기
13
  def generate_annotated_text(text):
14
  response = openai.ChatCompletion.create(
15
  model="gpt-3.5-turbo-16k",
@@ -53,61 +51,60 @@ def generate_similar_sentences(base_sentence):
53
  )
54
  generated_sentences = response.choices[0].message['content'].split('\n')
55
  return [sentence.strip() for sentence in generated_sentences if sentence.strip()]
56
-
57
-
58
- # Streamlit 앱의 제목 및 설명
59
- st.title("성취기준 기반 학생의 특성 및 활동 평가 생성")
60
- st.write("성취기준을 입력하시면, 해당 성취기준에 기반한 학생의 특성 및 활동에 대한 평가를 \n\n [학생 활동, 성취 수준, 교사의 총평, 학생 역량] 4가지 요소를 조합하여 제공합니다.")
61
 
62
  # 성취기준 데이터 가져오기
 
63
  achievement_standards = data.achievement_standards
64
 
65
- # 학년군 선택 드롭다운
66
- grade_group = st.selectbox("학년군을 선택하세요:", list(achievement_standards.keys()))
67
-
68
- # 선택된 학년군에 따른 과목 목록
69
- subject_list = list(achievement_standards[grade_group].keys())
70
- subject = st.selectbox("과목을 선택하세요:", subject_list)
71
-
72
- # 선택된 과목에 따른 성취기준 목록
73
- selected_standards = achievement_standards[grade_group][subject]
74
- selected_standard = st.selectbox("성취기준을 선택하세요:", selected_standards)
75
-
76
- # 선택된 성취기준을 텍스트 입력창의 기본값으로 사용
77
- achievement_standard = st.text_input("성취기준 입력:", value=selected_standard)
78
-
79
- # 세션 상태 초기화
80
- if 'generated_result' not in st.session_state:
81
- st.session_state.generated_result = None
82
- if 'selected_sentence' not in st.session_state:
83
- st.session_state.selected_sentence = None
84
- if 'similar_sentences' not in st.session_state:
85
- st.session_state.similar_sentences = []
86
 
87
- # "평가 생성" 버튼 클릭 시의 동작
88
- if st.button("평가 생성"):
89
- with st.spinner('답변 생성중...'):
90
- result = generate_annotated_text(achievement_standard)
91
- st.session_state.generated_result = result
92
- st.session_state.selected_sentence = None # 새로운 평가 생성시 선택된 문장 초기화
93
- st.session_state.similar_sentences = [] # 이전 유사한 문장들 초기화
94
- exec(result.replace('```', ''))
95
 
96
- # 셀렉트 박스 및 유사한 문장 생성 버튼 추가
97
- if st.session_state.generated_result:
98
- # annotated_text 결과에서 문장만 추출
99
- result_lines = st.session_state.generated_result.split('\n')
100
  sentences = [line[start_idx + 2:line.find('",', start_idx)].strip() for line in result_lines if (start_idx := line.find('("')) != -1]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
 
102
- if sentences:
103
- selected_sentence = st.selectbox("문장을 선택하세요:", sentences, key="sentence_select")
104
- st.session_state.selected_sentence = selected_sentence
 
 
 
 
 
105
 
106
- # 유사한 문장 생성 버튼
107
- if st.button("유사한 문구 생성") and st.session_state.selected_sentence:
108
- with st.spinner('문장 생성중...'):
109
- st.session_state.similar_sentences = generate_similar_sentences(st.session_state.selected_sentence)
 
110
 
111
- # 유사한 문장들 출력
112
- for sentence in st.session_state.similar_sentences:
113
- st.write(sentence)
 
 
 
 
 
1
+ import gradio as gr
2
+ import openai
3
  import json
 
4
  import os
5
+ import pandas as pd
 
6
 
7
  # OpenAI API 설정 (환경 변수에서 읽어옴)
8
  openai.api_key = os.getenv("OPENAI_API_KEY")
9
 
10
+ # gpt이용해서 추론함수 만들기
11
  def generate_annotated_text(text):
12
  response = openai.ChatCompletion.create(
13
  model="gpt-3.5-turbo-16k",
 
51
  )
52
  generated_sentences = response.choices[0].message['content'].split('\n')
53
  return [sentence.strip() for sentence in generated_sentences if sentence.strip()]
 
 
 
 
 
54
 
55
  # 성취기준 데이터 가져오기
56
+ import achievement_standards as data
57
  achievement_standards = data.achievement_standards
58
 
59
+ def get_subjects(grade_group):
60
+ return list(achievement_standards[grade_group].keys())
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
+ def get_standards(grade_group, subject):
63
+ return achievement_standards[grade_group][subject]
 
 
 
 
 
 
64
 
65
+ def generate_and_save_evaluation(grade_group, subject, standard):
66
+ result = generate_annotated_text(standard)
67
+ result_lines = result.split('\n')
 
68
  sentences = [line[start_idx + 2:line.find('",', start_idx)].strip() for line in result_lines if (start_idx := line.find('("')) != -1]
69
+ df = pd.DataFrame(sentences, columns=["Evaluation"])
70
+ file_path = "/mnt/data/evaluations.csv"
71
+ df.to_csv(file_path, index=False)
72
+ return result, file_path
73
+
74
+ # Gradio 인터페이스 정의
75
+ with gr.Blocks() as demo:
76
+ gr.Markdown("### 성취기준 기반 학생의 특성 및 활동 평가 생성")
77
+
78
+ grade_group = gr.Dropdown(label="학년군을 선택하세요:", choices=list(achievement_standards.keys()))
79
+ subject = gr.Dropdown(label="과목을 선택하세요:")
80
+ standard = gr.Dropdown(label="성취기준을 선택하세요:")
81
+
82
+ grade_group.change(fn=get_subjects, inputs=grade_group, outputs=subject)
83
+ subject.change(fn=get_standards, inputs=[grade_group, subject], outputs=standard)
84
+
85
+ with gr.Row():
86
+ generate_button = gr.Button("평가 생성")
87
+ result_output = gr.HTML()
88
 
89
+ similar_sentence_button = gr.Button("유사한 문구 생성")
90
+ similar_sentences_output = gr.HTML()
91
+ save_button = gr.Button("CSV로 저장")
92
+ download_link = gr.File()
93
+
94
+ def update_similar_sentences(selected_sentence):
95
+ similar_sentences = generate_similar_sentences(selected_sentence)
96
+ return '<br>'.join(similar_sentences)
97
 
98
+ def save_evaluations_to_csv(evaluations):
99
+ df = pd.DataFrame(evaluations, columns=["Evaluation"])
100
+ file_path = "/mnt/data/evaluations.csv"
101
+ df.to_csv(file_path, index=False)
102
+ return file_path
103
 
104
+ selected_sentence = gr.Textbox(visible=False)
105
+
106
+ generate_button.click(fn=generate_and_save_evaluation, inputs=[grade_group, subject, standard], outputs=[result_output, download_link])
107
+ similar_sentence_button.click(fn=update_similar_sentences, inputs=selected_sentence, outputs=similar_sentences_output)
108
+ save_button.click(fn=save_evaluations_to_csv, inputs=result_output, outputs=download_link)
109
+
110
+ demo.launch()