File size: 3,412 Bytes
b75809a aafe73b f832c91 748baf0 b75809a f832c91 b75809a 748baf0 b568946 748baf0 198483c f5bac91 b75809a 4d48a61 b568946 aafe73b b568946 112973e 4d48a61 b568946 112973e 4d48a61 b568946 4d48a61 71f7c83 4d48a61 f690e4f 4d48a61 0bbbe3f 4d48a61 5fc9d52 4d48a61 b568946 4d48a61 2ce8295 496acc7 2ce8295 496acc7 c343d9f |
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 82 83 84 85 86 87 88 89 90 |
import streamlit as st
from pdfminer.high_level import extract_text
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("pile-of-law/legalbert-large-1.7M-2")
model = AutoModelForCausalLM.from_pretrained("databricks/dolly-v2-3b", trust_remote_code=True)
# Dokumentumfeldolgozó függvény
def process_document(document_file):
document_text = ""
if document_file.type == "application/pdf":
document_text = extract_text(document_file)
elif document_file.type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
docx_file = docx.Document(document_file)
for paragraph in docx_file.paragraphs:
text = paragraph.text
if text:
document_text += text.strip() + "\n\n"
elif document_file.type == "application/msword":
doc_file = docx.Document(document_file)
for paragraph in doc_file.paragraphs:
text = paragraph.text
if text:
document_text += text.strip() + "\n\n"
else:
st.error("A fájltípus nem támogatott. Kérlek válassz ki egy PDF, DOCX vagy DOC fájlt!")
return document_text
# Válaszgeneráló függvény
def generate_response(input_text):
# Bemeneti szöveg tisztítása
cleaned_input = input_text.strip()
# Tokenizálás
inputs = tokenizer(cleaned_input, return_tensors="pt", max_length=1024, truncation=True)
# 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
# Dokumentumfeltöltés feldolgozása
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 = process_document(document_file)
# 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)
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})
# Input text megjelenítése
st.subheader("Input Text:")
st.write(input_text)
# Response megjelenítése
st.subheader("Response:")
st.write(response)
|