case_study / app.py
iclalcetin's picture
Rename aappppp.py to app.py
733b6de verified
from langchain.vectorstores.chroma import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import DirectoryLoader, TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import SentenceTransformerEmbeddings
import gradio as gr
import os
from langchain.embeddings import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
from dotenv import load_dotenv
load_dotenv()
def create_embeddings_from_txt(file_path: str) -> None:
loader = loader = TextLoader(file_path=file_path)
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
texts = text_splitter.split_documents(documents)
embeddings = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
persist_directory = 'db'
vectordb = Chroma.from_documents(
documents=texts,
embedding=embeddings,
persist_directory=persist_directory
)
vectordb.persist()
def create_conversation() -> ConversationalRetrievalChain:
persist_directory = 'db'
embeddings = OpenAIEmbeddings(
openai_api_key=os.getenv('OPENAI_API_KEY')
)
db = Chroma(
persist_directory=persist_directory,
embedding_function=embeddings
)
memory = ConversationBufferMemory(
memory_key='chat_history',
return_messages=False
)
qa = ConversationalRetrievalChain.from_llm(
llm=ChatOpenAI(),
chain_type='stuff',
retriever=db.as_retriever(),
memory=memory,
get_chat_history=lambda h: h,
verbose=True
)
return qa
file_path = "./shipping.txt"
create_embeddings_from_txt(file_path)
qa = create_conversation()
def add_text(history, text):
history = history + [(text, None)]
return history, ""
def bot(history):
res = qa(
{
'question': history[-1][0],
'chat_history': history[:-1]
}
)
history[-1][1] = res['answer']
return history
with gr.Blocks() as demo:
chatbot = gr.Chatbot([], elem_id="chatbot",
label='Document GPT')
with gr.Row():
with gr.Column(scale=0.80):
txt = gr.Textbox(
show_label=False,
placeholder="Enter text and press enter",
)
with gr.Column(scale=0.10):
submit_btn = gr.Button(
'Submit',
variant='primary'
)
with gr.Column(scale=0.10):
clear_btn = gr.Button(
'Clear',
variant='stop'
)
txt.submit(add_text, [chatbot, txt], [chatbot, txt]).then(
bot, chatbot, chatbot
)
submit_btn.click(add_text, [chatbot, txt], [chatbot, txt]).then(
bot, chatbot, chatbot
)
clear_btn.click(lambda: None, None, chatbot, queue=False)
if __name__ == '__main__':
demo.launch()