ll7098ll commited on
Commit
bfcdc5a
·
verified ·
1 Parent(s): 5d173fc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -28
app.py CHANGED
@@ -7,10 +7,10 @@ genai.configure(api_key=os.environ["GEMINI_API_KEY"])
7
 
8
  # 모델 설정
9
  generation_config = {
10
- "temperature": 0.5,
11
  "top_p": 0.95,
12
  "top_k": 40,
13
- "max_output_tokens": 8192,
14
  "response_mime_type": "text/plain",
15
  }
16
 
@@ -25,7 +25,6 @@ st.markdown(
25
  .stApp {
26
  background-color: #fffafa; /* 은은한 핑크색 배경 */
27
  }
28
-
29
  /* 타이틀 스타일 */
30
  .main-title {
31
  font-size: 3rem;
@@ -34,7 +33,6 @@ st.markdown(
34
  text-align: center;
35
  margin-bottom: 20px;
36
  }
37
-
38
  /* 채팅 메시지 스타일 */
39
  .chat-message {
40
  border-radius: 15px;
@@ -42,38 +40,34 @@ st.markdown(
42
  margin: 10px 0;
43
  display: flex;
44
  align-items: center;
 
 
45
  }
46
-
47
  .chat-message-user {
48
  background-color: #ffebef; /* 따뜻한 파스텔 핑크 */
49
  color: #8b4513;
50
  justify-content: flex-end;
51
  }
52
-
53
  .chat-message-assistant {
54
  background-color: #ffe4e6; /* 부드러운 파스텔 복숭아 핑크색 */
55
  color: #6b4226;
56
  justify-content: flex-start;
57
  }
58
-
59
  .chat-avatar {
60
  width: 40px;
61
  height: 40px;
62
  border-radius: 50%;
63
  margin-right: 10px;
64
  }
65
-
66
  .chat-avatar-user {
67
  margin-left: 10px;
68
  margin-right: 0;
69
  }
70
-
71
  /* 사용자 입력 창 스타일 */
72
  .stTextInput input {
73
  border-radius: 15px;
74
  border: 2px solid #cd857f; /* 따뜻한 핑크색 */
75
  }
76
-
77
  /* 버튼 스타일 */
78
  .stButton button {
79
  background-color: #cd857f; /* 따뜻한 핑크색 */
@@ -89,41 +83,38 @@ st.markdown(
89
  # 메인 타이틀
90
  st.markdown("<div class='main-title'>AI 튜터 🎓</div>", unsafe_allow_html=True)
91
 
92
- # 모델 선택 옵션 추가
93
- model_options = ["gemini-1.5-flash", "learnlm-1.5-pro-experimental"]
94
- selected_model_name = st.sidebar.selectbox("사용할 모델을 선택하세요:", model_options)
95
-
96
  # 모델 설정
97
  model = genai.GenerativeModel(
98
- model_name=selected_model_name,
99
  generation_config=generation_config,
100
  system_instruction="친절하고 든든한 튜터가 되어 학생이 목표를 달성하도록 안내하고, 학생이 주제에서 벗어나면 부드럽게 다시 집중하도록 도와주세요. 학생이 큰 개념을 단계적으로 이해하도록 돕는 질문을 하고, 그 개념을 깊이 파고들 수 있도록 탐구 질문을 던지세요. 학생이 부담을 느끼지 않도록 한 번에 한 질문만 하세요. 학생이 이해한 것을 보여주면 대화를 마무리하세요.",
101
  )
102
 
103
  # 채팅 세션 초기화
104
- if "chat_session" not in st.session_state or st.session_state.get("current_model") != selected_model_name:
 
 
 
105
  st.session_state.chat_session = model.start_chat(history=[])
106
- st.session_state.current_model = selected_model_name
107
 
108
  # 사용자와 AI의 아이콘 URL 설정
109
  user_icon_url = "https://cdn-icons-png.flaticon.com/512/1995/1995531.png" # 학생 아이콘 (책을 든 학생)
110
  assistant_icon_url = "https://cdn-icons-png.flaticon.com/512/4323/4323008.png" # 튜터 아이콘 (안경 쓴 선생님)
111
 
112
  # 채팅 메시지 표시
113
- if "messages" not in st.session_state:
114
- st.session_state.messages = []
115
-
116
  for message in st.session_state.messages:
117
- role_class = "chat-message-user" if message["role"] == "user" else "chat-message-assistant"
118
- avatar_url = user_icon_url if message["role"] == "user" else assistant_icon_url
119
- avatar_class = "chat-avatar-user" if message["role"] == "user" else "chat-avatar"
120
- st.markdown(
121
- f"<div class='chat-message {role_class}'><img src='{avatar_url}' class='chat-avatar {avatar_class}'>{message['content']}</div>",
122
- unsafe_allow_html=True
123
- )
 
124
 
125
  # 사용자 입력 받기
126
  if prompt := st.chat_input("📝학습 내용을 입력하면 AI 튜터가 질문을 통해서 개념을 이해하도록 도와줍니다."):
 
127
  st.session_state.messages.append({"role": "user", "content": prompt})
128
  st.markdown(f"<div class='chat-message chat-message-user'>{prompt}<img src='{user_icon_url}' class='chat-avatar chat-avatar-user'></div>", unsafe_allow_html=True)
129
 
@@ -135,5 +126,5 @@ if prompt := st.chat_input("📝학습 내용을 입력하면 AI 튜터가 질
135
  # 초기화 버튼을 사이드바로 이동
136
  with st.sidebar:
137
  if st.button("💡 초기화"):
138
- st.session_state.clear() # 세션 상태 초기화
139
  st.rerun()
 
7
 
8
  # 모델 설정
9
  generation_config = {
10
+ "temperature": 0.7,
11
  "top_p": 0.95,
12
  "top_k": 40,
13
+ "max_output_tokens": 2000,
14
  "response_mime_type": "text/plain",
15
  }
16
 
 
25
  .stApp {
26
  background-color: #fffafa; /* 은은한 핑크색 배경 */
27
  }
 
28
  /* 타이틀 스타일 */
29
  .main-title {
30
  font-size: 3rem;
 
33
  text-align: center;
34
  margin-bottom: 20px;
35
  }
 
36
  /* 채팅 메시지 스타일 */
37
  .chat-message {
38
  border-radius: 15px;
 
40
  margin: 10px 0;
41
  display: flex;
42
  align-items: center;
43
+ flex-wrap: wrap;
44
+ word-break: break-word;
45
  }
 
46
  .chat-message-user {
47
  background-color: #ffebef; /* 따뜻한 파스텔 핑크 */
48
  color: #8b4513;
49
  justify-content: flex-end;
50
  }
 
51
  .chat-message-assistant {
52
  background-color: #ffe4e6; /* 부드러운 파스텔 복숭아 핑크색 */
53
  color: #6b4226;
54
  justify-content: flex-start;
55
  }
 
56
  .chat-avatar {
57
  width: 40px;
58
  height: 40px;
59
  border-radius: 50%;
60
  margin-right: 10px;
61
  }
 
62
  .chat-avatar-user {
63
  margin-left: 10px;
64
  margin-right: 0;
65
  }
 
66
  /* 사용자 입력 창 스타일 */
67
  .stTextInput input {
68
  border-radius: 15px;
69
  border: 2px solid #cd857f; /* 따뜻한 핑크색 */
70
  }
 
71
  /* 버튼 스타일 */
72
  .stButton button {
73
  background-color: #cd857f; /* 따뜻한 핑크색 */
 
83
  # 메인 타이틀
84
  st.markdown("<div class='main-title'>AI 튜터 🎓</div>", unsafe_allow_html=True)
85
 
 
 
 
 
86
  # 모델 설정
87
  model = genai.GenerativeModel(
88
+ model_name="gemini-1.5-flash",
89
  generation_config=generation_config,
90
  system_instruction="친절하고 든든한 튜터가 되어 학생이 목표를 달성하도록 안내하고, 학생이 주제에서 벗어나면 부드럽게 다시 집중하도록 도와주세요. 학생이 큰 개념을 단계적으로 이해하도록 돕는 질문을 하고, 그 개념을 깊이 파고들 수 있도록 탐구 질문을 던지세요. 학생이 부담을 느끼지 않도록 한 번에 한 질문만 하세요. 학생이 이해한 것을 보여주면 대화를 마무리하세요.",
91
  )
92
 
93
  # 채팅 세션 초기화
94
+ if "messages" not in st.session_state:
95
+ st.session_state.messages = [
96
+ {"role": "system", "content": "학생들이 수업 주제나 내용을 입력하면, 질문을 통해서 학생들 스스로가 그 주제나 내용을 이해할 수 있도록, 마치 소크라테스처럼 끊임 없는 질문을 통해 스스로 깨달을 수 있도록 도와주세요."}
97
+ ]
98
  st.session_state.chat_session = model.start_chat(history=[])
 
99
 
100
  # 사용자와 AI의 아이콘 URL 설정
101
  user_icon_url = "https://cdn-icons-png.flaticon.com/512/1995/1995531.png" # 학생 아이콘 (책을 든 학생)
102
  assistant_icon_url = "https://cdn-icons-png.flaticon.com/512/4323/4323008.png" # 튜터 아이콘 (안경 쓴 선생님)
103
 
104
  # 채팅 메시지 표시
 
 
 
105
  for message in st.session_state.messages:
106
+ if message["role"] != "system":
107
+ role_class = "chat-message-user" if message["role"] == "user" else "chat-message-assistant"
108
+ avatar_url = user_icon_url if message["role"] == "user" else assistant_icon_url
109
+ avatar_class = "chat-avatar-user" if message["role"] == "user" else "chat-avatar"
110
+ st.markdown(
111
+ f"<div class='chat-message {role_class}'><img src='{avatar_url}' class='chat-avatar {avatar_class}'>{message['content']}</div>",
112
+ unsafe_allow_html=True
113
+ )
114
 
115
  # 사용자 입력 받기
116
  if prompt := st.chat_input("📝학습 내용을 입력하면 AI 튜터가 질문을 통해서 개념을 이해하도록 도와줍니다."):
117
+ # 사용자의 메시지를 세션에 추가
118
  st.session_state.messages.append({"role": "user", "content": prompt})
119
  st.markdown(f"<div class='chat-message chat-message-user'>{prompt}<img src='{user_icon_url}' class='chat-avatar chat-avatar-user'></div>", unsafe_allow_html=True)
120
 
 
126
  # 초기화 버튼을 사이드바로 이동
127
  with st.sidebar:
128
  if st.button("💡 초기화"):
129
+ del st.session_state.messages # 메시지 세션 상태 삭제
130
  st.rerun()