File size: 4,098 Bytes
89a81e4
 
 
 
 
 
 
 
 
 
 
 
 
 
fdd972b
89a81e4
cf92df6
 
89a81e4
 
cf92df6
89a81e4
 
 
 
 
 
 
 
 
 
 
 
 
cf92df6
 
 
89a81e4
 
 
 
cf92df6
 
fdd972b
cf92df6
 
 
 
89a81e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cf92df6
89a81e4
 
 
 
 
 
 
fdd972b
 
 
 
 
 
 
 
89a81e4
 
 
 
cf92df6
 
 
 
 
 
 
 
 
fdd972b
 
 
 
 
 
89a81e4
 
 
 
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
import os
from dotenv import load_dotenv
from PyPDF2 import PdfReader
import openai
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.vectorstores.pinecone import Pinecone
#from langchain import LLMChain
from langchain.chains import ConversationalRetrievalChain
from langchain.llms import OpenAI
from langchain.memory import ConversationBufferMemory
import streamlit as st
import os
from elevenlabs import generate

def db(texts,text_splitter,api):
    
    chunks = text_splitter.split_text(texts)
    embeddings = OpenAIEmbeddings()
    db = Chroma.from_texts(chunks, embeddings)
    retriever = db.as_retriever(search_type="similarity", search_kwargs={"k":2})
    memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
    qa = ConversationalRetrievalChain.from_llm(llm=OpenAI(temperature=0), retriever=retriever, chain_type="refine",memory=memory)
    return qa

def ai(prompt):
    file = open("save.txt","r")
    system_prompt = str(file.read()) 
    print(system_prompt)
    file.close()
    #prompt=system_prompt+str(": question is :")+prompt
    result = qa({"question": prompt,  "chat_history": chat_history})
    return result["answer"]
def set_environment_variable(api_key):
    # Set the environment variable for the OpenAI API key
    os.environ["OPENAI_API_KEY"] = api_key
def main():
    global qa, chat_history
    placeholder=st.empty()
    placeholder.empty()
    placeholder.title("your openai api key")
    global api
    api=st.text_input("enter here")
    if st.button("Load API Key"):
        # Set the environment variable with the provided API key
        set_environment_variable(api)
        st.success("API key loaded successfully!")
    placeholder.title("Upload or Chat PDF")
    #st.header("PDF/URL QA")
    #global system_prompt
    names = ['Upload', 'Random talk']
    page = st.radio('Format', names)

    if page == 'Upload':
        pdf = st.file_uploader("Upload your PDF", type="pdf")
        if pdf is not None:
            #print(pdf)
            pdf_reader = PdfReader(pdf)
            texts = ""
            for page in pdf_reader.pages:
                texts += page.extract_text()
            text_splitter = CharacterTextSplitter(
            separator="\n",
            chunk_size = 1000,
            chunk_overlap = 0
        )
            qa=db(texts,text_splitter,api)
            chat_history = []
            st.header("PDF/URL QA")
            query = st.text_input("Ask a question in PDF")
            if query:
                output = ai(query)
                chat_history=chat_history.append(query)
                st.write(output)
                # set_api_key("<YOUR_API_KEY>") # Check the guide on how to get a free API key: https://docs.elevenlabs.io/authentication/01-xi-api-key 
                XI_API_KEY = "<xi-api-key>"
                audio = generate(
                    text=output,
                    voice="Bella"
                )
                st.audio(audio)


    elif page == 'Random talk':
            chat_history=[]
            st.header("Start Chatting")
            message=st.text_input("Your message")
            if st.button('reply'):
                prompt = "\"Act like a personal assistant. You can respond to questions, translate sentences, summarize news, and give recommendations. " + message + "\""
                # Call the OpenAI Api to process our prompt
                openai_response = openai.Completion.create(model="text-davinci-003", prompt=prompt,max_tokens=4000)
                print("openai response:", openai_response)
                # Parse the response to get the response text for our prompt
                response_text = openai_response.choices[0].text
                st.write( response_text)
                XI_API_KEY = "<xi-api-key>"
                audio = generate(
                    text=response_text,
                    voice="Bella"
                )
                st.audio(audio)


if __name__ == "__main__":
    main()