germanjke commited on
Commit
5725375
·
verified ·
1 Parent(s): 946ca72

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +237 -3
README.md CHANGED
@@ -1,3 +1,237 @@
1
- ---
2
- license: apache-2.0
3
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language:
3
+ - ru
4
+ license: apache-2.0
5
+ base_model:
6
+ - Qwen/Qwen3-32B
7
+ ---
8
+ # T-pro-it-2.0
9
+
10
+ **🚨 Users are advised to exercise caution and are responsible for any additional training and oversight required to ensure the model's responses meet acceptable ethical and safety standards. The responsibility for incorporating this model into industrial or commercial solutions lies entirely with those who choose to deploy it.**
11
+
12
+ ## Description
13
+
14
+ T-pro-it-2.0 is a model built upon the Qwen 3 model family and incorporates both continual pre-training and alignment techniques.
15
+
16
+ ### 📚 Dataset
17
+
18
+ Instruction Pre-Training:
19
+ 40B tokens of instruction data, with one-third focused on reasoning tasks.
20
+
21
+ Supervised Fine-Tuning (SFT):
22
+ ~500K high-quality and diverse instructions with balanced complexity. Reasoning tasks make up 10% of the dataset.
23
+
24
+ Preference Tuning:
25
+ ~100K carefully selected instructions, filtered by length and type for general tasks and with domain-balanced selection for reasoning tasks.
26
+
27
+ ## 📊 Benchmarks
28
+
29
+ tba
30
+
31
+ ## Switching Between Thinking and Non‑Thinking Modes
32
+
33
+ To enable or disable reasoning mode in HuggingFace, set the `enable_thinking` flag in `tokenizer.apply_chat_template`.
34
+ For more details, see:
35
+ - [SGLang Thinking/Non‑Thinking Modes](https://qwen.readthedocs.io/en/latest/deployment/sglang.html#thinking-non-thinking-modes)
36
+ - [vLLM Thinking/Non‑Thinking Modes](https://qwen.readthedocs.io/en/latest/deployment/vllm.html#thinking-non-thinking-modes)
37
+
38
+ ---
39
+
40
+ ## Recommended Generation Parameters
41
+
42
+ | Mode | Temperature | presence_penalty |
43
+ |-----------------------------------|-------------|------------------|
44
+ | No‑think (general requests) | ≤ 0.3 | 1.0 |
45
+ | Think mode (standard requests) | ≈ 0.6 | 1.0 |
46
+ | Complex reasoning requests | ≥ 0.8 | 1.0 |
47
+
48
+
49
+ ## 👨‍💻 Examples of usage
50
+
51
+ ### HF Usage
52
+
53
+ ```python
54
+ from transformers import AutoTokenizer, AutoModelForCausalLM
55
+ import torch
56
+ torch.manual_seed(42)
57
+
58
+ model_name = "t-tech/T-pro-it-2.0"
59
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
60
+ model = AutoModelForCausalLM.from_pretrained(
61
+ model_name,
62
+ torch_dtype="auto",
63
+ device_map="auto",
64
+ )
65
+
66
+ prompt = (
67
+ "Пожалуйста, вычисли определённый интеграл ∫_0^1 x² eˣ dx, "
68
+ "пошагово объясни решение и укажи окончательный результат."
69
+ )
70
+ messages = [
71
+ {"role": "system", "content": "Ты T-pro, виртуальный ассистент в Т-Технологии. Твоя задача - быть полезным диалоговым ассистентом."},
72
+ {"role": "user", "content": prompt}
73
+ ]
74
+ text = tokenizer.apply_chat_template(
75
+ messages,
76
+ tokenize=False,
77
+ add_generation_prompt=True,
78
+ enable_thinking=True # Switches between thinking and non-thinking modes. Default is True.
79
+ )
80
+ model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
81
+
82
+ generated_ids = model.generate(
83
+ **model_inputs,
84
+ max_new_tokens=512
85
+ )
86
+ generated_ids = [
87
+ output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
88
+ ]
89
+
90
+ response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
91
+
92
+ print(response)
93
+
94
+ ```
95
+
96
+ Output:
97
+ ```
98
+ <think>
99
+ Хорошо, мне нужно вычислить определенный интеграл от 0 до 1 функции x² * e^x dx. Я помню, что для интегралов такого вида, где есть произведение многочлена и экспоненты, обычно применяют метод интегрирования по частям. Давайте вспомню формулу интегрирования по частям: ∫u dv = uv - ∫v du.
100
+
101
+ Первым делом нужно выбрать, что взять за u, а что за dv. Обычно в таких случаях многочлен (в данном случае x²) берут за u, потому что при дифференцировании его степень понижается, и в конце концов он превратится в константу, что упростит интеграл. Тогда dv будет оставшаяся часть, то есть e^x dx.
102
+
103
+ Итак, пусть u = x², тогда du = 2x dx. А dv = e^x dx, значит, v = ∫e^x dx = e^x.
104
+
105
+ Теперь применим формулу интегрирования по частям: ∫x² e^x dx = uv - ∫v du = x² e^x - ∫e^x * 2x dx.
106
+
107
+ Теперь у нас остался интеграл ∫2x e^x dx. Его тоже нужно взять по частям. Опять выбираем u и dv. Теперь u = 2x, тогда du = 2 dx, а dv = e^x dx, значит, v = e^x.
108
+
109
+ Применяем формулу снова: ∫2x e^x dx = 2x e^x - ∫e^x * 2 dx = 2x e^x - 2∫e^x dx.
110
+
111
+ Интеграл ∫e^x dx равен e^x + C. Подставляем обратно: 2x e^x - 2e^x + C.
112
+
113
+ Теперь возвращаемся к исходному интегралу: x² e^x - (2x e^x - 2e^x) + C = x² e^x - 2x e^x + 2e^x + C.
114
+
115
+ Теперь нужно вычислить определенный интеграл от 0 до 1. Для этого подставим верхний и нижний пределы в первообразную и вычтем.
116
+
117
+ Сначала подставим x = 1: (1² * e^1) - 2*1*e^1 + 2*e^1 = e - 2e + 2e = (1 - 2 + 2)e = 1*e = e.
118
+
119
+ Теперь подставим x = 0: (0² * e^0) - 2*0*e^0 + 2*e^0 = 0 - 0 + 2*1 = 2.
120
+
121
+ Вычитаем: e - 2.
122
+
123
+ Проверю, не ошибся ли я в вычислениях. При подстановке x=1: 1*e - 2*1*e + 2*e = e - 2e + 2e = e. Да, верно. При x=0: 0 - 0 + 2*1 = 2. Тогда разность e - 2.
124
+
125
+ Но подожди, может быть я где-то пропустил знак? В первообразной после интегрирования по частям: x² e^x - 2x e^x + 2e^x. Да, правильно. Тогда при подстановке 1: 1*e - 2*1*e + 2*e = (1 - 2 + 2)e = 1*e. При 0: 0 - 0 + 2*1 = 2. Тогда ответ e - 2.
126
+
127
+ Но e примерно равно 2.718, значит, e - 2 ≈ 0.718. Интуитивно кажется, что интеграл от 0 до 1 x² e^x должен быть положительным, что соответствует.
128
+
129
+ Может, стоит проверить через другой метод или дифференцированием первообразной? Возьмем производную от x² e^x - 2x e^x + 2e^x.
130
+
131
+ Производная: d/dx [x² e^x] = 2x e^x + x² e^x.
132
+
133
+ d/dx [-2x e^x] = -2 e^x - 2x e^x.
134
+
135
+ d/dx [2e^x] = 2 e^x.
136
+
137
+ Складываем все: 2x e^x + x² e^x - 2 e^x - 2x e^x + 2 e^x = x² e^x.
138
+
139
+ Да, производная равна подынтегральной функции. Значит, первообразная найдена верно. Тогда определенный интеграл равен e - 2.
140
+
141
+ Вроде все правильно. Возможно, можно было использовать рекуррентную формулу или таблицу интегралов, но метод по частям сработал.
142
+
143
+ Итак, окончательный ответ: e - 2.
144
+ </think>
145
+
146
+ Для вычисления определённого интеграла
147
+ $$
148
+ \int_0^1 x^2 e^x \, dx
149
+ $$
150
+ используем **метод интегрирования по частям**.
151
+
152
+ ### Шаг 1: Применение интегрирования по частям
153
+ Формула интегрирования по частям:
154
+ $$
155
+ \int u \, dv = uv - \int v \, du.
156
+ $$
157
+ Выбираем:
158
+ - $ u = x^2 $, тогда $ du = 2x \, dx $,
159
+ - $ dv = e^x \, dx $, тогда $ v = e^x $.
160
+
161
+ Подставляем в формулу:
162
+ $$
163
+ \int x^2 e^x \, dx = x^2 e^x - \int e^x \cdot 2x \, dx = x^2 e^x - 2 \int x e^x \, dx.
164
+ $$
165
+
166
+ ### Шаг 2: Интегрирование оставшегося интеграла
167
+ Теперь вычисляем $ \int x e^x \, dx $, снова применяя интегрирование по частям:
168
+ - $ u = x $, тогда $ du = dx $,
169
+ - $ dv = e^x \, dx $, тогда $ v = e^x $.
170
+
171
+ Получаем:
172
+ $$
173
+ \int x e^x \, dx = x e^x - \int e^x \, dx = x e^x - e^x + C.
174
+ $$
175
+
176
+ Подставляем обратно:
177
+ $$
178
+ \int x^2 e^x \, dx = x^2 e^x - 2 \left( x e^x - e^x \right) + C = x^2 e^x - 2x e^x + 2 e^x + C.
179
+ $$
180
+
181
+ ### Шаг 3: Вычисление определённого интеграла
182
+ Подставляем пределы $ 0 $ и $ 1 $:
183
+ $$
184
+ \left[ x^2 e^x - 2x e^x + 2 e^x \right]_0^1 = \left( 1^2 e^1 - 2 \cdot 1 \cdot e^1 + 2 e^1 \right) - \left( 0^2 e^0 - 2 \cdot 0 \cdot e^0 + 2 e^0 \right).
185
+ $$
186
+
187
+ Упрощаем:
188
+ - При $ x = 1 $:
189
+ $$
190
+ e - 2e + 2e = e.
191
+ $$
192
+ - При $ x = 0 $:
193
+ $$
194
+ 0 - 0 + 2 \cdot 1 = 2.
195
+ $$
196
+
197
+ Итоговый результат:
198
+ $$
199
+ e - 2.
200
+ $$
201
+
202
+ ### Ответ:
203
+ $$
204
+ \boxed{e - 2}
205
+ $$
206
+ ```
207
+
208
+ ### VLLM Usage
209
+
210
+ ```python
211
+ from transformers import AutoTokenizer
212
+ from vllm import LLM, SamplingParams
213
+
214
+ model_name = "t-tech/T-pro-it-2.0"
215
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
216
+ llm = LLM(model=model_name, max_model_len=8192)
217
+ sampling_params = SamplingParams(temperature=0.7,
218
+ repetition_penalty=1.05,
219
+ top_p=0.8, top_k=70,
220
+ max_tokens=512)
221
+
222
+ prompt = (
223
+ "Пожалуйста, вычисли определённый интеграл ∫_0^1 x² eˣ dx, "
224
+ "пошагово объясни решение и укажи окончательный результат."
225
+ )
226
+ messages = [
227
+ {"role": "system", "content": "��ы T-pro, виртуальный ассистент в Т-Технологии. Твоя задача - быть полезным диалоговым ассистентом."},
228
+ {"role": "user", "content": prompt}
229
+ ]
230
+
231
+ prompt_token_ids = tokenizer.apply_chat_template(messages, add_generation_prompt=True)
232
+
233
+ outputs = llm.generate(prompt_token_ids=prompt_token_ids, sampling_params=sampling_params)
234
+
235
+ generated_text = [output.outputs[0].text for output in outputs]
236
+ print(generated_text)
237
+ ```