Update utils.py
Browse files
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,
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|