Spaces:
Sleeping
Sleeping
import streamlit as st | |
import transformers | |
import torch | |
from transformers import GPT2LMHeadModel, GPT2Tokenizer | |
def load_model(): | |
borgesian = GPT2LMHeadModel.from_pretrained('sberbank-ai/rugpt3small_based_on_gpt2', output_attentions = False, output_hidden_states = False) | |
tokenizer = GPT2Tokenizer.from_pretrained("sberbank-ai/rugpt3small_based_on_gpt2") | |
return borgesian, tokenizer | |
borgesian, tokenizer = load_model() | |
borgesian.load_state_dict(torch.load('borgesian_weights.pt', map_location=torch.device('cpu'))) | |
borgesian.to('cpu') | |
borgesian.eval() | |
def generate_response(text, temperature, length, top_p): | |
input_ids = tokenizer.encode(text, return_tensors="pt") | |
with torch.no_grad(): | |
out = borgesian.generate(input_ids, do_sample=True, num_beams=2, temperature=float(temperature), top_p=float(top_p), max_length=length) | |
generated_text = list(map(tokenizer.decode, out))[0] | |
last_full_stop_index = generated_text.rfind('.') | |
st.write(generated_text[:last_full_stop_index + 1]) | |
st.title('Borgesian') | |
st.image('borges.jpg') | |
st.write('Write a prompt in Russian, and the GPT-based model will follow up with a Borgesian text.') | |
st.write('Define the parameters of generation:') | |
temperature = st.slider('Temperature', value = 1.5, min_value = 1.0, max_value = 5.0, step = 0.1) | |
length = st.slider('Length', value = 50, min_value = 20, max_value = 250, step = 1) | |
top_p = st.slider('Top-p value', value = 0.9, min_value = 0.5, max_value = 1.0, step = 0.05) | |
user_input = st.text_area("Enter your text:") | |
if st.button("Send"): | |
if user_input: | |
generate_response(user_input, temperature, length, top_p) | |
st.image('penrose_tiling.jpg') | |
else: | |
st.warning("Please enter some text.") | |