Download chat_database.py from anuragsingh922/VocRT: direct link, hf CLI and curl.
- Browser
- Download file 8.34 kB
-
https://huggingface.co/anuragsingh922/VocRT/resolve/main/chat_database.py
- Command line
-
hf download hf://anuragsingh922/VocRT/chat_database.py
-
curl -L -o chat_database.py https://huggingface.co/anuragsingh922/VocRT/resolve/main/chat_database.py
8.34 kB
| import pickle | |
| import os | |
| from datetime import datetime, timezone | |
| FILE_PATH = "chat_history.pkl" | |
| if not os.path.exists(FILE_PATH): | |
| with open(FILE_PATH, "wb") as file: | |
| pickle.dump({}, file) | |
| async def save_context_detail(session_id, name, title, summary, categories): | |
| try: | |
| try: | |
| with open(FILE_PATH, "rb") as file: | |
| data = pickle.load(file) | |
| except (FileNotFoundError, EOFError): | |
| data = {} | |
| now = datetime.now(timezone.utc).isoformat() | |
| if session_id not in data: | |
| print("Session id not in data") | |
| data[session_id] = { | |
| "title": "New Chat", | |
| "createdAt": now, | |
| "lastUpdatedAt": now, | |
| "chat": [], | |
| "context": [], | |
| "prompt": "", | |
| } | |
| session = data.get(session_id) | |
| contexts = session.get("context", []) | |
| contexts.append({"name": name, "title": title, | |
| "summary": summary, "categories": categories}) | |
| data[session_id]["lastUpdatedAt"] = now | |
| with open(FILE_PATH, "wb") as file: | |
| pickle.dump(data, file) | |
| except Exception as e: | |
| print(f"Error saving context entry: {e}") | |
| def clear_context_detail(session_id): | |
| try: | |
| try: | |
| with open(FILE_PATH, "rb") as file: | |
| data = pickle.load(file) | |
| except (FileNotFoundError, EOFError): | |
| data = {} | |
| now = datetime.now(timezone.utc).isoformat() | |
| if session_id not in data: | |
| print("Session id not in data") | |
| return False | |
| data[session_id]["context"] = [] | |
| data[session_id]["lastUpdatedAt"] = now | |
| with open(FILE_PATH, "wb") as file: | |
| pickle.dump(data, file) | |
| except Exception as e: | |
| print(f"Error saving context entry: {e}") | |
| def save_chat_entry(session_id, role, transcript): | |
| try: | |
| try: | |
| with open(FILE_PATH, "rb") as file: | |
| data = pickle.load(file) | |
| except (FileNotFoundError, EOFError): | |
| data = {} | |
| now = datetime.now(timezone.utc).isoformat() | |
| if session_id not in data: | |
| print("Session id not in data") | |
| data[session_id] = { | |
| "title": "New Chat", | |
| "createdAt": now, | |
| "lastUpdatedAt": now, | |
| "chat": [], | |
| "context": [], | |
| "prompt": "", | |
| } | |
| messages = data[session_id]["chat"] | |
| if role == "user": | |
| messages.append({ | |
| "role": role, | |
| "transcript": transcript | |
| }) | |
| else: | |
| if messages and messages[-1]["role"] == "assistant": | |
| messages[-1]["transcript"] += " " + transcript | |
| else: | |
| messages.append({ | |
| "role": role, | |
| "transcript": transcript | |
| }) | |
| data[session_id]["lastUpdatedAt"] = now | |
| with open(FILE_PATH, "wb") as file: | |
| pickle.dump(data, file) | |
| except Exception as e: | |
| print(f"Error saving chat entry: {e}") | |
| def get_chat_history(session_id, limit=15): | |
| try: | |
| with open(FILE_PATH, "rb") as file: | |
| data = pickle.load(file) | |
| session = data.get(session_id) | |
| if not session or not isinstance(session, dict): | |
| return [] | |
| # or "messages" if you’ve standardized on that | |
| # messages = session.get("chat", []) | |
| # message_history = [] | |
| # for entry in messages: | |
| # role = entry.get('role', '') | |
| # transcript = entry.get('transcript', '') | |
| # if role and transcript: | |
| # message_history.append({"role": role, "content": transcript}) | |
| # return message_history[-15:] | |
| tail = session.get("chat", [])[-limit:] | |
| chat_history = [ | |
| {"role": msg["role"], "content": msg["transcript"]} | |
| for msg in tail | |
| if msg.get("role") and msg.get("transcript") | |
| ] | |
| user_prompt = session.get("prompt", "") | |
| return chat_history, user_prompt | |
| except (FileNotFoundError, pickle.UnpicklingError) as e: | |
| print(f"Error reading or parsing the file: {e}") | |
| return [] | |
| except Exception as e: | |
| print(f"Unexpected error: {e}") | |
| return [] | |
| def get_all_chat_details(): | |
| try: | |
| with open(FILE_PATH, "rb") as file: | |
| data = pickle.load(file) | |
| chat_list = [] | |
| for session_id, chat in data.items(): | |
| if not isinstance(chat, dict): | |
| continue | |
| messages = [] | |
| for entry in chat.get("chat", []): | |
| role = entry.get("role", "") | |
| transcript = entry.get("transcript", "") | |
| if role and transcript: | |
| messages.append({ | |
| "role": role, | |
| "content": transcript | |
| }) | |
| chat_list.append({ | |
| "id": session_id, | |
| "title": chat.get("title", "Untitled"), | |
| "createdAt": chat.get("createdAt"), | |
| "lastUpdatedAt": chat.get("lastUpdatedAt"), | |
| "chat": messages, | |
| "context": chat.get("context", []), | |
| "prompt": chat.get("prompt", ""), | |
| }) | |
| return chat_list | |
| except (FileNotFoundError, EOFError): | |
| return [] | |
| except Exception as e: | |
| print(f"Error reading chats: {e}") | |
| return [] | |
| def create_chat_entry(session_id): | |
| try: | |
| # Load existing data or initialize an empty dict | |
| try: | |
| with open(FILE_PATH, "rb") as file: | |
| data = pickle.load(file) | |
| except (FileNotFoundError, EOFError): | |
| data = {} | |
| now = datetime.now(timezone.utc).isoformat() | |
| if session_id not in data: | |
| data[session_id] = { | |
| "title": "New Chat", | |
| "createdAt": now, | |
| "lastUpdatedAt": now, | |
| "chat": [], | |
| "context": [], | |
| } | |
| # Save the updated data back to file | |
| with open(FILE_PATH, "wb") as file: | |
| pickle.dump(data, file) | |
| return True | |
| except Exception as e: | |
| print(f"Error create chat entry : {e}") | |
| return False | |
| def rename_chat_title(session_id, title): | |
| try: | |
| try: | |
| with open(FILE_PATH, "rb") as file: | |
| data = pickle.load(file) | |
| except (FileNotFoundError, EOFError): | |
| data = {} | |
| if session_id not in data: | |
| return False | |
| data[session_id]["title"] = title | |
| data[session_id]["lastUpdatedAt"] = datetime.now( | |
| timezone.utc).isoformat() | |
| with open(FILE_PATH, "wb") as file: | |
| pickle.dump(data, file) | |
| print(f"Renamed chat: {data[session_id]}") | |
| return True | |
| except Exception as e: | |
| print(f"Error renaming chat title: {e}") | |
| return False | |
| def save_system_prompt(session_id, prompt): | |
| try: | |
| try: | |
| with open(FILE_PATH, "rb") as file: | |
| data = pickle.load(file) | |
| except (FileNotFoundError, EOFError): | |
| data = {} | |
| now = datetime.now(timezone.utc).isoformat() | |
| if session_id not in data: | |
| return False | |
| data[session_id]["prompt"] = prompt | |
| data[session_id]["lastUpdatedAt"] = now | |
| with open(FILE_PATH, "wb") as file: | |
| pickle.dump(data, file) | |
| print(f"Saved Prompt : {data[session_id]}") | |
| return True | |
| except Exception as e: | |
| print(f"Error saving context entry: {e}") | |
| return False | |
| def delete_chat(session_id): | |
| try: | |
| try: | |
| with open(FILE_PATH, "rb") as file: | |
| data = pickle.load(file) | |
| except (FileNotFoundError, EOFError): | |
| data = {} | |
| if session_id not in data: | |
| return True | |
| data.pop(session_id) | |
| with open(FILE_PATH, "wb") as file: | |
| pickle.dump(data, file) | |
| if session_id not in data: | |
| return True | |
| return False | |
| except Exception as e: | |
| print(f"Error deleting chat: {e}") | |
| return False | |