VDT / agent_gpt.py
CreatorPhan's picture
Upload 14 files
e011405
from langchain.document_loaders.unstructured import UnstructuredFileLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.schema import AIMessage, HumanMessage, SystemMessage, Document
import os
API_KEY = os.getenv("API_TOKEN")
print("API:", API_KEY)
class Agent:
def __init__(self, args=None) -> None:
self.embeddings = OpenAIEmbeddings(openai_api_key=API_KEY)
self.llm = ChatOpenAI(temperature=0.5, openai_api_key=API_KEY)
self.context_value = ""
self.use_context = False
def load_context(self, doc_path):
loader = UnstructuredFileLoader(doc_path.name)
print('Loading file:', doc_path.name)
self.documents = loader.load()
self.split()
return f"Using file from {doc_path.name}"
def split(self):
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(self.documents)
docsearch = Chroma.from_documents(texts, self.embeddings)
self.qa = RetrievalQA.from_chain_type(llm=self.llm, chain_type="stuff", retriever=docsearch.as_retriever())
print("Context updated")
self.use_context = True
def asking(self, prompt):
if self.use_context:
print("Answering with your context")
return self.qa.run(prompt)
else:
print("Answering without your context")
return self.llm([HumanMessage(content=prompt)]).content
def get_context(self, context):
self.context_value = context
self.documents = [Document(page_content=context, metadata={'source': ''})]
self.split()
self.use_context = True
def load_context_file(self, file):
print('Loading file:', file.name)
text = ''
for line in open(file.name, 'r', encoding='utf8'):
text += line
self.context_value = text
return text
def clear_context(self):
self.context_value = ""
self.use_context = False
return ""