fast-answer / app.py
wop's picture
Update app.py
3d1a501 verified
import streamlit as st
from pymongo import MongoClient
from gradio_client import Client
import time
import os
# Connect to MongoDB
password = os.getenv("password")
uri = f"mongodb+srv://E:{password}@cluster0.rvt8psd.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0"
client = MongoClient(uri)
db = client["instantqa"]
collection = db["instantqa"]
client_endpoint = "https://skier8402-mistral-super-fast.hf.space/"
def ask_question(question):
# Check if the question exists in the database
query = {"question": question}
result = collection.find_one(query)
if result:
return result["answer"]
else:
client = Client(client_endpoint)
result = client.predict(
question,
0.9, # Temperature
2000, # Max new tokens
0.9, # Top-p (nucleus sampling)
1.2, # Repetition penalty
api_name="/chat"
)
answer = result
answer = answer[:-4]
# Store the question-answer pair in MongoDB
data = {"question": question, "answer": answer}
collection.insert_one(data)
return answer
def typewriter(text: str, speed: int):
tokens = text.split()
container = st.empty()
for index in range(len(tokens) + 1):
curr_full_text = " ".join(tokens[:index])
container.markdown(curr_full_text)
time.sleep(1 / speed)
# JavaScript to scroll to the bottom of the page while typing
st.write(f"<script>window.scrollTo(0, document.body.scrollHeight);</script>", unsafe_allow_html=True)
def main():
st.title("Near Instant Question Answering")
st.write("Limitations: May generate unhelpful or outdated content, no chat history.")
st.write("Warning: Do not share any personal/public information.")
question = st.text_input("Ask your question:")
if st.button("Ask"):
if question:
answer_placeholder = st.empty()
answer_placeholder.write("Thinking...")
answer = ask_question(question)
answer_placeholder.empty()
typewriter("Answer: " + answer, speed=300)
else:
st.write("Please enter a question.")
if __name__ == "__main__":
main()