route optimizer agent with dailygrubs ai assign

This commit is contained in:
2026-09-01 13:48:58 +05:30
parent aa4d4c6549
commit 90cdb57a38
28 changed files with 3281 additions and 135 deletions

View File

@@ -254,11 +254,11 @@ class OrderAgent(SpecializedAgent):
if email and not self._is_valid_email(email):
warnings.append("Invalid email format")
pickup_pincode = order_data.get("pickup_address", {}).get("pincode", "")
pickup_pincode = self._addr_pincode(order_data, "pickup_address")
if not self._is_valid_pincode(pickup_pincode):
errors.append("Invalid pickup pincode")
delivery_pincode = order_data.get("delivery_address", {}).get("pincode", "")
delivery_pincode = self._addr_pincode(order_data, "delivery_address")
if not self._is_valid_pincode(delivery_pincode):
errors.append("Invalid delivery pincode")
@@ -280,8 +280,8 @@ class OrderAgent(SpecializedAgent):
}
def _categorize_order_data(self, order_data: Dict) -> Dict[str, Any]:
pickup_pincode = order_data.get("pickup_address", {}).get("pincode", "")[:3]
delivery_pincode = order_data.get("delivery_address", {}).get("pincode", "")[:3]
pickup_pincode = self._addr_pincode(order_data, "pickup_address")[:3]
delivery_pincode = self._addr_pincode(order_data, "delivery_address")[:3]
if pickup_pincode == delivery_pincode:
zone_type = ZoneType.LAST_MILE.value
@@ -330,7 +330,18 @@ class OrderAgent(SpecializedAgent):
import re
return bool(re.match(self._validation_rules["email_pattern"], email))
def _is_valid_pincode(self, pincode: str) -> bool:
@staticmethod
def _addr_pincode(order_data: Dict, key: str) -> str:
"""Pincode as a string, tolerant of a missing/None address block or a
numeric pincode (valid JSON may send either). Never raises."""
addr = order_data.get(key) or {}
if not isinstance(addr, dict):
return ""
pincode = addr.get("pincode")
return str(pincode) if pincode is not None else ""
def _is_valid_pincode(self, pincode) -> bool:
pincode = str(pincode) if pincode is not None else ""
return len(pincode) == self._validation_rules["pincode_length"] and pincode.isdigit()
async def think(self, context: str, options: List[str] = None) -> str: