Spaces:
Sleeping
Sleeping
| from datetime import datetime | |
| import streamlit as st | |
| from function import generate_plans, make_report, create_word_file | |
| def main(): | |
| st.title("🦜🔗 윤리 보고서 생성") | |
| # 세션 상태에서 topics와 word_file 초기화 | |
| if 'topics' not in st.session_state: | |
| st.session_state.topics = {} | |
| if 'word_file' not in st.session_state: | |
| st.session_state.word_file = None | |
| with st.form("my_form_1"): | |
| text = st.text_area( | |
| "윤리 소재 입력:", | |
| "무엇과 관련된 주제를 생성할까요?", | |
| ) | |
| submitted = st.form_submit_button("주제 생성") | |
| if submitted: | |
| # 로딩 애니메이션과 메시지 표시 | |
| with st.spinner('약 30초 정도 소요됩니다...'): | |
| response = generate_plans(text) # 실제로는 이 함수를 호출하여 response 생성 | |
| # 기존 topics를 초기화하고 새로운 주제와 설명을 세션 상태에 저장 | |
| st.session_state.topics = {} | |
| for i in range(1, 9): | |
| topic, description = response[str(i)].split(": ", 1) | |
| st.session_state.topics[topic] = description | |
| # 각 주제를 출력 | |
| for key, value in response.items(): | |
| topic, description = value.split(": ", 1) | |
| st.markdown(f"#### 주제 {key}: {topic}") | |
| st.write(f"**상세 설명**: {description}") | |
| st.markdown("---") # 주제 간 구분선 추가 | |
| # 두 번째 폼 (주제 선택) | |
| if st.session_state.topics: # topics가 세션에 저장된 경우만 실행 | |
| with st.form("my_form_2"): | |
| 주제 = st.radio( | |
| '어떤 주제로 개요를 생성할까요?', | |
| list(st.session_state.topics.keys()), | |
| index=0 | |
| ) | |
| submitted = st.form_submit_button("보고서 생성") | |
| if submitted: | |
| # 로딩 애니메이션과 메시지 표시 | |
| with st.spinner('약 2분 정도 소요됩니다...'): | |
| text = f"{주제} : {st.session_state.topics[주제]}" | |
| response2 = make_report(text) | |
| st.code(response2, language='markdown') | |
| st.markdown("---") | |
| st.info(f"보고서 생성 시각 : {datetime.now().strftime('%Y-%m-%d %H:%M')}") | |
| # 워드 파일 생성 | |
| st.session_state.word_file = create_word_file(response2) | |
| # 폼 외부에서 다운로드 버튼 표시 | |
| if st.session_state.word_file: | |
| st.download_button( | |
| label="워드 파일 다운로드", | |
| data=st.session_state.word_file, | |
| file_name="report.docx", | |
| mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document" | |
| ) | |
| else: | |
| st.write("보고서를 생성한 후에 다운로드할 수 있습니다.") | |
| if __name__ == "__main__": | |
| main() |