Skip to content

Commit e73c5bf

Browse files
authored
fix(retrieval): keep VikingFS.find on quick mode (#4472)
1 parent e24b834 commit e73c5bf

2 files changed

Lines changed: 46 additions & 2 deletions

File tree

openviking/storage/viking_fs/_semantic.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,10 @@ async def find(
206206
"""
207207
_ensure_non_empty_search_query(query, image_url)
208208
telemetry = get_current_telemetry()
209-
from openviking.retrieve.hierarchical_retriever import HierarchicalRetriever
209+
from openviking.retrieve.hierarchical_retriever import (
210+
HierarchicalRetriever,
211+
RetrieverMode,
212+
)
210213
from openviking_cli.retrieve import (
211214
ContextType,
212215
FindResult,
@@ -254,6 +257,7 @@ async def find(
254257
typed_query,
255258
ctx=real_ctx,
256259
limit=limit,
260+
mode=RetrieverMode.QUICK,
257261
score_threshold=score_threshold,
258262
scope_dsl=filter,
259263
level=level,

tests/misc/test_vikingfs_find_without_rerank.py

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
# Copyright (c) 2026 Beijing Volcano Engine Technology Co., Ltd.
22
# SPDX-License-Identifier: AGPL-3.0
3-
"""Regression test for VikingFS.find without rerank configuration."""
3+
"""Regression tests for VikingFS.find retrieval behavior."""
44

55
import contextvars
66
from unittest.mock import AsyncMock, MagicMock
77

88
import pytest
99

10+
from openviking.retrieve.hierarchical_retriever import RetrieverMode
1011
from openviking.server.identity import RequestContext, Role
1112
from openviking.storage.viking_fs import VikingFS
1213
from openviking_cli.retrieve.types import ContextType, MatchedContext, QueryResult
@@ -51,13 +52,15 @@ async def retrieve(
5152
typed_query,
5253
ctx,
5354
limit,
55+
mode,
5456
score_threshold,
5557
scope_dsl,
5658
level,
5759
):
5860
captured["typed_query"] = typed_query
5961
captured["ctx"] = ctx
6062
captured["limit"] = limit
63+
captured["mode"] = mode
6164
captured["score_threshold"] = score_threshold
6265
captured["scope_dsl"] = scope_dsl
6366
captured["level"] = level
@@ -98,6 +101,7 @@ async def retrieve(
98101
assert captured["typed_query"].target_directories == ["viking://resources/docs"]
99102
assert captured["ctx"] == fs._ctx_or_default.return_value
100103
assert captured["limit"] == 3
104+
assert captured["mode"] == RetrieverMode.QUICK
101105
assert captured["score_threshold"] == 0.2
102106
assert captured["scope_dsl"] == {"category": "doc"}
103107
assert captured["level"] is None
@@ -118,11 +122,13 @@ async def retrieve(
118122
typed_query,
119123
ctx,
120124
limit,
125+
mode,
121126
score_threshold,
122127
scope_dsl,
123128
level,
124129
):
125130
captured["typed_query"] = typed_query
131+
captured["mode"] = mode
126132
return QueryResult(
127133
query=typed_query,
128134
matched_contexts=[
@@ -153,3 +159,37 @@ async def retrieve(
153159
assert typed_query.embedding_input == [
154160
{"type": "image_url", "image_url": {"url": "data:image/png;base64,abc"}}
155161
]
162+
assert captured["mode"] == RetrieverMode.QUICK
163+
164+
165+
@pytest.mark.asyncio
166+
async def test_find_uses_quick_mode_with_rerank_config(monkeypatch) -> None:
167+
fs = _make_viking_fs()
168+
fs.rerank_config = MagicMock(name="rerank_config")
169+
captured = {}
170+
171+
class FakeRetriever:
172+
def __init__(self, storage, embedder, rerank_config, retrieval_config):
173+
captured["rerank_config"] = rerank_config
174+
175+
async def retrieve(self, typed_query, **kwargs):
176+
captured["mode"] = kwargs.get("mode")
177+
return QueryResult(
178+
query=typed_query,
179+
matched_contexts=[],
180+
searched_directories=["viking://resources/docs"],
181+
)
182+
183+
monkeypatch.setattr(
184+
"openviking.retrieve.hierarchical_retriever.HierarchicalRetriever",
185+
FakeRetriever,
186+
)
187+
188+
result = await fs.find(
189+
"guide",
190+
target_uri="viking://resources/docs",
191+
)
192+
193+
assert result.total == 0
194+
assert captured["rerank_config"] is fs.rerank_config
195+
assert captured["mode"] == RetrieverMode.QUICK

0 commit comments

Comments
 (0)