File size: 3,468 Bytes
b75809a 748baf0 b75809a b568946 b75809a 748baf0 b568946 748baf0 17220dc 20e0aad 748baf0 6be2107 b75809a 4cad79c b5a0f4f 4cad79c 252acf6 4cad79c ba036f9 b75809a ba036f9 b568946 b75809a b568946 496acc7 2ce8295 496acc7 2ce8295 496acc7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
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})
|