Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/anurag-1a_chatdoc.json
T

1 line
6.8 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "anurag-1a/chatdoc", "files": {"app.py": {"3b0c73d12f4e11df0260e5c09baaffb99370128a": {"t": 1785674397.0148282, "n": 6354, "h": "cc79176b612a9d63", "c": "import os\nimport re\nimport streamlit as st\nfrom modules.vectordb_manager import VectorStoreManager\nfrom modules.groq_chat import ChatWithGroq\nfrom modules.history_manager import ChatHistoryManager\n\nst.set_page_config(page_title=\"ChatDoc with Groq\", layout=\"wide\")\n\n# --- Initialize memory ---\nif \"chat_history\" not in st.session_state:\n st.session_state[\"chat_history\"] = []\nif \"chatbot_context\" not in st.session_state:\n st.session_state[\"chatbot_context\"] = None\nif \"selected_history\" not in st.session_state:\n st.session_state[\"selected_history\"] = \"New Session\"\nif \"active_session_id\" not in st.session_state:\n st.session_state[\"active_session_id\"] = \"New Session\"\nif \"last_uploaded_files\" not in st.session_state:\n st.session_state[\"last_uploaded_files\"] = []\n# Handle session switch or uploaded files to reset chatbot context\nif \"file_uploader_key\" not in st.session_state:\n st.session_state.file_uploader_key = \"file_uploader_0\"\n# When resetting (new chat or session change), increment key to reset uploader\ndef reset_uploader():\n if \"file_uploader_key\" in st.session_state:\n # Increment key to force Streamlit reset file uploader\n key_number = int(st.session_state.file_uploader_key.split(\"_\")[-1])\n st.session_state.file_uploader_key = f\"file_uploader_{key_number + 1}\"\n else: \n st.session_state.file_uploader_key = \"file_uploader_0\"\n\n# --- Login: Enter Groq API Key ---\nif \"groq_api_key\" not in st.session_state:\n st.title(\"🔐 Login to ChatDOC\")\n api_key = st.text_input(\"Enter your Groq API Key\", type=\"password\")\n if st.button(\"Login\"):\n if api_key.startswith(\"gsk_\"):\n st.session_state[\"groq_api_key\"] = api_key\n st.rerun()\n else:\n st.error(\"Please enter a valid Groq API key.\")\n st.stop()\n\n# Managers \nvector_manager = VectorStoreManager()\nhistory_manager = ChatHistoryManager()\n\n# Streamlit App Title\nst.title(\"📄 Chat with your Files(PDFs/txt)\")\n\n# Streamlit Sidebar: Load old sessions\nwith st.sidebar:\n st.header(\"📜 Chat Sessions\")\n if st.button(\"➕ New Chat\", use_container_width=True):\n # Save current chat session before reset\n if st.session_state.get(\"chat_history\"):\n history_manager.history = st.session_state[\"chat_history\"]\n saved_path = history_manager.save()\n st.toast(f\"Previous session saved to: {saved_path}\")\n # Reset state for new session\n st.session_state[\"chat_history\"] = []\n st.session_state[\"chatbot_context\"] = None\n st.session_state[\"selected_history\"] = \"New Session\"\n st.session_state[\"active_session_id\"] = \"New Session\"\n st.session_state[\"last_uploaded_files\"] = []\n reset_uploader()\n st.rerun()\n try:\n history_files = [f for f in os.listdir(\"chat_history\") if f.endswith(\".json\")]\n except FileNotFoundError:\n history_files = []\n\n selected_history = st.selectbox(\"Choose Session\", [\"New Session\"] + history_files)\n st.session_state[\"selected_history\"] = selected_history\n\n\n\n\nuploaded_files = st.file_uploader(\n \"Upload PDF or TXT files\", \n type=[\"pdf\", \"txt\"], \n accept_multiple_files=True, \n key=st.session_state.file_uploader_key\n)\nfile_names = [f.name for f in uploaded_files] if uploaded_files else []\n\n# Detect state switch or new document upload\nsession_changed = st.session_state[\"selected_history\"] != st.session_state[\"active_session_id\"]\nfile_changed = file_names != st.session_state[\"last_uploaded_files\"]\n\nif session_changed or file_changed:\n st.session_state[\"chatbot_context\"] = None\n st.session_state[\"chat_history\"] = []\n st.session_state[\"last_uploaded_files\"] = file_names\n st.session_state[\"active_session_id\"] = st.session_state[\"selected_history\"]\n\n# Load selected chat history\nif st.session_state[\"selected_history\"] != \"New Session\":\n session_name = st.session_state[\"selected_history\"].replace(\".json\", \"\")\n loaded_history = history_manager.load(session_name)\n st.session_state[\"chat_history\"] = loaded_history\n st.session_state[\"chatbot_context\"] = None\n load_msg = st.empty()\n load_msg.info(f\"📄 {selected_history} Loaded\")\n\n# Create new chatbot\nif st.session_state[\"selected_history\"] == \"New Session\" and uploaded_files:\n if st.session_state[\"chatbot_context\"] is None:\n with st.spinner(\"📖 Reading and indexing documents...\"):\n retriever = vector_manager.create_or_load_vectorstore(uploaded_files)\n chatbot = ChatWithGroq(retriever, groq_api_key=st.session_state[\"groq_api_key\"])\n st.session_state[\"chatbot_context\"] = chatbot\n \n\n\n# Left Side Chat Block \nchatbot = st.session_state.get(\"chatbot_context\", None)\n\nif chatbot and st.session_state[\"selected_history\"] == \"New Session\":\n user_question = st.chat_input(\"Ask anything from the uploaded docs...\")\n\n if user_question:\n with st.spinner(\"💡 Thinking...\"):\n response = chatbot.ask(user_question)\n raw_answer = response[\"answer\"]\n\n final_answer = raw_answer.strip()\n\n st.session_state[\"chat_history\"].append({\n \"user\": user_question,\n \"bot\": raw_answer,\n #\"reasoning\": reasoning,\n \"answer\": final_answer\n })\n\n# View chat history \nif st.session_state.get(\"chat_history\"):\n for msg in st.session_state[\"chat_history\"]:\n with st.chat_message(\"user\"):\n st.markdown(msg[\"user\"])\n with st.chat_message(\"assistant\"):\n if msg.get(\"reasoning\"):\n with st.expander(\"🧠 LLM Thinking\", expanded=False):\n st.markdown(f\"{msg.get(\"reasoning\") or 'No reasoning provided.'}\")\n st.markdown(msg.get(\"answer\") or msg[\"bot\"])\n\n\n# Saving current session \nif st.session_state[\"selected_history\"] == \"New Session\" and st.session_state[\"chat_history\"]:\n st.markdown(\"---\")\n st.subheader(\"💾 Save this session\")\n\n custom_name = st.text_input(\"Optional filename (e.g. receipts.json):\", key=\"save_name\")\n\n if st.button(\"✅ Save Chat\", use_container_width=True):\n filename = custom_name.strip() if custom_name.endswith(\".json\") else None\n history_manager.history = st.session_state[\"chat_history\"]\n path = history_manager.save(name=filename)\n st.success(f\"📁 Session saved to `{path}`\")"}}}}