File size: 2,521 Bytes
5f17ff4
e36677b
6d58f1b
 
5f17ff4
 
 
6d58f1b
cf480d4
e36677b
5f17ff4
ee0e466
 
5f17ff4
8a9a9c2
12a5159
 
e36677b
cf480d4
 
 
 
 
12a5159
 
cf480d4
6d58f1b
 
 
cf480d4
6d58f1b
cf480d4
6d58f1b
 
cf480d4
6d58f1b
 
 
 
 
cf480d4
6d58f1b
 
 
 
 
5f17ff4
6d58f1b
cf480d4
6d58f1b
 
 
5f17ff4
6d58f1b
cf480d4
6d58f1b
 
 
 
cf480d4
5f17ff4
6d58f1b
5f17ff4
6d58f1b
5f17ff4
cf480d4
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
import openai
import streamlit as st
import os
import time
from dotenv import load_dotenv
load_dotenv()
st.set_page_config(page_title="Pak Case Law ChatBot")
st.header("Welcome To Pakistani AI Lawyer!")
st.markdown("Currently the ChatBot is taking content only from this [file.](http://kpcode.kp.gov.pk/uploads/1964_35_THE_WEST_PAKISTAN_FAMILY_COURTS_ACT_1964.pdf)")

class OpenAIClient:
    def __init__(self):
        self.client = openai.OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
        self.thread_id = None
        self.file_id = ["file-Anvyhz2k0puV0NCjWH8mGsuk"]
        self.assistant_id = "asst_Z7pj5QGUjiAlVpJzqsX2SJkg"
        self.run_id = "run_A5wq14ZMQXBpaDnULFPky5Bb"

    def create_thread_id(self):
        if "thread_id" not in st.session_state:
            _id = self.client.beta.threads.create().id
            st.session_state["thread_id"] = _id
        
    def main(self, user_message):
        message = self.client.beta.threads.messages.create(
            st.session_state.get("thread_id"),
            role="user",
            content=user_message,
        )
        _run = self.client.beta.threads.runs.create(thread_id=st.session_state.get("thread_id"), assistant_id=self.assistant_id)
        while True:
            run = self.client.beta.threads.runs.retrieve(thread_id=st.session_state.get("thread_id"),
                                                        run_id=_run.id).status

            time.sleep(3)
            if run == "completed":
                return self.get_response()
            elif run == "queued":
                continue
            elif run == "failed" or run == "cancelled" or run == "expired":
                return run
            elif run == "in_progress":
                continue
            else:
                break

    def get_response(self):
        messages = self.client.beta.threads.messages.list(
            thread_id=st.session_state.get("thread_id")
        )
        return messages.data[0].content[0].text.value

try:
    client = OpenAIClient()
    client.create_thread_id()
    user_input = st.text_input("Input: ", key='input')
    submit = st.button("Ask the Question")
    if submit:
        st.subheader("The Response is")
        st.write(client.main(user_input))
except openai.AuthenticationError:
    st.write("Your API key or token was invalid, expired, or revoked.")
except openai.RateLimitError:
    st.write("You have hit your assigned rate limit. Please try again in a few minutes.")
except Exception as e:
    st.write(e)