Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Ole
2026-05-18 21:31:52 +00:00
parent 6eedfffa4d
commit c9383788de
22 changed files with 1614 additions and 42 deletions
+28 -6
View File
@@ -55,7 +55,27 @@ async def get_or_fetch_similar_units(
"""Get similar units (comps) from cache or fetch fresh."""
# Similar units don't have a separate cache table; fetch fresh each time per PRD
# (or cache them in search_runs if doing diff detection)
return await get_similar_units(unit_code, listing_status=listing_status)
unit = await get_or_fetch_eiendom_unit(unit_code)
if unit is None:
return []
vector = build_unit_vector(unit)
return await get_similar_units(vector, listing_status=listing_status)
async def get_unit_images(unit_code: str, force_refresh: bool = False) -> dict[str, Any]:
"""Fetch unit images for visual assessment."""
unit = await get_or_fetch_eiendom_unit(unit_code, force_refresh=force_refresh)
if unit is None:
raise ValueError(f"Could not fetch Eiendom.no unit {unit_code}")
return {
"unit_code": unit.unit_code,
"address": unit.address,
"unit_images": unit.unit_images or [],
"property_type": unit.property_type,
"rooms": unit.rooms,
"usable_area": unit.usable_area,
}
async def resolve_eiendom_unit_from_finn_url(finn_url: str) -> EiendomUnit | None:
@@ -75,7 +95,6 @@ async def analyze_search(
detail_limit: int = 20,
include_details: bool = True,
include_eiendom_no: bool = True,
include_similar_units_for_shortlist: bool = False,
) -> dict[str, Any]:
"""Analyze a FINN search URL and return a ranked shortlist."""
return await run_analysis_search(
@@ -84,7 +103,6 @@ async def analyze_search(
fetch_details=include_details,
detail_limit=detail_limit,
include_eiendom_no=include_eiendom_no,
include_similar_units_for_shortlist=include_similar_units_for_shortlist,
)
@@ -181,9 +199,13 @@ async def compare_ads(
# ============================================================================
def build_unit_vector_for_unit_code(unit_code: str) -> dict[str, Any]:
"""Build a unit_vector dict for a unit_code (msgpack-encoded)."""
return build_unit_vector(unit_code)
async def build_unit_vector_for_unit_code(unit_code: str) -> dict[str, Any]:
"""Build a unit_vector for a unit_code by fetching and encoding the unit data."""
unit = await get_or_fetch_eiendom_unit(unit_code)
if unit is None:
raise ValueError(f"Could not fetch Eiendom.no unit {unit_code}")
vector = build_unit_vector(unit)
return {"unit_code": unit_code, "unit_vector": vector}
def decode_unit_vector_to_dict(unit_vector: str) -> dict[str, Any]: