Spaces:
Running
Running
| 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"} | |