suayptalha commited on
Commit
16f5758
·
verified ·
1 Parent(s): abc1a29

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +190 -59
app.py CHANGED
@@ -15,7 +15,7 @@ def start_game():
15
  """
16
  Oyunu başlatır; ilk soruyu getirir.
17
  Soru çerçevesi görünür, final tahmin alanı temizlenir,
18
- cevap butonları (Evet, Hayır, Bilmiyorum) görünür, değerlendirme ve yeniden başlama butonları gizlidir.
19
  """
20
  history = []
21
  result = client.predict(
@@ -27,34 +27,34 @@ def start_game():
27
  assistant_message = result[1][-1][1]
28
  history.append(("", assistant_message))
29
 
30
- # Buton ve alan güncellemeleri:
31
- assistant_update = gr.update(visible=True, value=assistant_message)
32
- final_answer_update = gr.update(visible=True, value="")
33
  answer_buttons_update = gr.update(visible=True)
34
  eval_buttons_update = gr.update(visible=False)
35
  restart_update = gr.update(visible=False)
 
36
 
37
  return (
38
- assistant_update, # assistant_display: Soru çerçevesi (görünür ve metin güncellenmiş)
39
- final_answer_update, # final_answer_display: final tahmin alanı (temiz)
40
- history, # state: konuşma geçmişi
41
- answer_buttons_update, # btn_evet görünür
42
- answer_buttons_update, # btn_hayir görünür
43
- answer_buttons_update, # btn_bilmiyorum görünür
44
- eval_buttons_update, # btn_dogru gizli
45
- eval_buttons_update, # btn_yanlis gizli
46
- "", # final_state: final tahmin metni (boş)
47
- restart_update # btn_restart gizli
 
48
  )
49
 
50
  def process_turn(user_answer, history):
51
  """
52
- Kullanıcının verdiği cevabı API'ye gönderir.
53
- Eğer API cevabında <cevap>...</cevap> varsa:
54
- - Soru çerçevesi gizlenir.
55
- - Final tahmini "Tahminim: ..." şeklinde büyük ve kalın yazıyla gösterilir.
56
- - Cevap butonları gizlenir.
57
- - Değerlendirme butonları (Doğru, Yanlış) görünür hale gelir.
 
58
  """
59
  result = client.predict(
60
  query=user_answer,
@@ -70,29 +70,34 @@ def process_turn(user_answer, history):
70
  end_idx = assistant_message.index("</cevap>")
71
  final_answer = assistant_message[start_idx:end_idx].strip()
72
  if final_answer:
73
- # Final tahmin yapıldı: soru çerçevesini gizle, final tahmini göster, cevap butonlarını gizle, değerlendirme butonlarını göster.
74
  assistant_update = gr.update(visible=False)
75
  final_text = f"**Tahminim:** **{final_answer}**"
76
  answer_update = gr.update(visible=False)
77
  eval_update = gr.update(visible=True)
 
 
78
  else:
79
  assistant_update = gr.update(visible=True, value=assistant_message)
80
  final_text = ""
81
  answer_update = gr.update(visible=True)
82
  eval_update = gr.update(visible=False)
 
 
83
  return (
84
- assistant_update, # assistant_display: Soru çerçevesi (veya gizli)
85
- final_text, # final_answer_display: final tahmin metni (varsa)
86
- history, # state: güncellenmiş konuşma geçmişi
87
- answer_update, # btn_evet görünürlüğü
88
- answer_update, # btn_hayir görünürlüğü
89
- answer_update, # btn_bilmiyorum görünürlüğü
90
- eval_update, # btn_dogru görünürlüğü
91
- eval_update, # btn_yanlis görünürlüğü
92
- final_answer, # final_state: final tahmin metni
 
 
93
  )
94
 
95
- # Cevap butonları için sarmalayıcı fonksiyonlar.
96
  def process_evet(history):
97
  return process_turn("Evet", history)
98
 
@@ -107,29 +112,66 @@ def evaluate_correct(final_state):
107
  Eğer final tahmin doğru ise:
108
  - Final metin "Tahminim doğru! Tekrar oynayalım mı?" olarak güncellenir.
109
  - Değerlendirme butonları gizlenir.
110
- - Yeniden başlama butonu görünür hale gelir.
 
111
  """
112
  new_text = "**Tahminim doğru! Tekrar oynayalım mı?**"
113
- return new_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=True)
 
 
 
 
 
 
114
 
115
  def evaluate_incorrect(final_state):
116
  """
117
  Eğer final tahmin yanlış ise:
118
- - Final metin "Maalesef bulamadım" olarak güncellenir.
119
  - Değerlendirme butonları gizlenir.
120
- - Yeniden başlama butonu görünür hale gelir.
121
  """
122
- new_text = "**Maalesef bulamadım**"
123
- return new_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
 
125
  def restart_game():
126
  """
127
- "Tekrar Oyna" butonuna tıklandığında oyunu en baştan başlatır.
128
- Soru çerçevesi yeniden görünür, cevap butonları aktif hale gelir,
129
- final tahmin alanı temizlenir ve history sıfırlanır.
130
  """
131
  global client
132
- # Client'ı yeniden oluşturuyoruz, böylece önceki konuşma geçmişi de sıfırlanır.
133
  client = Client("Qwen/Qwen2.5-72B-Instruct")
134
  return start_game()
135
 
@@ -159,7 +201,7 @@ css = """
159
  with gr.Blocks(css=css) as demo:
160
  gr.Markdown("### Deniz Canlıları Asistanı - Evet/Hayır Oyunu")
161
 
162
- # Asistanın sorduğu soru burada görünecek.
163
  assistant_display = gr.Markdown(label="Soru", elem_classes="question-box")
164
  # Final tahmin alanı.
165
  final_answer_display = gr.Markdown("", label="Tahmin", elem_classes="final-answer")
@@ -169,64 +211,153 @@ with gr.Blocks(css=css) as demo:
169
  btn_evet = gr.Button("Evet")
170
  btn_hayir = gr.Button("Hayır")
171
  btn_bilmiyorum = gr.Button("Bilmiyorum")
172
-
173
  # Değerlendirme butonları: Doğru, Yanlış (başlangıçta gizli).
174
  with gr.Row(elem_classes="button-group"):
175
  btn_dogru = gr.Button("Doğru", visible=False)
176
  btn_yanlis = gr.Button("Yanlış", visible=False)
177
 
178
- # Yeniden başlatma butonu: "Tekrar Oyna" (başlangıçta gizli).
 
179
  btn_restart = gr.Button("Tekrar Oyna", visible=False)
 
 
180
 
181
  # Gizli state'ler:
182
  state = gr.State([])
183
  final_state = gr.State("")
184
 
185
- # Sayfa yüklendiğinde oyunu başlatır.
186
  demo.load(
187
  fn=start_game,
188
- outputs=[assistant_display, final_answer_display, state,
189
- btn_evet, btn_hayir, btn_bilmiyorum, btn_dogru, btn_yanlis, final_state, btn_restart]
 
 
 
 
 
 
 
 
 
 
 
190
  )
191
 
192
- # Cevap butonları tıklanıldığında:
193
  btn_evet.click(
194
  fn=process_evet,
195
  inputs=[state],
196
- outputs=[assistant_display, final_answer_display, state,
197
- btn_evet, btn_hayir, btn_bilmiyorum, btn_dogru, btn_yanlis, final_state]
 
 
 
 
 
 
 
 
 
 
 
198
  )
199
  btn_hayir.click(
200
  fn=process_hayir,
201
  inputs=[state],
202
- outputs=[assistant_display, final_answer_display, state,
203
- btn_evet, btn_hayir, btn_bilmiyorum, btn_dogru, btn_yanlis, final_state]
 
 
 
 
 
 
 
 
 
 
 
204
  )
205
  btn_bilmiyorum.click(
206
  fn=process_bilmiyorum,
207
  inputs=[state],
208
- outputs=[assistant_display, final_answer_display, state,
209
- btn_evet, btn_hayir, btn_bilmiyorum, btn_dogru, btn_yanlis, final_state]
 
 
 
 
 
 
 
 
 
 
 
210
  )
211
 
212
  # Değerlendirme butonları:
213
  btn_dogru.click(
214
  fn=evaluate_correct,
215
  inputs=[final_state],
216
- outputs=[final_answer_display, btn_dogru, btn_yanlis, btn_restart]
 
 
 
 
 
 
217
  )
218
  btn_yanlis.click(
219
  fn=evaluate_incorrect,
220
  inputs=[final_state],
221
- outputs=[final_answer_display, btn_dogru, btn_yanlis, btn_restart]
 
 
 
 
 
 
222
  )
223
 
224
- # "Tekrar Oyna" butonuna tıklandığında:
225
  btn_restart.click(
226
  fn=restart_game,
227
  inputs=[],
228
- outputs=[assistant_display, final_answer_display, state,
229
- btn_evet, btn_hayir, btn_bilmiyorum, btn_dogru, btn_yanlis, final_state, btn_restart]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
  )
231
 
232
  demo.launch(debug=True, show_error=True)
 
15
  """
16
  Oyunu başlatır; ilk soruyu getirir.
17
  Soru çerçevesi görünür, final tahmin alanı temizlenir,
18
+ cevap butonları görünür, değerlendirme ve yeniden başlatma/ devam butonları gizlidir.
19
  """
20
  history = []
21
  result = client.predict(
 
27
  assistant_message = result[1][-1][1]
28
  history.append(("", assistant_message))
29
 
 
 
 
30
  answer_buttons_update = gr.update(visible=True)
31
  eval_buttons_update = gr.update(visible=False)
32
  restart_update = gr.update(visible=False)
33
+ devamet_update = gr.update(visible=False)
34
 
35
  return (
36
+ gr.update(visible=True, value=assistant_message), # assistant_display
37
+ gr.update(visible=True, value=""), # final_answer_display
38
+ history, # state
39
+ answer_buttons_update, # btn_evet
40
+ answer_buttons_update, # btn_hayir
41
+ answer_buttons_update, # btn_bilmiyorum
42
+ eval_buttons_update, # btn_dogru
43
+ eval_buttons_update, # btn_yanlis
44
+ "", # final_state
45
+ restart_update, # btn_restart
46
+ devamet_update # btn_devamet
47
  )
48
 
49
  def process_turn(user_answer, history):
50
  """
51
+ Kullanıcının cevabını API'ye gönderir.
52
+ Eğer API cevabında <cevap> tagleri varsa final tahmin yapılmıştır.
53
+ - Bu durumda soru çerçevesi gizlenir,
54
+ - Final tahmin büyük ve kalın gösterilir,
55
+ - Cevap butonları gizlenir,
56
+ - Değerlendirme butonları görünür.
57
+ Eğer final tahmin yoksa, asistanın cevabı (soru) güncellenir.
58
  """
59
  result = client.predict(
60
  query=user_answer,
 
70
  end_idx = assistant_message.index("</cevap>")
71
  final_answer = assistant_message[start_idx:end_idx].strip()
72
  if final_answer:
73
+ # Final tahmin yapıldı.
74
  assistant_update = gr.update(visible=False)
75
  final_text = f"**Tahminim:** **{final_answer}**"
76
  answer_update = gr.update(visible=False)
77
  eval_update = gr.update(visible=True)
78
+ restart_update = gr.update(visible=False)
79
+ devamet_update = gr.update(visible=False)
80
  else:
81
  assistant_update = gr.update(visible=True, value=assistant_message)
82
  final_text = ""
83
  answer_update = gr.update(visible=True)
84
  eval_update = gr.update(visible=False)
85
+ restart_update = gr.update(visible(False))
86
+ devamet_update = gr.update(visible=False)
87
  return (
88
+ assistant_update, # assistant_display
89
+ final_text, # final_answer_display
90
+ history, # state
91
+ answer_update, # btn_evet
92
+ answer_update, # btn_hayir
93
+ answer_update, # btn_bilmiyorum
94
+ eval_update, # btn_dogru
95
+ eval_update, # btn_yanlis
96
+ final_answer, # final_state
97
+ restart_update, # btn_restart
98
+ devamet_update # btn_devamet
99
  )
100
 
 
101
  def process_evet(history):
102
  return process_turn("Evet", history)
103
 
 
112
  Eğer final tahmin doğru ise:
113
  - Final metin "Tahminim doğru! Tekrar oynayalım mı?" olarak güncellenir.
114
  - Değerlendirme butonları gizlenir.
115
+ - "Tekrar Oyna" butonu görünür hale gelir.
116
+ - "Devam Et" butonu gizli kalır.
117
  """
118
  new_text = "**Tahminim doğru! Tekrar oynayalım mı?**"
119
+ return (
120
+ new_text,
121
+ gr.update(visible=False), # btn_dogru gizle
122
+ gr.update(visible=False), # btn_yanlis gizle
123
+ gr.update(visible=True, value="Tekrar Oyna"), # btn_restart görünür
124
+ gr.update(visible=False) # btn_devamet gizli
125
+ )
126
 
127
  def evaluate_incorrect(final_state):
128
  """
129
  Eğer final tahmin yanlış ise:
130
+ - Final metin "Devam edelim, devam et butonuna basın." olarak güncellenir.
131
  - Değerlendirme butonları gizlenir.
132
+ - "Devam Et" butonu görünür hale gelir.
133
  """
134
+ new_text = "**Devam edelim, devam et butonuna basın.**"
135
+ return (
136
+ new_text,
137
+ gr.update(visible=False), # btn_dogru gizle
138
+ gr.update(visible(False),), # btn_yanlis gizle
139
+ gr.update(visible=False), # btn_restart gizle
140
+ gr.update(visible=True, value="Devam Et") # btn_devamet görünür
141
+ )
142
+
143
+ def continue_game(history):
144
+ """
145
+ "Devam Et" butonuna tıklandığında mevcut history ile asistan yeni bir soru sorar.
146
+ Konuşma geçmişi korunur, soru çerçevesi ve cevap butonları yeniden aktif hale gelir.
147
+ """
148
+ result = client.predict(
149
+ query="",
150
+ history=history,
151
+ system=SYSTEM_PROMPT,
152
+ api_name="/model_chat"
153
+ )
154
+ assistant_message = result[1][-1][1]
155
+ history.append(("", assistant_message))
156
+ return (
157
+ gr.update(visible=True, value=assistant_message), # assistant_display
158
+ gr.update(visible=True, value=""), # final_answer_display
159
+ history, # state
160
+ gr.update(visible=True), # btn_evet
161
+ gr.update(visible=True), # btn_hayir
162
+ gr.update(visible=True), # btn_bilmiyorum
163
+ gr.update(visible=False), # btn_dogru
164
+ gr.update(visible(False),), # btn_yanlis
165
+ "", # final_state
166
+ gr.update(visible(False),), # btn_restart
167
+ gr.update(visible=False) # btn_devamet
168
+ )
169
 
170
  def restart_game():
171
  """
172
+ "Tekrar Oyna" butonuna tıklandığında oyunu en baştan başlatır (history sıfırlanır).
 
 
173
  """
174
  global client
 
175
  client = Client("Qwen/Qwen2.5-72B-Instruct")
176
  return start_game()
177
 
 
201
  with gr.Blocks(css=css) as demo:
202
  gr.Markdown("### Deniz Canlıları Asistanı - Evet/Hayır Oyunu")
203
 
204
+ # Asistanın sorduğu soru.
205
  assistant_display = gr.Markdown(label="Soru", elem_classes="question-box")
206
  # Final tahmin alanı.
207
  final_answer_display = gr.Markdown("", label="Tahmin", elem_classes="final-answer")
 
211
  btn_evet = gr.Button("Evet")
212
  btn_hayir = gr.Button("Hayır")
213
  btn_bilmiyorum = gr.Button("Bilmiyorum")
214
+
215
  # Değerlendirme butonları: Doğru, Yanlış (başlangıçta gizli).
216
  with gr.Row(elem_classes="button-group"):
217
  btn_dogru = gr.Button("Doğru", visible=False)
218
  btn_yanlis = gr.Button("Yanlış", visible=False)
219
 
220
+ # Final durumunda gösterilecek butonlar:
221
+ # - Doğru ise "Tekrar Oyna"
222
  btn_restart = gr.Button("Tekrar Oyna", visible=False)
223
+ # - Yanlış ise "Devam Et"
224
+ btn_devamet = gr.Button("Devam Et", visible=False)
225
 
226
  # Gizli state'ler:
227
  state = gr.State([])
228
  final_state = gr.State("")
229
 
230
+ # Sayfa yüklendiğinde oyunu başlat.
231
  demo.load(
232
  fn=start_game,
233
+ outputs=[
234
+ assistant_display,
235
+ final_answer_display,
236
+ state,
237
+ btn_evet,
238
+ btn_hayir,
239
+ btn_bilmiyorum,
240
+ btn_dogru,
241
+ btn_yanlis,
242
+ final_state,
243
+ btn_restart,
244
+ btn_devamet
245
+ ]
246
  )
247
 
248
+ # Cevap butonlarına tıklanıldığında:
249
  btn_evet.click(
250
  fn=process_evet,
251
  inputs=[state],
252
+ outputs=[
253
+ assistant_display,
254
+ final_answer_display,
255
+ state,
256
+ btn_evet,
257
+ btn_hayir,
258
+ btn_bilmiyorum,
259
+ btn_dogru,
260
+ btn_yanlis,
261
+ final_state,
262
+ btn_restart,
263
+ btn_devamet
264
+ ]
265
  )
266
  btn_hayir.click(
267
  fn=process_hayir,
268
  inputs=[state],
269
+ outputs=[
270
+ assistant_display,
271
+ final_answer_display,
272
+ state,
273
+ btn_evet,
274
+ btn_hayir,
275
+ btn_bilmiyorum,
276
+ btn_dogru,
277
+ btn_yanlis,
278
+ final_state,
279
+ btn_restart,
280
+ btn_devamet
281
+ ]
282
  )
283
  btn_bilmiyorum.click(
284
  fn=process_bilmiyorum,
285
  inputs=[state],
286
+ outputs=[
287
+ assistant_display,
288
+ final_answer_display,
289
+ state,
290
+ btn_evet,
291
+ btn_hayir,
292
+ btn_bilmiyorum,
293
+ btn_dogru,
294
+ btn_yanlis,
295
+ final_state,
296
+ btn_restart,
297
+ btn_devamet
298
+ ]
299
  )
300
 
301
  # Değerlendirme butonları:
302
  btn_dogru.click(
303
  fn=evaluate_correct,
304
  inputs=[final_state],
305
+ outputs=[
306
+ final_answer_display,
307
+ btn_dogru,
308
+ btn_yanlis,
309
+ btn_restart,
310
+ btn_devamet
311
+ ]
312
  )
313
  btn_yanlis.click(
314
  fn=evaluate_incorrect,
315
  inputs=[final_state],
316
+ outputs=[
317
+ final_answer_display,
318
+ btn_dogru,
319
+ btn_yanlis,
320
+ btn_restart,
321
+ btn_devamet
322
+ ]
323
  )
324
 
325
+ # "Tekrar Oyna" butonuna tıklanıldığında:
326
  btn_restart.click(
327
  fn=restart_game,
328
  inputs=[],
329
+ outputs=[
330
+ assistant_display,
331
+ final_answer_display,
332
+ state,
333
+ btn_evet,
334
+ btn_hayir,
335
+ btn_bilmiyorum,
336
+ btn_dogru,
337
+ btn_yanlis,
338
+ final_state,
339
+ btn_restart,
340
+ btn_devamet
341
+ ]
342
+ )
343
+
344
+ # "Devam Et" butonuna tıklanıldığında:
345
+ btn_devamet.click(
346
+ fn=continue_game,
347
+ inputs=[state],
348
+ outputs=[
349
+ assistant_display,
350
+ final_answer_display,
351
+ state,
352
+ btn_evet,
353
+ btn_hayir,
354
+ btn_bilmiyorum,
355
+ btn_dogru,
356
+ btn_yanlis,
357
+ final_state,
358
+ btn_restart,
359
+ btn_devamet
360
+ ]
361
  )
362
 
363
  demo.launch(debug=True, show_error=True)