fix: recognize Dutch evolution questions
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-15 06:49:35 +02:00
parent beacdf2560
commit 06c86e91a0
3 changed files with 26 additions and 5 deletions
@@ -27,7 +27,7 @@ from app.services.vector_feature_service import VectorFeatureService
class GeoAssistantService: class GeoAssistantService:
HISTORY_KEYWORDS = ( HISTORY_KEYWORDS = (
"histor", "histor",
"evolutie", "evolu",
"verander", "verander",
"trend", "trend",
"vroeger", "vroeger",
@@ -38,6 +38,11 @@ class GeoAssistantService:
"gestegen", "gestegen",
) )
@classmethod
def history_requested(cls, question: str) -> bool:
normalized = question.casefold()
return any(keyword in normalized for keyword in cls.HISTORY_KEYWORDS)
def __init__(self, settings: Settings | None = None): def __init__(self, settings: Settings | None = None):
self.settings = settings or get_settings() self.settings = settings or get_settings()
@@ -272,7 +277,7 @@ class GeoAssistantService:
temporal_series: list[AssistantTemporalSeries] = [] temporal_series: list[AssistantTemporalSeries] = []
temporal_context: list[dict[str, Any]] = [] temporal_context: list[dict[str, Any]] = []
include_history = any(keyword in payload.question.casefold() for keyword in self.HISTORY_KEYWORDS) include_history = self.history_requested(payload.question)
for key, observations in self._series(datasets): for key, observations in self._series(datasets):
first = observations[0] first = observations[0]
last = observations[-1] last = observations[-1]
@@ -86,6 +86,18 @@ def test_geo_assistant_rejects_model_that_is_not_installed(monkeypatch) -> None:
assert exc_info.value.code == "OLLAMA_MODEL_UNAVAILABLE" assert exc_info.value.code == "OLLAMA_MODEL_UNAVAILABLE"
@pytest.mark.parametrize(
"question",
[
"Hoe evolueerden bevolking en bosoppervlakte?",
"Toon de historische ontwikkeling van water.",
"Welke trend zien we sinds 2013?",
],
)
def test_geo_assistant_recognizes_dutch_historical_questions(question: str) -> None:
assert GeoAssistantService.history_requested(question) is True
def test_geo_assistant_sends_grounded_context_without_thinking_trace(monkeypatch) -> None: def test_geo_assistant_sends_grounded_context_without_thinking_trace(monkeypatch) -> None:
service = GeoAssistantService(ollama_settings()) service = GeoAssistantService(ollama_settings())
project_id = uuid4() project_id = uuid4()
+7 -3
View File
@@ -8389,11 +8389,15 @@ Validation evidence:
- Focused temporal, source, Ollama, navigation and Unraid regression tests - Focused temporal, source, Ollama, navigation and Unraid regression tests
passed, including direct coverage for multi-metric history and DockerMan host passed, including direct coverage for multi-metric history and DockerMan host
mapping. mapping.
- Full readiness passed 612 backend tests, backend compilation, 91 documented - Full readiness passed 615 backend tests, backend compilation, 91 documented
API routes, one Alembic head, frontend TypeScript typecheck/build and all API routes, one Alembic head, frontend TypeScript typecheck/build and all
shell syntax gates. shell syntax gates.
- Local Docker validation was deferred to the live Tower deployment because - Tower deployment passed the all-in-one container health check, live PostGIS
Docker is not installed on the Windows development host. 3.6 migration/schema smoke and frontend/API proxy smoke. The container reached
host Ollama and exposed 10 installed models through the canonical API.
- A live historical question revealed that the Dutch verb `evolueerden` did
not activate history context. The intent stem was corrected to `evolu`, three
direct regression cases were added and full readiness reran successfully.
Known limitations: Known limitations:
- Water volume remains unavailable until a governed depth/bathymetry source is - Water volume remains unavailable until a governed depth/bathymetry source is