diff --git a/dev/test_openwebui_filters.py b/dev/test_openwebui_filters.py index c149fb0..3d4be13 100644 --- a/dev/test_openwebui_filters.py +++ b/dev/test_openwebui_filters.py @@ -150,6 +150,26 @@ class AutoToolSelectorTests(unittest.IsolatedAsyncioTestCase): ) self.assertNotIn("server:mcp:mua", result["tool_ids"]) + async def test_voice_transcription_variants_select_unraid(self): + result = await self._select( + "Welche Dacher Contäner laufen aktuell auf dem Anrate Server?" + ) + self.assertEqual( + result["tool_ids"], ["server:mcp:unraid-readonly-local"] + ) + + async def test_navidrome_is_selected(self): + result = await self._select( + "Schau in Navidrome nach ähnlichen Titeln und meiner Playlist." + ) + self.assertEqual(result["tool_ids"], ["server:mcp:navidrome-local"]) + + async def test_platform_context_is_selected(self): + result = await self._select( + "Wie ist der KI-Host Athena aufgebaut und wo liegt der Recovery-Koffer?" + ) + self.assertEqual(result["tool_ids"], ["server:mcp:athena-platform"]) + async def test_github_and_explicit_web_are_bounded_to_two(self): result = await self._select( "Prüfe dieses GitHub Repository und suche zusätzlich im Netz nach Nutzerstimmen." diff --git a/platform/openwebui/filters/auto_tool_selector.py b/platform/openwebui/filters/auto_tool_selector.py index 7d45e9e..b14f81c 100644 --- a/platform/openwebui/filters/auto_tool_selector.py +++ b/platform/openwebui/filters/auto_tool_selector.py @@ -108,7 +108,7 @@ class Filter: homeassistant = self._matches( text, ( - r"\bhome\s*assistant\b", r"\bhomeassistant\b", r"\bhass\b", + r"\bhome\s*assist(?:ant|ent)\b", r"\bhomeassistant\b", r"\bhass\b", r"\bautomatisierung(?:en)?\b", r"\bentit[aä]t(?:en)?\b", r"\b(?:sensor|light|switch|climate|automation)\.[\w.-]+", r"\b(?:temperatur|luftfeuchtigkeit|wie warm)\b.*\b" @@ -118,7 +118,7 @@ class Filter: arr = self._matches( text, ( - r"\bsonarr\b", r"\bradarr\b", r"\barr[- ]mcp\b", + r"\bsona(?:rr|r)?\b", r"\brada(?:rr|r)\b", r"\barr[- ]mcp\b", r"\b(?:staffel|episode|folge)(?:n)?\b.*\b" r"(?:fehl|such|download|indexer|release|serie)\w*", r"\b(?:serie|film)\b.*\b(?:sonarr|radarr|indexer|release)\b", @@ -135,11 +135,13 @@ class Filter: unraid = self._matches( text, ( - r"\bunraid\b", r"\bhome\s*server\b", r"\bhomeserver\b", + r"\b(?:unraid|unreid|unrate|anrate)\b", r"\bhome\s*server\b", r"\bhomeserver\b", r"\bparity\b", r"\barray\b", r"\bmua\b", - r"\bdocker[- ]container\b", r"\bcontainer(?:n)?\b.*\b" - r"(?:docker|log|update|l[aä]uft|laufen|gestoppt|unraid)\b", - r"\b(?:docker|container)\b.*\b(?:unraid|homeserver|nas)\b", + r"\b(?:docker|doker|dacher)[- ]cont[aä]iner\b", + r"\bcont[aä]iner(?:n)?\b.*\b" + r"(?:docker|doker|dacher|log|update|l[aä]uft|laufen|gestoppt|unraid)\b", + r"\b(?:docker|doker|dacher|cont[aä]iner)\b.*\b" + r"(?:unraid|unreid|unrate|anrate|homeserver|nas)\b", ), ) github = self._matches(