File size: 3,105 Bytes
1969750
 
 
 
 
 
 
 
 
f1cb8b4
1969750
 
 
7fc693f
 
 
1969750
 
 
 
 
 
 
464f7ab
1969750
 
e4a98dc
 
 
1969750
 
 
 
 
 
e4a98dc
1969750
 
 
 
 
 
 
85ecbdd
1969750
 
 
 
7fc693f
1969750
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4b97fee
1969750
 
 
4b97fee
1969750
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e4a98dc
 
1969750
 
 
 
 
 
 
 
60be797
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import os
from typing import Optional, Tuple

import gradio as gr
from query_data import get_chain
from threading import Lock
import pinecone
from langchain.vectorstores import Chroma, Pinecone
from langchain.embeddings.openai import OpenAIEmbeddings


embeddings = OpenAIEmbeddings()

PINECONE_API_KEY = os.getenv("PINECONE_API_KEY")
PINECONE_API_ENV = os.getenv("PINECONE_API_ENV")
PINECONE_INDEX = os.getenv("PINECONE_INDEX")

# initialize pinecone
pinecone.init(
    api_key=PINECONE_API_KEY,  # find at app.pinecone.io
    environment=PINECONE_API_ENV  # next to api key in console
)

index_name = PINECONE_INDEX
vectorstore = Pinecone.from_existing_index(index_name=index_name, embedding=embeddings)

chain = get_chain(vectorstore)


class ChatWrapper:

    def __init__(self):
        self.lock = Lock()

    def __call__(
            self, inp: str, history: Optional[Tuple[str, str]]
    ):
        """Execute the chat functionality."""
        self.lock.acquire()
        try:
            history = history or []
            # If chain is None, that is because no API key was provided.
            # if chain is None:
            #    history.append((inp, "Please paste your OpenAI key to use"))
            #     return history, history
            # Set OpenAI key

            import openai
            openai.api_key = os.getenv("OPENAI_API_KEY")
            # Run chain and append input.
            output = chain({"question": inp, "chat_history": history})["answer"]
            history.append((inp, output))
        except Exception as e:
            raise e
        finally:
            self.lock.release()
        return history, history


chat = ChatWrapper()

block = gr.Blocks(css=".gradio-container {background-color: #111827};footer "
                      "{visibility: hidden};")

with block:
    # with gr.Row():
    #     openai_api_key_textbox = gr.Textbox(
    #         placeholder="",
    #         show_label=False,
    #         lines=1,
    #         type="password",
    #         value=""
    #     )

    chatbot = gr.Chatbot().style(height=500)

    with gr.Row():
        message = gr.Textbox(
            label="What's your question?",
            placeholder="Ask questions about reports",
            lines=1,
        )
        submit = gr.Button(value="Send", variant="secondary").style(full_width=False)

    # gr.Examples(
    #     examples=[
    #         "What did the president say about Kentaji Brown Jackson",
    #         "Did he mention Stephen Breyer?",
    #         "What was his stance on Ukraine",
    #     ],
    #     inputs=message,
    # )

    state = gr.State()
    agent_state = gr.State()
    submit.click(chat, inputs=[message, state], outputs=[chatbot, state])
    message.submit(chat, inputs=[message, state], outputs=[chatbot, state])

    # openai_api_key_textbox.change(
    #     set_openai_api_key,
    #     inputs=[openai_api_key_textbox],
    #     outputs=[agent_state],
    # )

# block.launch(debug=True)
block.launch(debug=True, auth=('admin', 'Twimbit@2019'), auth_message='enter username password to proceed further')