Spaces:
Sleeping
Sleeping
Joaoffg
commited on
Commit
•
a6150d4
1
Parent(s):
954c089
Update space
Browse files
app.py
CHANGED
@@ -1,4 +1,59 @@
|
|
1 |
import gradio as gr
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
def evaluate(instruction):
|
4 |
# Generate a response:
|
@@ -56,6 +111,7 @@ def evaluate(instruction):
|
|
56 |
# print(output)
|
57 |
return(f' {prompter.get_response(output)}')
|
58 |
|
|
|
59 |
gr.Interface(
|
60 |
fn=evaluate,
|
61 |
inputs=[
|
@@ -73,4 +129,5 @@ gr.Interface(
|
|
73 |
],
|
74 |
title="🌲 ELM - Erasmian Language Model",
|
75 |
description="ELM is a 900M parameter language model finetuned to follow instruction. It is trained on Erasmus University academic outputs and the [Stanford Alpaca](https://github.com/tatsu-lab/stanford_alpaca) dataset. For more information, please visit [the GitHub repository](https://github.com/Joaoffg/ELM).", # noqa: E501
|
76 |
-
).queue().
|
|
|
|
1 |
import gradio as gr
|
2 |
+
import torch
|
3 |
+
import transformers
|
4 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
5 |
+
|
6 |
+
class CustomPrompter(Prompter):
|
7 |
+
def get_response(self, output: str) -> str:
|
8 |
+
return output.split(self.template["response_split"])[1].strip().split("### Instruction:")[0]
|
9 |
+
|
10 |
+
prompter = CustomPrompter(prompt_template_name)
|
11 |
+
|
12 |
+
def tokenize(prompt, add_eos_token=True):
|
13 |
+
result = tokenizer(
|
14 |
+
prompt,
|
15 |
+
truncation=True,
|
16 |
+
max_length=cutoff_len,
|
17 |
+
padding=False,
|
18 |
+
return_tensors=None,
|
19 |
+
)
|
20 |
+
if (
|
21 |
+
result["input_ids"][-1] != tokenizer.eos_token_id
|
22 |
+
and len(result["input_ids"]) < cutoff_len
|
23 |
+
and add_eos_token
|
24 |
+
):
|
25 |
+
result["input_ids"].append(tokenizer.eos_token_id)
|
26 |
+
result["attention_mask"].append(1)
|
27 |
+
|
28 |
+
result["labels"] = result["input_ids"].copy()
|
29 |
+
|
30 |
+
return result
|
31 |
+
|
32 |
+
def generate_and_tokenize_prompt(data_point):
|
33 |
+
full_prompt = prompter.generate_prompt(
|
34 |
+
data_point["instruction"],
|
35 |
+
data_point["input"],
|
36 |
+
data_point["output"],
|
37 |
+
)
|
38 |
+
tokenized_full_prompt = tokenize(full_prompt)
|
39 |
+
if not train_on_inputs:
|
40 |
+
user_prompt = prompter.generate_prompt(
|
41 |
+
data_point["instruction"], data_point["input"]
|
42 |
+
)
|
43 |
+
tokenized_user_prompt = tokenize(
|
44 |
+
user_prompt, add_eos_token=add_eos_token
|
45 |
+
)
|
46 |
+
user_prompt_len = len(tokenized_user_prompt["input_ids"])
|
47 |
+
|
48 |
+
if add_eos_token:
|
49 |
+
user_prompt_len -= 1
|
50 |
+
|
51 |
+
tokenized_full_prompt["labels"] = [
|
52 |
+
-100
|
53 |
+
] * user_prompt_len + tokenized_full_prompt["labels"][
|
54 |
+
user_prompt_len:
|
55 |
+
] # could be sped up, probably
|
56 |
+
return tokenized_full_prompt
|
57 |
|
58 |
def evaluate(instruction):
|
59 |
# Generate a response:
|
|
|
111 |
# print(output)
|
112 |
return(f' {prompter.get_response(output)}')
|
113 |
|
114 |
+
|
115 |
gr.Interface(
|
116 |
fn=evaluate,
|
117 |
inputs=[
|
|
|
129 |
],
|
130 |
title="🌲 ELM - Erasmian Language Model",
|
131 |
description="ELM is a 900M parameter language model finetuned to follow instruction. It is trained on Erasmus University academic outputs and the [Stanford Alpaca](https://github.com/tatsu-lab/stanford_alpaca) dataset. For more information, please visit [the GitHub repository](https://github.com/Joaoffg/ELM).", # noqa: E501
|
132 |
+
).queue().launch(server_name="0.0.0.0", share=True)
|
133 |
+
# Old testing code follows.
|