Render naip and summarize (#20)

* Intermediate

* Fix naip geom handling

* Fix imagery decoding for summary tool

* Re enable xfail

* Re enable xfail

* Remove png references
This commit is contained in:
Daniel Wiesmann
2025-12-05 15:39:16 +00:00
committed by GitHub
parent dddac818ea
commit 9b202c504e
9 changed files with 95 additions and 51 deletions
+11 -9
View File
@@ -1,9 +1,11 @@
from types import NoneType
import pytest
from geojson_pydantic import Feature
from langchain_core.tools.base import ToolCall
from shapely.geometry import box, mapping
from geo_assistant.agent.state import GeoAssistantState
from geo_assistant.tools.naip import fetch_naip_img
@@ -11,7 +13,7 @@ from geo_assistant.tools.naip import fetch_naip_img
async def test_fetch_naip():
"""
Integration test: hit MPC STAC for NAIP around Union Market (DC),
load imagery via odc-stac, and save an RGB PNG.
load imagery via odc-stac, and save an RGB JPEG.
NOTE: This test requires:
- Internet access (to reach Planetary Computer STAC + blobs)
@@ -27,13 +29,13 @@ async def test_fetch_naip():
# ~0.0001 degrees buffer in each direction
aoi = box(lon - 0.0001, lat - 0.0001, lon + 0.0001, lat + 0.0001)
aoi_geojson = mapping(aoi)
aoi_feature = Feature(type="Feature", geometry=aoi_geojson, properties={})
tool_call = ToolCall(
name="fetch_naip_img",
args={
"aoi_geojson": aoi_geojson,
"start_date": "2021-01-01",
"end_date": "2021-12-31",
"state": GeoAssistantState(search_area=aoi_feature, messages=[]),
},
type="tool_call",
id="test_tool_call_id",
@@ -42,9 +44,9 @@ async def test_fetch_naip():
# Call the actual tool - no STAC / odc-stac mocking
result = await fetch_naip_img.ainvoke(tool_call)
assert "naip_img_bytes" in result.update
assert result.update["naip_img_bytes"] is not None, "Expected PNG bytes in result"
assert isinstance(result.update["naip_img_bytes"], bytes)
assert len(result.update["naip_img_bytes"]) > 1, "Expected non-empty PNG bytes"
assert result.update["naip_img_bytes"] is not None, "Expected JPEG bytes in result"
assert isinstance(result.update["naip_img_bytes"], str)
assert len(result.update["naip_img_bytes"]) > 1, "Expected non-empty JPEG bytes"
@pytest.mark.asyncio
@@ -68,13 +70,13 @@ async def test_fetch_naip_too_large():
# ~0.003 degrees buffer in each direction
aoi = box(lon - 0.003, lat - 0.003, lon + 0.003, lat + 0.003)
aoi_geojson = mapping(aoi)
aoi_feature = Feature(type="Feature", geometry=aoi_geojson, properties={})
tool_call = ToolCall(
name="fetch_naip_img",
args={
"aoi_geojson": aoi_geojson,
"start_date": "2021-01-01",
"end_date": "2021-12-31",
"state": GeoAssistantState(search_area=aoi_feature, messages=[]),
},
type="tool_call",
id="test_tool_call_id",
@@ -83,5 +85,5 @@ async def test_fetch_naip_too_large():
# Call the actual tool - no STAC / odc-stac mocking
result = await fetch_naip_img.ainvoke(tool_call)
assert "naip_img_bytes" in result.update
assert result.update["naip_img_bytes"] is None, "Expected no PNG bytes in result"
assert result.update["naip_img_bytes"] is None, "Expected no JPEG bytes in result"
assert isinstance(result.update["naip_img_bytes"], NoneType)