Upload app.py
Browse files
app.py
CHANGED
@@ -5,6 +5,7 @@ import os
|
|
5 |
import time
|
6 |
import asyncio
|
7 |
import edge_tts
|
|
|
8 |
|
9 |
# Daha az bellek kullanımı için
|
10 |
torch.set_grad_enabled(False)
|
@@ -25,7 +26,7 @@ print("Metin modeli yüklendi.")
|
|
25 |
# Türkçe kadın sesi kullanacağız
|
26 |
VOICE = "tr-TR-EmelNeural"
|
27 |
|
28 |
-
def generate_turkish_text(prompt, max_length=
|
29 |
"""Türkçe metin üretme fonksiyonu"""
|
30 |
inputs = tokenizer(prompt, return_tensors="pt")
|
31 |
output = text_model.generate(
|
@@ -33,13 +34,26 @@ def generate_turkish_text(prompt, max_length=100):
|
|
33 |
max_length=max_length,
|
34 |
num_return_sequences=1,
|
35 |
do_sample=True,
|
36 |
-
temperature=0.
|
|
|
|
|
37 |
pad_token_id=tokenizer.eos_token_id
|
38 |
)
|
39 |
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
|
|
|
40 |
# Başlangıç prompt'unu kaldır ve sadece yeni üretilen kısmı al
|
41 |
if prompt in generated_text:
|
42 |
generated_text = generated_text[len(prompt):].strip()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
return generated_text
|
44 |
|
45 |
async def create_speech_async(text):
|
@@ -68,6 +82,37 @@ def create_speech(text):
|
|
68 |
f.write(b"")
|
69 |
return "empty.mp3"
|
70 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
def process_input(text):
|
72 |
try:
|
73 |
if not text or text.strip() == "":
|
@@ -83,19 +128,24 @@ def process_input(text):
|
|
83 |
|
84 |
print(f"Duygu analizi sonucu: {label} ({score:.2f})")
|
85 |
|
86 |
-
#
|
87 |
-
|
88 |
-
prompt = f"Aşağıdaki kişi üzgün veya olumsuz hissediyor. Ona destek ve moral verecek bir mesaj yazın:\nKişinin mesajı: '{text}'\nDestekleyici yanıt:"
|
89 |
-
else:
|
90 |
-
prompt = f"Aşağıdaki kişi olumlu ve mutlu hissediyor. Onun bu duygularını destekleyen bir mesaj yazın:\nKişinin mesajı: '{text}'\nOlumlu yanıt:"
|
91 |
|
92 |
# Türkçe metin üret
|
93 |
print("Metin üretiliyor...")
|
94 |
-
|
|
|
95 |
|
96 |
-
#
|
97 |
-
if len(response) >
|
98 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
|
100 |
print(f"Üretilen yanıt: {response[:50]}...")
|
101 |
|
|
|
5 |
import time
|
6 |
import asyncio
|
7 |
import edge_tts
|
8 |
+
import re
|
9 |
|
10 |
# Daha az bellek kullanımı için
|
11 |
torch.set_grad_enabled(False)
|
|
|
26 |
# Türkçe kadın sesi kullanacağız
|
27 |
VOICE = "tr-TR-EmelNeural"
|
28 |
|
29 |
+
def generate_turkish_text(prompt, max_length=250):
|
30 |
"""Türkçe metin üretme fonksiyonu"""
|
31 |
inputs = tokenizer(prompt, return_tensors="pt")
|
32 |
output = text_model.generate(
|
|
|
34 |
max_length=max_length,
|
35 |
num_return_sequences=1,
|
36 |
do_sample=True,
|
37 |
+
temperature=0.85, # Daha da yaratıcı yanıtlar için
|
38 |
+
top_p=0.92, # Nucleus sampling
|
39 |
+
repetition_penalty=1.2, # Tekrarları azaltmak için
|
40 |
pad_token_id=tokenizer.eos_token_id
|
41 |
)
|
42 |
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
|
43 |
+
|
44 |
# Başlangıç prompt'unu kaldır ve sadece yeni üretilen kısmı al
|
45 |
if prompt in generated_text:
|
46 |
generated_text = generated_text[len(prompt):].strip()
|
47 |
+
|
48 |
+
# HTML/CSS etiketlerini temizle
|
49 |
+
generated_text = re.sub(r'\[/?vc_\w+\]', '', generated_text)
|
50 |
+
|
51 |
+
# Diğer potansiyel bozuk formatları temizle
|
52 |
+
generated_text = re.sub(r'<.*?>', '', generated_text)
|
53 |
+
|
54 |
+
# Çoklu boşlukları temizle
|
55 |
+
generated_text = re.sub(r'\s+', ' ', generated_text).strip()
|
56 |
+
|
57 |
return generated_text
|
58 |
|
59 |
async def create_speech_async(text):
|
|
|
82 |
f.write(b"")
|
83 |
return "empty.mp3"
|
84 |
|
85 |
+
def create_better_prompts(text, label, score):
|
86 |
+
"""Daha samimi, dostça ve arkadaşça promptlar oluştur"""
|
87 |
+
|
88 |
+
if label == "NEGATIVE":
|
89 |
+
if score > 0.85: # Çok olumsuz
|
90 |
+
prompt = f"""Aşağıdaki kişi oldukça üzgün ve olumsuz hissediyor. Yakın bir arkadaşı olarak ona samimi ve içten bir şekilde destek vermelisin. Uzun ve detaylı bir motivasyon mesajı yaz. Sorunlarının üstesinden gelebileceğine dair güven ver, yalnız olmadığını hissettir. Bu zorlu zamanın geçici olduğunu anlat. İçten, samimi ve arkadaşça bir dille konuş:
|
91 |
+
|
92 |
+
Kişinin mesajı: '{text}'
|
93 |
+
|
94 |
+
Arkadaşça destek mesajı:"""
|
95 |
+
else: # Orta derecede olumsuz
|
96 |
+
prompt = f"""Aşağıdaki kişi biraz moral bozukluğu yaşıyor. Yakın bir dostu olarak ona sıcak ve içten bir destek mesajı yazmalısın. Yaşadığı zorluğu anlayışla karşıladığını hissettir. Sorunu nasıl çözebileceğine dair birkaç öneri sun. Arkadaşça, samimi ve yapıcı bir dil kullan:
|
97 |
+
|
98 |
+
Kişinin mesajı: '{text}'
|
99 |
+
|
100 |
+
Dostça destek mesajı:"""
|
101 |
+
elif label == "POSITIVE" and score < 0.6: # Hafif olumlu
|
102 |
+
prompt = f"""Aşağıdaki kişi biraz olumlu hissediyor ama daha fazla motive edilmeye ihtiyacı var. Yakın bir arkadaşı olarak ona cesaret veren, motive eden ve bu olumlu hislerini güçlendiren bir mesaj yaz. Başarılarını kutla ve daha iyisini yapabileceğini hatırlat. Heyecan verici ve motive edici, samimi bir dil kullan:
|
103 |
+
|
104 |
+
Kişinin mesajı: '{text}'
|
105 |
+
|
106 |
+
Motive edici arkadaş mesajı:"""
|
107 |
+
else: # Çok olumlu
|
108 |
+
prompt = f"""Aşağıdaki kişi çok mutlu ve coşkulu hissediyor. En yakın arkadaşı olarak bu mutluluğunu paylaş ve daha da artır. Bu güzel anın tadını çıkarmasını söyle, başarısını kutla. Sevinç dolu, coşkulu ve samimi bir dil kullan. Gelecek için daha güzel şeyler dilemeyi unutma:
|
109 |
+
|
110 |
+
Kişinin mesajı: '{text}'
|
111 |
+
|
112 |
+
Coşkulu ve arkadaşça yanıt:"""
|
113 |
+
|
114 |
+
return prompt
|
115 |
+
|
116 |
def process_input(text):
|
117 |
try:
|
118 |
if not text or text.strip() == "":
|
|
|
128 |
|
129 |
print(f"Duygu analizi sonucu: {label} ({score:.2f})")
|
130 |
|
131 |
+
# Geliştirilmiş promptlar oluştur
|
132 |
+
prompt = create_better_prompts(text, label, score)
|
|
|
|
|
|
|
133 |
|
134 |
# Türkçe metin üret
|
135 |
print("Metin üretiliyor...")
|
136 |
+
# Daha uzun maksimum uzunluk sağla
|
137 |
+
response = generate_turkish_text(prompt, max_length=300)
|
138 |
|
139 |
+
# Cevap çok uzunsa kısalt, ama anlamlı bir şekilde
|
140 |
+
if len(response) > 350:
|
141 |
+
sentences = re.split(r'(?<=[.!?])\s+', response)
|
142 |
+
shortened_response = ""
|
143 |
+
for sentence in sentences:
|
144 |
+
if len(shortened_response) + len(sentence) <= 350:
|
145 |
+
shortened_response += sentence + " "
|
146 |
+
else:
|
147 |
+
break
|
148 |
+
response = shortened_response.strip()
|
149 |
|
150 |
print(f"Üretilen yanıt: {response[:50]}...")
|
151 |
|