File size: 4,406 Bytes
2f0e211 d05ba12 2f0e211 3e93b01 2f0e211 3e93b01 2f0e211 d8804c0 e455307 895d964 d05ba12 d8804c0 2f0e211 41297e0 2f0e211 e455307 d8804c0 9c04c52 a08bac4 e8c47c5 a08bac4 2f0e211 d05ba12 2f0e211 d8804c0 895d964 00e09c1 d8804c0 e8c47c5 d8804c0 2f0e211 d05ba12 e8c47c5 d05ba12 e8c47c5 d05ba12 e455307 2f0e211 b91cab8 2f0e211 e8c47c5 2f0e211 b505ef9 a08bac4 2f0e211 bbb69a1 e455307 2f0e211 a08bac4 e455307 e8c47c5 a08bac4 2f0e211 e455307 2f0e211 e8c47c5 |
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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
import gradio as gr
import os
import time
import threading
from langchain.document_loaders import OnlinePDFLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.llms import OpenAI
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import ConversationalRetrievalChain
os.environ['ANTHROPIC_API_KEY'] = os.getenv("Your_Anthropic_API_Key")
os.environ['OPENAI_API_KEY'] = os.getenv("Your_API_Key")
# Global variable for tracking last interaction time
last_interaction_time = 0
# Initialize the Anthropic model instead of OpenAI
from anthropic import LanguageModel
anthropic_model = LanguageModel(api_key=os.environ['ANTHROPIC_API_KEY'], model="some_model")
def loading_pdf():
return "Working on the upload. Also, pondering the usefulness of sporks..."
def pdf_changes(pdf_doc):
try:
if pdf_doc is None:
return "No PDF uploaded."
loader = OnlinePDFLoader(pdf_doc.name)
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
texts = text_splitter.split_documents(documents)
# Replace this with your appropriate embeddings class
embeddings = OpenAIEmbeddings()
global db
db = Chroma.from_documents(texts, embeddings)
retriever = db.as_retriever()
global qa
qa = ConversationalRetrievalChain.from_llm(
llm=OpenAI(temperature=0.2, model_name="gpt-3.5-turbo"),
retriever=retriever,
return_source_documents=False
)
return "Ready"
except Exception as e:
return f"Error processing PDF: {e}"
def clear_data():
global qa
qa = None
return "Data cleared"
def add_text(history, text):
global last_interaction_time
last_interaction_time = time.time()
history = history + [(text, None)]
return history, ""
def bot(history):
response = infer_anthropic(history[-1][0], history) # Call the new infer function
sentences = ' \n'.join(response.split('. '))
formatted_response = f"**Bot:**\n\n{sentences}"
history[-1][1] = formatted_response
return history
def infer_anthropic(question, history):
chat_history = [(human, ai) for human, ai in history[:-1]]
query = question
result = anthropic_model.query(query, context=chat_history)
return result['answer']
def auto_clear_data():
global qa, last_interaction_time
if time.time() - last_interaction_time > 600:
qa = None
def periodic_clear():
while True:
auto_clear_data()
time.sleep(60)
threading.Thread(target=periodic_clear).start()
css = """
#col-container {max-width: 700px; margin-left: auto; margin-right: auto;}
"""
title = """
<div style="text-align: center;max-width: 700px;">
<h1>CauseWriter Chat with PDF • OpenAI</h1>
<p style="text-align: center;">Upload a .PDF from your computer, click the "Load PDF to LangChain" button, <br />
when everything is ready, you can start asking questions about the pdf. <br />
This version is set to store chat history and uses OpenAI as LLM.</p>
</div>
"""
with gr.Blocks(css=css) as demo:
with gr.Column(elem_id="col-container"):
gr.HTML(title)
with gr.Column():
pdf_doc = gr.File(label="Load a pdf", file_types=['.pdf'], type="file")
with gr.Row():
langchain_status = gr.Textbox(label="Status", placeholder="", interactive=False)
load_pdf = gr.Button("Convert PDF to Magic AI language")
clear_btn = gr.Button("Clear Data")
chatbot = gr.Chatbot([], elem_id="chatbot").style(height=450)
question = gr.Textbox(label="Question", placeholder="Type your question and hit Enter")
submit_btn = gr.Button("Send Message")
load_pdf.click(loading_pdf, None, langchain_status, queue=False)
load_pdf.click(pdf_changes, inputs=[pdf_doc], outputs=[langchain_status], queue=False)
clear_btn.click(clear_data, outputs=[langchain_status], queue=False)
question.submit(add_text, [chatbot, question], [chatbot, question]).then(
bot, chatbot, chatbot
)
submit_btn.click(add_text, [chatbot, question], [chatbot, question]).then(
bot, chatbot, chatbot
)
demo.launch() |