legalgeek / app.py
albhu's picture
Update app.py
20e0aad verified
raw
history blame
3.47 kB
import streamlit as st
from transformers import AutoTokenizer, AutoModelForCausalLM
st.title("Jogi Dokumentumok AI Válaszgenerálás")
# Előző beszélgetések tárolása session state-ben
if "previous_conversations" not in st.session_state:
st.session_state.previous_conversations = []
# Korábbi beszélgetések törlése
if st.checkbox("Korábbi Beszélgetések Törlése"):
st.session_state.previous_conversations = []
# Tokenizáló modell és válaszgeneráló modell választása
tokenizer_name = "pile-of-law/legalbert-large-1.7M-2"
model_name = "apple/OpenELM-3B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(tokenizer_name)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)
# Definiáljuk a válaszgeneráló függvényt
def generate_response(input_text, tokenizer, model):
# Tokenizálás
input_ids = tokenizer.encode(input_text, return_tensors="pt", max_length=tokenizer.model_max_length, truncation=True)
# Modell használata a válasz generálásához
output = model.generate(input_ids, num_return_sequences=1, pad_token_id=tokenizer.eos_token_id)
# Decoding és válasz visszaadása
response = tokenizer.decode(output[0], skip_special_tokens=True)
return response
# Dokumentum feltöltése drag and drop segítségével
document_file = st.file_uploader("Húzd ide a dokumentumot vagy kattints a feltöltéshez", type=["pdf", "docx", "doc"])
if document_file is not None:
document_text = ""
if document_file.type == "application/pdf":
with pdfplumber.open(document_file) as pdf:
for page in pdf.pages:
document_text += page.extract_text()
# Ha bekezdésekre bontjuk, hozzáadhatunk például egy sortörést a bekezdések közé:
document_text += "\n\n"
elif document_file.type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
docx_file = docx.Document(document_file)
for paragraph in docx_file.paragraphs:
document_text += paragraph.text
# Hasonlóan, itt is adhatunk hozzá sortörést a bekezdések közé:
document_text += "\n\n"
elif document_file.type == "application/msword":
doc_file = docx.Document(document_file)
for paragraph in doc_file.paragraphs:
document_text += paragraph.text
document_text += "\n\n"
else:
st.error("A fájltípus nem támogatott. Kérlek válassz ki egy PDF, DOCX vagy DOC fájlt!")
# Előző beszélgetésekhez csatolható kontextus
context = st.text_area("Korábbi Beszélgetéshez Tartozó Kontextus", "")
# Kérdés mező hozzáadása
question = st.text_input("Kérdés a Dokumentumból", "")
# Ha van kérdés, azt is hozzáadjuk a bemenethez
if question:
input_text = f"{context} {document_text} {question}" if context else f"{document_text} {question}"
else:
input_text = f"{context} {document_text}" if context else document_text
# Válasz generálása csak akkor, ha a felhasználó elküldi a promptot
if input_text.strip() != "":
response = generate_response(input_text, tokenizer, model)
st.subheader("Generált Válasz:")
st.write(response)
# Aktuális beszélgetés hozzáadása az előző beszélgetésekhez
st.session_state.previous_conversations.append({"input_text": input_text, "response": response})