ddfws commited on
Commit
aec3617
·
verified ·
1 Parent(s): fa88a82

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +123 -99
app.py CHANGED
@@ -6,9 +6,9 @@ from transformers import AutoTokenizer, AutoModelForCausalLM
6
 
7
 
8
 
9
- # =========================
10
- # Model
11
- # =========================
12
 
13
  MODEL_ID = "ddfws/Rezaeian-StatsAI"
14
 
@@ -40,82 +40,88 @@ print("MODEL READY")
40
 
41
 
42
 
43
- # =========================
44
- # Professional Prompt
45
- # =========================
46
 
47
 
48
  SYSTEM_PROMPT = """
49
 
50
- تو یک استاد تمام دانشگاه تهران در درس آمار و احتمال مهندسی هستی.
51
 
52
- هدف:
53
- کمک به دانشجوی کارشناسی مهندسی برای یادگیری عمیق آمار و احتمال.
54
 
55
- سبک پاسخ:
 
 
 
 
 
 
 
 
56
 
57
  - پاسخ کوتاه ممنوع است.
58
- - مانند یک استاد دانشگاه توضیح بده.
59
- - تمام مراحل حل را نشان بده.
60
- - هیچ فرمول یا محاسبه مهمی حذف نشود.
 
61
 
62
 
63
  ساختار پاسخ:
64
 
65
 
66
- ۱- تشخیص موضوع مسئله
67
 
68
- مشخص کن مسئله مربوط به چه مبحثی است:
69
 
70
- مثلاً:
71
- احتمال
72
- بیز
73
- توزیع پواسون
74
- نرمال
75
- آزمون فرض
76
- ANOVA
77
- رگرسیون
78
 
 
 
 
79
 
80
- ۲- توضیح مفهوم
81
 
82
- قبل از حل، مفهوم را آموزشی توضیح بده.
83
 
 
84
 
85
- ۳- فرمول‌ها
86
 
87
- فرمول‌های مورد نیاز را با LaTeX بنویس.
88
 
 
89
 
90
- ۴- حل مرحله به مرحله
91
 
92
- تمام محاسبات را نمایش بده.
93
 
 
94
 
95
- ۵- مثال مشابه
96
 
97
- یک مثال مهندسی مشابه ارائه کن و حل کن.
98
 
 
99
 
100
- ۶- نکات مهم
101
 
102
- اشتباهات رایج دانشجویان و نکات امتحانی را توضیح بده.
103
 
 
104
 
105
- ۷- نتیجه نهایی
106
 
 
107
 
108
- موضوعات:
109
 
110
- Probability
111
 
112
- Bayes theorem
 
 
113
 
114
- Random variables
115
 
116
- Discrete distributions
117
 
118
- Continuous distributions
 
 
119
 
120
  Binomial
121
 
@@ -137,9 +143,9 @@ Sampling
137
 
138
  CLT
139
 
140
- Confidence interval
141
 
142
- Hypothesis testing
143
 
144
  Regression
145
 
@@ -148,20 +154,20 @@ ANOVA
148
  Reliability
149
 
150
 
151
- فرمول‌ها را مرتب نگه دار.
 
 
152
 
153
- متغیرهای ریاضی مثل:
154
- X Y μ σ P E Var
155
 
156
  را انگلیسی نگه دار.
157
 
158
  """
159
 
160
 
161
-
162
- # =========================
163
- # Generate
164
- # =========================
165
 
166
 
167
  @spaces.GPU
@@ -171,16 +177,16 @@ def generate(message, history):
171
  messages = [
172
 
173
  {
174
- "role":"system",
175
- "content":SYSTEM_PROMPT
176
  }
177
 
178
  ]
179
 
180
 
181
- # فقط چند پیام آخر برای جلوگیری از پر شدن حافظه
182
 
183
- for user, assistant in history[-4:]:
184
 
185
 
186
  messages.append(
@@ -230,7 +236,6 @@ def generate(message, history):
230
  )
231
 
232
 
233
-
234
  inputs = {
235
 
236
  k:v.to(model.device)
@@ -244,17 +249,19 @@ def generate(message, history):
244
  with torch.no_grad():
245
 
246
 
247
- output = model.generate(
248
 
249
  **inputs,
250
 
251
 
252
- # جواب بلند دانشگاهی
253
 
254
  max_new_tokens=4096,
255
 
256
 
257
- min_new_tokens=500,
 
 
258
 
259
 
260
  temperature=0.25,
@@ -280,7 +287,7 @@ def generate(message, history):
280
 
281
  answer = tokenizer.decode(
282
 
283
- output[0][
284
 
285
  inputs["input_ids"].shape[-1]:
286
 
@@ -296,9 +303,9 @@ def generate(message, history):
296
 
297
 
298
 
299
- # =========================
300
  # CSS
301
- # =========================
302
 
303
 
304
  css = """
@@ -316,22 +323,22 @@ max-width: 1400px !important;
316
 
317
  direction: rtl !important;
318
 
319
- text-align:right !important;
320
 
321
- font-family:Tahoma,Arial;
322
 
323
- font-size:18px !important;
324
 
325
- line-height:2.2 !important;
326
 
327
  }
328
 
329
 
330
  textarea {
331
 
332
- direction:rtl !important;
333
 
334
- text-align:right !important;
335
 
336
  font-size:18px !important;
337
 
@@ -344,73 +351,90 @@ display:none !important;
344
 
345
  }
346
 
347
-
348
  """
349
 
350
 
351
 
352
- # =========================
353
- # Interface
354
- # =========================
355
-
356
-
357
- chatbot = gr.Chatbot(
358
- height=1000
359
- )
360
 
361
 
 
362
 
363
- demo = gr.ChatInterface(
364
 
365
- fn=generate,
 
 
366
 
 
367
 
368
- title="🤖 Rezaeian StatsAI",
369
 
 
 
 
 
 
370
 
371
- description="""
 
372
 
373
- دستیار هوشمند آمار و احتمال مهندسی
374
 
375
- سطح:
376
- کارشناسی مهندسی
 
377
 
378
- حل تشریحی مانند استاد دانشگاه:
379
 
380
- ✓ توضیح مفهوم
 
 
 
381
 
382
- ✓ فرمول
383
 
384
- ✓ حل مرحله‌ای
385
 
386
- ✓ مثال مشابه
387
 
388
- ✓ نکات امتحانی
389
 
390
- """,
391
 
 
 
 
 
392
 
393
- chatbot=chatbot,
 
 
 
 
 
394
 
 
395
 
396
- textbox=gr.Textbox(
397
 
398
- placeholder="سؤال آمار و احتمال خود را وارد کنید",
399
 
400
- lines=4
401
 
402
- ),
403
 
 
 
 
 
404
 
405
- css=css
 
 
 
406
 
407
- )
408
 
409
 
410
 
411
- # =========================
412
- # Run
413
- # =========================
414
 
415
 
416
  demo.launch(
 
6
 
7
 
8
 
9
+ # ============================
10
+ # MODEL
11
+ # ============================
12
 
13
  MODEL_ID = "ddfws/Rezaeian-StatsAI"
14
 
 
40
 
41
 
42
 
43
+ # ============================
44
+ # SYSTEM PROMPT
45
+ # ============================
46
 
47
 
48
  SYSTEM_PROMPT = """
49
 
50
+ شما Rezaeian StatsAI هستید.
51
 
52
+ یک استاد تمام دانشگاه تهران در درس آمار و احتمال مهندسی.
 
53
 
54
+ مخاطب شما دانشجوی کارشناسی مهندسی است.
55
+
56
+
57
+ وظیفه:
58
+
59
+ ارائه حل کامل، دقیق و آموزشی مانند جزوه دانشگاهی.
60
+
61
+
62
+ قوانین پاسخ:
63
 
64
  - پاسخ کوتاه ممنوع است.
65
+ - فقط جواب نهایی را ننویس.
66
+ - تمام مراحل حل را توضیح بده.
67
+ - اگر مسئله عددی است، تمام محاسبات را نشان بده.
68
+ - اگر مفهوم است، با مثال مهندسی توضیح بده.
69
 
70
 
71
  ساختار پاسخ:
72
 
73
 
74
+ 1) تشخیص موضوع
75
 
76
+ مشخص کن مسئله مربوط به چه مبحثی است.
77
 
 
 
 
 
 
 
 
 
78
 
79
+ 2) روش حل
80
+
81
+ روش، قضیه یا توزیع مورد استفاده را معرفی کن.
82
 
 
83
 
84
+ 3) توضیح تئوری
85
 
86
+ تعریف و مفهوم را توضیح بده.
87
 
 
88
 
89
+ 4) فرمول‌ها
90
 
91
+ فرمول‌ها را با LaTeX مرتب بنویس.
92
 
 
93
 
94
+ 5) حل مرحله به مرحله
95
 
96
+ تمام جایگذاری‌ها و محاسبات را نشان بده.
97
 
 
98
 
99
+ 6) مثال مشابه
100
 
101
+ یک مثال مشابه دانشگاهی ارائه کن و حل کن.
102
 
 
103
 
104
+ 7) نکات مهم امتحانی
105
 
106
+ اشتباهات رایج و نکات مهم را بیان کن.
107
 
 
108
 
109
+ 8) نتیجه نهایی
110
 
 
111
 
112
+ موضوعات تخصصی:
113
 
114
+ احتمال
115
+
116
+ قوانین احتمال
117
 
118
+ قضیه بیز
119
 
120
+ متغیر تصادفی
121
 
122
+ توزیع‌های گسسته
123
+
124
+ توزیع‌های پیوسته
125
 
126
  Binomial
127
 
 
143
 
144
  CLT
145
 
146
+ Confidence Interval
147
 
148
+ Hypothesis Testing
149
 
150
  Regression
151
 
 
154
  Reliability
155
 
156
 
157
+ فرمول‌ها را خوانا بنویس.
158
+
159
+ متغیرهای ریاضی:
160
 
161
+ X,Y,μ,σ,P,E,Var
 
162
 
163
  را انگلیسی نگه دار.
164
 
165
  """
166
 
167
 
168
+ # ============================
169
+ # GENERATION
170
+ # ============================
 
171
 
172
 
173
  @spaces.GPU
 
177
  messages = [
178
 
179
  {
180
+ "role": "system",
181
+ "content": SYSTEM_PROMPT
182
  }
183
 
184
  ]
185
 
186
 
187
+ # جلوگیری از سنگین شدن حافظه چت
188
 
189
+ for user, assistant in history[-3:]:
190
 
191
 
192
  messages.append(
 
236
  )
237
 
238
 
 
239
  inputs = {
240
 
241
  k:v.to(model.device)
 
249
  with torch.no_grad():
250
 
251
 
252
+ outputs = model.generate(
253
 
254
  **inputs,
255
 
256
 
257
+ # پاسخ طولانی
258
 
259
  max_new_tokens=4096,
260
 
261
 
262
+ # جلوگیری از پاسخ خیلی کوتاه
263
+
264
+ min_new_tokens=600,
265
 
266
 
267
  temperature=0.25,
 
287
 
288
  answer = tokenizer.decode(
289
 
290
+ outputs[0][
291
 
292
  inputs["input_ids"].shape[-1]:
293
 
 
303
 
304
 
305
 
306
+ # ============================
307
  # CSS
308
+ # ============================
309
 
310
 
311
  css = """
 
323
 
324
  direction: rtl !important;
325
 
326
+ text-align: right !important;
327
 
328
+ font-family: Tahoma, Arial;
329
 
330
+ font-size: 18px !important;
331
 
332
+ line-height: 2 !important;
333
 
334
  }
335
 
336
 
337
  textarea {
338
 
339
+ direction: rtl !important;
340
 
341
+ text-align: right !important;
342
 
343
  font-size:18px !important;
344
 
 
351
 
352
  }
353
 
 
354
  """
355
 
356
 
357
 
358
+ # ============================
359
+ # UI
360
+ # ============================
 
 
 
 
 
361
 
362
 
363
+ with gr.Blocks(css=css) as demo:
364
 
 
365
 
366
+ gr.Markdown(
367
+ """
368
+ # 🤖 Rezaeian StatsAI
369
 
370
+ دستیار هوشمند آمار و احتمال مهندسی
371
 
372
+ حل مسائل به سبک استاد دانشگاه تهران
373
 
374
+ - توضیح مفاهیم
375
+ - فرمول‌ها
376
+ - حل مرحله‌ای
377
+ - مثال مشابه
378
+ - نکات امتحانی
379
 
380
+ """
381
+ )
382
 
 
383
 
384
+ chatbot = gr.Chatbot(
385
+ height=900
386
+ )
387
 
 
388
 
389
+ textbox = gr.Textbox(
390
+ placeholder="سؤال آمار و احتمال خود را وارد کنید...",
391
+ lines=3
392
+ )
393
 
 
394
 
395
+ state = gr.State([])
396
 
 
397
 
 
398
 
399
+ def chat(message, history):
400
 
401
+ answer = generate(
402
+ message,
403
+ history
404
+ )
405
 
406
+ history.append(
407
+ [
408
+ message,
409
+ answer
410
+ ]
411
+ )
412
 
413
+ return "", history
414
 
 
415
 
 
416
 
417
+ textbox.submit(
418
 
419
+ chat,
420
 
421
+ inputs=[
422
+ textbox,
423
+ chatbot
424
+ ],
425
 
426
+ outputs=[
427
+ textbox,
428
+ chatbot
429
+ ]
430
 
431
+ )
432
 
433
 
434
 
435
+ # ============================
436
+ # RUN
437
+ # ============================
438
 
439
 
440
  demo.launch(