alexkueck commited on
Commit
f320011
1 Parent(s): e34d975

Update utils.py

Browse files
Files changed (1) hide show
  1. utils.py +65 -19
utils.py CHANGED
@@ -131,8 +131,8 @@ CHROMA_WORD = './chroma/kkg/word'
131
  CHROMA_EXCEL = './chroma/kkg/excel'
132
  YOUTUBE_DIR = "/youtube"
133
  HISTORY_PFAD = "/data/history"
134
- DOCS_DIR = "chroma/kkg/pdf"
135
-
136
  ###############################################
137
  #URLs zu Dokumenten oder andere Inhalte, die einbezogen werden sollen
138
  PDF_URL = "https://arxiv.org/pdf/2303.08774.pdf"
@@ -242,20 +242,8 @@ def clean_text(text):
242
  #RAG Hilfsfunktionen - Dokumenten bearbeiten für Vektorstore
243
  ##################################################
244
  ##################################################
245
- # Directory Loader Konfigurieren
246
  ##################################################
247
- # Funktion, um für einen best. File-typ ein directory-loader zu definieren
248
- def create_directory_loaderBack(file_type, directory_path):
249
- #verscheidene Dokument loaders:
250
- loaders = {
251
- '.pdf': PyPDFLoader,
252
- '.word': UnstructuredWordDocumentLoader,
253
- }
254
- return DirectoryLoader(
255
- path=directory_path,
256
- glob=f"**/*{file_type}",
257
- loader_cls=loaders[file_type],
258
- )
259
 
260
  #besseren directory Loader als CustomLoader definieren, der den inhalt des dokuemnts, die seitenzahlen, die überschriften und die pfadezu den dokumenten extrahieren
261
  def create_directory_loader(file_type, directory_path):
@@ -345,7 +333,9 @@ def document_loading_splitting():
345
  # Document splitting
346
  text_splitter = RecursiveCharacterTextSplitter(chunk_overlap = 150, chunk_size = 1500)
347
  splits = text_splitter.split_documents(docs)
348
-
 
 
349
  return splits
350
 
351
  ###########################################
@@ -481,6 +471,49 @@ def rag_chain(llm, prompt, retriever):
481
  return result
482
 
483
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
484
 
485
  #############################################################
486
  #in einem Dictionary die wichtigen Infos zu jedem Dok zusammenstellen
@@ -579,11 +612,23 @@ def download_link(doc):
579
 
580
 
581
  def display_files():
582
- files = os.listdir(DOCS_DIR)
583
  files_table = "<table style='width:100%; border-collapse: collapse;'>"
584
  files_table += "<tr style='background-color: #930BBA; color: white; font-weight: bold; font-size: larger;'><th>Dateiname</th><th>Größe (KB)</th></tr>"
585
  for i, file in enumerate(files):
586
- file_path = os.path.join(DOCS_DIR, file)
 
 
 
 
 
 
 
 
 
 
 
 
587
  file_size = os.path.getsize(file_path) / 1024 # Größe in KB
588
  row_color = "#4f4f4f" if i % 2 == 0 else "#3a3a3a" # Wechselnde Zeilenfarben
589
  files_table += f"<tr style='background-color: {row_color}; border-bottom: 1px solid #ddd;'>"
@@ -594,11 +639,12 @@ def display_files():
594
 
595
 
596
  # gefundene relevante Dokumente auflisten (links)
 
597
  def list_pdfs():
598
  if not os.path.exists(DOCS_DIR):
599
  return []
600
  return [f for f in os.listdir(SAVE_DIR) if f.endswith('.pdf')]
601
-
602
  ##########################################
603
  #Extension des hochgeladenen Files bestimmen
604
  def analyze_file(file):
 
131
  CHROMA_EXCEL = './chroma/kkg/excel'
132
  YOUTUBE_DIR = "/youtube"
133
  HISTORY_PFAD = "/data/history"
134
+ DOCS_DIR_PDF = "chroma/kkg/pdf"
135
+ DOCS_DIR_WORD = "chroma/kkg/word"
136
  ###############################################
137
  #URLs zu Dokumenten oder andere Inhalte, die einbezogen werden sollen
138
  PDF_URL = "https://arxiv.org/pdf/2303.08774.pdf"
 
242
  #RAG Hilfsfunktionen - Dokumenten bearbeiten für Vektorstore
243
  ##################################################
244
  ##################################################
245
+ # Directory Loader Konfigurieren um Text zu extrahieren
246
  ##################################################
 
 
 
 
 
 
 
 
 
 
 
 
247
 
248
  #besseren directory Loader als CustomLoader definieren, der den inhalt des dokuemnts, die seitenzahlen, die überschriften und die pfadezu den dokumenten extrahieren
249
  def create_directory_loader(file_type, directory_path):
 
333
  # Document splitting
334
  text_splitter = RecursiveCharacterTextSplitter(chunk_overlap = 150, chunk_size = 1500)
335
  splits = text_splitter.split_documents(docs)
336
+ for split in splits:
337
+ if 'DIVIS' in split['content']:
338
+ print("DIVIS found in chunk:", split)
339
  return splits
340
 
341
  ###########################################
 
471
  return result
472
 
473
 
474
+ #############################################
475
+ #keine History des chatbots einbeziehen, keine Zusammenfassung am Anfang - nur mit Vektorstore arbeiten, um relevante Dokumente anzuzeigen
476
+ def rag_chain_simple( prompt, retriever):
477
+ #Langgraph nutzen für ein wenig mehr Intelligenz beim Dokumente suchen
478
+ relevant_docs=[]
479
+ most_relevant_docs=[]
480
+
481
+ #passend zum Prompt relevante Dokuemnte raussuchen
482
+ relevant_docs = retriever.invoke(prompt)
483
+ #zu jedem relevanten Dokument die wichtigen Informationen zusammenstellen (im Dict)
484
+ extracted_docs = extract_document_info(relevant_docs)
485
+
486
+ if (len(extracted_docs)>0):
487
+ # Inahlte Abrufen der relevanten Dokumente
488
+ doc_contents = [doc["content"] for doc in extracted_docs]
489
+
490
+ #Berechne die Ähnlichkeiten und finde das relevanteste Dokument
491
+ question_embedding = embedder_modell.encode(prompt, convert_to_tensor=True)
492
+ doc_embeddings = embedder_modell.encode(doc_contents, convert_to_tensor=True)
493
+ similarity_scores = util.pytorch_cos_sim(question_embedding, doc_embeddings)
494
+ most_relevant_doc_indices = similarity_scores.argsort(descending=True).squeeze().tolist()
495
+
496
+ #Erstelle eine Liste der relevantesten Dokumente
497
+ most_relevant_docs = [extracted_docs[i] for i in most_relevant_doc_indices]
498
+
499
+ #Kombiniere die Inhalte aller relevanten Dokumente
500
+ combined_content = " ".join([doc["content"] for doc in most_relevant_docs])
501
+
502
+ # Erstelle das Ergebnis-Dictionary
503
+ result = {
504
+ "answer": "Folgende relevante Dokumente wurden gefunden:",
505
+ "relevant_docs": most_relevant_docs
506
+ }
507
+ else:
508
+ # keine relevanten Dokumente gefunden
509
+ result = {
510
+ "answer": "Keine relevanten Dokumente gefunden",
511
+ "relevant_docs": most_relevant_docs
512
+ }
513
+
514
+ return result
515
+
516
+
517
 
518
  #############################################################
519
  #in einem Dictionary die wichtigen Infos zu jedem Dok zusammenstellen
 
612
 
613
 
614
  def display_files():
615
+ files = os.listdir(DOCS_DIR_PDF)
616
  files_table = "<table style='width:100%; border-collapse: collapse;'>"
617
  files_table += "<tr style='background-color: #930BBA; color: white; font-weight: bold; font-size: larger;'><th>Dateiname</th><th>Größe (KB)</th></tr>"
618
  for i, file in enumerate(files):
619
+ file_path = os.path.join(DOCS_DIR_PDF, file)
620
+ file_size = os.path.getsize(file_path) / 1024 # Größe in KB
621
+ row_color = "#4f4f4f" if i % 2 == 0 else "#3a3a3a" # Wechselnde Zeilenfarben
622
+ files_table += f"<tr style='background-color: {row_color}; border-bottom: 1px solid #ddd;'>"
623
+ files_table += f"<td><b>{download_link(file)}</b></td>"
624
+ files_table += f"<td>{file_size:.2f}</td></tr>"
625
+ files_table += "</table>"
626
+
627
+ files = os.listdir(DOCS_DIR_WORD)
628
+ files_table += "<table style='width:100%; border-collapse: collapse;'>"
629
+ files_table += "<tr style='background-color: #930BBA; color: white; font-weight: bold; font-size: larger;'><th>Dateiname</th><th>Größe (KB)</th></tr>"
630
+ for i, file in enumerate(files):
631
+ file_path = os.path.join(DOCS_DIR_WORD, file)
632
  file_size = os.path.getsize(file_path) / 1024 # Größe in KB
633
  row_color = "#4f4f4f" if i % 2 == 0 else "#3a3a3a" # Wechselnde Zeilenfarben
634
  files_table += f"<tr style='background-color: {row_color}; border-bottom: 1px solid #ddd;'>"
 
639
 
640
 
641
  # gefundene relevante Dokumente auflisten (links)
642
+ """
643
  def list_pdfs():
644
  if not os.path.exists(DOCS_DIR):
645
  return []
646
  return [f for f in os.listdir(SAVE_DIR) if f.endswith('.pdf')]
647
+ """
648
  ##########################################
649
  #Extension des hochgeladenen Files bestimmen
650
  def analyze_file(file):