alexkueck commited on
Commit
ef399e7
1 Parent(s): 1911f86

Update utils.py

Browse files
Files changed (1) hide show
  1. utils.py +49 -7
utils.py CHANGED
@@ -18,6 +18,7 @@ import time
18
  import json
19
  import operator
20
  from typing import Annotated, Sequence, TypedDict
 
21
 
22
  import gradio as gr
23
  from pypinyin import lazy_pinyin
@@ -29,6 +30,7 @@ from pygments.lexers import guess_lexer,get_lexer_by_name
29
  from pygments.formatters import HtmlFormatter
30
 
31
  from langchain.chains import LLMChain, RetrievalQA
 
32
  from langchain.chat_models import ChatOpenAI
33
  from langchain.document_loaders import PyPDFLoader, WebBaseLoader, UnstructuredWordDocumentLoader, DirectoryLoader
34
  from langchain.document_loaders.blob_loaders.youtube_audio import YoutubeAudioLoader
@@ -350,13 +352,53 @@ def llm_chain2(llm, prompt):
350
  return result
351
  #############################################
352
  #langchain nutzen, um prompt an llm zu leiten, aber vorher in der VektorDB suchen, um passende splits zum Prompt hinzuzufügen
353
- def rag_chain(llm, prompt, db):
354
- rag_chain = RetrievalQA.from_chain_type(llm,
355
- chain_type_kwargs = {"prompt": RAG_CHAIN_PROMPT},
356
- retriever = db.as_retriever(search_kwargs = {"k": 5}),
357
- return_source_documents = True)
358
- result = rag_chain({"query": prompt})
359
- return result["result"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
360
 
361
  ############################################
362
  # 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
 
18
  import json
19
  import operator
20
  from typing import Annotated, Sequence, TypedDict
21
+ import pprint
22
 
23
  import gradio as gr
24
  from pypinyin import lazy_pinyin
 
30
  from pygments.formatters import HtmlFormatter
31
 
32
  from langchain.chains import LLMChain, RetrievalQA
33
+ from langgraph.graph import END, StateGraph
34
  from langchain.chat_models import ChatOpenAI
35
  from langchain.document_loaders import PyPDFLoader, WebBaseLoader, UnstructuredWordDocumentLoader, DirectoryLoader
36
  from langchain.document_loaders.blob_loaders.youtube_audio import YoutubeAudioLoader
 
352
  return result
353
  #############################################
354
  #langchain nutzen, um prompt an llm zu leiten, aber vorher in der VektorDB suchen, um passende splits zum Prompt hinzuzufügen
355
+ def rag_chain(llm, prompt, vectorstore, retriever):
356
+ #Langgraph nutzen für ein wenig mehr Intelligenz beim Dokumente suchen
357
+ workflow = StateGraph(GraphState)
358
+
359
+ # Define the nodes
360
+ workflow.add_node("retrieve", retrieve) # retrieve
361
+ workflow.add_node("grade_documents", grade_documents) # grade documents
362
+ workflow.add_node("generate", generate) # generate
363
+ workflow.add_node("generate_ohne", generate) # generate ohne dokumente anzuhängen
364
+ workflow.add_node("transform_query", transform_query) # transform_query
365
+ #momentan nicht genutzt
366
+ #workflow.add_node("web_search", web_search) # web search
367
+ ###
368
+ # Fügen Sie einen Zwischenknoten hinzu, um von transform_query zu retrieve zurückzukehren
369
+ workflow.add_node("retrieve_redirect", retrieve) # Dies könnte eine Wrapper-Funktion sein, die retrieve aufruft
370
+
371
+ # Build graph
372
+ workflow.set_entry_point("retrieve")
373
+ workflow.add_edge("retrieve", "grade_documents")
374
+ workflow.add_conditional_edges(
375
+ "grade_documents",
376
+ decide_to_generate,
377
+ {
378
+ "transform_query": "transform_query",
379
+ "generate_ohne": "generate_ohne",
380
+ "generate": "generate",
381
+ },
382
+ )
383
+ workflow.add_edge("transform_query", "retrieve_redirect")
384
+ workflow.add_edge("retrieve_redirect", "retrieve")
385
+
386
+ workflow.add_edge("generate_ohne", "generate")
387
+ workflow.add_edge("generate", END)
388
+ # Compile
389
+ app = workflow.compile()
390
+ #Dokumente suchen
391
+ inputs = {"keys": {"question": prompt}}
392
+ for output in app.stream(inputs):
393
+ for key, value in output.items():
394
+ # Node
395
+ pprint.pprint(f"Node '{key}':")
396
+ # Optional: print full state at each node
397
+ # pprint.pprint(value["keys"], indent=2, width=80, depth=None)
398
+ pprint.pprint("\n---\n")
399
+
400
+ # Final generation
401
+ pprint.pprint(value['keys']['generation'])
402
 
403
  ############################################
404
  # 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