AIGenLatinText / app.py
Cicciokr's picture
Update app.py
319a73a verified
raw
history blame
3.81 kB
import streamlit as st
from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer, GPT2Tokenizer, GPT2LMHeadModel, MT5Model, AutoModelForSeq2SeqLM, BartForConditionalGeneration, BartTokenizer
# Frasi di esempio
examples = [
"Caesar in Gallia bellum gessit. <mask> instructae erant, sed subito",
"Est autem et aliud genus testudinis, quod <mask>, quemadmodum quae supra scripta sunt",
"Quemadmodum vero minores rotae duriores et <mask>, sic phalangae et iuga, in quibus partibus habent minora a centro ad capita intervalla",
"illud additur, ne, qui certum ordinem ex <mask>, ulli vos alteri hominum generi haerere vereamini nec timeatis vos"
]
examples_correct = [
"Omnes legiones",
"reliqua omnia habet",
"difficiliores habent motus",
"nostra definitione retinetis"
]
# Imposta una chiave di sessione per il testo input, così possiamo aggiornarlo
if "input_text_value" not in st.session_state:
st.session_state["input_text_value"] = examples[0]
if "input_text_value_correct" not in st.session_state:
st.session_state["input_text_value_correct"] = examples_correct[0]
st.title("Completamento di frasi in testi Latino Antico")
st.write("Esempi di testo (clicca sul bottone per copiare la frase nel campo di input):")
# Per ogni frase, creiamo una riga con la frase + bottone "Usa questa frase"
for i, example in enumerate(examples, start=1):
cols = st.columns([4,1]) # la prima colonna più larga per il testo, la seconda più stretta per il bottone
with cols[0]:
st.write(f"Esempio {i}: {example}")
with cols[1]:
# Se il bottone viene premuto, aggiorna la session state
if st.button(f"Usa {i}"):
st.session_state["input_text_value"] = example
st.session_state["input_text_value_correct"] = examples_correct[i]
# Qui la text_input è associata alla chiave "input_text_value"
input_text = st.text_area(
label="Testo:",
height=150, # Altezza in pixel
key="input_text_value"
)
# Esempio: carichiamo un modello di linguaggio
# (sostituisci con i tuoi modelli)
#model = GPT2LMHeadModel.from_pretrained("Cicciokr/GPT2-Latin-GenText")
#tokenizer = GPT2Tokenizer.from_pretrained("Cicciokr/GPT2-Latin-GenText")
#model_name = "morenolq/bart-it"
model_name_mio = "Cicciokr/BART-la-s"
model_mio = AutoModelForSeq2SeqLM.from_pretrained(model_name_mio)
tokenizer_mio = AutoTokenizer.from_pretrained(model_name_mio)
#tokenizer_mio.pad_token_id = tokenizer_mio.eos_token_id
#generator = pipeline("text2text-generation", model=model, tokenizer=tokenizer)
generator_mio = pipeline("text2text-generation", model=model_mio, tokenizer=tokenizer_mio)
# Se l'utente ha inserito (o selezionato) un testo
if input_text:
if 'input_text_value_correct' in st.session_state:
st.write(f" Parola corretta: {st.session_state['input_text_value_correct']}\n")
st.write(f" -----------------------------------------------------------\n")
inputs_mio = tokenizer_mio(input_text, return_tensors="pt")
output_mio = model_mio.generate(
**inputs_mio,
forced_bos_token_id=tokenizer_mio.bos_token_id,
max_length=50, do_sample=True, top_p=0.96, num_return_sequences=5
#num_return_sequences=1,
#top_k=50, # 🔹 Maggiore varietà nelle scelte
#top_p=0.95, # 🔹 Nucleus sampling per migliorare il realismo
#temperature=0.8, # 🔹 Bilancia la casualità
#repetition_penalty=1.2, # 🔹 Evita ripetizioni e loop
#max_length=50 # 🔹 Previene ripetizioni infinite
)
generated_text_mio = tokenizer_mio.decode(output_mio[0], skip_special_tokens=True)
#generated_text_mio = output_mio[0]["generated_text"]
st.subheader("Risultato BART CC100:")
st.write(f" Frase predetta: {generated_text_mio}\n")