Spaces:
Runtime error
Runtime error
Download app.py from borutokarma123/US_Army_RAG_Knowledge_Assistant: direct link, hf CLI and curl.
- Browser
- Download file 2.86 kB
-
https://huggingface.co/spaces/borutokarma123/US_Army_RAG_Knowledge_Assistant/resolve/main/app.py
- Command line
-
hf download hf://spaces/borutokarma123/US_Army_RAG_Knowledge_Assistant/app.py
-
curl -L -o app.py https://huggingface.co/spaces/borutokarma123/US_Army_RAG_Knowledge_Assistant/resolve/main/app.py
2.86 kB
| import os | |
| import faiss | |
| import pickle | |
| import numpy as np | |
| import streamlit as st | |
| from sentence_transformers import SentenceTransformer | |
| from groq import Groq | |
| # ==== Setup ==== | |
| st.set_page_config(page_title="πͺ US Army RAG Assistant", layout="wide") | |
| # ==== Connect to Groq ==== | |
| groq_api_key = os.environ.get("api_key5") | |
| client = Groq(api_key=groq_api_key) | |
| # ==== Load FAISS index and metadata ==== | |
| index = faiss.read_index("army_qa_faiss.index") | |
| with open("army_qa_metadata.pkl", "rb") as f: | |
| metadata = pickle.load(f) | |
| encoder = SentenceTransformer("all-MiniLM-L6-v2") | |
| # ==== RAG Function ==== | |
| def rag_query(user_query, top_k=5): | |
| query_embedding = encoder.encode([user_query]) | |
| query_embedding = np.array(query_embedding).astype("float32") | |
| distances, indices = index.search(query_embedding, top_k) | |
| context_chunks = [] | |
| for i in indices[0]: | |
| if 0 <= i < len(metadata): | |
| row = metadata[i] | |
| question = row["question"] | |
| context_chunks.append(f"Q: {question}\nA: [answer from database]") | |
| context = "\n---\n".join(context_chunks) | |
| prompt = f"""You are a highly trained assistant with access to US Army Field Manual knowledge. | |
| Use the context below to answer the user's question. | |
| Context: | |
| {context} | |
| User Question: | |
| {user_query} | |
| Answer:""" | |
| response = client.chat.completions.create( | |
| model="deepseek-r1-distill-llama-70b", | |
| messages=[{"role": "user", "content": prompt}] | |
| ) | |
| return response.choices[0].message.content.strip() | |
| # ==== Streamlit UI ==== | |
| st.title("πͺ US Army RAG Assistant") | |
| st.markdown("Ask tactical questions based on **US Army Field Manual** knowledge.") | |
| st.divider() | |
| recommended_questions = [ | |
| "What are the fundamentals of offensive operations?", | |
| "How does the Army define mission command?", | |
| "What is the purpose of a support zone?", | |
| "How do units prepare for degraded and denied environments (D3SOE)?", | |
| "Explain the role of reconnaissance in the offense." | |
| ] | |
| st.markdown("π‘ **Recommended Questions:**") | |
| for q in recommended_questions: | |
| st.markdown(f"- {q}") | |
| # Chat state | |
| if "chat_history" not in st.session_state: | |
| st.session_state.chat_history = [] | |
| # ==== Input ==== | |
| user_input = st.text_input("Your question", placeholder="Type your question here...") | |
| if st.button("Submit") and user_input: | |
| if user_input.strip().lower() == "terminate": | |
| st.session_state.chat_history.append((user_input, "π Goodbye, soldier. Stay sharp!")) | |
| else: | |
| answer = rag_query(user_input) | |
| st.session_state.chat_history.append((user_input, answer)) | |
| if st.button("Clear Chat"): | |
| st.session_state.chat_history = [] | |
| # ==== Display Chat ==== | |
| for i, (user, bot) in enumerate(st.session_state.chat_history): | |
| st.markdown(f"**You:** {user}") | |
| st.markdown(f"**Assistant:** {bot}") | |
| st.divider() | |