Spaces:
Sleeping
Sleeping
import gradio as gr | |
from langchain_community.document_loaders import PyPDFLoader | |
from langchain_community.vectorstores import FAISS | |
from langchain_huggingface.embeddings import HuggingFaceEmbeddings | |
from langchain_huggingface.llms import HuggingFacePipeline | |
from langchain.chains import RetrievalQA | |
from transformers import pipeline | |
import os | |
# 1. Ladda och indexera alla PDF:er i mappen "document/" | |
def load_vectorstore(): | |
all_docs = [] | |
loaded_files = [] | |
for filename in os.listdir("document"): | |
if filename.endswith(".pdf"): | |
path = os.path.join("document", filename) | |
loader = PyPDFLoader(path) | |
docs = loader.load_and_split() | |
all_docs.extend(docs) | |
loaded_files.append(filename) | |
embedding = HuggingFaceEmbeddings(model_name="KBLab/sentence-bert-swedish-cased") | |
vectorstore = FAISS.from_documents(all_docs, embedding) | |
return vectorstore, loaded_files | |
with gr.Blocks() as demo: | |
with gr.Row(): | |
status = gr.Markdown("🔄 Laddar modellen, vänta...") | |
vectorstore, loaded_files = load_vectorstore() | |
llm_pipeline = pipeline("text-generation", model="tiiuae/falcon-rw-1b", device=-1) | |
llm = HuggingFacePipeline(pipeline=llm_pipeline, model_kwargs={"temperature": 0.3, "max_new_tokens": 512}) | |
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=vectorstore.as_retriever()) | |
loaded_list = "\n".join([f"- {f}" for f in loaded_files]) | |
gr.Markdown(f"✅ Klar! Du kan nu ställa frågor om dokumenten nedan:\n\n{loaded_list}") | |
def chat_fn(message, history): | |
if len(message) > 1000: | |
return "⚠️ Din fråga är för lång (" + str(len(message)) + " tecken). Försök ställa en mer specifik fråga." | |
try: | |
svar = qa_chain.invoke({"query": message}) | |
except Exception as e: | |
return f"Ett fel uppstod vid bearbetning av frågan: {str(e)}" | |
return svar | |
gr.ChatInterface( | |
fn=chat_fn, | |
title="🌟 Dokumentassistent (Svenska)", | |
chatbot=gr.Chatbot(type="messages"), | |
description="Hej! Jag är din dokumentassistent. Ställ en fråga baserat på innehållet i dina PDF-filer." | |
) | |
demo.launch() | |