CatoG commited on
Commit ·
36c40b0
1
Parent(s): 3d97c93
Add tool - Identify user location
Browse files
app.py
CHANGED
|
@@ -7,6 +7,7 @@ import traceback
|
|
| 7 |
from datetime import datetime, timezone
|
| 8 |
from typing import Dict, List, Optional, Tuple
|
| 9 |
|
|
|
|
| 10 |
from dotenv import load_dotenv
|
| 11 |
|
| 12 |
warnings.filterwarnings("ignore", category=UserWarning, module="wikipedia")
|
|
@@ -400,6 +401,28 @@ def generate_uuid(_: str = "") -> str:
|
|
| 400 |
return str(uuid.uuid4())
|
| 401 |
|
| 402 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 403 |
ALL_TOOLS = {
|
| 404 |
"add_numbers": add_numbers,
|
| 405 |
"subtract_numbers": subtract_numbers,
|
|
@@ -418,6 +441,7 @@ ALL_TOOLS = {
|
|
| 418 |
"wikipedia_chaos_oracle": wikipedia_chaos_oracle,
|
| 419 |
"random_number": random_number,
|
| 420 |
"generate_uuid": generate_uuid,
|
|
|
|
| 421 |
}
|
| 422 |
TOOL_NAMES = list(ALL_TOOLS.keys())
|
| 423 |
|
|
|
|
| 7 |
from datetime import datetime, timezone
|
| 8 |
from typing import Dict, List, Optional, Tuple
|
| 9 |
|
| 10 |
+
import requests
|
| 11 |
from dotenv import load_dotenv
|
| 12 |
|
| 13 |
warnings.filterwarnings("ignore", category=UserWarning, module="wikipedia")
|
|
|
|
| 401 |
return str(uuid.uuid4())
|
| 402 |
|
| 403 |
|
| 404 |
+
@tool
|
| 405 |
+
def get_user_location(_: str = "") -> str:
|
| 406 |
+
"""Determine the user's approximate physical location based on their public IP address."""
|
| 407 |
+
try:
|
| 408 |
+
response = requests.get("http://ip-api.com/json/", timeout=5)
|
| 409 |
+
response.raise_for_status()
|
| 410 |
+
data = response.json()
|
| 411 |
+
if data.get("status") != "success":
|
| 412 |
+
return f"Location lookup failed: {data.get('message', 'unknown error')}"
|
| 413 |
+
return (
|
| 414 |
+
f"City: {data.get('city', 'N/A')}\n"
|
| 415 |
+
f"Region: {data.get('regionName', 'N/A')}\n"
|
| 416 |
+
f"Country: {data.get('country', 'N/A')} ({data.get('countryCode', 'N/A')})\n"
|
| 417 |
+
f"Latitude: {data.get('lat', 'N/A')}\n"
|
| 418 |
+
f"Longitude: {data.get('lon', 'N/A')}\n"
|
| 419 |
+
f"Timezone: {data.get('timezone', 'N/A')}\n"
|
| 420 |
+
f"ISP: {data.get('isp', 'N/A')}"
|
| 421 |
+
)
|
| 422 |
+
except requests.RequestException as exc:
|
| 423 |
+
return f"Location lookup failed: {exc}"
|
| 424 |
+
|
| 425 |
+
|
| 426 |
ALL_TOOLS = {
|
| 427 |
"add_numbers": add_numbers,
|
| 428 |
"subtract_numbers": subtract_numbers,
|
|
|
|
| 441 |
"wikipedia_chaos_oracle": wikipedia_chaos_oracle,
|
| 442 |
"random_number": random_number,
|
| 443 |
"generate_uuid": generate_uuid,
|
| 444 |
+
"get_user_location": get_user_location,
|
| 445 |
}
|
| 446 |
TOOL_NAMES = list(ALL_TOOLS.keys())
|
| 447 |
|