File size: 8,723 Bytes
183a793 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
import requests
import json
from smolagents import InferenceClientModel, tool
from typing import Any, Dict
@tool
def get_weather(city: str) -> Dict[str, Any]:
"""
Get the weather based on the city name
Args:
city (str): The name of the city
Returns:
Dict[str, Any]: The weather information as a dictionary with the following keys:
- City: The name of the city
- Temperature (°C): The temperature in Celsius
- Weather: The weather description
- Humidity (%): The humidity percentage
- Wind (km/h): The wind speed in kilometers per hour
- Feels Like (°C): The temperature that feels like
- Min temperature (°C): The minimum temperature
- Max temperature (°C): The maximum temperature
- Chance of rain: The chance of rain
- Chance of snow: The chance of snow
"""
try:
url = f"https://wttr.in/{city}?format=j1"
response = requests.get(url)
data = response.json()
current = data['current_condition'][0]
day_weather = data['weather'][0]
chance_of_rain = max([int(hour["chanceofrain"])/100 for hour in day_weather['hourly']])
chance_of_snow = max([int(hour["chanceofsnow"])/100 for hour in day_weather['hourly']])
weather = {
"City": city,
"Temperature (°C)": current["temp_C"],
"Weather": current["weatherDesc"][0]["value"],
"Humidity (%)": current["humidity"],
"Wind (km/h)": current["windspeedKmph"],
"Feels Like (°C)": current["FeelsLikeC"],
"Min temperature (°C)": day_weather["mintempC"],
"Max temperature (°C)": day_weather["maxtempC"],
"Chance of rain": chance_of_rain,
"Chance of snow": chance_of_snow,
}
return weather
except Exception as e:
return {"Error": str(e)}
@tool
def get_current_city() -> str:
"""
Get the location based on the IP address
Args:
Returns:
str: the city where the person is currently in based on the IP
"""
try:
response = requests.get("https://ipinfo.io/json")
data = response.json()
return data.get("city")
except Exception as e:
return e
@tool
def infer_event_style_from_text(user_input: str) -> str:
"""
Infers the style of an event based on natural language input using an LLM.
Returns one of: casual, formal, beachwear, dress-up, business casual, athletic, outdoor, unspecified.
Args:
user_input: A sentence or phrase describing what the user is doing, e.g., "I'm going to a beach party"
Returns:
A lowercase string representing the event style. One of:
- casual
- formal
- beachwear
- dress-up
- business casual
- athletic
- outdoor
- unspecified
"""
messages = [
Message(role= "system",
content=
"You are an event style classifier. Your job is to take natural language user input "
"and respond with exactly one of the following event style labels:\n"
"- casual\n- formal\n- beachwear\n- dress-up\n- business casual\n- athletic\n- outdoor\n- unspecified"),
Message(role= "user",
content= f"Classify this: {user_input}\nEvent style:")
]
model = InferenceClientModel()
response = model(messages, stop_sequences=["END"])
print(f"Response: {response.content}")
return response.content.lower()
@tool
def get_vogue(city: str, season: str) -> str:
"""
Get all the clothes in the wardrobe, together with their colors, and descriptions
Args:
city (str): The name of the city
season (str): The name of the season:
- "winter": clothes for winter
- "spring": clothes for spring
- "summer": clothes for summer
- "fall": clothes for fall
Returns:
str: text of what items are on trend for a given weather and occasion
"""
return """
Activity Clothing Accessories Style Tip
Brunch at a café Linen shirt or chic blouse, tailored trousers or midi skirt Crossbody bag, sunglasses Parisians love neutral tones – try beige, white, navy
Stroll in Montmartre or along the Seine Lightweight cotton dress or relaxed-fit jeans + striped top Comfortable leather flats, beret A Breton stripe is classic Parisian chic
Museum visit Midi dress or smart jumpsuit Small tote, silk scarf Keep layers easy to remove (some museums can be warm inside)
Picnic in a park Flowy sundress or casual skirt + tee Straw hat, ballet flats Bring a light cardigan or blazer in case it gets breezy
Dinner in a bistro Elegant blouse + culottes or a wrap dress Clutch bag, statement earrings A red lip adds effortless sophistication
Evening walk by the Eiffel Tower Tailored trousers + fine knit top or maxi dress Lightweight trench, flat sandals Trench coats are timeless and very Parisian
"""
@tool
def get_wardrobe() -> str:
"""
Get all the clothes in the wardrobe, together with their colors, and descriptions
Args:
Returns:
str: list of all the clothes in the wardrobe
"""
return """
| Category | Item | Quantity | Notes |
| --------------- | ------------------------------- | -------- | ----------------------------------------------------- |
| **Tops** | T-shirts | 5–7 | Neutral colors for versatility; cotton or quick-dry |
| | Polo shirts | 2–3 | For smart-casual outings |
| | Button-down shirts | 2–4 | Long or short sleeve; wrinkle-resistant options ideal |
| | Lightweight sweater | 1–2 | Great for layering |
| | Hoodie or sweatshirt | 1 | Casual comfort and warmth |
| | Jacket (lightweight) | 1 | Windbreaker or packable jacket depending on climate |
| | Formal jacket/blazer | 1 | Optional; for work, dining, or events |
| **Bottoms** | Jeans or casual trousers | 1–2 | Dark wash preferred |
| | Chinos or dress pants | 1 | For dressier occasions |
| | Shorts | 2–3 | Depends on destination climate |
| | Joggers or travel pants | 1 | Great for flights and comfort |
| **Underwear** | Underwear | 7–10 | Breathable and comfortable |
| | Socks | 7–10 | Mix of athletic and dress |
| **Sleepwear** | Pajamas or sleepwear | 1–2 | Lightweight and compact |
| **Outerwear** | Rain jacket or shell | 1 | Waterproof for variable weather |
| | Warm jacket/coat | 1 | Only if traveling to a cold region |
| **Footwear** | Sneakers or casual shoes | 1–2 | One for walking, one for style |
| | Dress shoes or loafers | 1 | Optional depending on itinerary |
| | Sandals or flip-flops | 1 | For hot weather or showers |
| **Accessories** | Belt | 1–2 | Casual and/or dress |
| | Hat or cap | 1 | Sun protection |
| | Scarf/gloves/beanie | 1 set | Only for cold destinations |
| | Swimwear | 1–2 | If beach/pool included |
| **Other** | Workout clothes | 1–2 sets | Moisture-wicking; only if planning to exercise |
| | Compression socks (for flights) | 1–2 | Recommended for long-haul flights |
| | Laundry bag | 1 | Helps keep clean/dirty separate |
""" |