tomas.helmfridsson commited on
Commit
1b048ee
·
1 Parent(s): 7894f40

update guis 11

Browse files
Files changed (1) hide show
  1. app.py +28 -49
app.py CHANGED
@@ -1,78 +1,57 @@
1
- import gradio as gr
2
  import os
3
-
 
4
  from langchain_community.document_loaders import PyPDFLoader
5
  from langchain_community.vectorstores import FAISS
6
  from langchain_huggingface.embeddings import HuggingFaceEmbeddings
7
  from langchain_huggingface.llms import HuggingFacePipeline
8
  from langchain.chains import RetrievalQA
9
- from transformers import pipeline
10
 
11
- # 1) Ladda och indexera PDF:er
12
  def load_vectorstore():
13
- all_docs, files = [], []
14
  for fn in os.listdir("document"):
15
  if fn.lower().endswith(".pdf"):
16
- path = os.path.join("document", fn)
17
- docs = PyPDFLoader(path).load_and_split()
18
- all_docs.extend(docs)
19
  files.append(fn)
20
  emb = HuggingFaceEmbeddings(model_name="KBLab/sentence-bert-swedish-cased")
21
- vs = FAISS.from_documents(all_docs, emb)
22
  return vs, files
23
 
24
- # 2) Skapa Blocks-layout
25
- with gr.Blocks() as demo:
26
- # A) Status under uppstart
27
- status = gr.Markdown("🔄 Laddar dokument och modell, vänta…", elem_id="status-text")
28
-
29
- # B) Indexera och initiera
30
- vectorstore, loaded_files = load_vectorstore()
31
- llm_pipe = pipeline("text-generation", model="tiiuae/falcon-rw-1b", device=-1)
32
- llm = HuggingFacePipeline(
33
- pipeline=llm_pipe,
34
- model_kwargs={"temperature": 0.3, "max_new_tokens": 512}
35
- )
36
- qa = RetrievalQA.from_chain_type(llm=llm, retriever=vectorstore.as_retriever())
37
 
38
- # C) Dölj status och visa PDF-lista
 
 
39
  status.visible = False
40
- gr.Markdown(
41
- "✅ Klar! Du kan nu ställa frågor om dokumenten nedan:\n\n" +
42
- "\n".join(f"- {f}" for f in loaded_files),
43
- elem_id="status-text"
44
- )
45
 
46
- # D) Temperatur-slider och text-inmatning + knapp
 
47
  with gr.Row():
48
  txt = gr.Textbox(label="Din fråga:")
49
- temp = gr.Slider(0, 1, value=0.3, step=0.05, label="Temperatur")
50
  send = gr.Button("Skicka")
51
 
52
- # E) Chatbot-komponent (OpenAI-stil)
53
- chatbot = gr.Chatbot([], type="messages")
54
 
55
- # F) Logik för chatten
56
  def chat_fn(message, temperature, history):
57
- # kortare skydd
58
- if len(message) > 1000:
59
- history = history or []
60
- history.append(("⚠️ Din fråga är för lång, korta ner den.", ""))
61
  return history
62
- # uppdatera temp
63
- llm.model_kwargs["temperature"] = temperature
64
- try:
65
- out = qa.invoke({"query": message})["result"]
66
- except Exception as e:
67
- out = f"Ett fel uppstod: {e}"
68
- # bygg historia som tupler
 
69
  history = history or []
70
- history.append((message, out))
71
  return history
72
 
73
- # G) Koppla knapp till chat_fn
74
- send.click(fn=chat_fn,
75
- inputs=[txt, temp, chatbot],
76
- outputs=chatbot)
77
 
78
  demo.launch()
 
 
1
  import os
2
+ import gradio as gr
3
+ from transformers import pipeline
4
  from langchain_community.document_loaders import PyPDFLoader
5
  from langchain_community.vectorstores import FAISS
6
  from langchain_huggingface.embeddings import HuggingFaceEmbeddings
7
  from langchain_huggingface.llms import HuggingFacePipeline
8
  from langchain.chains import RetrievalQA
 
9
 
 
10
  def load_vectorstore():
11
+ docs, files = [], []
12
  for fn in os.listdir("document"):
13
  if fn.lower().endswith(".pdf"):
14
+ docs.extend(PyPDFLoader(os.path.join("document", fn)).load_and_split())
 
 
15
  files.append(fn)
16
  emb = HuggingFaceEmbeddings(model_name="KBLab/sentence-bert-swedish-cased")
17
+ vs = FAISS.from_documents(docs, emb)
18
  return vs, files
19
 
20
+ # Bygg index + modell
21
+ vectorstore, file_list = load_vectorstore()
22
+ pipe = pipeline("text-generation", model="tiiuae/falcon-rw-1b", device=-1)
23
+ llm = HuggingFacePipeline(pipeline=pipe, model_kwargs={"temperature":0.3,"max_new_tokens":512})
24
+ qa = RetrievalQA.from_chain_type(llm=llm, retriever=vectorstore.as_retriever())
 
 
 
 
 
 
 
 
25
 
26
+ # Gradio-UI
27
+ with gr.Blocks() as demo:
28
+ status = gr.Markdown("🔄 Laddar…", elem_id="status")
29
  status.visible = False
 
 
 
 
 
30
 
31
+ gr.Markdown("**✅ Klart!** Fråga om PDF-filerna:\n\n" + "\n".join(f"- {f}" for f in file_list))
32
+
33
  with gr.Row():
34
  txt = gr.Textbox(label="Din fråga:")
35
+ temp = gr.Slider(0,1,value=0.3,step=0.05,label="Temperatur")
36
  send = gr.Button("Skicka")
37
 
38
+ chatbot = gr.Chatbot()
 
39
 
 
40
  def chat_fn(message, temperature, history):
41
+ if not message:
 
 
 
42
  return history
43
+ if len(message)>1000:
44
+ reply = f"⚠️ Frågan är för lång ({len(message)} tecken)."
45
+ else:
46
+ llm.model_kwargs["temperature"] = temperature
47
+ try:
48
+ reply = qa.invoke({"query":message})["result"]
49
+ except Exception as e:
50
+ reply = f"Ett fel uppstod: {e}"
51
  history = history or []
52
+ history.append((message, reply))
53
  return history
54
 
55
+ send.click(fn=chat_fn, inputs=[txt, temp, chatbot], outputs=chatbot)
 
 
 
56
 
57
  demo.launch()