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})