ArslanFOX commited on
Commit
556a315
·
verified ·
1 Parent(s): 19175cb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -20
app.py CHANGED
@@ -42,7 +42,7 @@ def get_current_time_in_timezone(timezone: str) -> str:
42
  timezone (str): Timezone name.
43
 
44
  Returns:
45
- str: Current time.
46
  """
47
  try:
48
  tz = pytz.timezone(timezone)
@@ -59,7 +59,7 @@ def get_air_quality(city: str, lang: str = "en") -> str:
59
  lang (str): Language code.
60
 
61
  Returns:
62
- str: AQI string.
63
  """
64
  try:
65
  geolocator = Nominatim(user_agent="smolagents_bot")
@@ -67,7 +67,10 @@ def get_air_quality(city: str, lang: str = "en") -> str:
67
  if not location:
68
  return f"❌ Город '{city}' не найден."
69
  api_key = os.environ["OPENWEATHERMAP_API_KEY"]
70
- url = f"http://api.openweathermap.org/data/2.5/air_pollution?lat={location.latitude}&lon={location.longitude}&appid={api_key}"
 
 
 
71
  data = requests.get(url).json()
72
  aqi = data["list"][0]["main"]["aqi"]
73
  c = data["list"][0]["components"]
@@ -84,7 +87,7 @@ def get_air_quality(city: str, lang: str = "en") -> str:
84
  "title": "😷 Качество воздуха",
85
  "aqi_desc": {1: "Хорошее", 2: "Удовлетворительное", 3: "Среднее", 4: "Плохое", 5: "Очень плохое"},
86
  "pm2_5": "Мелкодисперсные частицы (PM2.5)",
87
- "pm10": "Крупные частицы (PM10)",
88
  "co": "Угарный газ (CO)",
89
  },
90
  "hi": {
@@ -116,7 +119,7 @@ def get_weather(city: str, lang: str = "en") -> str:
116
  lang (str): Language code.
117
 
118
  Returns:
119
- str: Weather string.
120
  """
121
  try:
122
  geolocator = Nominatim(user_agent="smolagents_bot")
@@ -124,7 +127,11 @@ def get_weather(city: str, lang: str = "en") -> str:
124
  if not location:
125
  return f"❌ Город '{city}' не найден."
126
  api_key = os.environ["OPENWEATHERMAP_API_KEY"]
127
- url = f"http://api.openweathermap.org/data/2.5/weather?lat={location.latitude}&lon={location.longitude}&appid={api_key}&units=metric"
 
 
 
 
128
  data = requests.get(url).json()
129
  w = data["weather"][0]["main"]
130
  temp = data["main"]["temp"]
@@ -137,7 +144,8 @@ def get_weather(city: str, lang: str = "en") -> str:
137
  "humidity": "Humidity",
138
  "conditions": {
139
  "Clear": "Clear ☀️", "Clouds": "Cloudy ☁️", "Rain": "Rain 🌧",
140
- "Snow": "Snow ❄️", "Thunderstorm": "Storm ⛈", "Drizzle": "Drizzle 🌦", "Mist": "Mist 🌫", "Haze": "Haze 🌫"
 
141
  }
142
  },
143
  "ru": {
@@ -146,7 +154,8 @@ def get_weather(city: str, lang: str = "en") -> str:
146
  "humidity": "Влажность",
147
  "conditions": {
148
  "Clear": "Ясно ☀️", "Clouds": "Облачно ☁️", "Rain": "Дождь 🌧",
149
- "Snow": "Снег ❄️", "Thunderstorm": "Гроза ⛈", "Drizzle": "Морось 🌦", "Mist": "Туман 🌫", "Haze": "Дымка 🌫"
 
150
  }
151
  },
152
  "hi": {
@@ -155,7 +164,8 @@ def get_weather(city: str, lang: str = "en") -> str:
155
  "humidity": "नमी",
156
  "conditions": {
157
  "Clear": "साफ ☀️", "Clouds": "बादल ☁️", "Rain": "बारिश 🌧",
158
- "Snow": "बर्फ ❄️", "Thunderstorm": "तूान ⛈", "Drizzle": "बूंदाबांदी 🌦", "Mist": "कोहरा 🌫", "Haze": "धुंध 🌫"
 
159
  }
160
  }
161
  }
@@ -172,10 +182,18 @@ def get_weather(city: str, lang: str = "en") -> str:
172
 
173
  @tool
174
  def final_answer(answer: str) -> str:
175
- """Final string output."""
 
 
 
 
 
 
 
 
176
  return answer
177
 
178
- # 🤖 Модель
179
  model = HfApiModel(
180
  max_tokens=1000,
181
  temperature=0.5,
@@ -185,13 +203,14 @@ model = HfApiModel(
185
  # 📜 System Prompt
186
  system_prompt = (
187
  "Ты помощник. Используй только функции: "
188
- "`get_timezone_by_city`, `get_current_time_in_timezone`, `get_air_quality`, `get_weather`, `final_answer`. "
189
- "Передавай `lang = variables['lang']`, и `dark_mode = variables['dark_mode']`. "
190
- "Ответ в виде:\n```py\nfinal_answer('...')\n```<end_code>\n"
 
191
  "❌ Без пояснений, markdown, JSON."
192
  )
193
 
194
- # 🎯 Templates
195
  prompt_templates = {
196
  "system_prompt": system_prompt,
197
  "default": "Response: {{question}}",
@@ -220,7 +239,7 @@ agent = CodeAgent(
220
  verbosity_level=2
221
  )
222
 
223
- # 🧠 Тёмный юмор
224
  def get_joke(lang):
225
  jokes = {
226
  "en": [
@@ -241,12 +260,12 @@ def get_joke(lang):
241
  }
242
  return random.choice(jokes.get(lang, jokes["en"]))
243
 
244
- # 💬 Обработка запроса
245
  def process_input(user_input):
246
  try:
247
  lang = detect(user_input)
248
  lang = lang if lang in ["en", "ru", "hi"] else "en"
249
- dark_mode = True # можно выключить
250
 
251
  agent.variables = {
252
  "lang": lang,
@@ -260,7 +279,7 @@ def process_input(user_input):
260
  except Exception as e:
261
  return f"❌ Ошибка: {str(e)}"
262
 
263
- # 🚀 Gradio UI
264
  if __name__ == "__main__":
265
  gr.Interface(
266
  fn=process_input,
@@ -268,4 +287,4 @@ if __name__ == "__main__":
268
  outputs="text",
269
  title="🦊 Умный ассистент",
270
  description="Напиши город — узнаешь время, погоду, воздух и получишь комментарий 😏"
271
- ).launch()
 
42
  timezone (str): Timezone name.
43
 
44
  Returns:
45
+ str: Current time or error.
46
  """
47
  try:
48
  tz = pytz.timezone(timezone)
 
59
  lang (str): Language code.
60
 
61
  Returns:
62
+ str: Translated air quality info.
63
  """
64
  try:
65
  geolocator = Nominatim(user_agent="smolagents_bot")
 
67
  if not location:
68
  return f"❌ Город '{city}' не найден."
69
  api_key = os.environ["OPENWEATHERMAP_API_KEY"]
70
+ url = (
71
+ f"http://api.openweathermap.org/data/2.5/air_pollution"
72
+ f"?lat={location.latitude}&lon={location.longitude}&appid={api_key}"
73
+ )
74
  data = requests.get(url).json()
75
  aqi = data["list"][0]["main"]["aqi"]
76
  c = data["list"][0]["components"]
 
87
  "title": "😷 Качество воздуха",
88
  "aqi_desc": {1: "Хорошее", 2: "Удовлетворительное", 3: "Среднее", 4: "Плохое", 5: "Очень плохое"},
89
  "pm2_5": "Мелкодисперсные частицы (PM2.5)",
90
+ "pm10": "Крупнодисперсные частицы (PM10)",
91
  "co": "Угарный газ (CO)",
92
  },
93
  "hi": {
 
119
  lang (str): Language code.
120
 
121
  Returns:
122
+ str: Weather info string.
123
  """
124
  try:
125
  geolocator = Nominatim(user_agent="smolagents_bot")
 
127
  if not location:
128
  return f"❌ Город '{city}' не найден."
129
  api_key = os.environ["OPENWEATHERMAP_API_KEY"]
130
+ url = (
131
+ f"http://api.openweathermap.org/data/2.5/weather"
132
+ f"?lat={location.latitude}&lon={location.longitude}"
133
+ f"&appid={api_key}&units=metric"
134
+ )
135
  data = requests.get(url).json()
136
  w = data["weather"][0]["main"]
137
  temp = data["main"]["temp"]
 
144
  "humidity": "Humidity",
145
  "conditions": {
146
  "Clear": "Clear ☀️", "Clouds": "Cloudy ☁️", "Rain": "Rain 🌧",
147
+ "Snow": "Snow ❄️", "Thunderstorm": "Storm ⛈", "Drizzle": "Drizzle 🌦",
148
+ "Mist": "Mist 🌫", "Haze": "Haze 🌫"
149
  }
150
  },
151
  "ru": {
 
154
  "humidity": "Влажность",
155
  "conditions": {
156
  "Clear": "Ясно ☀️", "Clouds": "Облачно ☁️", "Rain": "Дождь 🌧",
157
+ "Snow": "Снег ❄️", "Thunderstorm": "Гроза ⛈", "Drizzle": "Морось 🌦",
158
+ "Mist": "Туман 🌫", "Haze": "Дымка 🌫"
159
  }
160
  },
161
  "hi": {
 
164
  "humidity": "नमी",
165
  "conditions": {
166
  "Clear": "साफ ☀️", "Clouds": "बादल ☁️", "Rain": "बारिश 🌧",
167
+ "Snow": "बर्फ ❄️", "Thunderstorm": "तूфान ⛈", "Drizzle": "बूंदाबांदी 🌦",
168
+ "Mist": "कोहरा 🌫", "Haze": "धुंध 🌫"
169
  }
170
  }
171
  }
 
182
 
183
  @tool
184
  def final_answer(answer: str) -> str:
185
+ """
186
+ Return the final answer string to the user.
187
+
188
+ Args:
189
+ answer (str): The final response to display.
190
+
191
+ Returns:
192
+ str: The same response passed in.
193
+ """
194
  return answer
195
 
196
+ # 🤖 Model setup
197
  model = HfApiModel(
198
  max_tokens=1000,
199
  temperature=0.5,
 
203
  # 📜 System Prompt
204
  system_prompt = (
205
  "Ты помощник. Используй только функции: "
206
+ "`get_timezone_by_city`, `get_current_time_in_timezone`, `get_air_quality`, "
207
+ "`get_weather`, `final_answer`. Передавай `lang = variables['lang']`, "
208
+ "и `dark_mode = variables['dark_mode']`. Ответ в формате:\n"
209
+ "```py\nfinal_answer('...')\n```<end_code>\n"
210
  "❌ Без пояснений, markdown, JSON."
211
  )
212
 
213
+ # 🎯 Prompt templates
214
  prompt_templates = {
215
  "system_prompt": system_prompt,
216
  "default": "Response: {{question}}",
 
239
  verbosity_level=2
240
  )
241
 
242
+ # 🦹‍♂️ Dark humor jokes
243
  def get_joke(lang):
244
  jokes = {
245
  "en": [
 
260
  }
261
  return random.choice(jokes.get(lang, jokes["en"]))
262
 
263
+ # 💬 Request processing
264
  def process_input(user_input):
265
  try:
266
  lang = detect(user_input)
267
  lang = lang if lang in ["en", "ru", "hi"] else "en"
268
+ dark_mode = True # enable/disable humor
269
 
270
  agent.variables = {
271
  "lang": lang,
 
279
  except Exception as e:
280
  return f"❌ Ошибка: {str(e)}"
281
 
282
+ # 🚀 Run
283
  if __name__ == "__main__":
284
  gr.Interface(
285
  fn=process_input,
 
287
  outputs="text",
288
  title="🦊 Умный ассистент",
289
  description="Напиши город — узнаешь время, погоду, воздух и получишь комментарий 😏"
290
+ ).launch()