1
1
from restack_ai .function import function , log
2
- from pydantic import BaseModel
3
- from typing import List , Optional
2
+ from pydantic import BaseModel , validator
3
+ from typing import List , Optional , Dict
4
4
import inspect
5
5
6
- class TemperatureInput (BaseModel ):
7
- """The city and state, e.g. San Francisco, CA"""
8
- location : str
6
+ from enum import Enum
9
7
10
- class HumidityInput (BaseModel ):
11
- """The city and state, e.g. San Francisco, CA"""
12
- location : str
8
+ class USTopCities (str , Enum ):
9
+ NEW_YORK = "New York, NY"
10
+ LOS_ANGELES = "Los Angeles, CA"
11
+ CHICAGO = "Chicago, IL"
12
+ HOUSTON = "Houston, TX"
13
+ PHOENIX = "Phoenix, AZ"
14
+ PHILADELPHIA = "Philadelphia, PA"
15
+ SAN_ANTONIO = "San Antonio, TX"
16
+ SAN_DIEGO = "San Diego, CA"
17
+ DALLAS = "Dallas, TX"
18
+ SAN_JOSE = "San Jose, CA"
19
+ AUSTIN = "Austin, TX"
20
+ JACKSONVILLE = "Jacksonville, FL"
21
+ FORT_WORTH = "Fort Worth, TX"
22
+ COLUMBUS = "Columbus, OH"
23
+ SAN_FRANCISCO = "San Francisco, CA"
24
+ CHARLOTTE = "Charlotte, NC"
25
+ INDIANAPOLIS = "Indianapolis, IN"
26
+ SEATTLE = "Seattle, WA"
27
+ DENVER = "Denver, CO"
28
+ WASHINGTON_DC = "Washington, DC"
29
+ BOSTON = "Boston, MA"
30
+ EL_PASO = "El Paso, TX"
31
+ DETROIT = "Detroit, MI"
32
+ NASHVILLE = "Nashville, TN"
33
+ PORTLAND = "Portland, OR"
34
+ MEMPHIS = "Memphis, TN"
35
+ OKLAHOMA_CITY = "Oklahoma City, OK"
36
+ LAS_VEGAS = "Las Vegas, NV"
37
+ LOUISVILLE = "Louisville, KY"
38
+ BALTIMORE = "Baltimore, MD"
39
+ MILWAUKEE = "Milwaukee, WI"
40
+ ALBUQUERQUE = "Albuquerque, NM"
41
+ TUCSON = "Tucson, AZ"
42
+ FRESNO = "Fresno, CA"
43
+ SACRAMENTO = "Sacramento, CA"
44
+ MESA = "Mesa, AZ"
45
+ KANSAS_CITY = "Kansas City, MO"
46
+ ATLANTA = "Atlanta, GA"
47
+ MIAMI = "Miami, FL"
48
+ COLORADO_SPRINGS = "Colorado Springs, CO"
49
+ RALEIGH = "Raleigh, NC"
50
+ OMAHA = "Omaha, NE"
51
+ LONG_BEACH = "Long Beach, CA"
52
+ VIRGINIA_BEACH = "Virginia Beach, VA"
53
+ OAKLAND = "Oakland, CA"
54
+ MINNEAPOLIS = "Minneapolis, MN"
55
+ TULSA = "Tulsa, OK"
56
+ ARLINGTON = "Arlington, TX"
57
+ TAMPA = "Tampa, FL"
58
+ NEW_ORLEANS = "New Orleans, LA"
13
59
14
- class AirQualityInput (BaseModel ):
60
+ class WeatherData (BaseModel ):
61
+ temperature : str
62
+ humidity : str
63
+ air_quality : str
64
+
65
+ class LocationInput (BaseModel ):
15
66
"""The city and state, e.g. San Francisco, CA"""
16
- location : str
67
+ location : USTopCities
68
+
69
+ CITY_WEATHER_DATA : Dict [USTopCities , WeatherData ] = {
70
+ USTopCities .NEW_YORK : WeatherData (temperature = "72°F" , humidity = "60%" , air_quality = "moderate" ),
71
+ USTopCities .LOS_ANGELES : WeatherData (temperature = "75°F" , humidity = "65%" , air_quality = "good" ),
72
+ USTopCities .CHICAGO : WeatherData (temperature = "68°F" , humidity = "55%" , air_quality = "good" ),
73
+ USTopCities .HOUSTON : WeatherData (temperature = "82°F" , humidity = "75%" , air_quality = "moderate" ),
74
+ USTopCities .PHOENIX : WeatherData (temperature = "95°F" , humidity = "25%" , air_quality = "good" ),
75
+ USTopCities .PHILADELPHIA : WeatherData (temperature = "70°F" , humidity = "62%" , air_quality = "moderate" ),
76
+ USTopCities .SAN_ANTONIO : WeatherData (temperature = "85°F" , humidity = "70%" , air_quality = "good" ),
77
+ USTopCities .SAN_DIEGO : WeatherData (temperature = "72°F" , humidity = "68%" , air_quality = "good" ),
78
+ USTopCities .DALLAS : WeatherData (temperature = "83°F" , humidity = "65%" , air_quality = "moderate" ),
79
+ USTopCities .SAN_JOSE : WeatherData (temperature = "73°F" , humidity = "60%" , air_quality = "good" ),
80
+ USTopCities .AUSTIN : WeatherData (temperature = "84°F" , humidity = "68%" , air_quality = "good" ),
81
+ USTopCities .JACKSONVILLE : WeatherData (temperature = "80°F" , humidity = "75%" , air_quality = "moderate" ),
82
+ USTopCities .FORT_WORTH : WeatherData (temperature = "83°F" , humidity = "65%" , air_quality = "moderate" ),
83
+ USTopCities .COLUMBUS : WeatherData (temperature = "71°F" , humidity = "63%" , air_quality = "good" ),
84
+ USTopCities .SAN_FRANCISCO : WeatherData (temperature = "65°F" , humidity = "75%" , air_quality = "good" ),
85
+ USTopCities .CHARLOTTE : WeatherData (temperature = "76°F" , humidity = "65%" , air_quality = "good" ),
86
+ USTopCities .INDIANAPOLIS : WeatherData (temperature = "72°F" , humidity = "64%" , air_quality = "moderate" ),
87
+ USTopCities .SEATTLE : WeatherData (temperature = "62°F" , humidity = "80%" , air_quality = "good" ),
88
+ USTopCities .DENVER : WeatherData (temperature = "70°F" , humidity = "45%" , air_quality = "good" ),
89
+ USTopCities .WASHINGTON_DC : WeatherData (temperature = "74°F" , humidity = "65%" , air_quality = "moderate" ),
90
+ USTopCities .BOSTON : WeatherData (temperature = "68°F" , humidity = "70%" , air_quality = "good" ),
91
+ USTopCities .EL_PASO : WeatherData (temperature = "88°F" , humidity = "30%" , air_quality = "good" ),
92
+ USTopCities .DETROIT : WeatherData (temperature = "69°F" , humidity = "65%" , air_quality = "moderate" ),
93
+ USTopCities .NASHVILLE : WeatherData (temperature = "77°F" , humidity = "68%" , air_quality = "good" ),
94
+ USTopCities .PORTLAND : WeatherData (temperature = "65°F" , humidity = "75%" , air_quality = "good" ),
95
+ USTopCities .MEMPHIS : WeatherData (temperature = "79°F" , humidity = "70%" , air_quality = "moderate" ),
96
+ USTopCities .OKLAHOMA_CITY : WeatherData (temperature = "80°F" , humidity = "60%" , air_quality = "good" ),
97
+ USTopCities .LAS_VEGAS : WeatherData (temperature = "92°F" , humidity = "25%" , air_quality = "good" ),
98
+ USTopCities .LOUISVILLE : WeatherData (temperature = "75°F" , humidity = "67%" , air_quality = "moderate" ),
99
+ USTopCities .BALTIMORE : WeatherData (temperature = "73°F" , humidity = "65%" , air_quality = "moderate" ),
100
+ USTopCities .MILWAUKEE : WeatherData (temperature = "65°F" , humidity = "70%" , air_quality = "good" ),
101
+ USTopCities .ALBUQUERQUE : WeatherData (temperature = "82°F" , humidity = "35%" , air_quality = "good" ),
102
+ USTopCities .TUCSON : WeatherData (temperature = "90°F" , humidity = "30%" , air_quality = "good" ),
103
+ USTopCities .FRESNO : WeatherData (temperature = "85°F" , humidity = "45%" , air_quality = "moderate" ),
104
+ USTopCities .SACRAMENTO : WeatherData (temperature = "80°F" , humidity = "55%" , air_quality = "moderate" ),
105
+ USTopCities .MESA : WeatherData (temperature = "93°F" , humidity = "25%" , air_quality = "good" ),
106
+ USTopCities .KANSAS_CITY : WeatherData (temperature = "75°F" , humidity = "65%" , air_quality = "good" ),
107
+ USTopCities .ATLANTA : WeatherData (temperature = "78°F" , humidity = "70%" , air_quality = "moderate" ),
108
+ USTopCities .MIAMI : WeatherData (temperature = "85°F" , humidity = "80%" , air_quality = "moderate" ),
109
+ USTopCities .COLORADO_SPRINGS : WeatherData (temperature = "68°F" , humidity = "45%" , air_quality = "good" ),
110
+ USTopCities .RALEIGH : WeatherData (temperature = "75°F" , humidity = "68%" , air_quality = "good" ),
111
+ USTopCities .OMAHA : WeatherData (temperature = "73°F" , humidity = "65%" , air_quality = "good" ),
112
+ USTopCities .LONG_BEACH : WeatherData (temperature = "74°F" , humidity = "70%" , air_quality = "moderate" ),
113
+ USTopCities .VIRGINIA_BEACH : WeatherData (temperature = "76°F" , humidity = "75%" , air_quality = "good" ),
114
+ USTopCities .OAKLAND : WeatherData (temperature = "68°F" , humidity = "75%" , air_quality = "good" ),
115
+ USTopCities .MINNEAPOLIS : WeatherData (temperature = "65°F" , humidity = "65%" , air_quality = "good" ),
116
+ USTopCities .TULSA : WeatherData (temperature = "78°F" , humidity = "65%" , air_quality = "good" ),
117
+ USTopCities .ARLINGTON : WeatherData (temperature = "83°F" , humidity = "65%" , air_quality = "moderate" ),
118
+ USTopCities .TAMPA : WeatherData (temperature = "83°F" , humidity = "75%" , air_quality = "moderate" ),
119
+ USTopCities .NEW_ORLEANS : WeatherData (temperature = "82°F" , humidity = "80%" , air_quality = "moderate" )
120
+ }
17
121
18
122
@function .defn ()
19
- async def get_current_temperature (input : TemperatureInput ) -> str :
123
+ async def get_current_temperature (input : LocationInput ) -> str :
20
124
description = "Get the current temperature for a specific location"
21
125
log .info ("get_current_temperature function started" , location = input .location )
22
- return '75°F'
126
+ weather_data = CITY_WEATHER_DATA .get (input .location , WeatherData (temperature = "75°F" , humidity = "65%" , air_quality = "good" ))
127
+ return weather_data .temperature
23
128
24
129
@function .defn ()
25
- async def get_humidity (input : HumidityInput ) -> str :
130
+ async def get_humidity (input : LocationInput ) -> str :
26
131
description = "Get the current humidity level for a specific location"
27
132
log .info ("get_humidity function started" , location = input .location )
28
- return '65%'
133
+ weather_data = CITY_WEATHER_DATA .get (input .location , WeatherData (temperature = "75°F" , humidity = "65%" , air_quality = "good" ))
134
+ return weather_data .humidity
29
135
30
136
@function .defn ()
31
- async def get_air_quality (input : AirQualityInput ) -> str :
137
+ async def get_air_quality (input : LocationInput ) -> str :
32
138
description = "Get the current air quality for a specific location"
33
139
log .info ("get_air_quality function started" , location = input .location )
34
- return 'good'
140
+ weather_data = CITY_WEATHER_DATA .get (input .location , WeatherData (temperature = "75°F" , humidity = "65%" , air_quality = "good" ))
141
+ return weather_data .air_quality
35
142
36
143
def get_function_declarations ():
37
144
functions = []
@@ -45,12 +152,13 @@ def get_function_declarations():
45
152
"parameters" : {
46
153
"type" : "OBJECT" ,
47
154
"properties" : {
48
- field_name : {
155
+ "location" : {
49
156
"type" : "STRING" ,
50
157
"description" : input_type .__doc__ ,
51
- } for field_name in input_type .__fields__
158
+ "enum" : [city .value for city in USTopCities ]
159
+ }
52
160
},
53
- "required" : list ( input_type . __fields__ . keys ())
161
+ "required" : [ "location" ]
54
162
}
55
163
})
56
164
return functions
0 commit comments