canksdi commited on
Commit
b6f7f60
·
verified ·
1 Parent(s): 4c91447

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -11
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=100):
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.7,
 
 
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
- # Uygun prompt oluştur (Türkçe)
87
- if label == "NEGATIVE" or (label == "POSITIVE" and score < 0.6):
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
- response = generate_turkish_text(prompt, max_length=150)
 
95
 
96
- # Cevabı kısalt
97
- if len(response) > 200:
98
- response = response[:200] + "..."
 
 
 
 
 
 
 
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