alexkueck commited on
Commit
dbef68c
1 Parent(s): ce0c292

Update utils.py

Browse files
Files changed (1) hide show
  1. utils.py +27 -16
utils.py CHANGED
@@ -280,7 +280,7 @@ def document_storage_chroma(splits):
280
  return vectorstore, retriever
281
 
282
  #Dokumente, die vom Retriever rausgesucht wurden auf Relevanz untersuchen
283
- def grade_documents_direct(state):
284
  print("---CHECK RELEVANCE---")
285
  # Data model
286
  class grade(BaseModel):
@@ -317,33 +317,21 @@ def grade_documents_direct(state):
317
 
318
  # Score
319
  filtered_docs = []
320
- anzahl_relevant = 0
321
- search = "nein" # Default do not opt for re-questioning to supplement retrieval
322
  for d in documents:
323
  score = chain.invoke({"question": question, "context": d.page_content})
324
  grade = score[0].binary_score
325
  if grade == "ja":
326
- #search = "nein" # mind. ein relevantes Dokument -> keine Websuche nötig
327
  print("---Bewertung: Dokument ist relevant---")
328
- anzahl_relevant = anzahl_relevant +1
329
  filtered_docs.append(d)
330
  else:
331
  print("---Bewertung: Dokument irrelevant---")
332
- search = "ja" # mind ein Dokument irrelevant -> Frage umformulieren
333
  continue
334
- #wenn mehrheit der Dokumente relevant -> generieren starten damit
335
- if (anzahl_relevant>= len(documents)/2):
336
- search = "nein"
337
- print("second trial grade_docs:.....................")
338
- print(second_trial)
339
  return filtered_docs
340
 
341
 
342
  def transform_query_direct(query):
343
  print("---TRANSFORM QUERY---")
344
- state_dict = state["keys"]
345
- question = state_dict["question"]
346
- documents = state_dict["documents"]
347
 
348
  # Create a prompt template with format instructions and the query
349
  prompt = PromptTemplate(
@@ -365,7 +353,7 @@ def transform_query_direct(query):
365
  better_question = chain.invoke({"question": question})
366
  second_trial="ja"
367
 
368
- return {"keys": {"documents": documents, "question": better_question, "second_trial" : second_trial}}
369
 
370
 
371
  ###############################################
@@ -384,8 +372,30 @@ def llm_chain2(llm, prompt):
384
  return result
385
  #############################################
386
  #langchain nutzen, um prompt an llm zu leiten, aber vorher in der VektorDB suchen, um passende splits zum Prompt hinzuzufügen
387
- def rag_chain(llm, prompt, vectorstore, retriever):
388
  #Langgraph nutzen für ein wenig mehr Intelligenz beim Dokumente suchen
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
389
  workflow = StateGraph(GraphState)
390
 
391
  # Define the nodes
@@ -431,6 +441,7 @@ def rag_chain(llm, prompt, vectorstore, retriever):
431
 
432
  # Final generation
433
  return value['keys']['generation']
 
434
 
435
  ############################################
436
  # rag_chain Alternative für RAg mit Bild-Upload, da hier das llm so nicht genutzt werden kann und der prompt mit den RAG Erweiterungen anders übergeben wird
 
280
  return vectorstore, retriever
281
 
282
  #Dokumente, die vom Retriever rausgesucht wurden auf Relevanz untersuchen
283
+ def grade_documents_direct(documents):
284
  print("---CHECK RELEVANCE---")
285
  # Data model
286
  class grade(BaseModel):
 
317
 
318
  # Score
319
  filtered_docs = []
320
+
 
321
  for d in documents:
322
  score = chain.invoke({"question": question, "context": d.page_content})
323
  grade = score[0].binary_score
324
  if grade == "ja":
 
325
  print("---Bewertung: Dokument ist relevant---")
 
326
  filtered_docs.append(d)
327
  else:
328
  print("---Bewertung: Dokument irrelevant---")
 
329
  continue
 
 
 
 
 
330
  return filtered_docs
331
 
332
 
333
  def transform_query_direct(query):
334
  print("---TRANSFORM QUERY---")
 
 
 
335
 
336
  # Create a prompt template with format instructions and the query
337
  prompt = PromptTemplate(
 
353
  better_question = chain.invoke({"question": question})
354
  second_trial="ja"
355
 
356
+ return better_question
357
 
358
 
359
  ###############################################
 
372
  return result
373
  #############################################
374
  #langchain nutzen, um prompt an llm zu leiten, aber vorher in der VektorDB suchen, um passende splits zum Prompt hinzuzufügen
375
+ def rag_chain(llm, prompt, retriever):
376
  #Langgraph nutzen für ein wenig mehr Intelligenz beim Dokumente suchen
377
+ relevant_docs = retriever.get_relevant_documents(prompt)
378
+ filtered_docs = grade_documents_direct(relevant_docs)
379
+ neu_prompt=prompt
380
+ if (len(filtered_docs)<2): #frage neu formulieren
381
+ neu_prompt = transform_query_direct(prompt)
382
+ relevant_docs = retriever.get_relevant_documents(neu_prompt)
383
+ filtered_docs = grade_documents_direct(relevant_docs)
384
+
385
+ if (len(filtered_docs)>0):
386
+ # Chain
387
+ rag_chain = prompt | llm | StrOutputParser()
388
+ # Run
389
+ result = rag_chain.invoke({"context": documents, "question": neu_prompt})
390
+ else:
391
+ #Normale Abfrage, da keine relevanten Dokumente gefunden
392
+ llm_chain = LLMChain(llm = llm, prompt = LLM_CHAIN_PROMPT)
393
+ result = llm_chain.run({"question": neu_prompt})
394
+ return result
395
+
396
+
397
+
398
+ """
399
  workflow = StateGraph(GraphState)
400
 
401
  # Define the nodes
 
441
 
442
  # Final generation
443
  return value['keys']['generation']
444
+ """
445
 
446
  ############################################
447
  # rag_chain Alternative für RAg mit Bild-Upload, da hier das llm so nicht genutzt werden kann und der prompt mit den RAG Erweiterungen anders übergeben wird