Feat: Implement distance-based deal prioritization and filtering
Implements smart deal prioritization based on distance from search point, ensuring most relevant comparables are selected first. Problem: - Queried all polygons equally without distance consideration - No filtering for deals that are too far away - Street/neighborhood deals could be from distant locations - No way to prefer closest polygon when multiple available Solution: 1. Sort polygons by distance from search point (closest first) 2. Query polygons progressively, stop early if enough deals found 3. Calculate and store distance_meters for each deal 4. Filter deals by configurable distance thresholds: - Street deals: max 500m (configurable) - Neighborhood deals: max 1000m (configurable) 5. Sort by priority → distance → date (prefer closer deals) Changes: Config (nadlan_mcp/config.py): - Added max_street_deal_distance_meters (default: 500m) - Added max_neighborhood_deal_distance_meters (default: 1000m) Client (nadlan_mcp/govmap/client.py): - Extract polygon metadata with coordinates - Sort polygons by distance using utils.calculate_distance() - Progressive polygon querying (closest first, stop when enough deals) - Calculate deal distance (use polygon distance as approximation) - Filter street deals beyond max_street_deal_distance_meters - Filter neighborhood deals beyond max_neighborhood_deal_distance_meters - Store distance_meters on each Deal (dynamic attribute) - Updated sorting: Priority → Distance → Date Benefits: - More relevant comparables (from nearby locations) - Reduced API calls (query fewer polygons, stop early) - Better performance (fewer deals to process) - Configurable distance thresholds - Transparent (distance info available in each deal) Example Configuration: export MAX_STREET_DEAL_DISTANCE_METERS=300 # Conservative export MAX_NEIGHBORHOOD_DEAL_DISTANCE_METERS=500 Testing: - All 326 tests pass - Backward compatible (high default limits) - Works with existing outlier filtering 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -95,6 +95,14 @@ class GovmapConfig:
|
||||
== "true"
|
||||
)
|
||||
|
||||
# Distance Filtering for Deal Relevance
|
||||
max_street_deal_distance_meters: int = field(
|
||||
default_factory=lambda: int(os.getenv("MAX_STREET_DEAL_DISTANCE_METERS", "500"))
|
||||
)
|
||||
max_neighborhood_deal_distance_meters: int = field(
|
||||
default_factory=lambda: int(os.getenv("MAX_NEIGHBORHOOD_DEAL_DISTANCE_METERS", "1000"))
|
||||
)
|
||||
|
||||
# User agent
|
||||
user_agent: str = field(
|
||||
default_factory=lambda: os.getenv("GOVMAP_USER_AGENT", "NadlanMCP/1.0.0")
|
||||
|
||||
Reference in New Issue
Block a user