# utils/file_handlers.py import json from datetime import datetime from pathlib import Path import streamlit as st from config.settings import CHAT_HISTORIES_DIR, CHAT_IMAGES_DIR def save_chat_history(chat_history, image_data=None, filename=None): """Save chat history and associated image""" try: timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") # Get the stock name from the latest analysis stock_name = "Unknown" if chat_history: latest_analysis = chat_history[-1].get('analysis', '') if "analyzing" in latest_analysis.lower(): words = latest_analysis.split() for i, word in enumerate(words): if word.lower() == "analyzing": stock_name = words[i + 1].strip("(),.:") # Create filename with metadata base_filename = filename or f"{stock_name}_{timestamp}" # Save image if provided image_filename = None if image_data: try: image_filename = f"{base_filename}.jpg" image_path = CHAT_IMAGES_DIR / image_filename with open(image_path, "wb") as f: f.write(image_data) except Exception as e: st.warning(f"Could not save image: {str(e)}") # Add metadata to chat history chat_data = { 'metadata': { 'stock_name': stock_name, 'date_created': timestamp, 'image_file': image_filename }, 'conversations': chat_history } # Save chat history try: json_filename = f"{base_filename}.json" filepath = CHAT_HISTORIES_DIR / json_filename with open(filepath, "w") as f: json.dump(chat_data, f) return json_filename except Exception as e: st.warning(f"Could not save chat history: {str(e)}") # Save to session state as fallback if 'saved_chats' not in st.session_state: st.session_state.saved_chats = [] st.session_state.saved_chats.append(chat_data) return None except Exception as e: st.error(f"Error in save operation: {str(e)}") return None def load_chat_history(filename): """Load chat history and associated image""" filepath = CHAT_HISTORIES_DIR / filename try: with open(filepath, "r") as f: chat_data = json.load(f) # Load associated image if it exists image_data = None if chat_data.get('metadata', {}).get('image_file'): image_path = CHAT_IMAGES_DIR / chat_data['metadata']['image_file'] if image_path.exists(): with open(image_path, "rb") as f: image_data = f.read() return chat_data, image_data except Exception as e: st.error(f"Error loading chat history: {str(e)}") return None, None