Skip to content

Commit ad70fef

Browse files
committed
Move query and streaming_query to vector_stores
1 parent 41e89f6 commit ad70fef

File tree

4 files changed

+117
-63
lines changed

4 files changed

+117
-63
lines changed

src/app/endpoints/query.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -747,10 +747,10 @@ async def retrieve_response( # pylint: disable=too-many-locals,too-many-branche
747747
),
748748
}
749749

750-
vector_db_ids = [
751-
vector_db.identifier for vector_db in await client.vector_dbs.list()
750+
vector_store_ids = [
751+
vector_store.id for vector_store in (await client.vector_stores.list()).data
752752
]
753-
toolgroups = (get_rag_toolgroups(vector_db_ids) or []) + [
753+
toolgroups = (get_rag_toolgroups(vector_store_ids) or []) + [
754754
mcp_server.name for mcp_server in configuration.mcp_servers
755755
]
756756
# Convert empty list to None for consistency with existing behavior
@@ -846,30 +846,30 @@ def validate_attachments_metadata(attachments: list[Attachment]) -> None:
846846

847847

848848
def get_rag_toolgroups(
849-
vector_db_ids: list[str],
849+
vector_store_ids: list[str],
850850
) -> list[Toolgroup] | None:
851851
"""
852-
Return a list of RAG Tool groups if the given vector DB list is not empty.
852+
Return a list of RAG Tool groups if the given vector store list is not empty.
853853
854854
Generate a list containing a RAG knowledge search toolgroup if
855-
vector database IDs are provided.
855+
vector store IDs are provided.
856856
857857
Parameters:
858-
vector_db_ids (list[str]): List of vector database identifiers to include in the toolgroup.
858+
vector_store_ids (list[str]): List of vector store identifiers to include in the toolgroup.
859859
860860
Returns:
861861
list[Toolgroup] | None: A list with a single RAG toolgroup if
862-
vector_db_ids is non-empty; otherwise, None.
862+
vector_store_ids is non-empty; otherwise, None.
863863
"""
864864
return (
865865
[
866866
ToolgroupAgentToolGroupWithArgs(
867867
name="builtin::rag/knowledge_search",
868868
args={
869-
"vector_db_ids": vector_db_ids,
869+
"vector_store_ids": vector_store_ids,
870870
},
871871
)
872872
]
873-
if vector_db_ids
873+
if vector_store_ids
874874
else None
875875
)

src/app/endpoints/streaming_query.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,10 +1075,10 @@ async def retrieve_response(
10751075
),
10761076
}
10771077

1078-
vector_db_ids = [
1079-
vector_db.identifier for vector_db in await client.vector_dbs.list()
1078+
vector_store_ids = [
1079+
vector_store.id for vector_store in (await client.vector_stores.list()).data
10801080
]
1081-
toolgroups = (get_rag_toolgroups(vector_db_ids) or []) + [
1081+
toolgroups = (get_rag_toolgroups(vector_store_ids) or []) + [
10821082
mcp_server.name for mcp_server in configuration.mcp_servers
10831083
]
10841084
# Convert empty list to None for consistency with existing behavior

tests/unit/app/endpoints/test_query.py

Lines changed: 62 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -532,9 +532,11 @@ async def test_retrieve_response_no_returned_message(
532532
mock_client, mock_agent = prepare_agent_mocks
533533
mock_agent.create_turn.return_value.output_message = None
534534
mock_client.shields.list.return_value = []
535-
mock_vector_db = mocker.Mock()
536-
mock_vector_db.identifier = "VectorDB-1"
537-
mock_client.vector_dbs.list.return_value = [mock_vector_db]
535+
mock_vector_store = mocker.Mock()
536+
mock_vector_store.id = "VectorDB-1"
537+
mock_vector_stores_response = mocker.Mock()
538+
mock_vector_stores_response.data = [mock_vector_store]
539+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
538540

539541
# Mock configuration with empty MCP servers
540542
mock_config = mocker.Mock()
@@ -570,9 +572,11 @@ async def test_retrieve_response_message_without_content(
570572
mock_client, mock_agent = prepare_agent_mocks
571573
mock_agent.create_turn.return_value.output_message.content = None
572574
mock_client.shields.list.return_value = []
573-
mock_vector_db = mocker.Mock()
574-
mock_vector_db.identifier = "VectorDB-1"
575-
mock_client.vector_dbs.list.return_value = [mock_vector_db]
575+
mock_vector_store = mocker.Mock()
576+
mock_vector_store.id = "VectorDB-1"
577+
mock_vector_stores_response = mocker.Mock()
578+
mock_vector_stores_response.data = [mock_vector_store]
579+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
576580

577581
# Mock configuration with empty MCP servers
578582
mock_config = mocker.Mock()
@@ -609,9 +613,11 @@ async def test_retrieve_response_vector_db_available(
609613
mock_client, mock_agent = prepare_agent_mocks
610614
mock_agent.create_turn.return_value.output_message.content = "LLM answer"
611615
mock_client.shields.list.return_value = []
612-
mock_vector_db = mocker.Mock()
613-
mock_vector_db.identifier = "VectorDB-1"
614-
mock_client.vector_dbs.list.return_value = [mock_vector_db]
616+
mock_vector_store = mocker.Mock()
617+
mock_vector_store.id = "VectorDB-1"
618+
mock_vector_stores_response = mocker.Mock()
619+
mock_vector_stores_response.data = [mock_vector_store]
620+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
615621

616622
# Mock configuration with empty MCP servers
617623
mock_config = mocker.Mock()
@@ -656,7 +662,9 @@ async def test_retrieve_response_no_available_shields(
656662
mock_client, mock_agent = prepare_agent_mocks
657663
mock_agent.create_turn.return_value.output_message.content = "LLM answer"
658664
mock_client.shields.list.return_value = []
659-
mock_client.vector_dbs.list.return_value = []
665+
mock_vector_stores_response = mocker.Mock()
666+
mock_vector_stores_response.data = []
667+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
660668

661669
# Mock configuration with empty MCP servers
662670
mock_config = mocker.Mock()
@@ -712,7 +720,9 @@ def __repr__(self) -> str:
712720
mock_client, mock_agent = prepare_agent_mocks
713721
mock_agent.create_turn.return_value.output_message.content = "LLM answer"
714722
mock_client.shields.list.return_value = [MockShield("shield1")]
715-
mock_client.vector_dbs.list.return_value = []
723+
mock_vector_stores_response = mocker.Mock()
724+
mock_vector_stores_response.data = []
725+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
716726

717727
# Mock configuration with empty MCP servers
718728
mock_config = mocker.Mock()
@@ -771,7 +781,9 @@ def __repr__(self) -> str:
771781
MockShield("shield1"),
772782
MockShield("shield2"),
773783
]
774-
mock_client.vector_dbs.list.return_value = []
784+
mock_vector_stores_response = mocker.Mock()
785+
mock_vector_stores_response.data = []
786+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
775787

776788
# Mock configuration with empty MCP servers
777789
mock_config = mocker.Mock()
@@ -832,7 +844,9 @@ def __repr__(self) -> str:
832844
MockShield("output_shield3"),
833845
MockShield("inout_shield4"),
834846
]
835-
mock_client.vector_dbs.list.return_value = []
847+
mock_vector_stores_response = mocker.Mock()
848+
mock_vector_stores_response.data = []
849+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
836850

837851
# Mock configuration with empty MCP servers
838852
mock_config = mocker.Mock()
@@ -887,7 +901,9 @@ async def test_retrieve_response_with_one_attachment(
887901
mock_client, mock_agent = prepare_agent_mocks
888902
mock_agent.create_turn.return_value.output_message.content = "LLM answer"
889903
mock_client.shields.list.return_value = []
890-
mock_client.vector_dbs.list.return_value = []
904+
mock_vector_stores_response = mocker.Mock()
905+
mock_vector_stores_response.data = []
906+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
891907

892908
# Mock configuration with empty MCP servers
893909
mock_config = mocker.Mock()
@@ -943,7 +959,9 @@ async def test_retrieve_response_with_two_attachments(
943959
mock_client, mock_agent = prepare_agent_mocks
944960
mock_agent.create_turn.return_value.output_message.content = "LLM answer"
945961
mock_client.shields.list.return_value = []
946-
mock_client.vector_dbs.list.return_value = []
962+
mock_vector_stores_response = mocker.Mock()
963+
mock_vector_stores_response.data = []
964+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
947965

948966
# Mock configuration with empty MCP servers
949967
mock_config = mocker.Mock()
@@ -1125,7 +1143,9 @@ async def test_retrieve_response_with_mcp_servers(
11251143
mock_client, mock_agent = prepare_agent_mocks
11261144
mock_agent.create_turn.return_value.output_message.content = "LLM answer"
11271145
mock_client.shields.list.return_value = []
1128-
mock_client.vector_dbs.list.return_value = []
1146+
mock_vector_stores_response = mocker.Mock()
1147+
mock_vector_stores_response.data = []
1148+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
11291149

11301150
# Mock configuration with MCP servers
11311151
mcp_servers = [
@@ -1206,7 +1226,9 @@ async def test_retrieve_response_with_mcp_servers_empty_token(
12061226
mock_client, mock_agent = prepare_agent_mocks
12071227
mock_agent.create_turn.return_value.output_message.content = "LLM answer"
12081228
mock_client.shields.list.return_value = []
1209-
mock_client.vector_dbs.list.return_value = []
1229+
mock_vector_stores_response = mocker.Mock()
1230+
mock_vector_stores_response.data = []
1231+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
12101232

12111233
# Mock configuration with MCP servers
12121234
mcp_servers = [
@@ -1265,7 +1287,9 @@ async def test_retrieve_response_with_mcp_servers_and_mcp_headers(
12651287
mock_client, mock_agent = prepare_agent_mocks
12661288
mock_agent.create_turn.return_value.output_message.content = "LLM answer"
12671289
mock_client.shields.list.return_value = []
1268-
mock_client.vector_dbs.list.return_value = []
1290+
mock_vector_stores_response = mocker.Mock()
1291+
mock_vector_stores_response.data = []
1292+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
12691293

12701294
# Mock configuration with MCP servers
12711295
mcp_servers = [
@@ -1376,9 +1400,11 @@ async def test_retrieve_response_shield_violation(
13761400
text="LLM answer", type="text"
13771401
)
13781402
mock_client.shields.list.return_value = []
1379-
mock_vector_db = mocker.Mock()
1380-
mock_vector_db.identifier = "VectorDB-1"
1381-
mock_client.vector_dbs.list.return_value = [mock_vector_db]
1403+
mock_vector_store = mocker.Mock()
1404+
mock_vector_store.id = "VectorDB-1"
1405+
mock_vector_stores_response = mocker.Mock()
1406+
mock_vector_stores_response.data = [mock_vector_store]
1407+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
13821408

13831409
# Mock configuration with empty MCP servers
13841410
mock_config = mocker.Mock()
@@ -1415,16 +1441,16 @@ async def test_retrieve_response_shield_violation(
14151441

14161442
def test_get_rag_toolgroups() -> None:
14171443
"""Test get_rag_toolgroups function."""
1418-
vector_db_ids: list[str] = []
1419-
result = get_rag_toolgroups(vector_db_ids)
1444+
vector_store_ids: list[str] = []
1445+
result = get_rag_toolgroups(vector_store_ids)
14201446
assert result is None
14211447

1422-
vector_db_ids = ["Vector-DB-1", "Vector-DB-2"]
1423-
result = get_rag_toolgroups(vector_db_ids)
1448+
vector_store_ids = ["Vector-DB-1", "Vector-DB-2"]
1449+
result = get_rag_toolgroups(vector_store_ids)
14241450
assert result is not None
14251451
assert len(result) == 1
14261452
assert result[0]["name"] == "builtin::rag/knowledge_search"
1427-
assert result[0]["args"]["vector_db_ids"] == vector_db_ids
1453+
assert result[0]["args"]["vector_store_ids"] == vector_store_ids
14281454

14291455

14301456
@pytest.mark.asyncio
@@ -1643,9 +1669,11 @@ async def test_retrieve_response_no_tools_bypasses_mcp_and_rag(
16431669
mock_client, mock_agent = prepare_agent_mocks
16441670
mock_agent.create_turn.return_value.output_message.content = "LLM answer"
16451671
mock_client.shields.list.return_value = []
1646-
mock_vector_db = mocker.Mock()
1647-
mock_vector_db.identifier = "VectorDB-1"
1648-
mock_client.vector_dbs.list.return_value = [mock_vector_db]
1672+
mock_vector_store = mocker.Mock()
1673+
mock_vector_store.id = "VectorDB-1"
1674+
mock_vector_stores_response = mocker.Mock()
1675+
mock_vector_stores_response.data = [mock_vector_store]
1676+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
16491677

16501678
# Mock configuration with MCP servers
16511679
mcp_servers = [
@@ -1698,9 +1726,11 @@ async def test_retrieve_response_no_tools_false_preserves_functionality(
16981726
mock_client, mock_agent = prepare_agent_mocks
16991727
mock_agent.create_turn.return_value.output_message.content = "LLM answer"
17001728
mock_client.shields.list.return_value = []
1701-
mock_vector_db = mocker.Mock()
1702-
mock_vector_db.identifier = "VectorDB-1"
1703-
mock_client.vector_dbs.list.return_value = [mock_vector_db]
1729+
mock_vector_store = mocker.Mock()
1730+
mock_vector_store.id = "VectorDB-1"
1731+
mock_vector_stores_response = mocker.Mock()
1732+
mock_vector_stores_response.data = [mock_vector_store]
1733+
mock_client.vector_stores.list.return_value = mock_vector_stores_response
17041734

17051735
# Mock configuration with MCP servers
17061736
mcp_servers = [

0 commit comments

Comments
 (0)