Huanzhi (Hans) Mao
init
4d1746c
raw
history blame
29.4 kB
import random
from copy import deepcopy
from typing import Dict, List, Union
from .long_context import (
CAR_STATUS_METADATA_EXTENSION,
INTERMEDIARY_CITIES,
LONG_WEATHER_EXTENSION,
PARKING_BRAKE_INSTRUCTION,
)
MAX_FUEL_LEVEL = 50
MIN_FUEL_LEVEL = 0.0
MILE_PER_GALLON = 20.0
MAX_BATTERY_VOLTAGE = 14.0
MIN_BATTERY_VOLTAGE = 10.0
DEFAULT_STATE = {
"random_seed": 141053,
"fuelLevel": 0.0,
"batteryVoltage": 12.6,
"engine_state": "stopped",
"remainingUnlockedDoors": 4,
"doorStatus": {
"driver": "unlocked",
"passenger": "unlocked",
"rear_left": "unlocked",
"rear_right": "unlocked",
},
"acTemperature": 25.0,
"fanSpeed": 50,
"acMode": "auto",
"humidityLevel": 50.0,
"headLightStatus": "off",
"parkingBrakeStatus": "released",
"_parkingBrakeForce": 0.0,
"_slopeAngle": 0.0,
"brakePedalStatus": "released",
"brakePedalForce": 0.0,
"distanceToNextVehicle": 50.0,
"cruiseStatus": "inactive",
"destination": "None",
"frontLeftTirePressure": 32.0,
"frontRightTirePressure": 32.0,
"rearLeftTirePressure": 30.0,
"rearRightTirePressure": 30.0,
}
class VehicleControlAPI:
def __init__(self):
"""
Initializes the vehicle control API with default values.
"""
self.fuelLevel: float
self.batteryVoltage: float
self.engine_state: str
self.remainingUnlockedDoors: int
self.doorStatus: Dict[str, str]
self.acTemperature: float
self.fanSpeed: int
self.acMode: str
self.humidityLevel: float
self.headLightStatus: str
self.parkingBrakeStatus: str
self._parkingBrakeForce: float
self._slopeAngle: float
self.brakePedalStatus: str
self._brakePedalForce: float
self.distanceToNextVehicle: float
self.cruiseStatus: str
self.destination: str
self.frontLeftTirePressure: float
self.frontRightTirePressure: float
self.rearLeftTirePressure: float
self.rearRightTirePressure: float
self._api_description = "This tool belongs to the vehicle control system, which allows users to control various aspects of the car such as engine, doors, climate control, lights, and more."
def _load_scenario(self, scenario: dict, long_context=False) -> None:
"""
Loads the scenario for the vehicle control.
Args:
scenario (Dict): The scenario to load.
"""
DEFAULT_STATE_COPY = deepcopy(DEFAULT_STATE)
self._random = random.Random(
(scenario.get("random_seed", DEFAULT_STATE_COPY["random_seed"]))
)
self.fuelLevel = scenario.get(
"fuelLevel", DEFAULT_STATE_COPY["fuelLevel"]
) # in gallons
self.batteryVoltage = scenario.get(
"batteryVoltage", DEFAULT_STATE_COPY["batteryVoltage"]
) # in volts
self.engine_state = scenario.get(
"engineState", DEFAULT_STATE_COPY["engine_state"]
) # running, stopped
self.remainingUnlockedDoors = scenario.get(
"remainingUnlockedDoors", DEFAULT_STATE_COPY["remainingUnlockedDoors"]
) # driver, passenger, rear_left, rear_right
self.doorStatus = scenario.get(
"doorStatus",
DEFAULT_STATE_COPY["doorStatus"],
)
self.remainingUnlockedDoors = 4 - len(
[1 for door in self.doorStatus.keys() if self.doorStatus[door] == "locked"]
)
self.acTemperature = scenario.get(
"acTemperature", DEFAULT_STATE_COPY["acTemperature"]
) # in degree Celsius
self.fanSpeed = scenario.get("fanSpeed", DEFAULT_STATE_COPY["fanSpeed"]) # 0 to 100
self.acMode = scenario.get(
"acMode", DEFAULT_STATE_COPY["acMode"]
) # auto, cool, heat, defrost
self.humidityLevel = scenario.get(
"humidityLevel", DEFAULT_STATE_COPY["humidityLevel"]
) # in percentage
self.headLightStatus = scenario.get(
"headLightStatus", DEFAULT_STATE_COPY["headLightStatus"]
) # on, off
self.parkingBrakeStatus = scenario.get(
"parkingBrakeStatus", DEFAULT_STATE_COPY["parkingBrakeStatus"]
) # released, engaged
self._parkingBrakeForce = scenario.get(
"parkingBrakeForce", DEFAULT_STATE_COPY["_parkingBrakeForce"]
) # in Newtons
self._slopeAngle = scenario.get(
"slopeAngle", DEFAULT_STATE_COPY["_slopeAngle"]
) # in degrees
self.brakePedalStatus = scenario.get(
"brakePedalStatus", DEFAULT_STATE_COPY["brakePedalStatus"]
) # pressed, released
self._brakePedalForce = scenario.get(
"brakePedalForce", DEFAULT_STATE_COPY["brakePedalForce"]
) # in Newtons
self.distanceToNextVehicle = scenario.get(
"distanceToNextVehicle", DEFAULT_STATE_COPY["distanceToNextVehicle"]
) # in meters
self.cruiseStatus = scenario.get(
"cruiseStatus", DEFAULT_STATE_COPY["cruiseStatus"]
) # active, inactive
self.destination = scenario.get("destination", DEFAULT_STATE_COPY["destination"])
self.frontLeftTirePressure = scenario.get(
"frontLeftTirePressure", DEFAULT_STATE_COPY["frontLeftTirePressure"]
)
self.frontRightTirePressure = scenario.get(
"frontRightTirePressure", DEFAULT_STATE_COPY["frontRightTirePressure"]
)
self.rearLeftTirePressure = scenario.get(
"rearLeftTirePressure", DEFAULT_STATE_COPY["rearLeftTirePressure"]
)
self.rearRightTirePressure = scenario.get(
"rearRightTirePressure", DEFAULT_STATE_COPY["rearRightTirePressure"]
)
self.long_context = long_context
def __eq__(self, value: object) -> bool:
if not isinstance(value, VehicleControlAPI):
return False
for attr_name in vars(self):
if attr_name.startswith("_"):
continue
model_attr = getattr(self, attr_name)
ground_truth_attr = getattr(value, attr_name)
if model_attr != ground_truth_attr:
return False
return True
def startEngine(self, ignitionMode: str) -> Dict[str, Union[str, float]]:
"""
Starts the engine of the vehicle.
Args:
ignitionMode (str): The ignition mode of the vehicle. [Enum]: ["START", "STOP"]
Returns:
engineState (str): The state of the engine. [Enum]: ["running", "stopped"]
fuelLevel (float): The fuel level of the vehicle in gallons.
batteryVoltage (float): The battery voltage of the vehicle in volts.
"""
if ignitionMode == "STOP":
self.engine_state = "stopped"
if self.remainingUnlockedDoors > 0:
return {
"error": "All doors must be locked before starting the engine. Here are the unlocked doors: "
+ ", ".join(
[
door
for door, status in self.doorStatus.items()
if status == "unlocked"
]
)
}
if self.brakePedalStatus != "pressed":
return {"error": "Brake pedal needs to be pressed when starting the engine."}
if self._brakePedalForce != 1000.0:
return {"error": "Must press the brake fully before starting the engine."}
if self.fuelLevel < MIN_FUEL_LEVEL:
return {"error": "Fuel tank is empty."}
if ignitionMode == "START":
self.engine_state = "running"
else:
return {"error": "Invalid ignition mode."}
return {
"engineState": self.engine_state,
"fuelLevel": self.fuelLevel,
"batteryVoltage": self.batteryVoltage,
}
def fillFuelTank(self, fuelAmount: float) -> Dict[str, Union[str, float]]:
"""
Fills the fuel tank of the vehicle. The fuel tank can hold up to 50 gallons.
Args:
fuelAmount (float): The amount of fuel to fill in gallons; this is the additional fuel to add to the tank.
Returns:
fuelLevel (float): The fuel level of the vehicle in gallons.
"""
if fuelAmount < 0:
return {"error": "Fuel amount cannot be negative."}
if self.fuelLevel + fuelAmount > MAX_FUEL_LEVEL:
return {"error": "Cannot fill gas above the tank capacity."}
if self.fuelLevel + fuelAmount < MIN_FUEL_LEVEL:
return {"error": "Fuel tank is empty. Min fuel level is 0 gallons."}
self.fuelLevel += fuelAmount
return {"fuelLevel": self.fuelLevel}
def lockDoors(self, unlock: bool, door: list[str]) -> Dict[str, Union[str, int]]:
"""
Locks the doors of the vehicle.
Args:
unlock (bool): True if the doors are to be unlocked, False otherwise.
door (List[str]): The list of doors to lock or unlock. [Enum]: ["driver", "passenger", "rear_left", "rear_right"]
Returns:
lockStatus (str): The status of the lock. [Enum]: ["locked", "unlocked"]
remainingUnlockedDoors (int): The number of remaining unlocked doors.
"""
if unlock:
for d in door:
if self.doorStatus[d] == "unlocked":
continue
self.doorStatus[d] = "unlocked"
self.remainingUnlockedDoors += 1
return {
"lockStatus": "unlocked",
"remainingUnlockedDoors": self.remainingUnlockedDoors,
}
else:
for d in door:
if self.doorStatus[d] == "locked":
continue
self.doorStatus[d] = "locked"
self.remainingUnlockedDoors -= 1
return {
"lockStatus": "locked",
"remainingUnlockedDoors": self.remainingUnlockedDoors,
}
def adjustClimateControl(
self,
temperature: float,
unit: str = "celsius",
fanSpeed: int = 50,
mode: str = "auto",
) -> Dict[str, Union[str, float]]:
"""
Adjusts the climate control of the vehicle.
Args:
temperature (float): The temperature to set in degree. Default to be celsius.
unit (str): [Optional] The unit of temperature. [Enum]: ["celsius", "fahrenheit"]
fanSpeed (int): [Optional] The fan speed to set from 0 to 100. Default is 50.
mode (str): [Optional] The climate mode to set. [Enum]: ["auto", "cool", "heat", "defrost"]
Returns:
currentTemperature (float): The current temperature set in degree Celsius.
climateMode (str): The current climate mode set.
humidityLevel (float): The humidity level in percentage.
"""
if not (0 <= fanSpeed <= 100):
return {"error": "Fan speed must be between 0 and 100."}
self.acTemperature = temperature
if unit == "fahrenheit":
self.acTemperature = (temperature - 32) * 5 / 9
self.fanSpeed = fanSpeed
self.acMode = mode
return {
"currentACTemperature": temperature,
"climateMode": mode,
"humidityLevel": self.humidityLevel,
}
def get_outside_temperature_from_google(self) -> Dict[str, float]:
"""
Gets the outside temperature.
Returns:
outsideTemperature (float): The outside temperature in degree Celsius.
"""
if self.long_context:
LONG_WEATHER_EXTENSION["outsideTemperature"] = self._random.uniform(-10.0, 40.0)
return LONG_WEATHER_EXTENSION
return {"outsideTemperature": self._random.uniform(-10.0, 40.0)}
def get_outside_temperature_from_weather_com(self) -> Dict[str, float]:
"""
Gets the outside temperature.
Returns:
outsideTemperature (float): The outside temperature in degree Celsius.
"""
return {"error": 404}
def setHeadlights(self, mode: str) -> Dict[str, str]:
"""
Sets the headlights of the vehicle.
Args:
mode (str): The mode of the headlights. [Enum]: ["on", "off", "auto"]
Returns:
headlightStatus (str): The status of the headlights. [Enum]: ["on", "off"]
"""
if mode not in ["on", "off", "auto"]:
return {"error": "Invalid headlight mode."}
if mode == "on":
self.headLightStatus = "on"
return {"headlightStatus": "on"}
else:
self.headLightStatus = "off"
return {"headlightStatus": "off"}
def displayCarStatus(self, option: str) -> Dict[str, Union[str, float, Dict[str, str]]]:
"""
Displays the status of the vehicle based on the provided display option.
Args:
option (str): The option to display. [Enum]: ["fuel", "battery", "doors", "climate", "headlights", "parkingBrake", "brakePadle", "engine"]
Returns:
status (Dict): The status of the vehicle based on the option.
- fuelLevel (float): [Optional] The fuel level of the vehicle in gallons.
- batteryVoltage (float): [Optional] The battery voltage of the vehicle in volts.
- doorStatus (Dict): [Optional] The status of the doors.
- driver (str): The status of the driver door. [Enum]: ["locked", "unlocked"]
- passenger (str): The status of the passenger door. [Enum]: ["locked", "unlocked"]
- rear_left (str): The status of the rear left door. [Enum]: ["locked", "unlocked"]
- rear_right (str): The status of the rear right door. [Enum]: ["locked", "unlocked"]
- currentACTemperature (float): [Optional] The current temperature set in degree Celsius.
- fanSpeed (int): [Optional] The fan speed set from 0 to 100.
- climateMode (str): [Optional] The climate mode set. [Enum]: ["auto", "cool", "heat", "defrost"]
- humidityLevel (float): [Optional] The humidity level in percentage.
- headlightStatus (str): [Optional] The status of the headlights. [Enum]: ["on", "off"]
- parkingBrakeStatus (str): [Optional] The status of the brake. [Enum]: ["engaged", "released"]
- parkingBrakeForce (float): [Optional] The force applied to the brake in Newtons.
- slopeAngle (float): [Optional] The slope angle in degrees.
- brakePedalStatus (str): [Optional] The status of the brake pedal. [Enum]: ["pressed", "released"]
- brakePedalForce (float): [Optional] The force applied to the brake pedal in Newtons.
- engineState (str): [Optional] The state of the engine. [Enum]: ["running", "stopped"]
- metadata (str): [Optional] The metadata of the car.
"""
status = {}
if self.long_context:
status["metadata"] = CAR_STATUS_METADATA_EXTENSION
if option == "fuel":
status["fuelLevel"] = self.fuelLevel
elif option == "battery":
status["batteryVoltage"] = self.batteryVoltage
elif option == "doors":
status["doorStatus"] = self.doorStatus
elif option == "climate":
status["currentACTemperature"] = self.acTemperature
status["fanSpeed"] = self.fanSpeed
status["climateMode"] = self.acMode
status["humidityLevel"] = self.humidityLevel
elif option == "headlights":
status["headlightStatus"] = self.headLightStatus
elif option == "parkingBrake":
status["parkingBrakeStatus"] = self.parkingBrakeStatus
status["parkingBrakeForce"] = self._parkingBrakeForce
status["slopeAngle"] = self._slopeAngle
elif option == "brakePedal":
status["brakePedalStatus"] = self.brakePedalStatus
status["brakePedalForce"] = self._brakePedalForce
elif option == "engine":
status["engineState"] = self.engine_state
else:
status["error"] = "Invalid option"
return status
def activateParkingBrake(self, mode: str) -> Dict[str, Union[str, float]]:
"""
Activates the parking brake of the vehicle.
Args:
mode (str): The mode to set. [Enum]: ["engage", "release"]
Returns:
parkingBrakeStatus (str): The status of the brake. [Enum]: ["engaged", "released"]
_parkingBrakeForce (float): The force applied to the brake in Newtons.
_slopeAngle (float): The slope angle in degrees.
"""
if mode not in ["engage", "release"]:
return {"error": "Invalid mode"}
if mode == "engage":
self.parkingBrakeStatus = "engaged"
self._parkingBrakeForce = 500.0
self._slopeAngle = 10.0
if self.long_context:
return {
"parkingBrakeInstruction": PARKING_BRAKE_INSTRUCTION,
"parkingBrakeStatus": "engaged",
"_parkingBrakeForce": 500.0,
"_slopeAngle": 10.0,
}
return {"parkingBrakeStatus": "engaged", "_parkingBrakeForce": 500.0, "_slopeAngle": 10.0}
else:
self.parkingBrakeStatus = "released"
self._parkingBrakeForce = 0.0
self._slopeAngle = 10.0
if self.long_context:
return {
"parkingBrakeInstruction": PARKING_BRAKE_INSTRUCTION,
"parkingBrakeStatus": "released",
"_parkingBrakeForce": 0.0,
"_slopeAngle": 10.0,
}
return {"parkingBrakeStatus": "released", "_parkingBrakeForce": 0.0, "_slopeAngle": 10.0}
def pressBrakePedal(self, pedalPosition: float) -> Dict[str, Union[str, float]]:
"""
Presses the brake pedal based on pedal position. The brake pedal will be kept pressed until released.
Args:
pedalPosition (float): Position of the brake pedal, between 0 (not pressed) and 1 (fully pressed).
Returns:
brakePedalStatus (str): The status of the brake pedal. [Enum]: ["pressed", "released"]
brakePedalForce (float): The force applied to the brake pedal in Newtons.
"""
# Validate pedal position is within 0 to 1
if not (0 <= pedalPosition <= 1):
return {"error": "Pedal position must be between 0 and 1."}
# Release the brake if pedal position is zero
if pedalPosition == 0:
self.brakePedalStatus = "released"
self._brakePedalForce = 0.0
return {"brakePedalStatus": "released", "brakePedalForce": 0.0}
# Calculate force based on pedal position
max_brake_force = 1000 # Max force in Newtons
force = pedalPosition * max_brake_force
# Update the brake pedal status and force
self.brakePedalStatus = "pressed"
self._brakePedalForce = force
return {"brakePedalStatus": "pressed", "brakePedalForce": float(force)}
def releaseBrakePedal(self) -> Dict[str, Union[str, float]]:
"""
Releases the brake pedal of the vehicle.
Returns:
brakePedalStatus (str): The status of the brake pedal. [Enum]: ["pressed", "released"]
brakePedalForce (float): The force applied to the brake pedal in Newtons.
"""
self.brakePedalStatus = "released"
self._brakePedalForce = 0.0
return {"brakePedalStatus": "released", "brakePedalForce": 0.0}
def setCruiseControl(
self, speed: float, activate: bool, distanceToNextVehicle: float
) -> Dict[str, Union[str, float]]:
"""
Sets the cruise control of the vehicle.
Args:
speed (float): The speed to set in m/h. The speed should be between 0 and 120 and a multiple of 5.
activate (bool): True to activate the cruise control, False to deactivate.
distanceToNextVehicle (float): The distance to the next vehicle in meters.
Returns:
cruiseStatus (str): The status of the cruise control. [Enum]: ["active", "inactive"]
currentSpeed (float): The current speed of the vehicle in km/h.
distanceToNextVehicle (float): The distance to the next vehicle in meters.
"""
if self.engine_state == "stopped":
return {"error": "Start the engine before activating the cruise control."}
if activate:
self.distanceToNextVehicle = distanceToNextVehicle
if speed < 0 or speed > 120 or speed % 5 != 0:
return {"error": "Invalid speed"}
self.cruiseStatus = "active"
return {
"cruiseStatus": "active",
"currentSpeed": speed,
"distanceToNextVehicle": distanceToNextVehicle,
}
else:
self.cruiseStatus = "inactive"
self.distanceToNextVehicle = distanceToNextVehicle
return {
"cruiseStatus": "inactive",
"currentSpeed": speed,
"distanceToNextVehicle": distanceToNextVehicle,
}
def get_current_speed(self) -> Dict[str, float]:
"""
Gets the current speed of the vehicle.
Returns:
currentSpeed (float): The current speed of the vehicle in km/h.
"""
return {"currentSpeed": self._random.uniform(0.0, 120.0)}
def display_log(self, messages: List[str]):
"""
Displays the log messages.
Args:
messages (List[str]): The list of messages to display.
Returns:
log (List[str]): The list of messages displayed.
"""
return {"log": messages}
def estimate_drive_feasibility_by_mileage(self, distance: float) -> Dict[str, bool]:
"""
Estimates the milage of the vehicle given the distance needed to drive.
Args:
distance (float): The distance to travel in miles.
Returns:
canDrive (bool): True if the vehicle can drive the distance, False otherwise.
"""
if self.fuelLevel * MILE_PER_GALLON < distance:
return {"canDrive": False}
else:
return {"canDrive": True}
def liter_to_gallon(self, liter: float) -> Dict[str, float]:
"""
Converts the liter to gallon.
Args:
liter (float): The amount of liter to convert.
Returns:
gallon (float): The amount of gallon converted.
"""
return {"gallon": liter * 0.264172}
def gallon_to_liter(self, gallon: float) -> Dict[str, float]:
"""
Converts the gallon to liter.
Args:
gallon (float): The amount of gallon to convert.
Returns:
liter (float): The amount of liter converted.
"""
return {"liter": gallon * 3.78541}
def estimate_distance(self, cityA: str, cityB: str) -> Dict[str, float]:
"""
Estimates the distance between two cities.
Args:
cityA (str): The zipcode of the first city.
cityB (str): The zipcode of the second city.
Returns:
distance (float): The distance between the two cities in km.
intermediaryCities (List[str]): [Optional] The list of intermediary cities between the two cities.
"""
if (cityA == "83214" and cityB == "74532") or (
cityA == "74532" and cityB == "83214"
):
distance = {"distance": 750.0}
elif (cityA == "56108" and cityB == "62947") or (
cityA == "62947" and cityB == "56108"
):
distance = {"distance": 320.0}
elif (cityA == "71354" and cityB == "83462") or (
cityA == "83462" and cityB == "71354"
):
distance = {"distance": 450.0}
elif (cityA == "47329" and cityB == "52013") or (
cityA == "52013" and cityB == "47329"
):
distance = {"distance": 290.0}
elif (cityA == "69238" and cityB == "51479") or (
cityA == "51479" and cityB == "69238"
):
distance = {"distance": 630.0}
elif (cityA == "94016" and cityB == "83214") or (
cityA == "83214" and cityB == "94016"
):
distance = {"distance": 980.0}
elif (cityA == "94016" and cityB == "94704") or (
cityA == "94704" and cityB == "94016"
):
distance = {"distance": 600.0}
elif (cityA == "94704" and cityB == "08540") or (
cityA == "08540" and cityB == "94704"
):
distance = {"distance": 2550.0}
elif (cityA == "94016" and cityB == "08540") or (
cityA == "08540" and cityB == "94016"
):
distance = {"distance": 1950.0}
elif (cityA == "62947" and cityB == "47329") or (
cityA == "47329" and cityB == "62947"
):
distance = {"distance": 1053.0}
elif (cityA == "94016" and cityB == "62947") or (
cityA == "62947" and cityB == "94016"
):
distance = {"distance": 780.0}
elif (cityA == "74532" and cityB == "94016") or (
cityA == "94016" and cityB == "74532"
):
distance = {"distance": 880.0}
else:
distance = {"error": "distance not found in database."}
if self.long_context:
distance["intermediaryCities"] = INTERMEDIARY_CITIES
return distance
def get_zipcode_based_on_city(self, city: str) -> Dict[str, str]:
"""
Gets the zipcode based on the city.
Args:
city (str): The name of the city.
Returns:
zipcode (str): The zipcode of the city.
"""
if city == "Rivermist":
return {"zipcode": "83214"}
elif city == "Stonebrook":
return {"zipcode": "74532"}
elif city == "Maplecrest":
return {"zipcode": "56108"}
elif city == "Silverpine":
return {"zipcode": "62947"}
elif city == "Shadowridge":
return {"zipcode": "71354"}
elif city == "Sunset Valley":
return {"zipcode": "83462"}
elif city == "Oakendale":
return {"zipcode": "47329"}
elif city == "Willowbend":
return {"zipcode": "52013"}
elif city == "Crescent Hollow":
return {"zipcode": "69238"}
elif city == "Autumnville":
return {"zipcode": "51479"}
elif city == "San Francisco":
return {"zipcode": "94016"}
else:
return {"zipcode": "00000"}
def set_navigation(self, destination: str) -> Dict[str, str]:
"""
Navigates to the destination.
Args:
destination (str): The destination to navigate in the format of street, city, state.
Returns:
status (str): The status of the navigation.
"""
self.destination = destination
return {"status": "Navigating to " + destination}
def check_tire_pressure(self):
"""
Checks the tire pressure of the vehicle.
Returns:
tirePressure (Dict): The tire pressure of the vehicle.
- frontLeftTirePressure (float): The pressure of the front left tire in psi.
- frontRightTirePressure (float): The pressure of the front right tire in psi.
- rearLeftTirePressure (float): The pressure of the rear left tire in psi.
- rearRightTirePressure (float): The pressure of the rear right tire in psi.
- healthy_tire_pressure (bool): True if the tire pressure is healthy, False otherwise.
- car_info (Dict): The metadata of the car.
"""
# This is the healthy standard the vehicle use, though the user might have different preferences
healthy_tire_pressure = (
30 <= (
self.frontLeftTirePressure
+ self.frontRightTirePressure
+ self.rearLeftTirePressure
+ self.rearRightTirePressure
) / 4 <= 35
)
tire_status = {
"frontLeftTirePressure": self.frontLeftTirePressure,
"frontRightTirePressure": self.frontRightTirePressure,
"rearLeftTirePressure": self.rearLeftTirePressure,
"rearRightTirePressure": self.rearRightTirePressure,
"healthy_tire_pressure": healthy_tire_pressure,
"car_info": {},
}
if self.long_context:
tire_status["car_info"] = CAR_STATUS_METADATA_EXTENSION
return tire_status
def find_nearest_tire_shop(self) -> Dict[str, str]:
"""
Finds the nearest tire shop.
Returns:
shopLocation (str): The location of the nearest tire shop.
"""
return {"shopLocation": "456 Oakwood Avenue, Rivermist, 83214"}