Update README.md
Browse files
README.md
CHANGED
@@ -1,3 +1,237 @@
|
|
1 |
-
---
|
2 |
-
|
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 |
+
```
|