import os import pandas as pd import streamlit as st from streamlit_extras.grid import grid from streamlit_card import card from lida_ko import Manager, TextGenerationConfig from lida_ko.datamodel import Goal from lida_ko.utils import clean_code_snippet openai_api_key = os.environ["OPENAI_API_KEY"] selected_dataset = st.session_state.selected_dataset selected_method = st.session_state.selected_method selected_model = st.session_state.selected_model use_cache = st.session_state.use_cache temperature = st.session_state.temperature lida_manager: Manager = st.session_state.lida_manager summary = st.session_state.summary selected_goal_object: Goal = st.session_state.selected_goal_object selected_dataframe: pd.DataFrame = st.session_state.selected_dataframe num_visualizations = st.session_state.num_visualizations def generate_visualizations(code = None, feedback=None): if code and feedback: visualizations = lida_manager.repair( code=code, goal=selected_goal_object, summary=summary, feedback=feedback, textgen_config=textgen_config, library=st.session_state.selected_library ) else: visualizations = lida_manager.visualize( summary=summary, goal=selected_goal_object, textgen_config=textgen_config, library=st.session_state.selected_library) return visualizations st.title("πŸ“Š 데이터 μ‹œκ°ν™” λ§Œλ“€κΈ°") st.write("") st.empty() if not selected_goal_object: st.error("**ERROR**: 🚨 데이터 뢄석 λͺ©ν‘œλ₯Ό μ„€μ •ν•΄μ£Όμ„Έμš”.") st.stop() if selected_goal_object: # Update the visualization generation call to use the selected library. textgen_config = TextGenerationConfig( n=num_visualizations, temperature=temperature, model=selected_model, use_cache=use_cache) # **** lida.visualize ***** if not st.session_state.update_viz: visualizations = generate_visualizations() st.session_state.visualizations = visualizations else: st.session_state.update_viz = False col1, col2, col3 = st.columns([5, 0.5, 5]) def render_visualization(idx, viz): st.write(f'### 🌟 μ‹œκ°ν™” {idx + 1}') if viz: with st.spinner("인곡지λŠ₯이 μ‹œκ°ν™”λ₯Ό μƒμ„±μ€‘μž…λ‹ˆλ‹€..."): try: if st.session_state.selected_library == "plotly": data = st.session_state.selected_dataframe # extract the code from the generated responses and execute it temp_namespace = { 'data': data, } exec(clean_code_snippet(viz['code']), temp_namespace) fig = st.plotly_chart(temp_namespace['chart']) else: from PIL import Image import io import base64 imgdata = base64.b64decode(viz.raster) img = Image.open(io.BytesIO(imgdata)) st.image(img, caption=f"Visualization {idx + 1}", use_column_width=True) except Exception as e: st.error(f"Error loading visualization: {e}") with st.popover("πŸ§‘β€πŸ’» μ½”λ“œ ν™•μΈν•˜κΈ°", use_container_width=True): if isinstance(viz, dict): code_string = viz['code'] else: code_string = viz.code st.code(clean_code_snippet(code_string)) with st.popover("πŸ—¨οΈ λ³€κ²½ μš”μ²­ν•˜κΈ°", use_container_width=True): chat_message = st.chat_input("(κ΅¬ν˜„ 쀑)λ³€κ²½ν•˜κ³  싢은 λ‚΄μš©μ„ μžμ—°μ–΄ 둜 μž…λ ₯ν•΄μ£Όμ„Έμš”",key=f"chat_message_{idx}", disabled=True) if chat_message: st.session_state.visualizations = generate_visualizations(viz['code'], chat_message) st.session_state.update_viz = True st.rerun() render_visualization(idx, st.session_state.visualizations[idx]) return fig with col1: idx = 0 selected_viz = st.session_state.visualizations[idx] render_visualization(idx, selected_viz) with col2: st.empty() with col3: idx = 1 selected_viz = visualizations[idx] render_visualization(idx, selected_viz)