Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| from doc_loader import load_and_index_documents | |
| from qa_system import create_conversational_chain | |
| from ticket_system import create_github_issue | |
| # Hardcoded company info for answer signature | |
| COMPANY_NAME = "OpenSource Corp" | |
| COMPANY_EMAIL = "support@example.com" | |
| COMPANY_PHONE = "123-456-7890" | |
| st.set_page_config(page_title="Linux Docs Support Bot") | |
| st.title("🐧 Linux Documentation Support Chatbot") | |
| # Initialize vector store and QA chain once | |
| if "qa_chain" not in st.session_state: | |
| with st.spinner("Loading and indexing documents..."): | |
| vector_store = load_and_index_documents(data_dir="data") | |
| st.session_state.qa_chain = create_conversational_chain(vector_store) | |
| if "chat_history" not in st.session_state: | |
| st.session_state.chat_history = [] # will hold past messages | |
| # Chat input | |
| if user_input := st.chat_input("Ask a question about Linux docs:"): | |
| # Display user message | |
| st.chat_message("user").write(user_input) | |
| # Get answer from QA chain | |
| result = st.session_state.qa_chain( | |
| { | |
| "question": user_input, | |
| "chat_history": st.session_state.chat_history | |
| } | |
| ) | |
| answer = result["answer"] | |
| source_docs = result.get("source_documents", []) | |
| # Display assistant answer | |
| st.chat_message("assistant").write(answer) | |
| st.write(f"**{COMPANY_NAME}** • {COMPANY_PHONE} • {COMPANY_EMAIL}") | |
| # Show citations under the message | |
| if source_docs: | |
| st.markdown("**Citations:**") | |
| for doc in source_docs: | |
| src = doc.metadata.get("source", "unknown") | |
| page = doc.metadata.get("page", "?") | |
| st.markdown(f"- [source: {src}, page {page}]") | |
| # Append the turn to chat history | |
| st.session_state.chat_history.append((user_input, answer)) | |
| # If answer indicates no relevant info, offer ticket creation | |
| if any(phrase in answer.lower() for phrase in ["i don’t know", "i don't know", "can't find", "cannot find"]): | |
| st.warning("It seems this question was not answered from the documentation.") | |
| with st.expander("Submit a Support Ticket"): | |
| with st.form("ticket_form", clear_on_submit=True): | |
| st.write("Please fill out the following fields to create a support ticket:") | |
| ticket_title = st.text_input("Ticket Title", placeholder="Short summary of the issue") | |
| user_name = st.text_input("Your Name") | |
| user_email = st.text_input("Your Email") | |
| ticket_description = st.text_area("Detailed Description of the Issue") | |
| submitted = st.form_submit_button("Submit Ticket") | |
| if submitted: | |
| if not ticket_title or not ticket_description: | |
| st.error("Title and description are required to submit a ticket.") | |
| else: | |
| # Build GitHub issue body | |
| issue_body = ( | |
| f"**Question:** {user_input}\n" | |
| f"**Name:** {user_name or 'Anonymous'}\n" | |
| f"**Email:** {user_email or 'Not provided'}\n" | |
| f"**Description:**\n{ticket_description}" | |
| ) | |
| try: | |
| issue_url = create_github_issue(ticket_title, issue_body) | |
| st.success(f"Ticket submitted successfully! [View Issue]({issue_url})") | |
| except Exception as e: | |
| st.error(f"Failed to create ticket: {e}") |