refactor(tools): resolve_project uses shared score_project_match helper

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-12 16:43:05 -04:00
parent 460959f0d4
commit 9a96fdb3c0
2 changed files with 40 additions and 14 deletions
+32
View File
@@ -109,3 +109,35 @@ async def test_search_projects_tool_ranks_substring_match_above_others():
top = result["data"]["projects"][0]
assert top["id"] == 5, f"expected Famous-Supply to rank first, got {top}"
assert top["score"] >= 0.85
@pytest.mark.asyncio
async def test_resolve_project_finds_colloquial_match(monkeypatch):
"""resolve_project must surface 'Famous-Supply Work topics' when the
user passes 'famous supply project' — substring match via the shared
score helper, score 0.85 ≥ 0.55 threshold."""
from fabledassistant.services.tools import _helpers
fake_projects = [
_project(12, "Minstrel", auto_summary="self-hosted music server"),
_project(5, "Famous-Supply Work topics", auto_summary="AT&T fiber circuit"),
]
async def fake_get_project_by_title(uid, name):
return None # force the scored path
async def fake_list_projects(uid):
return fake_projects
monkeypatch.setattr(
"fabledassistant.services.projects.get_project_by_title",
fake_get_project_by_title,
)
monkeypatch.setattr(
"fabledassistant.services.projects.list_projects",
fake_list_projects,
)
result = await _helpers.resolve_project(user_id=1, project_name="famous supply project")
assert result is not None
assert result.id == 5