cb / app.py
UnnamedUnknownx1234987789489's picture
Update app.py
3f69e55 verified
import os
import streamlit as st
import asyncio
from langchain_community.utilities import SQLDatabase
from typing_extensions import TypedDict, List
from IPython.display import Image, display
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain.schema import Document
from langgraph.graph import START, END, StateGraph
from langchain.prompts import PromptTemplate, ChatPromptTemplate
from sqlalchemy import create_engine
import uuid
from langchain_groq import ChatGroq
from langchain_community.utilities import GoogleSerperAPIWrapper
from langchain_chroma import Chroma
from langchain_community.document_loaders import NewsURLLoader
from langchain_community.retrievers.wikipedia import WikipediaRetriever
from langchain.vectorstores import Chroma
from langchain_community.document_loaders import UnstructuredURLLoader, NewsURLLoader
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import WebBaseLoader
from langchain_core.output_parsers import JsonOutputParser
from langchain_community.vectorstores.utils import filter_complex_metadata
from langchain.schema import Document
from langgraph.graph import START, END, StateGraph
from langchain_community.document_loaders.directory import DirectoryLoader
import pprint
from pathlib import Path
from langchain.retrievers import ContextualCompressionRetriever
from langchain.storage import InMemoryByteStore
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.retrievers.document_compressors import CrossEncoderReranker
from langchain_community.cross_encoders import HuggingFaceCrossEncoder
import re
from functions import *
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
def main():
st.set_page_config(page_title="Birutė, Teisės Asistentė: ",
page_icon=":books:")
st.header("Birutė, Lietuviškos Civilinės teisės asistentė :" ":books:")
db = None
custom_graph = None
search_type = st.selectbox(
" ##### Pasirinkite paieškos būdą. Pasirinkimai yra: [Max marginal relevance search (MMR), Similarity search (similarity). Default value (similarity)], MMR gražina dokumentus iš platesnio spectro infromacijos, similarity is mažesnio, konkrečiau susijusio su užklausa",
options=["mmr", "similarity"],
index=0
)
k = st.select_slider(
" ###Pasirinkite kieki dokumentų, kuriuos norėtumete naudoti generuojant atsakymą. Per daug dokumentų, kartais gali prikimšti asistentės atminti nereikalinga informacija ir dėl to gali atsirasti haliucinacijos. Parinktasis dokumentų kiekis: (4): ",
options=list(range(2, 9)),
value=3
)
full_retriever = create_retriever_from_chroma(vectorstore_path="docs/chroma/", search_type=search_type, k=k, chunk_size=9500, chunk_overlap=0)
#compression_full_retriever = ContextualCompressionRetriever(
# base_compressor=compressor, base_retriever=full_retriever
# )
# Tabs for Chat and Document Search
tab1, tab2 = st.tabs(["Teisės Asistentė", "Informacijos Paieška Dokumentuose"])
if "active_tab" not in st.session_state:
st.session_state["active_tab"] = "Teisės Asistentė "
with tab1:
st.markdown("""
###### Prisiminkite: Aš esu virtuali asistentė, ne profesionali teisininkė. Naudokite savo kritinį mąstymą priimdami sprendimus arba pasitarkite su teisininku.
""")
if "messages" not in st.session_state:
st.session_state["messages"] = [
{"role": "assistant", "content": "Labas, aš virtuali teisės asistentė Birutė. Kuo galėčiau jums padėti?"}
]
custom_graph = create_workflow(full_retriever)
user_question = st.text_input("Klauskite klausimus susijusius su civiline teise.:")
klausti_btn = st.button("Klausti")
if klausti_btn:
with st.spinner("Galvojama"):
try:
handle_userinput(user_question, custom_graph)
except Exception as e:
st.write(f"Error: {e}")
with tab2:
st.session_state["active_tab"] = "Informacijos Paieška Dokumentuose"
if st.session_state["active_tab"] == "Informacijos Paieška Dokumentuose":
user_topic = st.text_input("Paieška dokumentuose pagal tekstinį atitikimą:")
ieskoti_btn = st.button("Ieškoti informacijos")
if ieskoti_btn:
with st.sidebar:
try:
relevant_docs = full_retriever.get_relevant_documents(user_topic)
pretty_output_parts = []
for doc in relevant_docs:
pretty_output_parts.append("\n\n**Documentų Meta duomenys**:\n")
metadata_str = "Dokumento Pavadinimas: " + doc.metadata.get('original_doc_name', 'unknown')
pretty_output_parts.append(metadata_str)
pretty_output_parts.append("\n\n**Dokumentu skirsniai**:\n")
content = doc.page_content.replace('\\n\\n\\n\\n', '\n\n').replace('\\n\\n', '\n\n')
pretty_output_parts.append(content)
pretty_output = "\n\n\n".join(pretty_output_parts)
st.markdown(pretty_output)
except Exception as e:
st.write(f"Error: {e}")
if __name__ == "__main__":
main()