Spaces:
Sleeping
Sleeping
Update chat_a.py
Browse files
chat_a.py
CHANGED
|
@@ -11,6 +11,18 @@ from sentence_transformers import SentenceTransformer, util
|
|
| 11 |
from transformers import AutoTokenizer, AutoModelForSequenceClassification
|
| 12 |
from css import log_and_render
|
| 13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
# ──────────────────────────────── 캐시/데이터셋 설정 ────────────────────────────────
|
| 15 |
HOME = pathlib.Path.home()
|
| 16 |
|
|
@@ -1340,14 +1352,31 @@ def recommend_packages(
|
|
| 1340 |
)
|
| 1341 |
|
| 1342 |
# ✅ 출력
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1343 |
if recommend_texts:
|
| 1344 |
-
|
| 1345 |
-
|
| 1346 |
-
|
| 1347 |
-
|
| 1348 |
-
|
| 1349 |
-
|
| 1350 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1351 |
else:
|
| 1352 |
log_and_render(
|
| 1353 |
"⚠️ 추천 가능한 패키지가 없습니다.",
|
|
@@ -1378,6 +1407,21 @@ def handle_selected_place(selected_place, travel_df, external_score_df, festival
|
|
| 1378 |
message_lines.append(f"함께 가보면 좋은 여행지: {sample_names}")
|
| 1379 |
else:
|
| 1380 |
message_lines.append("⚠️ 함께 가볼 다른 여행지가 없어요.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1381 |
# integrated_theme 추론 추가
|
| 1382 |
if selected_theme is None:
|
| 1383 |
theme_row = travel_df[travel_df["여행지"] == selected_place]
|
|
|
|
| 11 |
from transformers import AutoTokenizer, AutoModelForSequenceClassification
|
| 12 |
from css import log_and_render
|
| 13 |
|
| 14 |
+
from css import log_and_render
|
| 15 |
+
import time # time 라이브러리를 import 합니다.
|
| 16 |
+
|
| 17 |
+
def stream_text_generator(text_to_stream: str):
|
| 18 |
+
"""
|
| 19 |
+
문자열을 단어 단위로 쪼개서 하나씩 흘려보내주는 생성기(generator) 함수.
|
| 20 |
+
타이핑 효과를 위해 사용됩니다.
|
| 21 |
+
"""
|
| 22 |
+
for word in text_to_stream.split(" "):
|
| 23 |
+
yield word + " "
|
| 24 |
+
time.sleep(0.05) # 각 단어 사이에 0.05초의 딜레이를 줍니다.
|
| 25 |
+
|
| 26 |
# ──────────────────────────────── 캐시/데이터셋 설정 ────────────────────────────────
|
| 27 |
HOME = pathlib.Path.home()
|
| 28 |
|
|
|
|
| 1352 |
)
|
| 1353 |
|
| 1354 |
# ✅ 출력
|
| 1355 |
+
# if recommend_texts:
|
| 1356 |
+
# full_message = "🧳 이런 패키지를 추천드려요:<br><br>" + "<br><br>".join(recommend_texts)
|
| 1357 |
+
# log_and_render(
|
| 1358 |
+
# full_message,
|
| 1359 |
+
# sender="bot",
|
| 1360 |
+
# chat_container = chat_container,
|
| 1361 |
+
# key="recommend_package_intro",
|
| 1362 |
+
# )
|
| 1363 |
if recommend_texts:
|
| 1364 |
+
# ⬇️⬇️⬇️ 여기가 핵심 변경 부분입니다 ⬇️⬇️⬇️
|
| 1365 |
+
intro_message = "🧳 이런 패키지를 추천드려요:"
|
| 1366 |
+
package_list_message = "".join(recommend_texts)
|
| 1367 |
+
|
| 1368 |
+
# 1. 안내 문구는 타이핑 효과로 먼저 보여줍니다.
|
| 1369 |
+
with st.chat_message("assistant"):
|
| 1370 |
+
st.write_stream(stream_text_generator(intro_message))
|
| 1371 |
+
|
| 1372 |
+
# 2. 패키지 목록은 타이핑 없이 바로 보여주는 것이 더 깔끔합니다.
|
| 1373 |
+
st.markdown(package_list_message) # st.markdown을 사용해 바로 출력
|
| 1374 |
+
|
| 1375 |
+
# 3. 대화 기록에는 전체 메시지를 합쳐서 저장합니다.
|
| 1376 |
+
full_message = intro_message + package_list_message
|
| 1377 |
+
if "chat_log" not in st.session_state:
|
| 1378 |
+
st.session_state.chat_log = []
|
| 1379 |
+
st.session_state.chat_log.append(("bot", full_message))
|
| 1380 |
else:
|
| 1381 |
log_and_render(
|
| 1382 |
"⚠️ 추천 가능한 패키지가 없습니다.",
|
|
|
|
| 1407 |
message_lines.append(f"함께 가보면 좋은 여행지: {sample_names}")
|
| 1408 |
else:
|
| 1409 |
message_lines.append("⚠️ 함께 가볼 다른 여행지가 없어요.")
|
| 1410 |
+
|
| 1411 |
+
##
|
| 1412 |
+
full_message = "".join(message_lines)
|
| 1413 |
+
|
| 1414 |
+
# Streamlit의 chat_message 컨텍스트를 사용해 말풍선을 직접 만듭니다.
|
| 1415 |
+
with st.chat_message("assistant"): # 'assistant'는 봇 메시지를 의미합니다.
|
| 1416 |
+
# 우리가 만든 제너레이터와 st.write_stream을 연결해 타이핑 효과를 냅니다.
|
| 1417 |
+
st.write_stream(stream_text_generator(full_message))
|
| 1418 |
+
|
| 1419 |
+
# 대화 기록(log)을 남기는 로직은 화면 출력 뒤에 따로 실행합니다.
|
| 1420 |
+
if "chat_log" not in st.session_state:
|
| 1421 |
+
st.session_state.chat_log = []
|
| 1422 |
+
st.session_state.chat_log.append(("bot", full_message))
|
| 1423 |
+
##
|
| 1424 |
+
|
| 1425 |
# integrated_theme 추론 추가
|
| 1426 |
if selected_theme is None:
|
| 1427 |
theme_row = travel_df[travel_df["여행지"] == selected_place]
|