ArslanFOX commited on
Commit
f73f8cc
·
verified ·
1 Parent(s): b19728e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +131 -42
app.py CHANGED
@@ -68,20 +68,14 @@ def get_air_quality(city: str, lang: str = "en") -> str:
68
  "air_quality": "Air quality",
69
  "pm2_5": "Fine particles (PM2.5)",
70
  "pm10": "Coarse particles (PM10)",
71
- "co": "Carbon monoxide (CO)",
72
- "no2": "Nitrogen dioxide (NO2)",
73
- "so2": "Sulfur dioxide (SO2)",
74
- "o3": "Ozone (O3)"
75
  },
76
  "ru": {
77
  "aqi_desc": {1: "Хорошее", 2: "Удовлетворительное", 3: "Среднее", 4: "Плохое", 5: "Очень плохое"},
78
  "air_quality": "Качество воздуха",
79
  "pm2_5": "Мелкие частицы (PM2.5)",
80
  "pm10": "Крупные частицы (PM10)",
81
- "co": "Угарный газ (CO)",
82
- "no2": "Диоксид азота (NO2)",
83
- "so2": "Диоксид серы (SO2)",
84
- "o3": "Озон (O3)"
85
  }
86
  }
87
  lang = lang if lang in translations else "en"
@@ -92,10 +86,7 @@ def get_air_quality(city: str, lang: str = "en") -> str:
92
  f"😷 {t['air_quality']}: AQI {aqi} ({t['aqi_desc'].get(aqi, 'Unknown')}) {aqi_emoji}\n"
93
  f"{t['pm2_5']}: {components['pm2_5']} µg/m³\n"
94
  f"{t['pm10']}: {components['pm10']} µg/m³\n"
95
- f"{t['co']}: {components['co']} µg/m³\n"
96
- f"{t['no2']}: {components['no2']} µg/m³\n"
97
- f"{t['so2']}: {components['so2']} µg/m³\n"
98
- f"{t['o3']}: {components['o3']} µg/m³"
99
  )
100
  except Exception as e:
101
  return f"Error fetching air quality for '{city}': {str(e)}"
@@ -121,45 +112,48 @@ def get_weather(city: str, lang: str = "en") -> str:
121
 
122
  data = response.json()
123
  temp = data["main"]["temp"]
124
- description = data["weather"][0]["description"]
125
- weather_id = data["weather"][0]["id"]
126
 
127
  translations = {
128
  "en": {
129
- "weather": "Weather in",
130
- "clear": "Clear",
131
- "clouds": "Cloudy",
132
- "rain": "Rain",
133
- "snow": "Snow",
134
- "thunderstorm": "Thunderstorm",
135
- "mist": "Mist"
 
 
 
 
 
136
  },
137
  "ru": {
138
- "weather": "Погода в",
139
- "clear": "Ясно",
140
- "clouds": "Облачно",
141
- "rain": "Дождь",
142
- "snow": "Снег",
143
- "thunderstorm": "Гроза",
144
- "mist": "Туман"
 
 
 
 
 
145
  }
146
  }
147
  lang = lang if lang in translations else "en"
148
  t = translations[lang]
 
149
 
150
- weather_emoji = {
151
- "2": "⛈️", # Thunderstorm
152
- "3": "🌧️", # Drizzle
153
- "5": "🌧️", # Rain
154
- "6": "❄️", # Snow
155
- "7": "🌫️", # Mist
156
- "800": "☀️", # Clear
157
- "8": "☁️" # Clouds
158
- }
159
- emoji = weather_emoji.get(str(weather_id)[0], "🌤️") if weather_id != 800 else weather_emoji.get("800")
160
-
161
- desc_trans = t.get(description, description.capitalize())
162
- return f"🌤️ {t['weather']} {city}: {temp}°C, {desc_trans} {emoji}"
163
  except Exception as e:
164
  return f"Error fetching weather for '{city}': {str(e)}"
165
 
@@ -188,4 +182,99 @@ prompt_templates = {
188
  "final_answer('YOUR ANSWER HERE')\n"
189
  "```\n"
190
  "Do NOT include 'thoughts', 'code', explanations, or invalid dates. "
191
- "If the city is not found or
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  "air_quality": "Air quality",
69
  "pm2_5": "Fine particles (PM2.5)",
70
  "pm10": "Coarse particles (PM10)",
71
+ "co": "Carbon monoxide (CO)"
 
 
 
72
  },
73
  "ru": {
74
  "aqi_desc": {1: "Хорошее", 2: "Удовлетворительное", 3: "Среднее", 4: "Плохое", 5: "Очень плохое"},
75
  "air_quality": "Качество воздуха",
76
  "pm2_5": "Мелкие частицы (PM2.5)",
77
  "pm10": "Крупные частицы (PM10)",
78
+ "co": "Угарный газ (CO)"
 
 
 
79
  }
80
  }
81
  lang = lang if lang in translations else "en"
 
86
  f"😷 {t['air_quality']}: AQI {aqi} ({t['aqi_desc'].get(aqi, 'Unknown')}) {aqi_emoji}\n"
87
  f"{t['pm2_5']}: {components['pm2_5']} µg/m³\n"
88
  f"{t['pm10']}: {components['pm10']} µg/m³\n"
89
+ f"{t['co']}: {components['co']} µg/m³"
 
 
 
90
  )
91
  except Exception as e:
92
  return f"Error fetching air quality for '{city}': {str(e)}"
 
112
 
113
  data = response.json()
114
  temp = data["main"]["temp"]
115
+ weather = data["weather"][0]["main"]
116
+ humidity = data["main"]["humidity"]
117
 
118
  translations = {
119
  "en": {
120
+ "weather": "Weather",
121
+ "temp": "Temperature",
122
+ "humidity": "Humidity",
123
+ "conditions": {
124
+ "Clear": "Clear ☀️",
125
+ "Clouds": "Cloudy ☁️",
126
+ "Rain": "Rain 🌧",
127
+ "Snow": "Snow ❄️",
128
+ "Thunderstorm": "Thunderstorm ⛈",
129
+ "Drizzle": "Drizzle 🌦",
130
+ "Mist": "Mist 🌫"
131
+ }
132
  },
133
  "ru": {
134
+ "weather": "Погода",
135
+ "temp": "Температура",
136
+ "humidity": "Влажность",
137
+ "conditions": {
138
+ "Clear": "Ясно ☀️",
139
+ "Clouds": "Облачно ☁️",
140
+ "Rain": "Дождь 🌧",
141
+ "Snow": "Снег ❄️",
142
+ "Thunderstorm": "Гроза ⛈",
143
+ "Drizzle": "Морось 🌦",
144
+ "Mist": "Туман 🌫"
145
+ }
146
  }
147
  }
148
  lang = lang if lang in translations else "en"
149
  t = translations[lang]
150
+ condition = t["conditions"].get(weather, weather)
151
 
152
+ return (
153
+ f"🌡️ {t['weather']}: {condition}\n"
154
+ f"{t['temp']}: {temp}°C\n"
155
+ f"{t['humidity']}: {humidity}%"
156
+ )
 
 
 
 
 
 
 
 
157
  except Exception as e:
158
  return f"Error fetching weather for '{city}': {str(e)}"
159
 
 
182
  "final_answer('YOUR ANSWER HERE')\n"
183
  "```\n"
184
  "Do NOT include 'thoughts', 'code', explanations, or invalid dates. "
185
+ "If the city is not found or query is unclear, return an error via final_answer(). "
186
+ "NEVER generate code without ```py``` block or with invalid syntax."
187
+ ),
188
+ "default": "Response: {{question}}",
189
+ "planning": {
190
+ "initial_plan": (
191
+ "Analyze query: {{question}}. If it contains a city, get time, air quality, and weather. "
192
+ "Return code:\n"
193
+ "```py\n"
194
+ "final_answer('YOUR ANSWER HERE')\n"
195
+ "```"
196
+ ),
197
+ "update_plan_pre_messages": (
198
+ "Review query: {{question}}. Adjust plan. Return code:\n"
199
+ "```py\n"
200
+ "final_answer('YOUR ANSWER HERE')\n"
201
+ "```"
202
+ ),
203
+ "update_plan_post_messages": (
204
+ "Review query: {{question}} and results. Adjust plan. Return code:\n"
205
+ "```py\n"
206
+ "final_answer('YOUR ANSWER HERE')\n"
207
+ "```"
208
+ ),
209
+ },
210
+ "managed_agent": {
211
+ "execute": (
212
+ "Execute task: {{question}}. If it contains a city or phrases like 'сколько времени', use tools. "
213
+ "Return code:\n"
214
+ "```py\n"
215
+ "from langdetect import detect\n"
216
+ "query = '{{question}}'.strip()\n"
217
+ "city = query.split(' в ')[-1].strip().title() if ' в ' in query else query.title()\n"
218
+ "lang = detect(query) if query else 'en'\n"
219
+ "timezone = get_timezone_by_city(city)\n"
220
+ "if timezone.startswith('Error'):\n"
221
+ " final_answer(timezone)\n"
222
+ "else:\n"
223
+ " time_result = get_current_time_in_timezone(timezone)\n"
224
+ " air_result = get_air_quality(city, lang)\n"
225
+ " weather_result = get_weather(city, lang)\n"
226
+ " final_answer(f'🕒 Время в {city}: {time_result}\\n' + air_result + '\\n' + weather_result)\n"
227
+ "```"
228
+ ),
229
+ "report": (
230
+ "Summarize task: {{question}}. Return code:\n"
231
+ "```py\n"
232
+ "final_answer('YOUR ANSWER HERE')\n"
233
+ "```"
234
+ ),
235
+ "task": (
236
+ "Define task: {{question}}. Return code:\n"
237
+ "```py\n"
238
+ "final_answer('YOUR TASK DEFINITION HERE')\n"
239
+ "```"
240
+ ),
241
+ },
242
+ "final_answer": {
243
+ "pre_messages": (
244
+ "Prepare response for: {{question}}. Return code:\n"
245
+ "```py\n"
246
+ "final_answer('YOUR ANSWER HERE')\n"
247
+ "```"
248
+ ),
249
+ "template": "Final response: {{answer}}",
250
+ "post_messages": (
251
+ "Review response for: {{question}}. Return code:\n"
252
+ "```py\n"
253
+ "final_answer('YOUR ANSWER HERE')\n"
254
+ "```"
255
+ ),
256
+ },
257
+ }
258
+
259
+ agent = CodeAgent(
260
+ model=model,
261
+ tools=[final_answer, get_current_time_in_timezone, get_timezone_by_city, get_air_quality, get_weather],
262
+ max_steps=3,
263
+ verbosity_level=2,
264
+ prompt_templates=prompt_templates,
265
+ )
266
+
267
+ def process_input(user_input):
268
+ try:
269
+ response = agent.run(user_input)
270
+ return response if response else "Error: No response received from the agent."
271
+ except Exception as e:
272
+ return f"Error: {str(e)}"
273
+
274
+ gr.Interface(
275
+ fn=process_input,
276
+ inputs="text",
277
+ outputs="text",
278
+ title="Helpful Assistant",
279
+ description="Hello! What city or town are you from? I can tell you the time, air quality, weather, and more!"
280
+ ).launch()