|
|
import streamlit as st |
|
|
import json |
|
|
import uuid |
|
|
from datetime import datetime |
|
|
from typing import Dict, Any |
|
|
|
|
|
|
|
|
def parse_json_chat(file_content: str) -> Dict[str, Any]: |
|
|
""" |
|
|
Parse a JSON chat file and extract chat data |
|
|
""" |
|
|
try: |
|
|
data = json.loads(file_content) |
|
|
return { |
|
|
'chat_id': str(uuid.uuid4()), |
|
|
'chat_name': data.get('chat_name', 'Imported Chat'), |
|
|
'messages': data.get('messages', []) |
|
|
} |
|
|
except json.JSONDecodeError as e: |
|
|
st.error(f"Invalid JSON format: {str(e)}") |
|
|
return None |
|
|
|
|
|
|
|
|
def import_chat_from_file(uploaded_file) -> Dict[str, Any]: |
|
|
""" |
|
|
Import chat data from uploaded file (JSON format only) |
|
|
""" |
|
|
if uploaded_file is None: |
|
|
return None |
|
|
|
|
|
file_content = uploaded_file.read().decode('utf-8') |
|
|
file_name = uploaded_file.name.lower() |
|
|
|
|
|
if file_name.endswith('.json'): |
|
|
return parse_json_chat(file_content) |
|
|
else: |
|
|
st.error("Unsupported file format. Please upload a .json file.") |
|
|
return None |
|
|
|
|
|
|
|
|
def add_imported_chat_to_history(chat_data: Dict[str, Any]): |
|
|
""" |
|
|
Add imported chat to session state history |
|
|
""" |
|
|
if not chat_data or not chat_data.get('messages'): |
|
|
st.error("No valid chat data to import") |
|
|
return False |
|
|
|
|
|
|
|
|
original_name = chat_data['chat_name'] |
|
|
existing_names = [chat['chat_name'] for chat in st.session_state.get('history_chats', [])] |
|
|
|
|
|
if original_name in existing_names: |
|
|
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') |
|
|
chat_data['chat_name'] = f"{original_name} (Imported {timestamp})" |
|
|
|
|
|
|
|
|
st.session_state['history_chats'].append(chat_data) |
|
|
|
|
|
|
|
|
st.session_state['current_chat_index'] = 0 |
|
|
st.session_state['current_chat_id'] = chat_data['chat_id'] |
|
|
st.session_state['messages'] = chat_data['messages'] |
|
|
|
|
|
return True |
|
|
|
|
|
|
|
|
def create_import_widget(): |
|
|
""" |
|
|
Create a file upload widget for importing chat history (JSON format only) |
|
|
""" |
|
|
st.markdown("**π Import Chat History:**") |
|
|
|
|
|
uploaded_file = st.file_uploader( |
|
|
"Choose a chat history file", |
|
|
type=['json'], |
|
|
help="Upload a previously exported chat history file (.json format only)" |
|
|
) |
|
|
|
|
|
if uploaded_file: |
|
|
if st.button("π₯ Import Chat"): |
|
|
with st.spinner("Importing chat history..."): |
|
|
chat_data = import_chat_from_file(uploaded_file) |
|
|
if chat_data: |
|
|
success = add_imported_chat_to_history(chat_data) |
|
|
if success: |
|
|
st.success(f"β
Successfully imported chat: {chat_data['chat_name']}") |
|
|
st.rerun() |
|
|
else: |
|
|
st.error("β Failed to import chat") |
|
|
else: |
|
|
st.error("β Invalid file format or content") |