tomas.helmfridsson commited on
Commit
6cf3540
·
1 Parent(s): 2ae94e1

update guis 7

Browse files
Files changed (1) hide show
  1. app.py +26 -21
app.py CHANGED
@@ -8,6 +8,7 @@ from transformers import pipeline
8
  import os
9
 
10
  # 1. Ladda och indexera alla PDF:er i mappen "document/"
 
11
  def load_vectorstore():
12
  all_docs = []
13
  loaded_files = []
@@ -22,8 +23,8 @@ def load_vectorstore():
22
  vectorstore = FAISS.from_documents(all_docs, embedding)
23
  return vectorstore, loaded_files
24
 
25
- # Skapa RAG-chain med vald temperaturfunktion
26
- def create_chain(temp):
27
  llm_pipeline = pipeline(
28
  "text-generation", model="tiiuae/falcon-rw-1b", device=-1
29
  )
@@ -35,7 +36,7 @@ def create_chain(temp):
35
  llm=llm, retriever=vectorstore.as_retriever()
36
  )
37
 
38
- # Gradio UI
39
  with gr.Blocks() as demo:
40
  # Temperatur-reglage
41
  temp_slider = gr.Slider(
@@ -45,48 +46,52 @@ with gr.Blocks() as demo:
45
  value=0.3,
46
  step=0.05,
47
  )
48
- # Chat-komponent
49
- chatbot = gr.Chatbot()
50
- # Text-input
 
51
  input_box = gr.Textbox(label="Din fråga")
52
  send_button = gr.Button("Skicka")
53
- status_text = gr.Markdown("🔄 Laddar modellen, vänta...")
54
 
55
- # Ladda dokument + skapa initial chain
56
  vectorstore, loaded_files = load_vectorstore()
57
- qa_chain = create_chain(temp_slider.value)
58
 
59
- # Visa klara status och vilka PDF:er som laddats
60
- loaded_list = "\n".join([f"- {f}" for f in loaded_files])
61
- status_text.update(visible=False)
62
  gr.Markdown(
63
- f"✅ Klar! Du kan nu ställa frågor om dokumenten nedan:\n\n{loaded_list}"
 
64
  )
65
 
 
66
  def chat_fn(message, history, temp):
67
  # Uppdatera chain om temperaturen ändrats
68
- chain = create_chain(temp)
69
- # Begränsa fråga-längd
 
70
  if len(message) > 1000:
71
- history.append((message, f"⚠️ Din fråga är för lång ({len(message)} tecken). Försök en kortare fråga."))
 
 
 
72
  return history
73
- # Kör fråga
74
  try:
75
  svar = chain.invoke({"query": message})
76
- out = svar["result"]
77
  except Exception as e:
78
  out = f"Ett fel uppstod: {e}"
79
- history.append((message, out))
80
  return history
81
 
82
- # Koppla knappen till chat-funktionen
83
  send_button.click(
84
  fn=chat_fn,
85
  inputs=[input_box, chatbot, temp_slider],
86
  outputs=chatbot,
87
  )
88
 
89
- # Starta appen
90
  if __name__ == "__main__":
91
  demo.launch()
92
 
 
8
  import os
9
 
10
  # 1. Ladda och indexera alla PDF:er i mappen "document/"
11
+ # Returnerar vectorstore och lista över filnamn
12
  def load_vectorstore():
13
  all_docs = []
14
  loaded_files = []
 
23
  vectorstore = FAISS.from_documents(all_docs, embedding)
24
  return vectorstore, loaded_files
25
 
26
+ # 2. Skapa RAG-chain med given temperatur
27
+ def create_chain(vectorstore, temp):
28
  llm_pipeline = pipeline(
29
  "text-generation", model="tiiuae/falcon-rw-1b", device=-1
30
  )
 
36
  llm=llm, retriever=vectorstore.as_retriever()
37
  )
38
 
39
+ # 3. Gradio UI
40
  with gr.Blocks() as demo:
41
  # Temperatur-reglage
42
  temp_slider = gr.Slider(
 
46
  value=0.3,
47
  step=0.05,
48
  )
49
+ # Laddningsindikator
50
+ status_text = gr.Markdown("🔄 Laddar modellen, vänta...")
51
+ # Chat-komponent (OpenAI-stil)
52
+ chatbot = gr.Chatbot(type="messages")
53
  input_box = gr.Textbox(label="Din fråga")
54
  send_button = gr.Button("Skicka")
 
55
 
56
+ # Ladda vectorstore och initiera QA-chain
57
  vectorstore, loaded_files = load_vectorstore()
58
+ qa_chain = create_chain(vectorstore, temp_slider.value)
59
 
60
+ # Dölj laddningsindikator och visa uppladdade filer
61
+ status_text.visible = False
 
62
  gr.Markdown(
63
+ f"✅ Klar! Du kan nu ställa frågor om dokumenten nedan:\n\n" +
64
+ "\n".join([f"- {f}" for f in loaded_files])
65
  )
66
 
67
+ # Chat-funktion
68
  def chat_fn(message, history, temp):
69
  # Uppdatera chain om temperaturen ändrats
70
+ chain = create_chain(vectorstore, temp)
71
+ # Lägg till användarens meddelande
72
+ history = history + [{"role": "user", "content": message}]
73
  if len(message) > 1000:
74
+ history = history + [{
75
+ "role": "assistant",
76
+ "content": f"⚠️ Din fråga är för lång ({len(message)} tecken). Försök en kortare fråga."
77
+ }]
78
  return history
 
79
  try:
80
  svar = chain.invoke({"query": message})
81
+ out = svar.get("result", str(svar))
82
  except Exception as e:
83
  out = f"Ett fel uppstod: {e}"
84
+ history = history + [{"role": "assistant", "content": out}]
85
  return history
86
 
87
+ # Koppla knapp till funktionen
88
  send_button.click(
89
  fn=chat_fn,
90
  inputs=[input_box, chatbot, temp_slider],
91
  outputs=chatbot,
92
  )
93
 
94
+ # Starta app vid körning
95
  if __name__ == "__main__":
96
  demo.launch()
97