Update app.py
Browse files
app.py
CHANGED
|
@@ -56,59 +56,35 @@ instinct_variants = {
|
|
| 56 |
}
|
| 57 |
|
| 58 |
def generate_date_scenario(my_name, my_gender, my_type, my_wing, my_instinct, partner_name, partner_gender, partner_type, partner_wing, partner_instinct, situation):
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
|
|
|
|
|
|
|
|
|
| 70 |
|
| 71 |
system_prompt = f"""
|
| 72 |
당신은 에니어그램 전문가이자 관계 코치입니다. 아래 요청에 따라 데이트 시나리오를 작성해주세요.
|
| 73 |
-
|
| 74 |
[대상자 정보]
|
| 75 |
-
- {
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
system_prompt += f" {my_wing}"
|
| 79 |
-
if my_instinct:
|
| 80 |
-
system_prompt += f" ({instinct_variants.get(my_instinct, '')})"
|
| 81 |
-
|
| 82 |
-
system_prompt += f" ({enneagram_types.get(my_type, '알 수 없는 유형')})"
|
| 83 |
-
|
| 84 |
-
system_prompt += f"""
|
| 85 |
-
- {partner_name} ({partner_gender}): {partner_type}"""
|
| 86 |
-
|
| 87 |
-
if partner_wing:
|
| 88 |
-
system_prompt += f" {partner_wing}"
|
| 89 |
-
if partner_instinct:
|
| 90 |
-
system_prompt += f" ({instinct_variants.get(partner_instinct, '')})"
|
| 91 |
-
|
| 92 |
-
system_prompt += f" ({enneagram_types.get(partner_type, '알 수 없는 유형')})"
|
| 93 |
-
|
| 94 |
-
system_prompt += f"""
|
| 95 |
[상황]
|
| 96 |
- {situation}
|
| 97 |
-
|
| 98 |
[요청 사항]
|
| 99 |
-
1. **{my_name} ({my_gender})의 에니어그램 유형에 대한 상세 설명:**
|
| 100 |
-
|
| 101 |
-
if my_wing or my_instinct:
|
| 102 |
-
system_prompt += f" (날개: {my_wing if my_wing else '없음'}, 본능: {instinct_variants.get(my_instinct, '없음')})"
|
| 103 |
-
|
| 104 |
-
system_prompt += """
|
| 105 |
- 핵심 가치, 성격적 특징, 강점과 약점, 주의할 점 등을 포함하여 자세히 설명해주세요.
|
| 106 |
-
2. **{partner_name} ({partner_gender})의 에니어그램 유형에 대한 상세 설명:**
|
| 107 |
-
|
| 108 |
-
if partner_wing or partner_instinct:
|
| 109 |
-
system_prompt += f" (날개: {partner_wing if partner_wing else '없음'}, 본능: {instinct_variants.get(partner_instinct, '없음')})"
|
| 110 |
-
|
| 111 |
-
system_prompt += """
|
| 112 |
- 핵심 가치, 성격적 특징, 강점과 약점, 주의할 점 등을 포함하여 자세히 설명해주세요.
|
| 113 |
3. **에니어그램 유형을 바탕으로 한 구체적인 데이트 시나리오 작성:**
|
| 114 |
- 만남, 대화 시작, 식사, 영화 관람, 갈등 발생 및 해결 등 데이트의 각 단계를 구체적인 대화 장면으로 묘사해주세요.
|
|
@@ -117,7 +93,6 @@ def generate_date_scenario(my_name, my_gender, my_type, my_wing, my_instinct, pa
|
|
| 117 |
4. **상대방을 서로 이해하기 위한 실질적인 조언:**
|
| 118 |
- 각 대상자가 상대방의 에니어그램 유형을 이해하고, 더 나은 관계를 형성하기 위한 구체적인 상황과 행동을 예시로 제시해주세요.
|
| 119 |
- 조언에 {my_name}과 {partner_name}의 이름, 성별, 에니어그램 유형이 모두 반영되어야 합니다.
|
| 120 |
-
---
|
| 121 |
"""
|
| 122 |
|
| 123 |
full_text = ""
|
|
@@ -127,37 +102,40 @@ def generate_date_scenario(my_name, my_gender, my_type, my_wing, my_instinct, pa
|
|
| 127 |
full_text += chunk.text
|
| 128 |
html_text = markdown.markdown(full_text)
|
| 129 |
scenario_output_area.markdown(html_text, unsafe_allow_html=True)
|
| 130 |
-
time.sleep(0.05)
|
| 131 |
except Exception as e:
|
| 132 |
st.error(f"Error: {str(e)}")
|
| 133 |
return ""
|
| 134 |
|
| 135 |
return full_text
|
| 136 |
|
|
|
|
| 137 |
# Streamlit 인터페이스
|
| 138 |
st.set_page_config(page_title="에니어그램 데이트 시뮬레이터", page_icon="❤️")
|
| 139 |
|
| 140 |
colored_header(
|
| 141 |
label="💖 에니어그램 데이트 시뮬레이터 💖",
|
| 142 |
description="나와 상대방의 에니어그램 유형을 기반으로 데이트 시나리오를 미리 체험해보세요!",
|
| 143 |
-
color_name="red-70"
|
| 144 |
)
|
| 145 |
|
|
|
|
| 146 |
# 사이드바 입력 폼
|
| 147 |
with st.sidebar:
|
| 148 |
st.subheader("내 정보")
|
| 149 |
my_name = st.text_input("내 이름(닉네임)", "나")
|
| 150 |
my_gender = st.selectbox("내 성별", ["남성", "여성"])
|
| 151 |
my_type = st.selectbox("내 에니어그램 유형", list(enneagram_types.keys()))
|
| 152 |
-
my_wing = st.selectbox("내 날개 유형 (선택)", [""] + list(wing_types.keys()))
|
| 153 |
-
my_instinct = st.selectbox("내 본능 유형 (선택)", [""] + list(instinct_variants.keys()))
|
| 154 |
|
| 155 |
st.subheader("상대방 정보")
|
| 156 |
partner_name = st.text_input("상대방 이름(닉네임)", "상대방")
|
| 157 |
partner_gender = st.selectbox("상대방 성별", ["남성", "여성"])
|
| 158 |
partner_type = st.selectbox("상대방 에니어그램 유형", list(enneagram_types.keys()))
|
| 159 |
-
partner_wing = st.selectbox("상대방 날개 유형 (선택)", [""] + list(wing_types.keys()))
|
| 160 |
-
partner_instinct = st.selectbox("상대방 본능 유형 (선택)", [""] + list(instinct_variants.keys()))
|
|
|
|
| 161 |
|
| 162 |
st.subheader("데이트 상황")
|
| 163 |
situation = st.text_area("예: 첫 만남, 영화 관람 후 저녁 식사", height=150)
|
|
@@ -168,7 +146,7 @@ with st.sidebar:
|
|
| 168 |
scenario_output_area = st.empty()
|
| 169 |
|
| 170 |
if generate_scenario_button:
|
| 171 |
-
# 날개
|
| 172 |
my_wing = my_wing if my_wing != "" else None
|
| 173 |
my_instinct = my_instinct if my_instinct != "" else None
|
| 174 |
partner_wing = partner_wing if partner_wing != "" else None
|
|
|
|
| 56 |
}
|
| 57 |
|
| 58 |
def generate_date_scenario(my_name, my_gender, my_type, my_wing, my_instinct, partner_name, partner_gender, partner_type, partner_wing, partner_instinct, situation):
|
| 59 |
+
|
| 60 |
+
# 에니어그램 유형 정보 문자열 생성 (날개/본능 포함)
|
| 61 |
+
def create_type_info(name, gender, type, wing, instinct):
|
| 62 |
+
type_info = f"{name} ({gender}): {type} ({enneagram_types.get(type, '알 수 없는 유형')})"
|
| 63 |
+
if wing:
|
| 64 |
+
type_info += f" 날개: {wing_types.get(wing)}"
|
| 65 |
+
if instinct:
|
| 66 |
+
type_info += f", 본능: {instinct_variants.get(instinct)}"
|
| 67 |
+
return type_info
|
| 68 |
+
|
| 69 |
+
my_type_info = create_type_info(my_name, my_gender, my_type, my_wing, my_instinct)
|
| 70 |
+
partner_type_info = create_type_info(partner_name, partner_gender, partner_type, partner_wing, partner_instinct)
|
| 71 |
+
|
| 72 |
+
|
| 73 |
|
| 74 |
system_prompt = f"""
|
| 75 |
당신은 에니어그램 전문가이자 관계 코치입니다. 아래 요청에 따라 데이트 시나리오를 작성해주세요.
|
| 76 |
+
|
| 77 |
[대상자 정보]
|
| 78 |
+
- {my_type_info}
|
| 79 |
+
- {partner_type_info}
|
| 80 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 81 |
[상황]
|
| 82 |
- {situation}
|
| 83 |
+
|
| 84 |
[요청 사항]
|
| 85 |
+
1. **{my_name} ({my_gender})의 에니어그램 유형에 대한 상세 설명:**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
- 핵심 가치, 성격적 특징, 강점과 약점, 주의할 점 등을 포함하여 자세히 설명해주세요.
|
| 87 |
+
2. **{partner_name} ({partner_gender})의 에니어그램 유형에 대한 상세 설명:**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 88 |
- 핵심 가치, 성격적 특징, 강점과 약점, 주의할 점 등을 포함하여 자세히 설명해주세요.
|
| 89 |
3. **에니어그램 유형을 바탕으로 한 구체적인 데이트 시나리오 작성:**
|
| 90 |
- 만남, 대화 시작, 식사, 영화 관람, 갈등 발생 및 해결 등 데이트의 각 단계를 구체적인 대화 장면으로 묘사해주세요.
|
|
|
|
| 93 |
4. **상대방을 서로 이해하기 위한 실질적인 조언:**
|
| 94 |
- 각 대상자가 상대방의 에니어그램 유형을 이해하고, 더 나은 관계를 형성하기 위한 구체적인 상황과 행동을 예시로 제시해주세요.
|
| 95 |
- 조언에 {my_name}과 {partner_name}의 이름, 성별, 에니어그램 유형이 모두 반영되어야 합니다.
|
|
|
|
| 96 |
"""
|
| 97 |
|
| 98 |
full_text = ""
|
|
|
|
| 102 |
full_text += chunk.text
|
| 103 |
html_text = markdown.markdown(full_text)
|
| 104 |
scenario_output_area.markdown(html_text, unsafe_allow_html=True)
|
| 105 |
+
time.sleep(0.05) # 출력 속도 조절
|
| 106 |
except Exception as e:
|
| 107 |
st.error(f"Error: {str(e)}")
|
| 108 |
return ""
|
| 109 |
|
| 110 |
return full_text
|
| 111 |
|
| 112 |
+
|
| 113 |
# Streamlit 인터페이스
|
| 114 |
st.set_page_config(page_title="에니어그램 데이트 시뮬레이터", page_icon="❤️")
|
| 115 |
|
| 116 |
colored_header(
|
| 117 |
label="💖 에니어그램 데이트 시뮬레이터 💖",
|
| 118 |
description="나와 상대방의 에니어그램 유형을 기반으로 데이트 시나리오를 미리 체험해보세요!",
|
| 119 |
+
color_name="red-70",
|
| 120 |
)
|
| 121 |
|
| 122 |
+
|
| 123 |
# 사이드바 입력 폼
|
| 124 |
with st.sidebar:
|
| 125 |
st.subheader("내 정보")
|
| 126 |
my_name = st.text_input("내 이름(닉네임)", "나")
|
| 127 |
my_gender = st.selectbox("내 성별", ["남성", "여성"])
|
| 128 |
my_type = st.selectbox("내 에니어그램 유형", list(enneagram_types.keys()))
|
| 129 |
+
my_wing = st.selectbox("내 날개 유형 (선택)", [""] + list(wing_types.keys())) # 빈 문자열 추가
|
| 130 |
+
my_instinct = st.selectbox("내 본능 유형 (선택)", [""] + list(instinct_variants.keys())) # 빈 문자열 추가
|
| 131 |
|
| 132 |
st.subheader("상대방 정보")
|
| 133 |
partner_name = st.text_input("상대방 이름(닉네임)", "상대방")
|
| 134 |
partner_gender = st.selectbox("상대방 성별", ["남성", "여성"])
|
| 135 |
partner_type = st.selectbox("상대방 에니어그램 유형", list(enneagram_types.keys()))
|
| 136 |
+
partner_wing = st.selectbox("상대방 날개 유형 (선택)", [""] + list(wing_types.keys())) # 빈 문자열 추가
|
| 137 |
+
partner_instinct = st.selectbox("상대방 본능 유형 (선택)", [""] + list(instinct_variants.keys())) # 빈 문자열 추가
|
| 138 |
+
|
| 139 |
|
| 140 |
st.subheader("데이트 상황")
|
| 141 |
situation = st.text_area("예: 첫 만남, 영화 관람 후 저녁 식사", height=150)
|
|
|
|
| 146 |
scenario_output_area = st.empty()
|
| 147 |
|
| 148 |
if generate_scenario_button:
|
| 149 |
+
# 날개/본능 유형 선택 안한 경우 None으로 처리
|
| 150 |
my_wing = my_wing if my_wing != "" else None
|
| 151 |
my_instinct = my_instinct if my_instinct != "" else None
|
| 152 |
partner_wing = partner_wing if partner_wing != "" else None
|