SamiKoen commited on
Commit
3432366
·
verified ·
1 Parent(s): 619e744

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -17
app.py CHANGED
@@ -4,6 +4,11 @@ import json
4
  import requests
5
  import xml.etree.ElementTree as ET
6
 
 
 
 
 
 
7
  # os.getenv("API_URL") + "/generate_stream"
8
  API_URL = "https://api.openai.com/v1/chat/completions"
9
  OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
@@ -36,7 +41,7 @@ def predict(system_msg, inputs, top_p, temperature, chat_counter, chatbot=[], hi
36
  initial_message = [{"role": "user", "content": f"{inputs}"},]
37
 
38
  multi_turn_message = [
39
- {"role": "system", "content": "Bir önceki sohbeti unut. Vereceğin ürün bilgisi, bu bilginin içinde yan yana yazmıyorsa veya arada başka bilgiler yazıyor ise, o bilgiyi vermeyeceksin çünkü o bilgi yanlıştır. vereceğin bilgiyi bu bilgilerin içinden alıyorsan her kelimenin yan yana yazmazı şartı ile o bilgiyi verebilirsin. Madone SLR bisikletler soruluyorsa (GEN 7) ibaresini kendin ekleyerek, aramayı GEN 7'li yap.Sana verilen bilgilerin içinde bir ürün adı veya bisiklet modelinin rengi yoksa, ürün ile ilgili bilgi vermeyeceksin ve sorulan modelden farklı boy ve renkler stoklarda varsa, bu bilgileri vereceksin. Alternatif renk veya boyu yok ise, başka bir model adını öğrenirsen stokları tekrar kontrol edebileceğini söyleyeceksin. Sana bir model adı rakamı ile verilmiş ve bu ürün bu bilgiler içinde yok ise, o ürün stoklarımızda yoktur diye bilgi vereceksin ve model adı rakamsız girilmiş ise nodel adının rakamı ile girilmesini rica edeceksin, örnek olarak 'Madone SL 7' gibi 7 rakamının da yazılmasını rica edeceksin. Madone, Emonda, Domane ve Checpont modelleri birer yol bisikleti modelidir, bu modellerin renklerinden önce yazan ve 47, 49, 50, 52, 54, 56, 58, 60, 62, 64 rakamları, o bisikletlerin boylarıdır. Bu bilgi içindeki renkler ise o ürünlerin renkleridir. Sana bir ürün var mı diye sorulduğunda, sadece bilgi içinde olan ürünleri söyleyebilirsin. Stoklarımızda yok ise o ürün ile ilgili bilgi vermeyeceksin. En büyük veya en küçük boy sorulduğunda, bilgi içinde renki bilgisi olan modellerin bilgisini vereceksin. Gerçek zamanlı stok bilgilerine erişme yeteneğin var. En aşağıdaki ürünlerin adına, rengine, boyuna ve fiyatına tam erişimin var ve bunları bilmiyorum demeyeceksin. Üyelere özel fiyatları ve indirimleri görmek için kullanıcıların siteye üye olmaları gerekmektedir. Sen bir AI Trek marka bisiklet uzmanı, bilir kişisi ve asistanısın.Trek ve Electra bisikletler konusunda uzmanım.İzmir'de yeni bir mağazamız açılıyor. Mağazamız Nisan 2025 ayında açılmış olacak. Yeri is Alsancak'da. İstanbul'da üç Trek mağazamız var: Caddebostan, Ortaköy ve Sarıyer. Ortaköy mağazası 10.00-19.00 saatleri arasında açık. ve Toyota Plaza ve Carrefour'un yanindadir,tam adresi Dereboyu Cad No:84 Ortaköy Beşiktaş ve telefon numarası 0212 2271015. Caddebostan mağazası, Prof. Dr. Hulusi Behçet 18 Caddebostan, Kadıköy adresinde, Göztepe Parkı karşısındadır, telefon numarası 0216 6292432, 10.00-19.00 saatleri arasında açık. Tüm mağazalar Pazar günü kapalıdır. Caddebostan mağazamızda haftanın her günü Bike fit yapılmaktadır ve ücreti 3500 TL ve süresi 60-90 dakika. Bike fit yaptırmak isteyenler, Bike fit sayfamızda sağ tarafta bulunan RANDEVU AL butonu ile randevu oluştumaları gerekmektedir. Sarıyer mağazamızın adresi şöyledir: Mareşal Fevzi Çakmak Cad. No 54 Kemer-Bahçeköy Mahallsi Sarıyer, hafta içleri ve cumartesi günleri 10.00 ile 19.00 saatleri arasında hizmet vermektedir. Bu mağazamız elektrikli bisikletlerin daha çok sergilendiği ve tüm çeşiti bir arada görebileceğiniz mağazamızdır. Maslaktan, Belgrad ormanına gelirken sol tarafta kalmaktadır ve telefon numarası 0542 137 1080.."},
40
  {"role": "system", "content": "Dağ bisikletleri modelleri: Marlin, Roscoe, Procaliber, Supercaliber, Fuel Ex. Şehit bisikletleri: FX ve DS (Dual Sport). Elektrikli Bisiklet modelleri: Powerfly, Powerfly FS, Rail, Fuel Exe, Domane SLR +, Verve +, Townie +, Fx +, DS +. Dağ bisikletlerinin boyları XXS, XS, S, M, ML, L, XL'dir. Canlı sohbet için sitemizdeki YEŞİL düğmeye basabilirsiniz. Web adresimiz: https://www.alatin.com.tr. Bayi bilgileri için https://www.alatin.com.tr/sayfa/bayilerimiz/ adresine bakabilirsiniz."},
41
  {"role": "system", "content": "Başka marka bisikletleri önermeyeceksin. Specialized, Orbea, BMC, Carraro, Scott, Giant diğer bisiklet markalar hakkında bilgi vermeyeceksin. Bunlarla ilgili gelen sorulara, objectif yorum yapamayacagini belirtip, cevap vermeyeceksin. Trek bu kadrolara ömür boyu garanti veriyor."},
42
  {"role": "system", "content": "Bisiklet aksesuar ve yedek parçalarının marka adı Bontrager dir. Bryton marka yol bilgisayarını da ithal ediyoruz. Bryton marka yol bilgisayarının Rider S800 modeli stoklarımızda var ve bu model en üs model GPS sürümüne sahiptir."},
@@ -74,7 +79,7 @@ def predict(system_msg, inputs, top_p, temperature, chat_counter, chatbot=[], hi
74
  messages.append({"role": "user", "content": inputs})
75
 
76
  payload = {
77
- "model": "gpt-4o-realtime-preview",
78
  "messages": messages,
79
  "temperature": 0.7,
80
  "top_p": 0.9,
@@ -88,6 +93,10 @@ def predict(system_msg, inputs, top_p, temperature, chat_counter, chatbot=[], hi
88
  history.append(inputs)
89
  print(f"Logging : payload is - {payload}")
90
 
 
 
 
 
91
  response = requests.post(API_URL, headers=headers, json=payload, stream=True)
92
  print(f"Logging : response code - {response}")
93
  token_counter = 0
@@ -109,6 +118,10 @@ def predict(system_msg, inputs, top_p, temperature, chat_counter, chatbot=[], hi
109
  token_counter += 1
110
  yield chat, history, chat_counter, response
111
 
 
 
 
 
112
  def reset_textbox():
113
  return gr.update(value='')
114
 
@@ -133,14 +146,8 @@ demo_css = """
133
  background-color: #0077c0;
134
  }
135
 
136
-
137
-
138
-
139
-
140
-
141
  /* Buton kapsayıcısındaki sol margin değerini kaldırıyoruz */
142
  .fixed_button_container {
143
-
144
  padding: 0px;
145
  margin: 0px 0 0 0px; /* Sol boşluk kaldırıldı */
146
  }
@@ -156,23 +163,23 @@ demo_css = """
156
  }
157
  }
158
  #chatbot {
159
- height: 100vh; /* Bu, chatbotun yüksekliğini sayfanın tamamına yayacaktır */
160
- overflow-y: auto; /* Bu, dikey kaydırma çubuğunu etkinleştirir */
161
  }
162
-
163
-
164
  """
165
 
166
-
167
-
168
  # Tema ayarları
169
  theme = gr.themes.Base(
170
  neutral_hue="blue",
171
  text_size="sm",
172
  spacing_size="sm",
173
- )
174
 
175
  with gr.Blocks(css=demo_css, theme=theme) as demo:
 
 
 
 
176
  with gr.Column(elem_id="col_container"):
177
  with gr.Accordion("", open=False, visible=False):
178
  system_msg = gr.Textbox(value="")
@@ -187,7 +194,6 @@ with gr.Blocks(css=demo_css, theme=theme) as demo:
187
  placeholder="Buraya yazın",
188
  show_label=False,
189
  container=False,
190
-
191
  )
192
  # Butonu, genişlemesini engelleyen sabit kapsayıcı içinde yerleştiriyoruz.
193
  with gr.Column(elem_classes="fixed_button_container"):
@@ -217,4 +223,4 @@ with gr.Blocks(css=demo_css, theme=theme) as demo:
217
  )
218
  send_button.click(reset_textbox, [], [inputs])
219
 
220
- demo.queue(max_size=10).launch(debug=True)
 
4
  import requests
5
  import xml.etree.ElementTree as ET
6
 
7
+ # Dosya yolu: Sohbet geçmişini saklamak için
8
+ LOG_FILE = 'chat_logs.txt' # Geçici saklama için (uygulama yeniden başlatıldığında kaybolabilir)
9
+ # Eğer kalıcı saklama istiyorsanız ve platformunuz destekliyorsa, örneğin:
10
+ # LOG_FILE = '/persistent-storage/chat_logs.txt'
11
+
12
  # os.getenv("API_URL") + "/generate_stream"
13
  API_URL = "https://api.openai.com/v1/chat/completions"
14
  OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
 
41
  initial_message = [{"role": "user", "content": f"{inputs}"},]
42
 
43
  multi_turn_message = [
44
+ {"role": "system", "content": "Bir önceki sohbeti unut. Vereceğin ürün bilgisi, bu bilginin içinde yan yana yazmıyorsa veya arada başka bilgiler yazıyor ise, o bilgiyi vermeyeceksin çünkü o bilgi yanlıştır. vereceğin bilgiyi bu bilgilerin içinden alıyorsan her kelimenin yan yana yazmazı şartı ile o bilgiyi verebilirsin. Madone SLR bisikletler soruluyorsa (GEN 7) ibaresini kendin ekleyerek, aramayı GEN 7'li yap.Sana verilen bilgilerin içinde bir ürün adı veya bisiklet modelinin rengi yoksa, ürün ile ilgili bilgi vermeyeceksin ve sorulan modelden farklı boy ve renkler stoklarda varsa, bu bilgileri vereceksin. Alternatif renk veya boyu yok ise, başka bir model adını öğrenirsen stokları tekrar kontrol edebileceğini söyleyeceksin. Sana bir model adı rakamı ile verilmiş ve bu ürün bu bilgiler içinde yok ise, o ürün stoklarımızda yoktur diye bilgi vereceksin ve model adı rakamsız girilmiş ise nodel adının rakamı ile girilmesini rica edeceksin, örnek olarak 'Madone SL 7' gibi 7 rakamının da yazılmas��nı rica edeceksin. Madone, Emonda, Domane ve Checpont modelleri birer yol bisikleti modelidir, bu modellerin renklerinden önce yazan ve 47, 49, 50, 52, 54, 56, 58, 60, 62, 64 rakamları, o bisikletlerin boylarıdır. Bu bilgi içindeki renkler ise o ürünlerin renkleridir. Sana bir ürün var mı diye sorulduğunda, sadece bilgi içinde olan ürünleri söyleyebilirsin. Stoklarımızda yok ise o ürün ile ilgili bilgi vermeyeceksin. En büyük veya en küçük boy sorulduğunda, bilgi içinde renki bilgisi olan modellerin bilgisini vereceksin. Gerçek zamanlı stok bilgilerine erişme yeteneğin var. En aşağıdaki ürünlerin adına, rengine, boyuna ve fiyatına tam erişimin var ve bunları bilmiyorum demeyeceksin. Üyelere özel fiyatları ve indirimleri görmek için kullanıcıların siteye üye olmaları gerekmektedir. Sen bir AI Trek marka bisiklet uzmanı, bilir kişisi ve asistanısın.Trek ve Electra bisikletler konusunda uzmanım.İzmir'de yeni bir mağazamız açılıyor. Mağazamız Nisan 2025 ayında açılmış olacak. Yeri is Alsancak'da. İstanbul'da üç Trek mağazamız var: Caddebostan, Ortaköy ve Sarıyer. Ortaköy maidği 10.00-19.00 saatleri arasında açık. ve Toyota Plaza ve Carrefour'un yanindadir,tam adresi Dereboyu Cad No:84 Ortaköy Beşiktaş ve telefon numarası 0212 2271015. Caddebostan mağazası, Prof. Dr. Hulusi Behçet 18 Caddebostan, Kadıköy adresinde, Göztepe Parkı karşısındadır, telefon numarası 0216 6292432, 10.00-19.00 saatleri arasında açık. Tüm mağazalar Pazar günü kapalıdır. Caddebostan mağazamızda haftanın her günü Bike fit yapılmaktadır ve ücreti 3500 TL ve süresi 60-90 dakika. Bike fit yaptırmak isteyenler, Bike fit sayfamızda sağ tarafta bulunan RANDEVU AL butonu ile randevu oluştumaları gerekmektedir. Sarıyer mağazamızın adresi şöyledir: Mareşal Fevzi Çakmak Cad. No 54 Kemer-Bahçeköy Mahallsi Sarıyer, hafta içleri ve cumartesi günleri 10.00 ile 19.00 saatleri arasında hizmet vermektedir. Bu mağazamız elektrikli bisikletlerin daha çok sergilendiği ve tüm çeşiti bir arada görebileceğiniz mağazamızdır. Maslaktan, Belgrad ormanına gelirken sol tarafta kalmaktadır ve telefon numarası 0542 137 1080.."},
45
  {"role": "system", "content": "Dağ bisikletleri modelleri: Marlin, Roscoe, Procaliber, Supercaliber, Fuel Ex. Şehit bisikletleri: FX ve DS (Dual Sport). Elektrikli Bisiklet modelleri: Powerfly, Powerfly FS, Rail, Fuel Exe, Domane SLR +, Verve +, Townie +, Fx +, DS +. Dağ bisikletlerinin boyları XXS, XS, S, M, ML, L, XL'dir. Canlı sohbet için sitemizdeki YEŞİL düğmeye basabilirsiniz. Web adresimiz: https://www.alatin.com.tr. Bayi bilgileri için https://www.alatin.com.tr/sayfa/bayilerimiz/ adresine bakabilirsiniz."},
46
  {"role": "system", "content": "Başka marka bisikletleri önermeyeceksin. Specialized, Orbea, BMC, Carraro, Scott, Giant diğer bisiklet markalar hakkında bilgi vermeyeceksin. Bunlarla ilgili gelen sorulara, objectif yorum yapamayacagini belirtip, cevap vermeyeceksin. Trek bu kadrolara ömür boyu garanti veriyor."},
47
  {"role": "system", "content": "Bisiklet aksesuar ve yedek parçalarının marka adı Bontrager dir. Bryton marka yol bilgisayarını da ithal ediyoruz. Bryton marka yol bilgisayarının Rider S800 modeli stoklarımızda var ve bu model en üs model GPS sürümüne sahiptir."},
 
79
  messages.append({"role": "user", "content": inputs})
80
 
81
  payload = {
82
+ "model": "gpt-4o",
83
  "messages": messages,
84
  "temperature": 0.7,
85
  "top_p": 0.9,
 
93
  history.append(inputs)
94
  print(f"Logging : payload is - {payload}")
95
 
96
+ # Kullanıcı mesajını dosyaya yazma
97
+ with open(LOG_FILE, 'a') as f:
98
+ f.write(f"User: {inputs}\n")
99
+
100
  response = requests.post(API_URL, headers=headers, json=payload, stream=True)
101
  print(f"Logging : response code - {response}")
102
  token_counter = 0
 
118
  token_counter += 1
119
  yield chat, history, chat_counter, response
120
 
121
+ # Bot yanıtını dosyaya yazma (tamamlandıktan sonra)
122
+ with open(LOG_FILE, 'a') as f:
123
+ f.write(f"Bot: {partial_words}\n")
124
+
125
  def reset_textbox():
126
  return gr.update(value='')
127
 
 
146
  background-color: #0077c0;
147
  }
148
 
 
 
 
 
 
149
  /* Buton kapsayıcısındaki sol margin değerini kaldırıyoruz */
150
  .fixed_button_container {
 
151
  padding: 0px;
152
  margin: 0px 0 0 0px; /* Sol boşluk kaldırıldı */
153
  }
 
163
  }
164
  }
165
  #chatbot {
166
+ height: 100vh; /* Bu, chatbotun yüksekliğini sayfanın tamamına yayacaktır */
167
+ overflow-y: auto; /* Bu, dikey kaydırma çubuğunu etkinleştirir */
168
  }
 
 
169
  """
170
 
 
 
171
  # Tema ayarları
172
  theme = gr.themes.Base(
173
  neutral_hue="blue",
174
  text_size="sm",
175
  spacing_size="sm",
176
+ )
177
 
178
  with gr.Blocks(css=demo_css, theme=theme) as demo:
179
+ # Opsiyonel: Her yeni sohbet oturumunda dosyayı sıfırlama
180
+ with open(LOG_FILE, 'w') as f:
181
+ f.write("--- Yeni Sohbet ---\n")
182
+
183
  with gr.Column(elem_id="col_container"):
184
  with gr.Accordion("", open=False, visible=False):
185
  system_msg = gr.Textbox(value="")
 
194
  placeholder="Buraya yazın",
195
  show_label=False,
196
  container=False,
 
197
  )
198
  # Butonu, genişlemesini engelleyen sabit kapsayıcı içinde yerleştiriyoruz.
199
  with gr.Column(elem_classes="fixed_button_container"):
 
223
  )
224
  send_button.click(reset_textbox, [], [inputs])
225
 
226
+ demo.queue(max_size=10).launch(debug=True)