Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from llm import GeminiModel, api_key as SECRET_KEY | |
| from langchain_google_genai import GoogleGenerativeAIEmbeddings | |
| from langchain_community.vectorstores import FAISS | |
| class RAGEnabledModel: | |
| def __init__(self): | |
| self.prompt = """ | |
| You are a helpful chat assistant who provides information about the public statements | |
| and policy positions of different political parties in Germany for the upcoming 2025 elections. | |
| When the user asks a question, you should respond in the same language they used | |
| (e.g., if they ask in German, respond in German; if in English, respond in English). | |
| Focus on factual information regarding each party’s stance, referencing relevant | |
| policy areas such as economy, immigration, healthcare, the environment, and so on. | |
| Stay neutral and objective, providing factual information without bias or personal | |
| political opinions. Search online to find up-to-date latest information. | |
| """ | |
| # Load FAISS vector store | |
| self.vector_db = FAISS.load_local("./faiss_index", GoogleGenerativeAIEmbeddings(model="models/embedding-001", google_api_key=SECRET_KEY),allow_dangerous_deserialization=True) | |
| # Instantiate the GeminiModel (replace with actual import or code) | |
| self.model = GeminiModel() | |
| def retrieve_documents(self, query): | |
| """Retrieve relevant documents from the FAISS vector database.""" | |
| results = self.vector_db.similarity_search(query, k=5) | |
| return results | |
| def predict(self, text, history): | |
| """Perform RAG-enabled prediction.""" | |
| # Step 1: Retrieve relevant documents | |
| documents = self.retrieve_documents(text) | |
| # Step 2: Incorporate retrieved documents into the prompt | |
| context = "\n\n".join([doc.page_content for doc in documents]) | |
| augmented_prompt = f"{self.prompt}\n\nRelevant Context:\n{context}\n\nUser Query: {text}" | |
| # Step 3: Use the model for prediction | |
| outp, pricing = self.model.predict( | |
| augmented_prompt, | |
| history=history, | |
| grounding_threshold=0.15 | |
| ) | |
| return outp | |
| #################################### | |
| # 2) Streamlit application layout # | |
| #################################### | |
| def main(): | |
| st.set_page_config(page_title="German 2025 Elections - Political Parties", layout="centered") | |
| st.title("German Political Parties' Statements for the 2025 Elections") | |
| # Initialize the conversation history | |
| if "history" not in st.session_state: | |
| # We'll store (speaker, message) tuples in this list | |
| st.session_state.history = [] | |
| # Create an instance of our RegularModel | |
| model = RAGEnabledModel() | |
| ############################# | |
| # 3) Chat-style input form # | |
| ############################# | |
| with st.form(key="user_form"): | |
| user_input = st.text_input( | |
| "You:", | |
| placeholder="Ask about a political party's stance on any policy in Germany (2025 elections)..." | |
| ) | |
| submitted = st.form_submit_button("Send") | |
| ########################## | |
| # 4) Handle user submit # | |
| ########################## | |
| if submitted and user_input: | |
| # Save the user message | |
| st.session_state.history.append(("user", user_input)) | |
| # Instruct or rely on your model to answer in the user's language | |
| # Optionally, you could do some language detection and pass it along: | |
| # For example, using langdetect: | |
| # from langdetect import detect | |
| # user_lang = detect(user_input) | |
| # instruction = f"Please reply in {user_lang}." | |
| # combined_input = f"{instruction}\n\nUser asked: {user_input}" | |
| # But if your model can automatically detect & respond in the same language, | |
| # you can simply pass the user_input. | |
| response = model.predict(user_input, st.session_state.history) | |
| # Save the model's response | |
| st.session_state.history.append(("bot", response)) | |
| ################################## | |
| # 5) Display the chat messages # | |
| ################################## | |
| for speaker, message in st.session_state.history: | |
| if speaker == "user": | |
| st.markdown(f"**You**: {message}") | |
| else: | |
| st.markdown(f"**Assistant**: {message}") | |
| ################################### | |
| # 6) Entry point for the app # | |
| ################################### | |
| if __name__ == "__main__": | |
| main() | |