| import json |
| from unittest.mock import MagicMock |
|
|
| from plugins.memory.openviking import OpenVikingMemoryProvider |
|
|
|
|
| def test_tool_search_sorts_by_raw_score_across_buckets(): |
| provider = OpenVikingMemoryProvider() |
| provider._client = MagicMock() |
| provider._client.post.return_value = { |
| "result": { |
| "memories": [ |
| {"uri": "viking://memories/1", "score": 0.9003, "abstract": "memory result"}, |
| ], |
| "resources": [ |
| {"uri": "viking://resources/1", "score": 0.9004, "abstract": "resource result"}, |
| ], |
| "skills": [ |
| {"uri": "viking://skills/1", "score": 0.8999, "abstract": "skill result"}, |
| ], |
| "total": 3, |
| } |
| } |
|
|
| result = json.loads(provider._tool_search({"query": "ranking"})) |
|
|
| assert [entry["uri"] for entry in result["results"]] == [ |
| "viking://resources/1", |
| "viking://memories/1", |
| "viking://skills/1", |
| ] |
| assert [entry["score"] for entry in result["results"]] == [0.9, 0.9, 0.9] |
| assert result["total"] == 3 |
|
|
|
|
| def test_tool_search_sorts_missing_raw_score_after_negative_scores(): |
| provider = OpenVikingMemoryProvider() |
| provider._client = MagicMock() |
| provider._client.post.return_value = { |
| "result": { |
| "memories": [ |
| {"uri": "viking://memories/missing", "abstract": "missing score"}, |
| ], |
| "resources": [ |
| {"uri": "viking://resources/negative", "score": -0.25, "abstract": "negative score"}, |
| ], |
| "skills": [ |
| {"uri": "viking://skills/positive", "score": 0.1, "abstract": "positive score"}, |
| ], |
| "total": 3, |
| } |
| } |
|
|
| result = json.loads(provider._tool_search({"query": "ranking"})) |
|
|
| assert [entry["uri"] for entry in result["results"]] == [ |
| "viking://skills/positive", |
| "viking://memories/missing", |
| "viking://resources/negative", |
| ] |
| assert [entry["score"] for entry in result["results"]] == [0.1, 0.0, -0.25] |
| assert result["total"] == 3 |
|
|