AliMc2021 commited on
Commit
565265f
·
verified ·
1 Parent(s): cdf4596

Update generate.py

Browse files
Files changed (1) hide show
  1. generate.py +81 -79
generate.py CHANGED
@@ -1,80 +1,82 @@
1
- import torch
2
-
3
- seed = 0
4
-
5
- def generate_text(model_data, input_text, max_new_token):
6
- """
7
- Generate text using the given model and tokenizer.
8
- """
9
- if "pipeline" in model_data:
10
- # اگر مدل از pipeline پشتیبانی می‌کند
11
- model_pipeline = model_data["pipeline"]
12
- generated_text = model_pipeline(
13
- input_text,
14
- max_length=max_new_token + len(input_text.split()), # افزایش max_length
15
- do_sample=False, # غیرفعال کردن نمونه‌گیری (حالت حریصانه)
16
- truncation=True # فعال کردن truncation
17
- )[0]["generated_text"]
18
- return generated_text
19
- else:
20
- # روش قدیمی برای مدل‌هایی که از pipeline پشتیبانی نمی‌کنند
21
- model = model_data["model"]
22
- tokenizer = model_data["tokenizer"]
23
-
24
- if tokenizer.pad_token is None:
25
- tokenizer.pad_token = tokenizer.eos_token
26
-
27
- torch.manual_seed(seed)
28
- torch.cuda.manual_seed_all(seed)
29
-
30
- encodings = tokenizer(
31
- input_text,
32
- return_tensors="pt",
33
- padding=True,
34
- truncation=True, # فعال کردن truncation
35
- max_length=512
36
- )
37
- input_ids = encodings.input_ids
38
- attention_mask = encodings.attention_mask
39
-
40
- outputs = model.generate(
41
- input_ids=input_ids,
42
- attention_mask=attention_mask,
43
- max_new_tokens=max_new_token, # استفاده از max_new_tokens
44
- do_sample=False, # غیرفعال کردن نمونه‌گیری (حالت حریصانه)
45
- pad_token_id=tokenizer.eos_token_id,
46
- repetition_penalty=1.2,
47
- no_repeat_ngram_size=3,
48
- )
49
-
50
- return tokenizer.decode(outputs[0], skip_special_tokens=True)
51
-
52
- def generate_code(model_data, prompt, max_new_tokens):
53
- """
54
- Generate code based on the provided prompt using a code-specific model.
55
- """
56
- model = model_data["model"]
57
- tokenizer = model_data["tokenizer"]
58
-
59
- # تنظیم seed برای خروجی ثابت
60
- torch.manual_seed(seed)
61
- torch.cuda.manual_seed_all(seed)
62
-
63
- # توکنایز کردن ورودی
64
- input_ids = tokenizer.encode(prompt, return_tensors="pt")
65
-
66
- # ایجاد attention mask
67
- attention_mask = torch.ones(input_ids.shape, device=input_ids.device)
68
-
69
- # تولید کد
70
- outputs = model.generate(
71
- input_ids=input_ids,
72
- attention_mask=attention_mask,
73
- max_new_tokens=max_new_tokens,
74
- do_sample=False, # غیرفعال کردن نمونه‌گیری (حالت حریصانه)
75
- pad_token_id=tokenizer.eos_token_id,
76
- repetition_penalty=1.2,
77
- no_repeat_ngram_size=3,
78
- )
79
-
 
 
80
  return tokenizer.decode(outputs[0], skip_special_tokens=True)
 
1
+ import torch
2
+
3
+ seed = 0
4
+
5
+ def generate_text(model_data, input_text, max_new_token):
6
+ """
7
+ Generate text using the given model and tokenizer.
8
+ """
9
+ if "pipeline" in model_data:
10
+ # اگر مدل از pipeline پشتیبانی می‌کند
11
+ model_pipeline = model_data["pipeline"]
12
+ generated_text = model_pipeline(
13
+ input_text,
14
+ max_length=max_new_token + len(input_text.split()), # افزایش max_length
15
+ do_sample=False, # غیرفعال کردن نمونه‌گیری (حالت حریصانه)
16
+ truncation=True, # فعال کردن truncation
17
+ repetition_penalty=1.5,
18
+ no_repeat_ngram_size=3,
19
+ )[0]["generated_text"]
20
+ return generated_text
21
+ else:
22
+ # روش قدیمی برای مدل‌هایی که از pipeline پشتیبانی نمی‌کنند
23
+ model = model_data["model"]
24
+ tokenizer = model_data["tokenizer"]
25
+
26
+ if tokenizer.pad_token is None:
27
+ tokenizer.pad_token = tokenizer.eos_token
28
+
29
+ torch.manual_seed(seed)
30
+ torch.cuda.manual_seed_all(seed)
31
+
32
+ encodings = tokenizer(
33
+ input_text,
34
+ return_tensors="pt",
35
+ padding=True,
36
+ truncation=True, # فعال کردن truncation
37
+ max_length=512
38
+ )
39
+ input_ids = encodings.input_ids
40
+ attention_mask = encodings.attention_mask
41
+
42
+ outputs = model.generate(
43
+ input_ids=input_ids,
44
+ attention_mask=attention_mask,
45
+ max_new_tokens=max_new_token, # استفاده از max_new_tokens
46
+ do_sample=False, # غیرفعال کردن نمونه‌گیری (حالت حریصانه)
47
+ pad_token_id=tokenizer.eos_token_id,
48
+ repetition_penalty=1.5,
49
+ no_repeat_ngram_size=3,
50
+ )
51
+
52
+ return tokenizer.decode(outputs[0], skip_special_tokens=True)
53
+
54
+ def generate_code(model_data, prompt, max_new_tokens):
55
+ """
56
+ Generate code based on the provided prompt using a code-specific model.
57
+ """
58
+ model = model_data["model"]
59
+ tokenizer = model_data["tokenizer"]
60
+
61
+ # تنظیم seed برای خروجی ثابت
62
+ torch.manual_seed(seed)
63
+ torch.cuda.manual_seed_all(seed)
64
+
65
+ # توکنایز کردن ورودی
66
+ input_ids = tokenizer.encode(prompt, return_tensors="pt")
67
+
68
+ # ایجاد attention mask
69
+ attention_mask = torch.ones(input_ids.shape, device=input_ids.device)
70
+
71
+ # تولید کد
72
+ outputs = model.generate(
73
+ input_ids=input_ids,
74
+ attention_mask=attention_mask,
75
+ max_new_tokens=max_new_tokens,
76
+ do_sample=False, # غیرفعال کردن نمونه‌گیری (حالت حریصانه)
77
+ pad_token_id=tokenizer.eos_token_id,
78
+ repetition_penalty=1.5,
79
+ no_repeat_ngram_size=3,
80
+ )
81
+
82
  return tokenizer.decode(outputs[0], skip_special_tokens=True)