diff --git a/core-services/document-grounding/pom.xml b/core-services/document-grounding/pom.xml index f1dd5d8cc..4541f0ecb 100644 --- a/core-services/document-grounding/pom.xml +++ b/core-services/document-grounding/pom.xml @@ -9,7 +9,8 @@ document-grounding Document Grounding Client - SAP Cloud SDK for AI is the official Software Development Kit (SDK) for SAP AI Core, SAP Generative AI Hub, and Orchestration Service. This is the client for the Document Grounding Service. + SAP Cloud SDK for AI is the official Software Development Kit (SDK) for SAP AI Core, SAP Generative AI + Hub, and Orchestration Service. This is the client for the Document Grounding Service. https://github.com/SAP/ai-sdk-java?tab=readme-ov-file#documentation @@ -97,6 +98,11 @@ wiremock test + + org.mockito + mockito-core + test + org.assertj assertj-core diff --git a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/client/PipelinesApi.java b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/client/PipelinesApi.java index db9bf187d..ea6f58b67 100644 --- a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/client/PipelinesApi.java +++ b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/client/PipelinesApi.java @@ -113,7 +113,7 @@ public PipelineId createPipeline( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.POST, @@ -160,18 +160,16 @@ public OpenApiResponse deletePipelineById( } // create path and map variables - final Map localVarPathParams = new HashMap(); + final Map localVarPathParams = new HashMap<>(); localVarPathParams.put("pipelineId", pipelineId); final String localVarPath = UriComponentsBuilder.fromPath("/pipelines/{pipelineId}") .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); @@ -184,7 +182,7 @@ public OpenApiResponse deletePipelineById( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; apiClient.invokeAPI( localVarPath, HttpMethod.DELETE, @@ -235,11 +233,9 @@ public GetPipelines getAllPipelines( final String localVarPath = UriComponentsBuilder.fromPath("/pipelines").build().toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "$top", $top)); localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "$skip", $skip)); @@ -256,7 +252,7 @@ public GetPipelines getAllPipelines( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -322,18 +318,16 @@ public GetPipeline getPipelineById( } // create path and map variables - final Map localVarPathParams = new HashMap(); + final Map localVarPathParams = new HashMap<>(); localVarPathParams.put("pipelineId", pipelineId); final String localVarPath = UriComponentsBuilder.fromPath("/pipelines/{pipelineId}") .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); @@ -346,7 +340,7 @@ public GetPipeline getPipelineById( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -408,11 +402,9 @@ public PipelineDocumentResponse getDocumentByIdForPipeline( .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); @@ -425,7 +417,7 @@ public PipelineDocumentResponse getDocumentByIdForPipeline( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -481,18 +473,16 @@ public DocumentsStatusResponse getAllDocumentsForPipeline( } // create path and map variables - final Map localVarPathParams = new HashMap(); + final Map localVarPathParams = new HashMap<>(); localVarPathParams.put("pipelineId", pipelineId); final String localVarPath = UriComponentsBuilder.fromPath("/pipelines/{pipelineId}/documents") .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "$top", $top)); localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "$skip", $skip)); @@ -509,7 +499,7 @@ public DocumentsStatusResponse getAllDocumentsForPipeline( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -583,7 +573,7 @@ public GetPipelineExecutionById getExecutionDetailsByIdForPipelineExecution( } // create path and map variables - final Map localVarPathParams = new HashMap(); + final Map localVarPathParams = new HashMap<>(); localVarPathParams.put("pipelineId", pipelineId); localVarPathParams.put("executionId", executionId); final String localVarPath = @@ -591,11 +581,9 @@ public GetPipelineExecutionById getExecutionDetailsByIdForPipelineExecution( .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); @@ -608,7 +596,7 @@ public GetPipelineExecutionById getExecutionDetailsByIdForPipelineExecution( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -680,11 +668,9 @@ public PipelineDocumentResponse getDocumentByIdForPipelineExecution( .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); @@ -697,7 +683,7 @@ public PipelineDocumentResponse getDocumentByIdForPipelineExecution( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -761,7 +747,7 @@ public DocumentsStatusResponse getDocumentsForPipelineExecution( } // create path and map variables - final Map localVarPathParams = new HashMap(); + final Map localVarPathParams = new HashMap<>(); localVarPathParams.put("pipelineId", pipelineId); localVarPathParams.put("executionId", executionId); final String localVarPath = @@ -769,11 +755,9 @@ public DocumentsStatusResponse getDocumentsForPipelineExecution( .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "$top", $top)); localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "$skip", $skip)); @@ -790,7 +774,7 @@ public DocumentsStatusResponse getDocumentsForPipelineExecution( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -879,11 +863,9 @@ public GetPipelineExecutions getAllExecutionsForPipeline( .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); localVarQueryParams.putAll( apiClient.parameterToMultiValueMap(null, "lastExecution", lastExecution)); @@ -902,7 +884,7 @@ public GetPipelineExecutions getAllExecutionsForPipeline( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -1133,11 +1115,9 @@ public SearchPipelinesResponse searchPipelinesByMetadata( final String localVarPath = UriComponentsBuilder.fromPath("/pipelines/search").build().toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "$top", $top)); localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "$skip", $skip)); @@ -1146,26 +1126,12 @@ public SearchPipelinesResponse searchPipelinesByMetadata( if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); - final String[] localVarAccepts = {"application/json"}; - final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); - final String[] localVarContentTypes = {"application/json"}; - final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); - - final String[] localVarAuthNames = new String[] {}; - - final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; - return apiClient.invokeAPI( + return getResponse( localVarPath, - HttpMethod.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, - localVarFormParams, - localVarAccept, - localVarContentType, - localVarAuthNames, - localVarReturnType); + localVarFormParams); } /** @@ -1208,32 +1174,36 @@ public OpenApiResponse manualTriggerPipeline( @Nonnull final String aiResourceGroup, @Nonnull final ManualPipelineTrigger manualPipelineTrigger) throws OpenApiRequestException { - final Object localVarPostBody = manualPipelineTrigger; // verify the required parameter 'aiResourceGroup' is set - if (aiResourceGroup == null) { - throw new OpenApiRequestException( - "Missing the required parameter 'aiResourceGroup' when calling manualTriggerPipeline"); - } // verify the required parameter 'manualPipelineTrigger' is set - if (manualPipelineTrigger == null) { - throw new OpenApiRequestException( - "Missing the required parameter 'manualPipelineTrigger' when calling pipelineV1PipelineEndpointsTriggerPipeline"); - } final String localVarPath = UriComponentsBuilder.fromPath("/pipelines/trigger").build().toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); + return new OpenApiResponse( + getResponse( + localVarPath, + localVarQueryParams, + manualPipelineTrigger, + localVarHeaderParams, + localVarFormParams)); + } + + private T getResponse( + String localVarPath, + MultiValueMap localVarQueryParams, + Object body, + HttpHeaders localVarHeaderParams, + MultiValueMap localVarFormParams) { final String[] localVarAccepts = {"application/json"}; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] localVarContentTypes = {"application/json"}; @@ -1242,18 +1212,18 @@ public OpenApiResponse manualTriggerPipeline( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; - apiClient.invokeAPI( - localVarPath, - HttpMethod.POST, - localVarQueryParams, - localVarPostBody, - localVarHeaderParams, - localVarFormParams, - localVarAccept, - localVarContentType, - localVarAuthNames, - localVarReturnType); - return new OpenApiResponse(apiClient); + new ParameterizedTypeReference<>() {}; + return (T) + apiClient.invokeAPI( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + body, + localVarHeaderParams, + localVarFormParams, + localVarAccept, + localVarContentType, + localVarAuthNames, + localVarReturnType); } } diff --git a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/client/VectorApi.java b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/client/VectorApi.java index 3ebebbc31..7134dff09 100644 --- a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/client/VectorApi.java +++ b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/client/VectorApi.java @@ -10,6 +10,7 @@ import com.sap.ai.sdk.grounding.model.Documents; import com.sap.ai.sdk.grounding.model.DocumentsListResponse; import com.sap.ai.sdk.grounding.model.TextSearchRequest; +import com.sap.ai.sdk.grounding.model.VectorChunk; import com.sap.ai.sdk.grounding.model.VectorSearchResults; import com.sap.ai.sdk.grounding.model.VectorV1VectorEndpointsGetCollectionCreationStatus200Response; import com.sap.ai.sdk.grounding.model.VectorV1VectorEndpointsGetCollectionDeletionStatus200Response; @@ -92,22 +93,15 @@ public OpenApiResponse createCollection( } // verify the required parameter 'collectionRequest' is set - if (collectionRequest == null) { - throw new OpenApiRequestException( - "Missing the required parameter 'collectionRequest' when calling vectorV1VectorEndpointsCreateCollection"); - } final String localVarPath = UriComponentsBuilder.fromPath("/vector/collections").build().toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); - if (aiResourceGroup != null) - localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); + localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); final String[] localVarAccepts = {"application/json"}; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); @@ -117,7 +111,7 @@ public OpenApiResponse createCollection( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; apiClient.invokeAPI( localVarPath, HttpMethod.POST, @@ -186,11 +180,9 @@ public DocumentsListResponse createDocuments( .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); @@ -203,7 +195,7 @@ public DocumentsListResponse createDocuments( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.POST, @@ -255,15 +247,14 @@ public OpenApiResponse deleteCollectionById( } // create path and map variables - final Map localVarPathParams = new HashMap(); + final Map localVarPathParams = new HashMap<>(); localVarPathParams.put("collectionId", collectionId); final String localVarPath = UriComponentsBuilder.fromPath("/vector/collections/{collectionId}") .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); @@ -279,7 +270,7 @@ public OpenApiResponse deleteCollectionById( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; apiClient.invokeAPI( localVarPath, HttpMethod.DELETE, @@ -340,7 +331,7 @@ public OpenApiResponse deleteDocumentById( } // create path and map variables - final Map localVarPathParams = new HashMap(); + final Map localVarPathParams = new HashMap<>(); localVarPathParams.put("collectionId", collectionId); localVarPathParams.put("documentId", documentId); final String localVarPath = @@ -348,8 +339,7 @@ public OpenApiResponse deleteDocumentById( .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); @@ -365,7 +355,7 @@ public OpenApiResponse deleteDocumentById( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; apiClient.invokeAPI( localVarPath, HttpMethod.DELETE, @@ -417,11 +407,9 @@ public CollectionsListResponse getAllCollections( final String localVarPath = UriComponentsBuilder.fromPath("/vector/collections").build().toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "$top", $top)); localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "$skip", $skip)); @@ -438,7 +426,7 @@ public CollectionsListResponse getAllCollections( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -525,11 +513,9 @@ public Documents getAllDocuments( .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "$top", $top)); localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "$skip", $skip)); @@ -546,7 +532,7 @@ public Documents getAllDocuments( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -622,18 +608,16 @@ public Collection getCollectionById( } // create path and map variables - final Map localVarPathParams = new HashMap(); + final Map localVarPathParams = new HashMap<>(); localVarPathParams.put("collectionId", collectionId); final String localVarPath = UriComponentsBuilder.fromPath("/vector/collections/{collectionId}") .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); @@ -646,7 +630,7 @@ public Collection getCollectionById( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -697,18 +681,16 @@ public VectorV1VectorEndpointsGetCollectionCreationStatus200Response getCollecti } // create path and map variables - final Map localVarPathParams = new HashMap(); + final Map localVarPathParams = new HashMap<>(); localVarPathParams.put("id", id); final String localVarPath = UriComponentsBuilder.fromPath("/vector/collections/{id}/creationStatus") .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); @@ -774,18 +756,16 @@ public VectorV1VectorEndpointsGetCollectionDeletionStatus200Response getCollecti } // create path and map variables - final Map localVarPathParams = new HashMap(); + final Map localVarPathParams = new HashMap<>(); localVarPathParams.put("id", id); final String localVarPath = UriComponentsBuilder.fromPath("/vector/collections/{id}/deletionStatus") .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); @@ -860,7 +840,7 @@ public DocumentResponse getDocumentById( } // create path and map variables - final Map localVarPathParams = new HashMap(); + final Map localVarPathParams = new HashMap<>(); localVarPathParams.put("collectionId", collectionId); localVarPathParams.put("documentId", documentId); final String localVarPath = @@ -868,11 +848,9 @@ public DocumentResponse getDocumentById( .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); @@ -885,7 +863,7 @@ public DocumentResponse getDocumentById( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -921,7 +899,6 @@ public DocumentResponse getDocumentById( public VectorSearchResults search( @Nonnull final String aiResourceGroup, @Nonnull final TextSearchRequest textSearchRequest) throws OpenApiRequestException { - final Object localVarPostBody = textSearchRequest; // verify the required parameter 'aiResourceGroup' is set if (aiResourceGroup == null) { @@ -938,11 +915,9 @@ public VectorSearchResults search( final String localVarPath = UriComponentsBuilder.fromPath("/vector/search").build().toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); @@ -955,12 +930,12 @@ public VectorSearchResults search( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.POST, localVarQueryParams, - localVarPostBody, + textSearchRequest, localVarHeaderParams, localVarFormParams, localVarAccept, @@ -969,6 +944,37 @@ public VectorSearchResults search( localVarReturnType); } + /** + * Search chunk by vector + * + *

Search chunks + * + *

200 - Successful Response + * + *

400 - The specification of the resource was incorrect + * + *

404 - The specification of the resource was incorrect + * + *

422 - There are validation issues with the data. + * + * @param aiResourceGroup Resource Group ID + * @param textSearchRequest The value for the parameter textSearchRequest + * @return List + * @throws OpenApiRequestException if an error occurs while attempting to invoke the API + */ + @Nonnull + public List searchAndGetChunks( + @Nonnull final String aiResourceGroup, @Nonnull final TextSearchRequest textSearchRequest) + throws OpenApiRequestException { + VectorSearchResults searchResult = search(aiResourceGroup, textSearchRequest); + + return searchResult.getResults().stream() + .flatMap(results -> results.getResults().stream()) + .flatMap(documentsChunk -> documentsChunk.getDocuments().stream()) + .flatMap(documentOutput -> documentOutput.getChunks().stream()) + .toList(); + } + /** * Upsert documents in collection * @@ -1015,18 +1021,16 @@ public DocumentsListResponse updateDocuments( } // create path and map variables - final Map localVarPathParams = new HashMap(); + final Map localVarPathParams = new HashMap<>(); localVarPathParams.put("collectionId", collectionId); final String localVarPath = UriComponentsBuilder.fromPath("/vector/collections/{collectionId}/documents") .buildAndExpand(localVarPathParams) .toUriString(); - final MultiValueMap localVarQueryParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); final HttpHeaders localVarHeaderParams = new HttpHeaders(); - final MultiValueMap localVarFormParams = - new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap<>(); if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); @@ -1039,7 +1043,7 @@ public DocumentsListResponse updateDocuments( final String[] localVarAuthNames = new String[] {}; final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + new ParameterizedTypeReference<>() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.PATCH, diff --git a/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/client/VectorApiTest.java b/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/client/VectorApiTest.java new file mode 100644 index 000000000..99afd09ef --- /dev/null +++ b/core-services/document-grounding/src/test/java/com/sap/ai/sdk/grounding/client/VectorApiTest.java @@ -0,0 +1,108 @@ +package com.sap.ai.sdk.grounding.client; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import com.sap.ai.sdk.grounding.model.DocumentOutput; +import com.sap.ai.sdk.grounding.model.DocumentsChunk; +import com.sap.ai.sdk.grounding.model.ResultsInner1; +import com.sap.ai.sdk.grounding.model.TextSearchRequest; +import com.sap.ai.sdk.grounding.model.VectorChunk; +import com.sap.ai.sdk.grounding.model.VectorSearchResults; +import com.sap.cloud.sdk.services.openapi.apiclient.ApiClient; +import com.sap.cloud.sdk.services.openapi.core.OpenApiRequestException; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentMatchers; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpMethod; + +class VectorApiTest { + + private ApiClient apiClient; + private VectorApi vectorApi; + + @BeforeEach + void setUp() { + apiClient = mock(ApiClient.class); + vectorApi = spy(new VectorApi(apiClient)); // make it a spy to stub instance methods + } + + @Test + void testSearchReturnsResults() throws OpenApiRequestException { + String aiResourceGroup = "test-group"; + TextSearchRequest request = mock(TextSearchRequest.class); + VectorSearchResults expectedResults = mock(VectorSearchResults.class); + + when(apiClient.invokeAPI( + anyString(), + eq(HttpMethod.POST), + any(), + any(TextSearchRequest.class), + any(), + any(), + anyList(), + any(), + any(String[].class), + ArgumentMatchers.>any())) + .thenReturn(expectedResults); + + VectorSearchResults actualResults = vectorApi.search(aiResourceGroup, request); + + assertSame(expectedResults, actualResults); + + verify(apiClient) + .invokeAPI( + anyString(), + eq(HttpMethod.POST), + any(), + any(TextSearchRequest.class), + any(), + any(), + anyList(), + any(), + any(String[].class), + ArgumentMatchers.>any()); + } + + @Test + void searchAndGetChunks_returnsFlattenedChunks_whenSearchHasResults() + throws OpenApiRequestException { + String aiResourceGroup = "test-group"; + TextSearchRequest request = mock(TextSearchRequest.class); + + // Leaf chunks + VectorChunk chunk1 = mock(VectorChunk.class); + VectorChunk chunk2 = mock(VectorChunk.class); + + // DocumentOutput -> List + DocumentOutput documentOutput = mock(DocumentOutput.class); + when(documentOutput.getChunks()).thenReturn(List.of(chunk1, chunk2)); + + // DocumentsChunk -> List + DocumentsChunk documentsChunk = mock(DocumentsChunk.class); + when(documentsChunk.getDocuments()).thenReturn(List.of(documentOutput)); + + // ResultsInner1 -> List + ResultsInner1 vectorSearchResult = mock(ResultsInner1.class); + when(vectorSearchResult.getResults()).thenReturn(List.of(documentsChunk)); + + // VectorSearchResults -> List + VectorSearchResults searchResults = mock(VectorSearchResults.class); + when(searchResults.getResults()).thenReturn(List.of(vectorSearchResult)); + + // Stub VectorApi.search(...) on the spy + doReturn(searchResults).when(vectorApi).search(eq(aiResourceGroup), eq(request)); + + List chunks = vectorApi.searchAndGetChunks(aiResourceGroup, request); + + assertNotNull(chunks); + assertEquals(2, chunks.size()); + assertTrue(chunks.contains(chunk1)); + assertTrue(chunks.contains(chunk2)); + + verify(vectorApi).search(aiResourceGroup, request); + } +}