Spaces:
Build error
Build error
| from langchain.document_loaders import PyPDFLoader | |
| from langchain.text_splitter import CharacterTextSplitter | |
| from langchain.embeddings import HuggingFaceEmbeddings | |
| from langchain.llms import HuggingFaceHub | |
| from langchain.vectorstores import Chroma | |
| from langchain.chains import ConversationalRetrievalChain | |
| from langchain.document_loaders import PyPDFLoader, DirectoryLoader | |
| from langchain.text_splitter import RecursiveCharacterTextSplitter | |
| import gradio as gr | |
| import os | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| def upload_file(files, input_text): | |
| file_paths = [] | |
| target_directory = "/content/uploaded_files" | |
| os.makedirs(target_directory, exist_ok=True) | |
| try: | |
| for file in files: | |
| filename = os.path.basename(file.name) | |
| file_path = os.path.join(target_directory, filename) | |
| with open(file_path, "wb") as f: | |
| with open(file.name, "rb") as uploaded_file: | |
| f.write(uploaded_file.read()) | |
| file_paths.append(file_path) | |
| loader = DirectoryLoader(target_directory, | |
| glob='*.pdf', | |
| loader_cls=PyPDFLoader) | |
| documents = loader.load() | |
| text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, | |
| chunk_overlap=30) | |
| texts = text_splitter.split_documents(documents) | |
| embeddings = HuggingFaceEmbeddings() | |
| db = Chroma.from_documents(texts, embeddings) | |
| retriever = db.as_retriever(search_kwargs={'k': 2}) | |
| repo_id = "mistralai/Mistral-7B-v0.1" | |
| llm = HuggingFaceHub(huggingfacehub_api_token=os.getenv("MY_HUGGING_FACE_TOKEN"), | |
| repo_id=repo_id, model_kwargs={"temperature":0.5, "max_new_tokens":50}) | |
| qa_chain = ConversationalRetrievalChain.from_llm(llm, retriever,return_source_documents=False) | |
| chat_history = [] | |
| answers = [] | |
| query = input_text | |
| result = qa_chain({'question': query, 'chat_history': chat_history}) | |
| answers.append(result['answer']) | |
| chat_history.append((query, result['answer'])) | |
| return "\n".join(answers) | |
| finally: | |
| # Delete the files from the target directory | |
| for file_path in file_paths: | |
| os.remove(file_path) | |
| # Define the Gradio interface | |
| interface = gr.Interface( | |
| fn=upload_file, | |
| inputs=["files", gr.Textbox(label="Enter Text")], | |
| outputs="text", | |
| title="File and Text Processing", | |
| description="Upload a file and enter some text. Click 'Submit' to process them together." | |
| ) | |
| # Launch the interface | |
| interface.launch() | |