AlessandroArgiolas02 commited on
Commit
2a3d435
·
verified ·
1 Parent(s): e5167dd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +68 -45
app.py CHANGED
@@ -2,7 +2,6 @@ import gradio as gr
2
  import google.generativeai as genai
3
  import os
4
  import re
5
- import time
6
 
7
  GEMINI_KEY = os.getenv("GEMINI")
8
  genai.configure(api_key=GEMINI_KEY)
@@ -65,8 +64,6 @@ body {
65
  margin: 10px 0 10px 30%;
66
  position: relative;
67
  animation: slideIn 0.3s ease;
68
- display: flex;
69
- align-items: center;
70
  }
71
 
72
  .msg-bot {
@@ -77,23 +74,14 @@ body {
77
  border: 1px solid #E0E0E0;
78
  position: relative;
79
  animation: fadeIn 0.5s ease;
80
- display: flex;
81
- align-items: center;
82
- }
83
-
84
- .user-avatar {
85
- width: 40px;
86
- height: 40px;
87
- border-radius: 50%;
88
- margin-right: 15px;
89
- border: 2px solid white;
90
  }
91
 
92
- .bot-avatar {
93
- width: 40px;
94
- height: 40px;
95
- border-radius: 50%;
96
- margin-right: 15px;
 
97
  }
98
 
99
  .card {
@@ -106,20 +94,54 @@ body {
106
  transition: transform 0.2s;
107
  }
108
 
109
- .typing-animation {
110
- display: inline-block;
111
- position: relative;
112
- padding-right: 5px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
  }
114
 
115
- .typing-animation::after {
116
- content: "|";
117
- animation: blink 1s infinite;
118
- opacity: 1;
 
119
  }
120
 
121
- @keyframes blink {
122
- 50% { opacity: 0; }
 
 
 
 
 
 
 
 
 
 
123
  }
124
 
125
  @keyframes slideIn {
@@ -132,7 +154,16 @@ body {
132
  to { opacity: 1; transform: translateY(0); }
133
  }
134
 
135
- /* Resto dello CSS invariato */
 
 
 
 
 
 
 
 
 
136
  """
137
 
138
  class ChatManager:
@@ -170,7 +201,7 @@ class ChatManager:
170
  <p style="margin:10px 0;color:var(--text)">{item.get('descrizione', '')}</p>
171
  <div style="display:flex;gap:15px;align-items:center">
172
  {f"<div class='price'>💰 {item.get('prezzo', '')}</div>" if item.get('prezzo') else ''}
173
- {f"<a href='{item['link']}' class='link' target='_blank'>Maggiori info</a>" if 'link' in item else ''}
174
  </div>
175
  </div>
176
  """
@@ -179,7 +210,7 @@ class ChatManager:
179
  chat_manager = ChatManager()
180
 
181
  def respond(message, chat_history):
182
- chat_history.append(((message,), ""))
183
 
184
  city = chat_manager.extract_city(message)
185
  if city:
@@ -187,7 +218,7 @@ def respond(message, chat_history):
187
 
188
  if not chat_manager.context["city"]:
189
  bot_response = "🌍 Per favore dimmi prima di quale città vuoi informazioni!"
190
- chat_history[-1] = ((message,), bot_response)
191
  return "", chat_history
192
 
193
  prompt = f"""
@@ -207,15 +238,7 @@ def respond(message, chat_history):
207
  except Exception as e:
208
  bot_response = f"⚠️ Errore: {str(e)}"
209
 
210
- # Simulazione effetto battitura
211
- full_response = ""
212
- for char in bot_response:
213
- full_response += char
214
- chat_history[-1] = ((message,), f"<div class='typing-animation'>{full_response}</div>")
215
- time.sleep(0.02)
216
- yield "", chat_history
217
-
218
- chat_history[-1] = ((message,), full_response)
219
  return "", chat_history
220
 
221
  def reset_context(chat_history):
@@ -242,10 +265,10 @@ with gr.Blocks(css=CSS) as app:
242
  label="Chat",
243
  elem_classes="chat-container",
244
  show_label=False,
245
- avatar_images=[
246
- ("https://i.ibb.co/8XJp0dN/user-avatar.png", "user"), # Sostituisci
247
- ("https://i.ibb.co/8XJp0dN/bot-avatar.png", "bot") # Sostituisci
248
- ],
249
  value=[[None, "Ciao sono la tua guida turistica, come posso aiutarti? 🌍"]]
250
  )
251
 
 
2
  import google.generativeai as genai
3
  import os
4
  import re
 
5
 
6
  GEMINI_KEY = os.getenv("GEMINI")
7
  genai.configure(api_key=GEMINI_KEY)
 
64
  margin: 10px 0 10px 30%;
65
  position: relative;
66
  animation: slideIn 0.3s ease;
 
 
67
  }
68
 
69
  .msg-bot {
 
74
  border: 1px solid #E0E0E0;
75
  position: relative;
76
  animation: fadeIn 0.5s ease;
 
 
 
 
 
 
 
 
 
 
77
  }
78
 
79
+ .msg-bot::before {
80
+ content: "✈️";
81
+ position: absolute;
82
+ left: -35px;
83
+ top: 15px;
84
+ font-size: 1.5em;
85
  }
86
 
87
  .card {
 
94
  transition: transform 0.2s;
95
  }
96
 
97
+ .card:hover {
98
+ transform: translateY(-3px);
99
+ }
100
+
101
+ .price {
102
+ color: var(--primary);
103
+ font-weight: 600;
104
+ margin: 8px 0;
105
+ }
106
+
107
+ .link {
108
+ color: var(--secondary) !important;
109
+ text-decoration: none;
110
+ font-weight: 500;
111
+ display: inline-flex;
112
+ align-items: center;
113
+ gap: 5px;
114
+ }
115
+
116
+ .link:hover {
117
+ text-decoration: underline;
118
+ }
119
+
120
+ .controls {
121
+ padding: 20px;
122
+ background: #F8FAFD;
123
+ border-top: 1px solid #E0E0E0;
124
  }
125
 
126
+ input[type="text"] {
127
+ border: 2px solid var(--secondary) !important;
128
+ border-radius: 12px !important;
129
+ padding: 15px !important;
130
+ font-size: 1em;
131
  }
132
 
133
+ button {
134
+ background: var(--primary) !important;
135
+ color: white !important;
136
+ border: none !important;
137
+ padding: 12px 25px !important;
138
+ border-radius: 10px !important;
139
+ transition: all 0.2s !important;
140
+ }
141
+
142
+ button:hover {
143
+ transform: translateY(-2px);
144
+ box-shadow: 0 5px 15px rgba(42,92,130,0.2) !important;
145
  }
146
 
147
  @keyframes slideIn {
 
154
  to { opacity: 1; transform: translateY(0); }
155
  }
156
 
157
+ @media (max-width: 600px) {
158
+ .gradio-container {
159
+ border-radius: 0;
160
+ }
161
+
162
+ .msg-user, .msg-bot {
163
+ margin-left: 10%;
164
+ margin-right: 10%;
165
+ }
166
+ }
167
  """
168
 
169
  class ChatManager:
 
201
  <p style="margin:10px 0;color:var(--text)">{item.get('descrizione', '')}</p>
202
  <div style="display:flex;gap:15px;align-items:center">
203
  {f"<div class='price'>💰 {item.get('prezzo', '')}</div>" if item.get('prezzo') else ''}
204
+ {f"<a href='{item['link']}' class='link' target='_blank'><svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-external-link'><path d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'></path><polyline points='15 3 21 3 21 9'></polyline><line x1='10' y1='14' x2='21' y2='3'></line></svg> Maggiori info</a>" if 'link' in item else ''}
205
  </div>
206
  </div>
207
  """
 
210
  chat_manager = ChatManager()
211
 
212
  def respond(message, chat_history):
213
+ chat_history.append((message, ""))
214
 
215
  city = chat_manager.extract_city(message)
216
  if city:
 
218
 
219
  if not chat_manager.context["city"]:
220
  bot_response = "🌍 Per favore dimmi prima di quale città vuoi informazioni!"
221
+ chat_history[-1] = (message, bot_response)
222
  return "", chat_history
223
 
224
  prompt = f"""
 
238
  except Exception as e:
239
  bot_response = f"⚠️ Errore: {str(e)}"
240
 
241
+ chat_history[-1] = (message, bot_response)
 
 
 
 
 
 
 
 
242
  return "", chat_history
243
 
244
  def reset_context(chat_history):
 
265
  label="Chat",
266
  elem_classes="chat-container",
267
  show_label=False,
268
+ avatar_images=(
269
+ None,
270
+ "https://i.ibb.co/8XJp0dN/bot-avatar.png" # Sostituisci con il tuo URL
271
+ ),
272
  value=[[None, "Ciao sono la tua guida turistica, come posso aiutarti? 🌍"]]
273
  )
274