Joaoffg commited on
Commit
a6150d4
1 Parent(s): 954c089

Update space

Browse files
Files changed (1) hide show
  1. app.py +58 -1
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().load("models/Joaoffg/ELM").launch()
 
 
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.