alexkueck commited on
Commit
20ab343
1 Parent(s): bb2645b

Update utils.py

Browse files
Files changed (1) hide show
  1. utils.py +25 -20
utils.py CHANGED
@@ -145,10 +145,11 @@ urls = [
145
  #Modell und Tokenizer für die Anfrage der RAG Chain
146
  ##################################################
147
  # Schritt 1: Initialisiere den Sentence-Transformer und das Generierungsmodell
148
- embedder_modell = SentenceTransformer('all-MiniLM-L6-v2')
149
- HF_MODELL = "t5-small"
150
- modell_rag = AutoModelForSeq2SeqLM.from_pretrained(HF_MODELL)
151
- tokenizer_rag = AutoTokenizer.from_pretrained(HF_MODELL)
 
152
 
153
 
154
 
@@ -210,6 +211,8 @@ def clean_text(text):
210
  #RAG Hilfsfunktionen - Dokumenten bearbeiten für Vektorstore
211
  ##################################################
212
  ##################################################
 
 
213
  # Funktion, um für einen best. File-typ ein directory-loader zu definieren
214
  def create_directory_loaderBack(file_type, directory_path):
215
  #verscheidene Dokument loaders:
@@ -250,7 +253,7 @@ def create_directory_loader(file_type, directory_path):
250
 
251
  ################################################
252
  # Custom Loader-Funktionen zu dem DirektoryLoader
253
- # Custom loader functions
254
  def load_pdf_with_metadata(file_path):
255
  document = fitz.open(file_path)
256
  documents = []
@@ -261,7 +264,8 @@ def load_pdf_with_metadata(file_path):
261
  page_number = page_num + 1
262
  documents.append(Document(content=content, title=title, page=page_number, path=file_path))
263
  return documents
264
-
 
265
  def load_word_with_metadata(file_path):
266
  document = docx.Document(file_path)
267
  title = "Dokument"
@@ -315,9 +319,10 @@ def document_loading_splitting():
315
 
316
  ###########################################
317
  #Chroma DB die splits ablegen - vektorisiert...
 
318
  def document_storage_chroma(splits):
319
  # Embedding-Funktion definieren
320
- embedding_fn = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2", model_kwargs={"device": "cpu"}, encode_kwargs={'normalize_embeddings': False})
321
 
322
  # Vectorstore initialisieren und Dokumente hinzufügen
323
  vectorstore = Chroma.from_documents(documents=splits, embedding=embedding_fn, persist_directory = PATH_WORK + CHROMA_DIR)
@@ -329,17 +334,18 @@ def document_storage_chroma(splits):
329
 
330
  ############################################
331
  #dokumente in chroma db vektorisiert ablegen können - die Db vorbereiten daüfur
 
332
  def document_retrieval_chroma(llm, prompt):
333
  #HF embeddings -----------------------------------
334
  #Alternative Embedding - für Vektorstore, um Ähnlichkeitsvektoren zu erzeugen - die ...InstructEmbedding ist sehr rechenaufwendig
335
  #embeddings = HuggingFaceInstructEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2", model_kwargs={"device": "cpu"})
336
  #etwas weniger rechenaufwendig:
337
- embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2", model_kwargs={"device": "cpu"}, encode_kwargs={'normalize_embeddings': False})
338
 
339
  #ChromaDb um die embedings zu speichern
340
  db = Chroma(embedding_function = embeddings, persist_directory = PATH_WORK + CHROMA_DIR)
341
  return db
342
-
343
 
344
 
345
 
@@ -359,15 +365,13 @@ def rag_chain(llm, prompt, retriever):
359
  #Langgraph nutzen für ein wenig mehr Intelligenz beim Dokumente suchen
360
  relevant_docs=[]
361
  most_relevant_docs=[]
 
 
362
  relevant_docs = retriever.get_relevant_documents(prompt)
 
363
  extracted_docs = extract_document_info(relevant_docs)
364
 
365
  if (len(extracted_docs)>0):
366
- #llm_chain = LLMChain(llm = llm, prompt = RAG_CHAIN_PROMPT)
367
- #result = llm_chain.run({"context": relevant_docs, "question": prompt})
368
- # Erstelle ein PromptTemplate mit Platzhaltern für Kontext und Frage
369
- #RAG_CHAIN_PROMPT = PromptTemplate(template="Context: {context}\n\nQuestion: {question}\n\nAnswer:")
370
-
371
  # Inahlte Abrufen der relevanten Dokumente
372
  doc_contents = [doc["content"] for doc in extracted_docs]
373
 
@@ -394,11 +398,12 @@ def rag_chain(llm, prompt, retriever):
394
  answer = tokenizer_rag.decode(outputs[0], skip_special_tokens=True)
395
  """
396
  #############################################
397
- #Verschiedene LLMs ausprobieren
 
398
  #############################################
399
  #1. Alternative, wenn llm direkt übergeben....................................
400
- #llm_chain = LLMChain(llm = llm, prompt = RAG_CHAIN_PROMPT)
401
- #answer = llm_chain.run({"context": combined_content, "question": prompt})
402
 
403
 
404
  #2. Alternative, wenn mit API_URL ...........................................
@@ -408,7 +413,7 @@ def rag_chain(llm, prompt, retriever):
408
  #für text-generation:
409
  #messages = [{"role": "user", "content": input_text},]
410
  #für summarizatiuon
411
- answer = llm(input_text,max_length=1024, min_length=150, do_sample=False)
412
 
413
  # Erstelle das Ergebnis-Dictionary
414
  result = {
@@ -430,8 +435,8 @@ def query(api_llm, payload):
430
  return response.json()
431
 
432
 
433
-
434
-
435
  def extract_document_info(documents):
436
  extracted_info = []
437
  for doc in documents:
 
145
  #Modell und Tokenizer für die Anfrage der RAG Chain
146
  ##################################################
147
  # Schritt 1: Initialisiere den Sentence-Transformer und das Generierungsmodell
148
+ embedder_modell = SentenceTransformer("sentence-transformers/all-mpnet-base-v2") #'all-MiniLM-L6-v2')
149
+ EMBEDDING_MODELL = "sentence-transformers/all-mpnet-base-v2"
150
+ #HF_MODELL = "t5-small"
151
+ #modell_rag = AutoModelForSeq2SeqLM.from_pretrained(HF_MODELL)
152
+ #tokenizer_rag = AutoTokenizer.from_pretrained(HF_MODELL)
153
 
154
 
155
 
 
211
  #RAG Hilfsfunktionen - Dokumenten bearbeiten für Vektorstore
212
  ##################################################
213
  ##################################################
214
+ # Directory Loader Konfigurieren
215
+ ##################################################
216
  # Funktion, um für einen best. File-typ ein directory-loader zu definieren
217
  def create_directory_loaderBack(file_type, directory_path):
218
  #verscheidene Dokument loaders:
 
253
 
254
  ################################################
255
  # Custom Loader-Funktionen zu dem DirektoryLoader
256
+ # für PDF Dokumente:
257
  def load_pdf_with_metadata(file_path):
258
  document = fitz.open(file_path)
259
  documents = []
 
264
  page_number = page_num + 1
265
  documents.append(Document(content=content, title=title, page=page_number, path=file_path))
266
  return documents
267
+
268
+ #für WOrD Dokumente
269
  def load_word_with_metadata(file_path):
270
  document = docx.Document(file_path)
271
  title = "Dokument"
 
319
 
320
  ###########################################
321
  #Chroma DB die splits ablegen - vektorisiert...
322
+
323
  def document_storage_chroma(splits):
324
  # Embedding-Funktion definieren
325
+ embedding_fn = HuggingFaceEmbeddings(model_name=EMBEDDING_MODELL, model_kwargs={"device": "cpu"}, encode_kwargs={'normalize_embeddings': False})
326
 
327
  # Vectorstore initialisieren und Dokumente hinzufügen
328
  vectorstore = Chroma.from_documents(documents=splits, embedding=embedding_fn, persist_directory = PATH_WORK + CHROMA_DIR)
 
334
 
335
  ############################################
336
  #dokumente in chroma db vektorisiert ablegen können - die Db vorbereiten daüfur
337
+ """
338
  def document_retrieval_chroma(llm, prompt):
339
  #HF embeddings -----------------------------------
340
  #Alternative Embedding - für Vektorstore, um Ähnlichkeitsvektoren zu erzeugen - die ...InstructEmbedding ist sehr rechenaufwendig
341
  #embeddings = HuggingFaceInstructEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2", model_kwargs={"device": "cpu"})
342
  #etwas weniger rechenaufwendig:
343
+ embeddings = HuggingFaceEmbeddings(model_name=EMBEDDING_MODELL, model_kwargs={"device": "cpu"}, encode_kwargs={'normalize_embeddings': False})
344
 
345
  #ChromaDb um die embedings zu speichern
346
  db = Chroma(embedding_function = embeddings, persist_directory = PATH_WORK + CHROMA_DIR)
347
  return db
348
+ """
349
 
350
 
351
 
 
365
  #Langgraph nutzen für ein wenig mehr Intelligenz beim Dokumente suchen
366
  relevant_docs=[]
367
  most_relevant_docs=[]
368
+
369
+ #passend zum Prompt relevante Dokuemnte raussuchen
370
  relevant_docs = retriever.get_relevant_documents(prompt)
371
+ #zu jedem relevanten Dokument die wichtigen Informationen zusammenstellen (im Dict)
372
  extracted_docs = extract_document_info(relevant_docs)
373
 
374
  if (len(extracted_docs)>0):
 
 
 
 
 
375
  # Inahlte Abrufen der relevanten Dokumente
376
  doc_contents = [doc["content"] for doc in extracted_docs]
377
 
 
398
  answer = tokenizer_rag.decode(outputs[0], skip_special_tokens=True)
399
  """
400
  #############################################
401
+ #Verschiedene LLMs ausprobieren als Generierungsmodell
402
+ #für die Zusammenfassung
403
  #############################################
404
  #1. Alternative, wenn llm direkt übergeben....................................
405
+ llm_chain = LLMChain(llm = llm, prompt = RAG_CHAIN_PROMPT)
406
+ answer = llm_chain.run({"context": combined_content, "question": prompt})
407
 
408
 
409
  #2. Alternative, wenn mit API_URL ...........................................
 
413
  #für text-generation:
414
  #messages = [{"role": "user", "content": input_text},]
415
  #für summarizatiuon
416
+ #answer = llm(input_text,max_length=1024, min_length=150, do_sample=False)
417
 
418
  # Erstelle das Ergebnis-Dictionary
419
  result = {
 
435
  return response.json()
436
 
437
 
438
+ #############################################################
439
+ #in einem Dictionary die wichtigen Infos zu jedem Dok zusammenstellen
440
  def extract_document_info(documents):
441
  extracted_info = []
442
  for doc in documents: