Skip to content

Commit da79e21

Browse files
vertex-sdk-botcopybara-github
authored andcommitted
feat: Adding RagManagedVertexVectorSearch Vector DB option for RAG corpuses to SDK
PiperOrigin-RevId: 842103706
1 parent 30e41d0 commit da79e21

File tree

6 files changed

+110
-4
lines changed

6 files changed

+110
-4
lines changed

tests/unit/vertex_rag/test_rag_constants_preview.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
RagFile,
6363
RagManagedDb,
6464
RagManagedDbConfig,
65+
RagManagedVertexVectorSearch,
6566
RagResource,
6667
RagRetrievalConfig,
6768
RagVectorDbConfig,
@@ -137,6 +138,12 @@
137138
display_name=TEST_CORPUS_DISPLAY_NAME,
138139
description=TEST_CORPUS_DISCRIPTION,
139140
)
141+
TEST_RAG_MANAGED_VERTEX_VECTOR_SEARCH_COLLECTION_NAME = (
142+
"test-rag-managed-vertex-vector-search-collection"
143+
)
144+
TEST_RAG_MANAGED_VERTEX_VECTOR_SEARCH_CONFIG = RagManagedVertexVectorSearch(
145+
collection_name=TEST_RAG_MANAGED_VERTEX_VECTOR_SEARCH_COLLECTION_NAME
146+
)
140147
TEST_GAPIC_RAG_CORPUS.rag_embedding_model_config.vertex_prediction_endpoint.endpoint = (
141148
"projects/{}/locations/{}/publishers/google/models/textembedding-gecko".format(
142149
TEST_PROJECT, TEST_REGION
@@ -200,6 +207,17 @@
200207
),
201208
),
202209
)
210+
TEST_GAPIC_RAG_CORPUS_RAG_MANAGED_VERTEX_VECTOR_SEARCH = GapicRagCorpus(
211+
name=TEST_RAG_CORPUS_RESOURCE_NAME,
212+
display_name=TEST_CORPUS_DISPLAY_NAME,
213+
description=TEST_CORPUS_DISCRIPTION,
214+
rag_vector_db_config=GapicRagVectorDbConfig(
215+
rag_managed_vertex_vector_search=GapicRagVectorDbConfig.RagManagedVertexVectorSearch(
216+
collection_name=TEST_RAG_MANAGED_VERTEX_VECTOR_SEARCH_COLLECTION_NAME,
217+
),
218+
),
219+
)
220+
203221
TEST_GAPIC_RAG_CORPUS_RAG_MANAGED_DB = GapicRagCorpus(
204222
name=TEST_RAG_CORPUS_RESOURCE_NAME,
205223
display_name=TEST_CORPUS_DISPLAY_NAME,
@@ -301,6 +319,13 @@
301319
description=TEST_CORPUS_DISCRIPTION,
302320
vector_db=TEST_VERTEX_VECTOR_SEARCH_CONFIG,
303321
)
322+
TEST_RAG_CORPUS_RAG_MANAGED_VERTEX_VECTOR_SEARCH = RagCorpus(
323+
name=TEST_RAG_CORPUS_RESOURCE_NAME,
324+
display_name=TEST_CORPUS_DISPLAY_NAME,
325+
description=TEST_CORPUS_DISCRIPTION,
326+
vector_db=TEST_RAG_MANAGED_VERTEX_VECTOR_SEARCH_CONFIG,
327+
)
328+
304329
TEST_PAGE_TOKEN = "test-page-token"
305330
# Backend Config
306331
TEST_GAPIC_RAG_CORPUS_BACKEND_CONFIG = GapicRagCorpus(

tests/unit/vertex_rag/test_rag_data_preview.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,23 @@ def create_rag_corpus_mock_pinecone():
164164
yield create_rag_corpus_mock_pinecone
165165

166166

167+
@pytest.fixture
168+
def create_rag_corpus_mock_rag_managed_vertex_vector_search():
169+
with mock.patch.object(
170+
VertexRagDataServiceClient,
171+
"create_rag_corpus",
172+
) as create_rag_corpus_mock_rag_managed_vertex_vector_search:
173+
create_rag_corpus_lro_mock = mock.Mock(ga_operation.Operation)
174+
create_rag_corpus_lro_mock.done.return_value = True
175+
create_rag_corpus_lro_mock.result.return_value = (
176+
test_rag_constants_preview.TEST_GAPIC_RAG_CORPUS_RAG_MANAGED_VERTEX_VECTOR_SEARCH
177+
)
178+
create_rag_corpus_mock_rag_managed_vertex_vector_search.return_value = (
179+
create_rag_corpus_lro_mock
180+
)
181+
yield create_rag_corpus_mock_rag_managed_vertex_vector_search
182+
183+
167184
@pytest.fixture
168185
def create_rag_corpus_mock_rag_managed_db():
169186
with mock.patch.object(
@@ -805,6 +822,18 @@ def test_create_corpus_vertex_vector_search_success(self):
805822
rag_corpus, test_rag_constants_preview.TEST_RAG_CORPUS_VERTEX_VECTOR_SEARCH
806823
)
807824

825+
@pytest.mark.usefixtures("create_rag_corpus_mock_rag_managed_vertex_vector_search")
826+
def test_create_corpus_rag_managed_vertex_vector_search_success(self):
827+
rag_corpus = rag.create_corpus(
828+
display_name=test_rag_constants_preview.TEST_CORPUS_DISPLAY_NAME,
829+
vector_db=test_rag_constants_preview.TEST_RAG_MANAGED_VERTEX_VECTOR_SEARCH_CONFIG,
830+
)
831+
832+
rag_corpus_eq(
833+
rag_corpus,
834+
test_rag_constants_preview.TEST_RAG_CORPUS_RAG_MANAGED_VERTEX_VECTOR_SEARCH,
835+
)
836+
808837
@pytest.mark.usefixtures("create_rag_corpus_mock_vertex_vector_search_backend")
809838
def test_create_corpus_vertex_vector_search_backend_success(self):
810839
rag_corpus = rag.create_corpus(

vertexai/preview/rag/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
RagFile,
6060
RagManagedDb,
6161
RagManagedDbConfig,
62+
RagManagedVertexVectorSearch,
6263
RagResource,
6364
RagRetrievalConfig,
6465
RagVectorDbConfig,
@@ -102,6 +103,7 @@
102103
"RagFile",
103104
"RagManagedDb",
104105
"RagManagedDbConfig",
106+
"RagManagedVertexVectorSearch",
105107
"RagResource",
106108
"RagRetrievalConfig",
107109
"RagVectorDbConfig",

vertexai/preview/rag/rag_data.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
RagEngineConfig,
5757
RagFile,
5858
RagManagedDb,
59+
RagManagedVertexVectorSearch,
5960
RagVectorDbConfig,
6061
SharePointSources,
6162
SlackChannelsSource,
@@ -79,6 +80,7 @@ def create_corpus(
7980
VertexVectorSearch,
8081
Pinecone,
8182
RagManagedDb,
83+
RagManagedVertexVectorSearch,
8284
]
8385
] = None,
8486
vertex_ai_search_config: Optional[VertexAiSearchConfig] = None,

vertexai/preview/rag/utils/_gapic_utils.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
RagFile,
6060
RagManagedDb,
6161
RagManagedDbConfig,
62+
RagManagedVertexVectorSearch,
6263
RagVectorDbConfig,
6364
Basic,
6465
Enterprise,
@@ -176,6 +177,15 @@ def _check_vertex_vector_search(gapic_vector_db: GapicRagVectorDbConfig) -> bool
176177
return gapic_vector_db.vertex_vector_search.ByteSize() > 0
177178

178179

180+
def _check_rag_managed_vertex_vector_search(
181+
gapic_vector_db: GapicRagVectorDbConfig,
182+
) -> bool:
183+
try:
184+
return gapic_vector_db.__contains__("rag_managed_vertex_vector_search")
185+
except AttributeError:
186+
return gapic_vector_db.rag_managed_vertex_vector_search.ByteSize() > 0
187+
188+
179189
def _check_rag_embedding_model_config(
180190
gapic_vector_db: GapicRagVectorDbConfig,
181191
) -> bool:
@@ -240,6 +250,10 @@ def convert_gapic_to_vector_db(
240250
index_name=gapic_vector_db.pinecone.index_name,
241251
api_key=gapic_vector_db.api_auth.api_key_config.api_key_secret_version,
242252
)
253+
elif _check_rag_managed_vertex_vector_search(gapic_vector_db):
254+
return RagManagedVertexVectorSearch(
255+
collection_name=gapic_vector_db.rag_managed_vertex_vector_search.collection_name,
256+
)
243257
elif _check_vertex_vector_search(gapic_vector_db):
244258
return VertexVectorSearch(
245259
index_endpoint=gapic_vector_db.vertex_vector_search.index_endpoint,
@@ -299,6 +313,10 @@ def convert_gapic_to_backend_config(
299313
index_name=gapic_vector_db.pinecone.index_name,
300314
api_key=gapic_vector_db.api_auth.api_key_config.api_key_secret_version,
301315
)
316+
elif _check_rag_managed_vertex_vector_search(gapic_vector_db):
317+
vector_config.vector_db = RagManagedVertexVectorSearch(
318+
collection_name=gapic_vector_db.rag_managed_vertex_vector_search.collection_name,
319+
)
302320
elif _check_vertex_vector_search(gapic_vector_db):
303321
vector_config.vector_db = VertexVectorSearch(
304322
index_endpoint=gapic_vector_db.vertex_vector_search.index_endpoint,
@@ -904,9 +922,14 @@ def set_vector_db(
904922
),
905923
),
906924
)
925+
elif isinstance(vector_db, RagManagedVertexVectorSearch):
926+
rag_corpus.rag_vector_db_config = GapicRagVectorDbConfig(
927+
rag_managed_vertex_vector_search=GapicRagVectorDbConfig.RagManagedVertexVectorSearch(),
928+
)
929+
907930
else:
908931
raise TypeError(
909-
"vector_db must be a Weaviate, VertexFeatureStore, VertexVectorSearch, RagManagedDb, or Pinecone."
932+
"vector_db must be a Weaviate, VertexFeatureStore, VertexVectorSearch, RagManagedDb, Pinecone, or RagManagedVertexVectorSearch."
910933
)
911934

912935

@@ -973,10 +996,14 @@ def set_backend_config(
973996
rag_corpus.vector_db_config.api_auth.api_key_config.api_key_secret_version = (
974997
api_key
975998
)
999+
elif isinstance(vector_config, RagManagedVertexVectorSearch):
1000+
rag_corpus.vector_db_config.rag_managed_vertex_vector_search.CopyFrom(
1001+
GapicRagVectorDbConfig.RagManagedVertexVectorSearch()
1002+
)
9761003
else:
9771004
raise TypeError(
9781005
"backend_config must be a VertexFeatureStore,"
979-
"RagManagedDb, or Pinecone."
1006+
"RagManagedDb, Pinecone, or RagManagedVertexVectorSearch."
9801007
)
9811008
if backend_config.rag_embedding_model_config:
9821009
set_embedding_model_config(

vertexai/preview/rag/utils/resources.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,20 @@ class Pinecone:
225225
api_key: Optional[str] = None
226226

227227

228+
@dataclasses.dataclass
229+
class RagManagedVertexVectorSearch:
230+
"""RagManagedVertexVectorSearch.
231+
232+
Attributes:
233+
collection_name: The resource name of the Vector Search 2.0 Collection that
234+
RAG Created for the corpus. Only populated after the corpus is successfully
235+
created. Format:
236+
``projects/{project}/locations/{location}/collections/{collection_id}``
237+
"""
238+
239+
collection_name: Optional[str] = None
240+
241+
228242
@dataclasses.dataclass
229243
class VertexAiSearchConfig:
230244
"""VertexAiSearchConfig.
@@ -246,12 +260,19 @@ class RagVectorDbConfig:
246260
247261
Attributes:
248262
vector_db: Can be one of the following: Weaviate, VertexFeatureStore,
249-
VertexVectorSearch, Pinecone, RagManagedDb.
263+
VertexVectorSearch, Pinecone, RagManagedDb, RagManagedVertexVectorSearch.
250264
rag_embedding_model_config: The embedding model config of the Vector DB.
251265
"""
252266

253267
vector_db: Optional[
254-
Union[Weaviate, VertexFeatureStore, VertexVectorSearch, Pinecone, RagManagedDb]
268+
Union[
269+
Weaviate,
270+
VertexFeatureStore,
271+
VertexVectorSearch,
272+
Pinecone,
273+
RagManagedDb,
274+
RagManagedVertexVectorSearch,
275+
]
255276
] = None
256277
rag_embedding_model_config: Optional[RagEmbeddingModelConfig] = None
257278

0 commit comments

Comments
 (0)