From e217da9afbbdf3d782f1b7b6ed64b9fe36d08935 Mon Sep 17 00:00:00 2001 From: I538344 Date: Fri, 11 Oct 2024 11:40:18 +0200 Subject: [PATCH] WiP --- .../com/sap/ai/sdk/core/AiCoreDeployment.java | 26 +++++-------------- .../com/sap/ai/sdk/core/AiCoreService.java | 15 ++++++----- .../com/sap/ai/sdk/core/DeploymentCache.java | 8 +++--- .../java/com/sap/ai/sdk/core/CacheTest.java | 3 ++- .../sap/ai/sdk/core/WireMockTestServer.java | 9 +++---- 5 files changed, 23 insertions(+), 38 deletions(-) diff --git a/core/src/main/java/com/sap/ai/sdk/core/AiCoreDeployment.java b/core/src/main/java/com/sap/ai/sdk/core/AiCoreDeployment.java index 197a5279..292dd187 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/AiCoreDeployment.java +++ b/core/src/main/java/com/sap/ai/sdk/core/AiCoreDeployment.java @@ -3,7 +3,6 @@ import static com.sap.ai.sdk.core.DestinationResolver.AI_CLIENT_TYPE_KEY; import static com.sap.ai.sdk.core.DestinationResolver.AI_CLIENT_TYPE_VALUE; -import com.sap.ai.sdk.core.client.DeploymentApi; import com.sap.ai.sdk.core.client.model.AiDeployment; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.Destination; @@ -11,8 +10,6 @@ import com.sap.cloud.sdk.services.openapi.apiclient.ApiClient; import java.util.Map; import java.util.NoSuchElementException; -import java.util.function.Function; -import java.util.function.Predicate; import java.util.function.Supplier; import javax.annotation.Nonnull; import lombok.AccessLevel; @@ -24,9 +21,6 @@ public class AiCoreDeployment implements AiCoreDestination { private static final String AI_RESOURCE_GROUP = "URL.headers.AI-Resource-Group"; - // the deployment id handler to be used, based on resource group - @Nonnull private final Function deploymentId; - // the base destination handler to be used @Nonnull private final Supplier destination; @@ -38,13 +32,11 @@ public class AiCoreDeployment implements AiCoreDestination { /** * Create a new instance of the AI Core service with a specific deployment id and destination. * - * @param deploymentId The deployment id handler, based on resource group. * @param destination The destination handler. */ public AiCoreDeployment( - @Nonnull final Function deploymentId, @Nonnull final Supplier destination) { - this(deploymentId, destination, "default"); + this( destination, "default"); } @Nonnull @@ -64,7 +56,7 @@ public Destination destination() { */ @Nonnull public AiCoreDeployment withResourceGroup(@Nonnull final String resourceGroup) { - return new AiCoreDeployment(deploymentId, destination, resourceGroup); + return new AiCoreDeployment(destination, resourceGroup); } /** @@ -75,7 +67,7 @@ public AiCoreDeployment withResourceGroup(@Nonnull final String resourceGroup) { */ @Nonnull public AiCoreDeployment withDestination(@Nonnull final Destination destination) { - return new AiCoreDeployment(deploymentId, () -> destination, resourceGroup); + return new AiCoreDeployment(() -> destination, resourceGroup); } /** @@ -145,16 +137,10 @@ protected static boolean isDeploymentOfModel( * @throws NoSuchElementException if no deployment is found for the scenario id. */ @Nonnull - protected static String getDeploymentId( + protected String getDeploymentId( @Nonnull final ApiClient client, - @Nonnull final String resourceGroup, - @Nonnull final Predicate predicate) + @Nonnull final String name) throws NoSuchElementException { - final var deployments = new DeploymentApi(client).query(resourceGroup); - - final var first = - deployments.getResources().stream().filter(predicate).map(AiDeployment::getId).findFirst(); - return first.orElseThrow( - () -> new NoSuchElementException("No deployment found with scenario id orchestration")); + return DeploymentCache.getDeploymentId(resourceGroup, name); } } diff --git a/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java b/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java index 773ceb51..c960d39d 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java +++ b/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java @@ -7,7 +7,8 @@ import com.sap.cloud.sdk.cloudplatform.connectivity.Destination; import com.sap.cloud.sdk.cloudplatform.connectivity.exception.DestinationAccessException; import com.sap.cloud.sdk.cloudplatform.connectivity.exception.DestinationNotFoundException; -import java.util.function.Predicate; + +import java.util.NoSuchElementException; import java.util.function.Supplier; import javax.annotation.Nonnull; import lombok.AccessLevel; @@ -62,9 +63,9 @@ public AiCoreDeployment forDeployment(@Nonnull final String deploymentId) { * @return A new instance of the AI Core service. */ @Nonnull - public AiCoreDeployment forDeploymentByModel(@Nonnull final String modelName) { - final Predicate p = deployment -> isDeploymentOfModel(modelName, deployment); - return new AiCoreDeployment(res -> getDeploymentId(client(), res, p), this::destination); + public AiCoreDeployment forDeploymentByModel(@Nonnull final String modelName) throws NoSuchElementException + { + return new AiCoreDeployment(this::destination).getDeploymentId(client(), modelName); } /** @@ -74,9 +75,9 @@ public AiCoreDeployment forDeploymentByModel(@Nonnull final String modelName) { * @return A new instance of the AI Core service. */ @Nonnull - public AiCoreDeployment forDeploymentByScenario(@Nonnull final String scenarioId) { - final Predicate p = deployment -> scenarioId.equals(deployment.getScenarioId()); - return new AiCoreDeployment(res -> getDeploymentId(client(), res, p), this::destination); + public AiCoreDeployment forDeploymentByScenario(@Nonnull final String scenarioId) throws NoSuchElementException + { + return new AiCoreDeployment(this::destination).getDeploymentId(client(), scenarioId); } /** diff --git a/core/src/main/java/com/sap/ai/sdk/core/DeploymentCache.java b/core/src/main/java/com/sap/ai/sdk/core/DeploymentCache.java index b79beea0..b9454976 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/DeploymentCache.java +++ b/core/src/main/java/com/sap/ai/sdk/core/DeploymentCache.java @@ -60,7 +60,7 @@ public static void clearCache() { */ public static void loadCache() { try { - final var deployments = API.deploymentQuery("default").getResources(); + final var deployments = API.query("default").getResources(); deployments.forEach(deployment -> CACHE.put(getModelName(deployment), deployment.getId())); } catch (final OpenApiRequestException e) { log.error("Failed to load deployments into cache", e); @@ -102,8 +102,7 @@ public static String getDeploymentId( private static String getOrchestrationDeployment(@Nonnull final String resourceGroup) throws NoSuchElementException { final var deployments = - API.deploymentQuery( - resourceGroup, null, null, "orchestration", "RUNNING", null, null, null); + API.query(resourceGroup, null, null, "orchestration", "RUNNING", null, null, null); return deployments.getResources().stream() .map(AiDeployment::getId) @@ -127,8 +126,7 @@ private static String getDeploymentForModel( @Nonnull final String resourceGroup, @Nonnull final String modelName) throws NoSuchElementException { final var deployments = - API.deploymentQuery( - resourceGroup, null, null, "foundation-models", "RUNNING", null, null, null); + API.query(resourceGroup, null, null, "foundation-models", "RUNNING", null, null, null); return deployments.getResources().stream() .filter(deployment -> modelName.equals(getModelName(deployment))) diff --git a/core/src/test/java/com/sap/ai/sdk/core/CacheTest.java b/core/src/test/java/com/sap/ai/sdk/core/CacheTest.java index 7837322e..5d304a18 100644 --- a/core/src/test/java/com/sap/ai/sdk/core/CacheTest.java +++ b/core/src/test/java/com/sap/ai/sdk/core/CacheTest.java @@ -11,7 +11,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -class CacheTest extends WireMockTestServer { +class CacheTest extends WireMockTestServer +{ @BeforeEach void setupCache() { diff --git a/core/src/test/java/com/sap/ai/sdk/core/WireMockTestServer.java b/core/src/test/java/com/sap/ai/sdk/core/WireMockTestServer.java index c9870791..d94f5b93 100644 --- a/core/src/test/java/com/sap/ai/sdk/core/WireMockTestServer.java +++ b/core/src/test/java/com/sap/ai/sdk/core/WireMockTestServer.java @@ -1,10 +1,9 @@ -package com.sap.ai.sdk.core.client; +package com.sap.ai.sdk.core; import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; -import com.sap.ai.sdk.core.AiCoreService; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.Destination; import com.sap.cloud.sdk.services.openapi.apiclient.ApiClient; @@ -16,9 +15,9 @@ public abstract class WireMockTestServer { private static final WireMockConfiguration WIREMOCK_CONFIGURATION = wireMockConfig().dynamicPort(); - static WireMockServer wireMockServer; - static Destination destination; - static ApiClient client; + public static WireMockServer wireMockServer; + public static Destination destination; + public static ApiClient client; @BeforeAll static void setup() {