Update app.py
Browse files
app.py
CHANGED
@@ -3,19 +3,20 @@ import os
|
|
3 |
import json
|
4 |
import requests
|
5 |
import xml.etree.ElementTree as ET
|
|
|
6 |
|
7 |
|
8 |
-
|
|
|
9 |
API_URL = "https://api.openai.com/v1/chat/completions"
|
10 |
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
|
11 |
|
|
|
12 |
url = 'https://www.trekbisiklet.com.tr/output/8582384479'
|
13 |
-
|
14 |
response = requests.get(url)
|
15 |
root = ET.fromstring(response.content)
|
16 |
|
17 |
products = []
|
18 |
-
|
19 |
for item in root.findall('item'):
|
20 |
if item.find('isOptionOfAProduct').text == '1':
|
21 |
if item.find('stockAmount').text > '0':
|
@@ -28,13 +29,24 @@ for item in root.findall('item'):
|
|
28 |
# name: ilk kelime (marka), item_info: (stok adedi, fiyat)
|
29 |
products.append((name, item_info, full_name))
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
def predict(system_msg, inputs, top_p, temperature, chat_counter, chatbot=[], history=[]):
|
32 |
headers = {
|
33 |
"Content-Type": "application/json",
|
34 |
"Authorization": f"Bearer {OPENAI_API_KEY}"
|
35 |
}
|
36 |
print(f"system message is ^^ {system_msg}")
|
37 |
-
initial_message = [{"role": "user", "content": f"{inputs}"}
|
38 |
|
39 |
multi_turn_message = [
|
40 |
{"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.."},
|
@@ -54,7 +66,7 @@ def predict(system_msg, inputs, top_p, temperature, chat_counter, chatbot=[], hi
|
|
54 |
{"role": "system", "content": "Tüm modellerimizin ağırlıkları: Madone SL 5 Gen 8 8.70 kg, Madone SL 6 Gen 8 8.16 kg, Madone SL 7 Gen 8 7.88 kg, Madone SLR 7 Gen 8 7.30 kg, Madone SLR 7 AXS Gen 8 7.44 kg, Madone SLR 8 AXS Gen 8 7.18 kg, Madone SLR 9 Gen 8 7.00 kg, Madone SLR 9 AXS Gen 8 7.00 kg, Madone SLR 9 Etap Gen 7 7.36 kg, Madone SLR 9 Gen 7 7.10 kg, Madone SLR 7 Etap Gen 7 7.76 kg, Madone SLR 7 Gen 7 7.48 kg, Émonda SLR 9 6.72 kg, Émonda SLR 7 Etap 7.37 kg, Émonda SL 9 7.44 kg, Émonda SLR 7 7.10 kg, Émonda SLR 6 7.35 kg, Émonda SL 7 Etap 7.95 kg, Émonda SL 7 7.95 kg, Émonda SL 6 Pro Di2 8.25 kg, Émonda SL 5 9.15 kg, Émonda ALR 5 9.15 kg, Émonda ALR 4 9.50 kg, Domane SLR 7 Gen 4 7.25 kg, Domane SLR 7 AXS Gen 4 8.48 kg, Domane SL 6 Gen 4 8.90 kg, Domane SL 6 9.30 kg, Domane SL 5 Gen 4 8.93 kg, Domane AL 2 Gen 4 10.55 kg, Domane AL 2 Rim 9.57 kg, Checkmate SLR 7 AXS 9.00 kg, Checkpoint SL 7 AXS Gen 3 9.05 kg, Checkpoint SL 5 AXS Gen 3 9.30 kg, Domane+ SLR 7 AXS 12.40 kg, Speed Concept SLR 9 Etap 8.60 kg, Speed Concept SLR 9 8.70 kg, Speed Concept SLR 7 Etap 9.35 kg, Speed Concept SLR 7 8.97 kg, Fuel EXe 9.8 GX AXS T-Type 18.1 kg, Fuel EXe 9.7 SLX/XT 19.00 kg, Fuel EXe 5 20.8 kg, Rail 9.8 GX AXS T-Type 22.9 kg, Rail 5 21.53 kg, Rail 5 Gen 3 23.53 kg, Powerfly Gen 4 23.37 kg, Marlin+ 8 21.30 kg, Marlin+ 6 22.45 kg, Domane+ SLR 7 AXS 12.40 kg, Dual Sport+ 2 17.41 kg, FX+ 2 18.20 kg, Verve+ 3 24.70 kg, Townie Go 7D EQ Step Thru 20.41 kg, Marlin 8 13.2 kg, Marlin 7 13.77 kg, Marlin 5 13.90 kg, Marlin 4 14.60 kg, Procaliber 9.7 AXS Gen 3 10.58 kg, Procaliber 9.5 Gen 3 11.74 kg, Procaliber 9.5 11.74 kg, Supercaliber SL 9.7 Gen 2 11.98 kg, Fuel EX 8 GX AXS 13.77 kg, FX Sport 6 9.30 kg, FX 3 11.50 kg, FX 2 12.30 kg, DS 3 Gen 5 12.05 kg, DS 3 Gen 4 13.00 kg, DS 2 Gen 5 12.79 kg, Verve 3 Low Step 14.20 kg, Verve 3 14.30 kg"}
|
55 |
]
|
56 |
|
57 |
-
|
58 |
|
59 |
# Kullanıcı girişindeki kelimeleri küçük harfe çevirip listeye alıyoruz.
|
60 |
input_words = [str(word).lower() for word in inputs.split()]
|
@@ -110,13 +122,13 @@ def predict(system_msg, inputs, top_p, temperature, chat_counter, chatbot=[], hi
|
|
110 |
token_counter += 1
|
111 |
yield chat, history, chat_counter, response
|
112 |
|
|
|
|
|
|
|
113 |
def reset_textbox():
|
114 |
return gr.update(value='')
|
115 |
|
116 |
-
# CSS
|
117 |
-
# Ek olarak, mobilde giriş alanının genişliğini kısıtlamak için "#input_text" id'sine genişlik ayarı ekledik.
|
118 |
-
|
119 |
-
# CSS: Chatbot yüksekliğini ayarlama ve mevcut CSS'i koruma
|
120 |
demo_css = """
|
121 |
#send_button {
|
122 |
background-color: #0b93f6;
|
@@ -135,30 +147,29 @@ demo_css = """
|
|
135 |
#send_button:hover {
|
136 |
background-color: #0077c0;
|
137 |
}
|
138 |
-
/* Buton kapsayıcısındaki sol margin değerini kaldırıyoruz */
|
139 |
.fixed_button_container {
|
140 |
padding: 0px;
|
141 |
-
margin: 0px 0 0 0px;
|
142 |
}
|
143 |
#custom_row {
|
144 |
-
width: 150% !important;
|
145 |
flex-wrap: nowrap !important;
|
146 |
}
|
147 |
-
/* Mobil ekranlar için özel düzenleme */
|
148 |
@media only screen and (max-width: 1000px) {
|
149 |
-
.custom_row {
|
150 |
flex-wrap: nowrap !important;
|
151 |
}
|
152 |
}
|
153 |
#chatbot {
|
154 |
-
height:
|
155 |
-
overflow-y: auto;
|
156 |
}
|
157 |
"""
|
158 |
|
159 |
# Tema ayarları
|
160 |
theme = gr.themes.Base(neutral_hue="blue", text_size="sm", spacing_size="sm")
|
161 |
|
|
|
162 |
with gr.Blocks(css=demo_css) as demo:
|
163 |
with gr.Column(elem_id="col_container"):
|
164 |
with gr.Accordion("", open=False, visible=False):
|
@@ -167,7 +178,6 @@ with gr.Blocks(css=demo_css) as demo:
|
|
167 |
accordion_msg = gr.HTML(value="", visible=False)
|
168 |
chatbot = gr.Chatbot(label='Trek Asistanı', elem_id="chatbot")
|
169 |
|
170 |
-
# Row içinde, metin kutusu ve buton arasındaki boşluğu sıfırlıyoruz
|
171 |
with gr.Row(elem_id="custom_row"):
|
172 |
inputs = gr.Textbox(placeholder="Buraya yazın", show_label=False, container=False)
|
173 |
with gr.Column(elem_classes="fixed_button_container"):
|
@@ -179,10 +189,9 @@ with gr.Blocks(css=demo_css) as demo:
|
|
179 |
temperature = gr.Slider(minimum=0, maximum=5.0, value=0.1, step=0.1, interactive=False, visible=False)
|
180 |
chat_counter = gr.Number(value=0, visible=False, precision=0)
|
181 |
|
182 |
-
# ENTER
|
183 |
inputs.submit(predict, [system_msg, inputs, top_p, temperature, chat_counter, chatbot, state], [chatbot, state, chat_counter])
|
184 |
inputs.submit(reset_textbox, [], [inputs])
|
185 |
-
# Gönder butonuna tıklandığında işlemin gerçekleşmesi
|
186 |
send_button.click(predict, [system_msg, inputs, top_p, temperature, chat_counter, chatbot, state], [chatbot, state, chat_counter])
|
187 |
send_button.click(reset_textbox, [], [inputs])
|
188 |
|
|
|
3 |
import json
|
4 |
import requests
|
5 |
import xml.etree.ElementTree as ET
|
6 |
+
from datetime import datetime
|
7 |
|
8 |
|
9 |
+
|
10 |
+
# API URL ve API anahtarı
|
11 |
API_URL = "https://api.openai.com/v1/chat/completions"
|
12 |
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
|
13 |
|
14 |
+
# XML'den ürün bilgilerini çekiyoruz
|
15 |
url = 'https://www.trekbisiklet.com.tr/output/8582384479'
|
|
|
16 |
response = requests.get(url)
|
17 |
root = ET.fromstring(response.content)
|
18 |
|
19 |
products = []
|
|
|
20 |
for item in root.findall('item'):
|
21 |
if item.find('isOptionOfAProduct').text == '1':
|
22 |
if item.find('stockAmount').text > '0':
|
|
|
29 |
# name: ilk kelime (marka), item_info: (stok adedi, fiyat)
|
30 |
products.append((name, item_info, full_name))
|
31 |
|
32 |
+
# Sohbet geçmişini kalıcı depolamaya yazan fonksiyon
|
33 |
+
def log_chat(history):
|
34 |
+
# Hugging Face Spaces persistent storage, genellikle /mnt/data dizininde yer alır
|
35 |
+
file_path = "/mnt/data/sohbet_kaydi.json"
|
36 |
+
log_entry = {
|
37 |
+
"timestamp": datetime.now().isoformat(),
|
38 |
+
"chat_history": history
|
39 |
+
}
|
40 |
+
with open(file_path, "a", encoding="utf-8") as f:
|
41 |
+
f.write(json.dumps(log_entry, ensure_ascii=False) + "\n")
|
42 |
+
|
43 |
def predict(system_msg, inputs, top_p, temperature, chat_counter, chatbot=[], history=[]):
|
44 |
headers = {
|
45 |
"Content-Type": "application/json",
|
46 |
"Authorization": f"Bearer {OPENAI_API_KEY}"
|
47 |
}
|
48 |
print(f"system message is ^^ {system_msg}")
|
49 |
+
initial_message = [{"role": "user", "content": f"{inputs}"}]
|
50 |
|
51 |
multi_turn_message = [
|
52 |
{"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.."},
|
|
|
66 |
{"role": "system", "content": "Tüm modellerimizin ağırlıkları: Madone SL 5 Gen 8 8.70 kg, Madone SL 6 Gen 8 8.16 kg, Madone SL 7 Gen 8 7.88 kg, Madone SLR 7 Gen 8 7.30 kg, Madone SLR 7 AXS Gen 8 7.44 kg, Madone SLR 8 AXS Gen 8 7.18 kg, Madone SLR 9 Gen 8 7.00 kg, Madone SLR 9 AXS Gen 8 7.00 kg, Madone SLR 9 Etap Gen 7 7.36 kg, Madone SLR 9 Gen 7 7.10 kg, Madone SLR 7 Etap Gen 7 7.76 kg, Madone SLR 7 Gen 7 7.48 kg, Émonda SLR 9 6.72 kg, Émonda SLR 7 Etap 7.37 kg, Émonda SL 9 7.44 kg, Émonda SLR 7 7.10 kg, Émonda SLR 6 7.35 kg, Émonda SL 7 Etap 7.95 kg, Émonda SL 7 7.95 kg, Émonda SL 6 Pro Di2 8.25 kg, Émonda SL 5 9.15 kg, Émonda ALR 5 9.15 kg, Émonda ALR 4 9.50 kg, Domane SLR 7 Gen 4 7.25 kg, Domane SLR 7 AXS Gen 4 8.48 kg, Domane SL 6 Gen 4 8.90 kg, Domane SL 6 9.30 kg, Domane SL 5 Gen 4 8.93 kg, Domane AL 2 Gen 4 10.55 kg, Domane AL 2 Rim 9.57 kg, Checkmate SLR 7 AXS 9.00 kg, Checkpoint SL 7 AXS Gen 3 9.05 kg, Checkpoint SL 5 AXS Gen 3 9.30 kg, Domane+ SLR 7 AXS 12.40 kg, Speed Concept SLR 9 Etap 8.60 kg, Speed Concept SLR 9 8.70 kg, Speed Concept SLR 7 Etap 9.35 kg, Speed Concept SLR 7 8.97 kg, Fuel EXe 9.8 GX AXS T-Type 18.1 kg, Fuel EXe 9.7 SLX/XT 19.00 kg, Fuel EXe 5 20.8 kg, Rail 9.8 GX AXS T-Type 22.9 kg, Rail 5 21.53 kg, Rail 5 Gen 3 23.53 kg, Powerfly Gen 4 23.37 kg, Marlin+ 8 21.30 kg, Marlin+ 6 22.45 kg, Domane+ SLR 7 AXS 12.40 kg, Dual Sport+ 2 17.41 kg, FX+ 2 18.20 kg, Verve+ 3 24.70 kg, Townie Go 7D EQ Step Thru 20.41 kg, Marlin 8 13.2 kg, Marlin 7 13.77 kg, Marlin 5 13.90 kg, Marlin 4 14.60 kg, Procaliber 9.7 AXS Gen 3 10.58 kg, Procaliber 9.5 Gen 3 11.74 kg, Procaliber 9.5 11.74 kg, Supercaliber SL 9.7 Gen 2 11.98 kg, Fuel EX 8 GX AXS 13.77 kg, FX Sport 6 9.30 kg, FX 3 11.50 kg, FX 2 12.30 kg, DS 3 Gen 5 12.05 kg, DS 3 Gen 4 13.00 kg, DS 2 Gen 5 12.79 kg, Verve 3 Low Step 14.20 kg, Verve 3 14.30 kg"}
|
67 |
]
|
68 |
|
69 |
+
messages = multi_turn_message.copy()
|
70 |
|
71 |
# Kullanıcı girişindeki kelimeleri küçük harfe çevirip listeye alıyoruz.
|
72 |
input_words = [str(word).lower() for word in inputs.split()]
|
|
|
122 |
token_counter += 1
|
123 |
yield chat, history, chat_counter, response
|
124 |
|
125 |
+
# Sohbet akışı tamamlandıktan sonra geçmişi kalıcı depolamaya kaydet
|
126 |
+
log_chat(history)
|
127 |
+
|
128 |
def reset_textbox():
|
129 |
return gr.update(value='')
|
130 |
|
131 |
+
# CSS ayarları
|
|
|
|
|
|
|
132 |
demo_css = """
|
133 |
#send_button {
|
134 |
background-color: #0b93f6;
|
|
|
147 |
#send_button:hover {
|
148 |
background-color: #0077c0;
|
149 |
}
|
|
|
150 |
.fixed_button_container {
|
151 |
padding: 0px;
|
152 |
+
margin: 0px 0 0 0px;
|
153 |
}
|
154 |
#custom_row {
|
155 |
+
width: 150% !important;
|
156 |
flex-wrap: nowrap !important;
|
157 |
}
|
|
|
158 |
@media only screen and (max-width: 1000px) {
|
159 |
+
.custom_row {
|
160 |
flex-wrap: nowrap !important;
|
161 |
}
|
162 |
}
|
163 |
#chatbot {
|
164 |
+
height: 60vh !important;
|
165 |
+
overflow-y: auto;
|
166 |
}
|
167 |
"""
|
168 |
|
169 |
# Tema ayarları
|
170 |
theme = gr.themes.Base(neutral_hue="blue", text_size="sm", spacing_size="sm")
|
171 |
|
172 |
+
# Gradio arayüzü
|
173 |
with gr.Blocks(css=demo_css) as demo:
|
174 |
with gr.Column(elem_id="col_container"):
|
175 |
with gr.Accordion("", open=False, visible=False):
|
|
|
178 |
accordion_msg = gr.HTML(value="", visible=False)
|
179 |
chatbot = gr.Chatbot(label='Trek Asistanı', elem_id="chatbot")
|
180 |
|
|
|
181 |
with gr.Row(elem_id="custom_row"):
|
182 |
inputs = gr.Textbox(placeholder="Buraya yazın", show_label=False, container=False)
|
183 |
with gr.Column(elem_classes="fixed_button_container"):
|
|
|
189 |
temperature = gr.Slider(minimum=0, maximum=5.0, value=0.1, step=0.1, interactive=False, visible=False)
|
190 |
chat_counter = gr.Number(value=0, visible=False, precision=0)
|
191 |
|
192 |
+
# ENTER ile gönderme
|
193 |
inputs.submit(predict, [system_msg, inputs, top_p, temperature, chat_counter, chatbot, state], [chatbot, state, chat_counter])
|
194 |
inputs.submit(reset_textbox, [], [inputs])
|
|
|
195 |
send_button.click(predict, [system_msg, inputs, top_p, temperature, chat_counter, chatbot, state], [chatbot, state, chat_counter])
|
196 |
send_button.click(reset_textbox, [], [inputs])
|
197 |
|