Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 19 additions & 3 deletions .github/workflows/DEPLOY_SNAPSHOTS.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,13 @@ on:
- main
- 'stable/**'
- 'alpha/**'
workflow_dispatch: { }
workflow_dispatch:
inputs:
docker_tag:
description: 'Custom Docker tag (e.g. "agentcore-memory-preview"). Leave empty for default SNAPSHOT tag.'
required: false
default: ''


defaults:
run:
Expand Down Expand Up @@ -106,14 +112,24 @@ jobs:

# Set the version locally (no need to commit)
mvn -B versions:set -DnewVersion="${FINAL_VERSION}" -DgenerateBackupPoms=false -f parent

# Use custom docker tag if provided, otherwise default
CUSTOM_TAG="${{ github.event.inputs.docker_tag }}"
if [ -n "${CUSTOM_TAG}" ]; then
DOCKER_VERSION="${CUSTOM_TAG}-SNAPSHOT"
echo "::notice::Using custom Docker tag: ${DOCKER_VERSION}"
else
DOCKER_VERSION="${MINOR_VERSION}-SNAPSHOT"
echo "::notice::Using default Docker tag: ${DOCKER_VERSION}"
fi

# Output versions for use in later steps
echo "maven_version=${FINAL_VERSION}" >> "$GITHUB_OUTPUT"
echo "minor_version=${MINOR_VERSION}" >> "$GITHUB_OUTPUT"
echo "docker_version=${MINOR_VERSION}-SNAPSHOT" >> "$GITHUB_OUTPUT"
echo "docker_version=${DOCKER_VERSION}" >> "$GITHUB_OUTPUT"

echo "::notice::Maven version set to: ${FINAL_VERSION}"
echo "::notice::Docker version will be: ${MINOR_VERSION}-SNAPSHOT"
echo "::notice::Docker version will be: ${DOCKER_VERSION}"

- name: Build Artifacts
run: mvn -B -U compile generate-sources source:jar javadoc:jar deploy -DskipTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.http.HttpClient;
import java.time.Duration;
import java.util.Optional;
import java.util.stream.Collectors;
import org.slf4j.Logger;
Expand Down Expand Up @@ -41,11 +42,23 @@ public JdkHttpClientBuilder createJdkHttpClientBuilder() {
}

public SdkHttpClient createAwsHttpClient(URI endpointOverride) {
return createAwsHttpClient(endpointOverride, null);
}

public SdkHttpClient createAwsHttpClient(URI endpointOverride, Duration timeout) {
String schemeName =
endpointOverride != null ? endpointOverride.getScheme() : ProxyConfiguration.SCHEME_HTTPS;
return ApacheHttpClient.builder()
.proxyConfiguration(createAwsProxyConfiguration(schemeName))
.build();
var httpClientBuilder =
ApacheHttpClient.builder().proxyConfiguration(createAwsProxyConfiguration(schemeName));

if (timeout != null && timeout.isPositive()) {
httpClientBuilder
.connectionTimeout(timeout)
.connectionAcquisitionTimeout(timeout)
.socketTimeout(timeout);
}

return httpClientBuilder.build();
}

software.amazon.awssdk.http.apache.ProxyConfiguration createAwsProxyConfiguration(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import io.camunda.connector.agenticai.aiagent.model.request.provider.BedrockProviderConfiguration;
import io.camunda.connector.agenticai.autoconfigure.AgenticAiConnectorsConfigurationProperties.ChatModelProperties;
import java.net.URI;
import java.time.Duration;
import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -44,21 +45,22 @@ public String type() {
@Override
public ChatModel createChatModel(BedrockProviderConfiguration bedrock) {
final var connection = bedrock.bedrock();
final var timeout =
deriveTimeoutSetting("Bedrock model call", config, connection.timeouts(), LOGGER);

final var builder =
BedrockChatModel.builder()
.client(createBedrockClient(connection))
.client(createBedrockClient(connection, timeout))
.modelId(connection.model().model())
.timeout(
deriveTimeoutSetting("Bedrock model call", config, connection.timeouts(), LOGGER));
.timeout(timeout);

applyBedrockModelParametersIfPresent(connection, builder);

return builder.build();
}

private BedrockRuntimeClient createBedrockClient(
BedrockProviderConfiguration.BedrockConnection connection) {
BedrockProviderConfiguration.BedrockConnection connection, Duration timeout) {
var bedrockClientBuilder =
BedrockRuntimeClient.builder().region(Region.of(connection.region()));
var overrideClientConfigurationBuilder = ClientOverrideConfiguration.builder();
Expand All @@ -73,10 +75,9 @@ private BedrockRuntimeClient createBedrockClient(
bedrockClientBuilder.endpointOverride(endpointOverride);
}

overrideClientConfigurationBuilder.apiCallTimeout(
deriveTimeoutSetting("Bedrock API call", config, connection.timeouts(), LOGGER));
overrideClientConfigurationBuilder.apiCallTimeout(timeout);

SdkHttpClient httpClient = proxySupport.createAwsHttpClient(endpointOverride);
SdkHttpClient httpClient = proxySupport.createAwsHttpClient(endpointOverride, timeout);
bedrockClientBuilder.httpClient(httpClient);

bedrockClientBuilder.overrideConfiguration(overrideClientConfigurationBuilder.build());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import io.camunda.connector.http.client.proxy.ProxyConfiguration.ProxyDetails;
import java.net.URI;
import java.net.http.HttpClient;
import java.time.Duration;
import java.util.Optional;
import java.util.stream.Stream;
import org.junit.jupiter.api.BeforeEach;
Expand All @@ -48,6 +49,7 @@ class ChatModelHttpProxySupportTest {

private static final String HTTPS_ENDPOINT = "https://example.com";
private static final String HTTP_ENDPOINT = "http://example.com";
private static final Duration AWS_HTTP_CLIENT_TIMEOUT = Duration.ofSeconds(145);

private static final String NON_PROXY_HOST_LOCALHOST = "localhost";
private static final String NON_PROXY_HOST_LOCALHOST_REGEX = "localhost.*";
Expand Down Expand Up @@ -95,14 +97,18 @@ void shouldCreateAwsHttpClientWithHttpsEndpoint() {

// when
SdkHttpClient result =
proxySupport.createAwsHttpClient(URI.create("https://bedrock.amazonaws.com"));
proxySupport.createAwsHttpClient(
URI.create("https://bedrock.amazonaws.com"), AWS_HTTP_CLIENT_TIMEOUT);

// then
assertThat(result).isNotNull();
verify(proxyConfiguration).getProxyDetails(SCHEME_HTTPS);
verify(httpClientBuilder)
.proxyConfiguration(
notNull(software.amazon.awssdk.http.apache.ProxyConfiguration.class));
verify(httpClientBuilder).connectionTimeout(AWS_HTTP_CLIENT_TIMEOUT);
verify(httpClientBuilder).connectionAcquisitionTimeout(AWS_HTTP_CLIENT_TIMEOUT);
verify(httpClientBuilder).socketTimeout(AWS_HTTP_CLIENT_TIMEOUT);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -300,11 +300,21 @@ private void testBedrockChatModelBuilder(
assertThat(chatModel).isNotNull().isInstanceOf(BedrockChatModel.class);
assertThat(chatModel).isSameAs(chatModelResultCaptor.getResult());

verify(proxySupport).createAwsHttpClient(expectedEndpointOverride);
verify(proxySupport)
.createAwsHttpClient(expectedEndpointOverride, expectedTimeout(providerConfig));
builderAssertions.accept(builders);
}
}

private Duration expectedTimeout(BedrockProviderConfiguration providerConfig) {
var timeouts = providerConfig.bedrock().timeouts();
if (timeouts != null && timeouts.timeout() != null && timeouts.timeout().isPositive()) {
return timeouts.timeout();
}

return Duration.ofMinutes(3);
}

static Stream<BedrockModelParameters> nullModelParameters() {
return Stream.of(new BedrockModelParameters(null, null, null));
}
Expand Down
Loading