File size: 2,002 Bytes
0a533a6
c310176
cd93ac8
f1a9d95
c310176
0a533a6
c310176
 
 
 
 
 
0a533a6
cd93ac8
0a533a6
 
c310176
 
 
 
 
 
0a533a6
cd93ac8
 
 
 
 
 
 
 
 
2e81294
651d41d
c310176
 
 
 
 
cd93ac8
0a533a6
244d820
 
 
 
 
 
 
c79e14b
0a533a6
b855aa8
c310176
0a533a6
 
 
 
 
c79e14b
 
0a533a6
c79e14b
a0df0a6
0a533a6
 
 
 
 
c310176
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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://olivier-truong-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)

def main():
    st.title("Near Instant Question Answering")
    st.write("Limitations: May generate unhelpful or outdated content, no chat history.")

    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()