Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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ı
|
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 |
-
|
39 |
-
|
40 |
-
history,
|
41 |
-
answer_buttons_update,
|
42 |
-
answer_buttons_update,
|
43 |
-
answer_buttons_update,
|
44 |
-
eval_buttons_update,
|
45 |
-
eval_buttons_update,
|
46 |
-
"",
|
47 |
-
restart_update
|
|
|
48 |
)
|
49 |
|
50 |
def process_turn(user_answer, history):
|
51 |
"""
|
52 |
-
Kullanıcının
|
53 |
-
Eğer API cevabında <cevap
|
54 |
-
-
|
55 |
-
- Final
|
56 |
-
- Cevap butonları gizlenir
|
57 |
-
- Değerlendirme butonları
|
|
|
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
|
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,
|
85 |
-
final_text,
|
86 |
-
history,
|
87 |
-
answer_update,
|
88 |
-
answer_update,
|
89 |
-
answer_update,
|
90 |
-
eval_update,
|
91 |
-
eval_update,
|
92 |
-
final_answer,
|
|
|
|
|
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 |
-
-
|
|
|
111 |
"""
|
112 |
new_text = "**Tahminim doğru! Tekrar oynayalım mı?**"
|
113 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
114 |
|
115 |
def evaluate_incorrect(final_state):
|
116 |
"""
|
117 |
Eğer final tahmin yanlış ise:
|
118 |
-
- Final metin "
|
119 |
- Değerlendirme butonları gizlenir.
|
120 |
-
-
|
121 |
"""
|
122 |
-
new_text = "**
|
123 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
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 |
-
#
|
|
|
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
|
186 |
demo.load(
|
187 |
fn=start_game,
|
188 |
-
outputs=[
|
189 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
)
|
191 |
|
192 |
-
# Cevap
|
193 |
btn_evet.click(
|
194 |
fn=process_evet,
|
195 |
inputs=[state],
|
196 |
-
outputs=[
|
197 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
)
|
199 |
btn_hayir.click(
|
200 |
fn=process_hayir,
|
201 |
inputs=[state],
|
202 |
-
outputs=[
|
203 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
204 |
)
|
205 |
btn_bilmiyorum.click(
|
206 |
fn=process_bilmiyorum,
|
207 |
inputs=[state],
|
208 |
-
outputs=[
|
209 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
210 |
)
|
211 |
|
212 |
# Değerlendirme butonları:
|
213 |
btn_dogru.click(
|
214 |
fn=evaluate_correct,
|
215 |
inputs=[final_state],
|
216 |
-
outputs=[
|
|
|
|
|
|
|
|
|
|
|
|
|
217 |
)
|
218 |
btn_yanlis.click(
|
219 |
fn=evaluate_incorrect,
|
220 |
inputs=[final_state],
|
221 |
-
outputs=[
|
|
|
|
|
|
|
|
|
|
|
|
|
222 |
)
|
223 |
|
224 |
-
# "Tekrar Oyna" butonuna
|
225 |
btn_restart.click(
|
226 |
fn=restart_game,
|
227 |
inputs=[],
|
228 |
-
outputs=[
|
229 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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)
|