Spaces:
Running on Zero
Running on Zero
Update app.py
Browse files
app.py
CHANGED
|
@@ -7,7 +7,7 @@ import gradio as gr
|
|
| 7 |
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
|
| 8 |
from threading import Thread
|
| 9 |
|
| 10 |
-
# İstediğin modeller sabit
|
| 11 |
DEFAULT_MODELS = [
|
| 12 |
"Qwen/Qwen3.8-27B",
|
| 13 |
"Qwen/Qwen3.5-9B"
|
|
@@ -108,28 +108,32 @@ def api_completion(model_name, lsu_accesstoken, messages, temperature, max_token
|
|
| 108 |
thread = Thread(target=model.generate, kwargs=generation_kwargs)
|
| 109 |
thread.start()
|
| 110 |
|
| 111 |
-
#
|
| 112 |
-
|
| 113 |
-
|
|
|
|
| 114 |
|
| 115 |
for new_text in streamer:
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
yield buffer
|
| 129 |
-
buffer = ""
|
| 130 |
else:
|
| 131 |
-
# Düşünme kısmı bitti, gelen
|
| 132 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 133 |
|
| 134 |
print("✅ Yanıt akışı tamamlandı.", flush=True)
|
| 135 |
|
|
|
|
| 7 |
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
|
| 8 |
from threading import Thread
|
| 9 |
|
| 10 |
+
# İstediğin modeller sabit
|
| 11 |
DEFAULT_MODELS = [
|
| 12 |
"Qwen/Qwen3.8-27B",
|
| 13 |
"Qwen/Qwen3.5-9B"
|
|
|
|
| 108 |
thread = Thread(target=model.generate, kwargs=generation_kwargs)
|
| 109 |
thread.start()
|
| 110 |
|
| 111 |
+
# KUSURSUZ THINK FİLTRELEME BUFFER MİMARİSİ
|
| 112 |
+
accumulated_text = ""
|
| 113 |
+
thinking_done = False
|
| 114 |
+
sent_length = 0
|
| 115 |
|
| 116 |
for new_text in streamer:
|
| 117 |
+
accumulated_text += new_text
|
| 118 |
+
|
| 119 |
+
if not thinking_done:
|
| 120 |
+
# Model hâlâ düşünüyor veya </think> etiketi henüz tamamlanmadı
|
| 121 |
+
if "</think>" in accumulated_text:
|
| 122 |
+
thinking_done = True
|
| 123 |
+
# </think> etiketinden sonraki kısmı buluyoruz
|
| 124 |
+
idx = accumulated_text.find("</think>") + len("</think>")
|
| 125 |
+
clean_part = accumulated_text[idx:].lstrip("\n")
|
| 126 |
+
if clean_part:
|
| 127 |
+
yield clean_part
|
| 128 |
+
sent_length = len(clean_part)
|
|
|
|
|
|
|
| 129 |
else:
|
| 130 |
+
# Düşünme kısmı bitti, gelen temiz yanıtı eksiksiz ve parça parça akıtıyoruz
|
| 131 |
+
idx = accumulated_text.find("</think>") + len("</think>")
|
| 132 |
+
clean_part = accumulated_text[idx:].lstrip("\n")
|
| 133 |
+
if len(clean_part) > sent_length:
|
| 134 |
+
new_chunk_to_send = clean_part[sent_length:]
|
| 135 |
+
yield new_chunk_to_send
|
| 136 |
+
sent_length = len(clean_part)
|
| 137 |
|
| 138 |
print("✅ Yanıt akışı tamamlandı.", flush=True)
|
| 139 |
|