File size: 3,347 Bytes
b75809a f832c91 748baf0 b75809a f832c91 b75809a 748baf0 b568946 748baf0 f832c91 b75809a 4cad79c f832c91 4cad79c f832c91 4cad79c f832c91 4cad79c ba036f9 b75809a ba036f9 b568946 b75809a b568946 f832c91 b568946 f832c91 b568946 f832c91 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 80 81 |
import streamlit as st
import pdfplumber
import docx
from transformers import AutoTokenizer, AutoModelForCausalLM
st.title("JAI")
# 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 = AutoTokenizer.from_pretrained("AdaptLLM/law-chat")
model = AutoModelForCausalLM.from_pretrained("AdaptLLM/law-chat", trust_remote_code=True)
# Definiáljuk a válaszgeneráló függvényt
def generate_response(input_text, tokenizer, model):
# Tokenizálás
inputs = tokenizer(input_text, return_tensors="pt", max_length=1024)
# Modell használata a válasz generálásához
outputs = model(**inputs)
# Válasz visszaadása
response = tokenizer.decode(outputs.logits.argmax(dim=1)[0])
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":
# PDF fájl feldolgozása
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 fájl feldolgozása
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 fájl feldolgozása
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})
|