File size: 2,530 Bytes
5666a5c
 
 
af7e3ad
 
 
5666a5c
af7e3ad
 
5666a5c
af7e3ad
5666a5c
 
af7e3ad
5666a5c
af7e3ad
5666a5c
 
 
af7e3ad
5666a5c
 
 
 
af7e3ad
 
 
 
5666a5c
 
 
 
 
af7e3ad
 
5666a5c
af7e3ad
 
 
 
5666a5c
af7e3ad
 
 
5666a5c
 
af7e3ad
5666a5c
 
 
 
 
af7e3ad
5666a5c
 
 
 
 
 
af7e3ad
5666a5c
 
 
 
 
 
af7e3ad
5666a5c
 
 
 
 
af7e3ad
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
import transformers
import streamlit as st

from transformers import AutoModelForCausalLM, AutoTokenizer

checkpoint = "gpt2-large"
  
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
@st.cache_resource
def load_model(model_name):
    model = AutoModelForCausalLM.from_pretrained(model_name)
    return model

model = load_model(checkpoint)

def infer(input_ids, max_tokens, temperature, top_k, top_p):

    output_sequences = model.generate(
        input_ids=input_ids,
        max_new_tokens=max_tokens,
        temperature=temperature,
        top_k=top_k,
        top_p=top_p,
        do_sample=True,
        no_repeat_ngram_size=2,
        early_stopping=True,
        num_beams=4,
        pad_token_id=tokenizer.eos_token_id,
        num_return_sequences=1
    )

    return output_sequences

default_value = "We are building the world's first"
    
#prompts
st.title("Write with vcGPT 🦄")
st.write("This is a LLM that was fine-tuned on a dataset of investment memos to help you generate your next pitch.")

sent = st.text_area("Text", default_value, height = 400)

max_tokens = st.sidebar.slider("Max Tokens", min_value = 32, max_value=512)
temperature = st.sidebar.slider("Temperature", value = 0.8, min_value = 0.0, max_value=1.0, step=0.05)
top_k = st.sidebar.slider("Top-k", min_value = 0, max_value=5, value = 4)
top_p = st.sidebar.slider("Top-p", min_value = 0.0, max_value=1.0, step = 0.05, value = 0.9)

encoded_prompt = tokenizer.encode(tokenizer.eos_token+sent, add_special_tokens=False, return_tensors="pt")
if encoded_prompt.size()[-1] == 0:
    input_ids = None
else:
    input_ids = encoded_prompt

output_sequences = infer(input_ids, max_tokens, temperature, top_k, top_p)

for generated_sequence_idx, generated_sequence in enumerate(output_sequences):
    print(f"=== GENERATED SEQUENCE {generated_sequence_idx + 1} ===")
    generated_sequences = generated_sequence.tolist()

    # Decode text
    text = tokenizer.decode(generated_sequence, clean_up_tokenization_spaces=True, skip_special_tokens=True)

    # Remove all text after the stop token
    #text = text[: text.find(args.stop_token) if args.stop_token else None]

    # Add the prompt at the beginning of the sequence. Remove the excess text that was used for pre-processing
    total_sequence = (
        sent + text[len(tokenizer.decode(encoded_prompt[0], clean_up_tokenization_spaces=True, skip_special_tokens=True)) :]
    )

    generated_sequences.append(total_sequence)
    print(total_sequence)

st.write(generated_sequences[-1])